tianxj 发表于 2008-1-14 12:24:25

作了个CM比较简单,高手飘过

【作者主页】无
【破解工具】PEiD,OD
【破解平台】Windows XP
【软件名称】step1
【软件大小】
【原版下载】
【保护方式】注册码
【软件简介】
【破解声明】我是一只小菜鸟,偶得一点心得,愿与大家分享:)
--------------------------------------------------------------------------------
【破解内容】
--------------------------------------------------------------------------------
*******************************************************************************
一、运行程序,进行注册,输入错误的注册信息进行检测,有提示信息
"That's not correct"
*******************************************************************************
二、用PEiD对step1查壳,为 ASPack 1.06b / 1.061b -> Alexey Solodovnikov
*******************************************************************************
三、打开OD,用ESP定律脱壳
0040615F >90            NOP                                    ; //F8单步
00406160    75 00         JNZ SHORT step1.00406162
00406162- E9 990E0100   JMP step1.00417000
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
00417000    60            PUSHAD                                 ; //F8单步
00417001    E8 00000000   CALL step1.00417006                      ; //下断点hr esp,F9运行
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
0041704F- FFE0            JMP EAX                                  ; //删除硬件断点,F8单步
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
00401000   /EB 10         JMP SHORT step1.00401012               ; //Dump

根据操作做个脚本
//============================================================
// FileName : ASPack 1.06b / 1.061b -> Alexey Solodovnikov
// Author : tianxj
// Email : [email protected]
// WebSite : https://www.chinapyg.com
// Date : 2008-01-11 1
//============================================================
var addr
sto
sto
sto
sto
mov addr,esp
bphws addr,"r"
run
bphwc addr
sto
cmt eip, " OEP :)! Found by tianxj!"
MSG "Script by tianxj,Thank you for using my Scripts!"
ret

*******************************************************************************
四、用PEiD对1000查壳, 无壳。Borland C++ 1999编写。
*******************************************************************************
五、运行OD,打开1000,右键—超级字串参考—查找ASCII.
发现"That's not correct"
00401150/$55            PUSH EBP
00401151|.8BEC          MOV EBP,ESP
00401153|.83C4 AC       ADD ESP,-54
00401156|.53            PUSH EBX
00401157|.56            PUSH ESI
00401158|.8B75 08       MOV ESI,DWORD PTR SS:
0040115B|.6A 19         PUSH 19                                  ; /Arg3 = 00000019
0040115D|.6A 00         PUSH 0                                 ; |Arg2 = 00000000
0040115F|.8D45 E4       LEA EAX,DWORD PTR SS:            ; |
00401162|.50            PUSH EAX                                 ; |Arg1
00401163|.E8 CC110000   CALL 1000.00402334                     ; \1000.00402334
00401168|.83C4 0C       ADD ESP,0C
0040116B|.6A 19         PUSH 19                                  ; /Arg3 = 00000019
0040116D|.6A 00         PUSH 0                                 ; |Arg2 = 00000000
0040116F|.8D55 C8       LEA EDX,DWORD PTR SS:            ; |
00401172|.52            PUSH EDX                                 ; |Arg1
00401173|.E8 BC110000   CALL 1000.00402334                     ; \1000.00402334
00401178|.83C4 0C       ADD ESP,0C
0040117B|.6A 19         PUSH 19                                  ; /Arg3 = 00000019
0040117D|.6A 00         PUSH 0                                 ; |Arg2 = 00000000
0040117F|.8D4D AC       LEA ECX,DWORD PTR SS:            ; |
00401182|.51            PUSH ECX                                 ; |Arg1
00401183|.E8 AC110000   CALL 1000.00402334                     ; \1000.00402334
00401188|.83C4 0C       ADD ESP,0C
0040118B|.6A 65         PUSH 65                                  ; /ControlID = 65 (101.)
0040118D|.56            PUSH ESI                                 ; |hWnd
0040118E|.E8 5F900000   CALL <JMP.&user32.GetDlgItem>            ; \GetDlgItem
00401193|.6A 19         PUSH 19                                  ; /Count = 19 (25.)
00401195|.8D55 E4       LEA EDX,DWORD PTR SS:            ; |
00401198|.52            PUSH EDX                                 ; |Buffer
00401199|.50            PUSH EAX                                 ; |hWnd
0040119A|.E8 59900000   CALL <JMP.&user32.GetWindowTextA>      ; \GetWindowTextA
0040119F|.6A 66         PUSH 66                                  ; /ControlID = 66 (102.)
004011A1|.56            PUSH ESI                                 ; |hWnd
004011A2|.E8 4B900000   CALL <JMP.&user32.GetDlgItem>            ; \GetDlgItem
004011A7|.6A 19         PUSH 19                                  ; /Count = 19 (25.)
004011A9|.8D4D C8       LEA ECX,DWORD PTR SS:            ; |
004011AC|.51            PUSH ECX                                 ; |Buffer
004011AD|.50            PUSH EAX                                 ; |hWnd
004011AE|.E8 45900000   CALL <JMP.&user32.GetWindowTextA>      ; \//将注册码长度送入EAX
004011B3|.8D45 E4       LEA EAX,DWORD PTR SS:            ;//将注册码送入EAX
004011B6|.50            PUSH EAX                                 ;//将EAX压栈
004011B7|.E8 A4120000   CALL 1000.00402460                     ;//将用户名长度送入EAX,将用户名送入ECX
004011BC|.59            POP ECX
004011BD|.8BC8          MOV ECX,EAX                              ;//将用户名长度送入ECX
004011BF|.83F9 04       CMP ECX,4                              ;//将用户名长度与4比较
004011C2|.7D 14         JGE SHORT 1000.004011D8                  ;//若大于等于则跳
004011C4|.6A 10         PUSH 10                                  ; /Style = MB_OK|MB_ICONHAND|MB_APPLMODAL
004011C6|.68 7CB14000   PUSH 1000.0040B17C                     ; |Title = "ERROR"
004011CB|.68 4CB14000   PUSH 1000.0040B14C                     ; |Text = "Your name must contain at least 4 characters!
"
004011D0|.56            PUSH ESI                                 ; |hOwner
004011D1|.E8 28900000   CALL <JMP.&user32.MessageBoxA>         ; \MessageBoxA
004011D6|.EB 67         JMP SHORT 1000.0040123F
004011D8|>33D2          XOR EDX,EDX                              ;//将EDX清零
004011DA|.33C0          XOR EAX,EAX                              ;//将EAX清零
004011DC|.3BC8          CMP ECX,EAX                              ;//将用户名长度与0比较
004011DE|.7E 0D         JLE SHORT 1000.004011ED                  ;//若小于等于则跳
004011E0|>33DB          /XOR EBX,EBX                           ;//将EBX清零
004011E2|.8A5C05 E4   |MOV BL,BYTE PTR SS:         ;//依次将用户名ASC码16进制送入BL
004011E6|.03D3          |ADD EDX,EBX                           ;//EDX=EDX+EBX
004011E8|.40            |INC EAX                                 ;//EAX=EAX+1
004011E9|.3BC8          |CMP ECX,EAX                           ;//将用户名长度与EAX比较
004011EB|.^ 7F F3         \JG SHORT 1000.004011E0                  ;//若大于则跳
004011ED|>52            PUSH EDX                                 ; ///用户名ASC码16进制累加值
004011EE|.68 82B14000   PUSH 1000.0040B182                     ; |Arg2 = 0040B182 ASCII "%d"
004011F3|.8D45 AC       LEA EAX,DWORD PTR SS:            ; |
004011F6|.50            PUSH EAX                                 ; |Arg1
004011F7|.E8 C0280000   CALL 1000.00403ABC                     ; \//用户名ASC码16进制累加值转10进制
004011FC|.83C4 0C       ADD ESP,0C
004011FF|.8D55 AC       LEA EDX,DWORD PTR SS:            ;//将真码送入EDX
00401202|.52            PUSH EDX
00401203|.8D4D C8       LEA ECX,DWORD PTR SS:            ;//将试练码送入ECX
00401206|.51            PUSH ECX
00401207|.E8 08120000   CALL 1000.00402414                     ;//比较CALL
0040120C|.83C4 08       ADD ESP,8
0040120F      85C0          TEST EAX,EAX
00401211|.75 17         JNZ SHORT 1000.0040122A                  ;//关键跳转
00401213|.68 30000400   PUSH 40030                               ; /Style = MB_OK|MB_ICONEXCLAMATION|MB_APPLMODAL|40000
00401218|.68 CEB14000   PUSH 1000.0040B1CE                     ; |Title = "You Did It!"
0040121D|.68 85B14000   PUSH 1000.0040B185                     ; |Text = "Congradulations, you have figured out Step1
Step1 unlock code is: 17FF25"
00401222|.56            PUSH ESI                                 ; |hOwner
00401223|.E8 D68F0000   CALL <JMP.&user32.MessageBoxA>         ; \MessageBoxA
00401228|.EB 15         JMP SHORT 1000.0040123F
0040122A|>68 30000400   PUSH 40030                               ; /Style = MB_OK|MB_ICONEXCLAMATION|MB_APPLMODAL|40000
0040122F|.68 EDB14000   PUSH 1000.0040B1ED                     ; |Title = "Wrong!"
00401234|.68 DAB14000   PUSH 1000.0040B1DA                     ; |Text = "That's not correct"
00401239|.56            PUSH ESI                                 ; |hOwner
0040123A|.E8 BF8F0000   CALL <JMP.&user32.MessageBoxA>         ; \MessageBoxA
0040123F|>5E            POP ESI
00401240|.5B            POP EBX
00401241|.8BE5          MOV ESP,EBP
00401243|.5D            POP EBP
00401244\.C3            RETN
*******************************************************************************
【破解总结】
没有什么总结的
--------------------------------------------------------------------------------
【算法总结】
将用户名ASC码相加即为注册码
--------------------------------------------------------------------------------
【算法注册机】
keygen.rek
.const

.data
szHomePage db "https://www.chinapyg.com",0
szEmail    db "mailto:[email protected]",0
szErrMessdb "请输入用户名!",0
szErrdb "用户名至少4个字符!",0
szBuffer db 50 dup (0)
szFMT db "%d",0

.code
mov esi,eax
invoke lstrlen,esi
mov ecx,eax
MOV ECX,EAX                        
CMP ECX,4                        
JGE n1                              
Err:
lea eax,szErr
jmp n0
n1:               
XOR EDX,EDX                        
XOR EAX,EAX                     
n2:
XOR EBX,EBX                        
MOV BL,BYTE PTR SS:         
ADD EDX,EBX                  
INC EAX                     
CMP ECX,EAX            
JG n2                           
invoke wsprintf,addr szBuffer,addr szFMT,edx
lea eax,szBuffer
n0:

--------------------------------------------------------------------------------
【内存注册机】
中断地址 401207
中断次数 1
第一字节 E8
指令长度 5

内存方式-寄存器-EDX
--------------------------------------------------------------------------------
【爆破地址】
00401211|.75 17         JNZ SHORT 1000.0040122A
将JNZ改为JE
--------------------------------------------------------------------------------
【注册信息】
用户名:abcdef
注册码:597
--------------------------------------------------------------------------------
希望以后可以在猫老大和PYG 5.4Cracker学习小组的帮助下进一步提高自己。
感谢飘云老大、猫老大、Nisy老大以及很多前辈们的学习教程以及所有帮助过我的论坛兄弟姐妹们!谢谢
--------------------------------------------------------------------------------
【版权声明】破文是学习的手记,兴趣是成功的源泉;本破文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!

magic659117852 发表于 2008-1-14 13:19:45

/:001 在unpack看过一遍了    学习

绝恋de烦神 发表于 2008-1-14 19:03:54

用keygen如何写算法注册机啊?LZ可以做个详细的教程出来看看吗?

unpack 发表于 2008-1-14 22:13:17

呵呵   看了不错啊
我也做了一个内存注册机
但是算法注册机偶还不会啊·~~

Squn 发表于 2008-5-7 21:16:04

/:018

/// 学习~~ 向大大学习~~~

daan 发表于 2008-5-8 12:40:29

分析的很详细啊 ~要认真学习啊~/:013

wuqing1501 发表于 2008-5-8 13:31:10

还是感觉有点难了 自己的水平有待提高啊

nietsme 发表于 2008-9-15 01:07:58

原帖由 绝恋de烦神 于 2008-1-14 19:03 发表 https://www.chinapyg.com/images/common/back.gif
用keygen如何写算法注册机啊?LZ可以做个详细的教程出来看看吗?



看看Keymake的帮助吧!!

秋风四起 发表于 2008-9-15 17:31:15

很佩服这些高手,,几时我也能这样自己读懂这些东西。。。

老海 发表于 2008-9-16 15:21:52

算法不是很难,确实很适合新手学习,而且分析的很祥细。
页: [1]
查看完整版本: 作了个CM比较简单,高手飘过