超级点击机器破解实录
首先,用PEID查壳,无壳。尝试运行程序,输入注册码后没有任何提示。用OD载入,搜索字符串,发现有用的:“谢谢你的注册,请重新启动超级点击机器II”,原来又是一个重启验证。
* Possible StringData Ref from Data Obj ->”谢谢你的注册,请重新启动超级点击机器II”
:00405149 68648C4200 push 00428C64 <—我们停在这儿
:0040514E E87F620100 call 0041B3D2
:00405153 E8E8870100 call 0041D940
:00405158 8B8C24D0010000 mov ecx, dword ptr [esp+000001D0]
:0040515F 8B7004 mov esi, dword ptr [eax+04]
:00405162 51 push ecx
从00405149往上看,很明显0040513C处是注册码的比较判断点,F8跟入。
由上面 call 004055A0 跟入:
* Referenced by a CALL at Addresses:
|:004044B0 , :0040513C
上面两个Call的地址,一个是程序启动用来判断是否注册,另一个当然就是
目前注册码判断的Call,大家都公用的一个子程序。因此,要打补丁的话,
也要打在这个子程序里面。
:004055A0 6AFF push FFFFFFFF
:004055A2 6880F54100 push 0041F580
:004055A7 64A100000000 mov eax, dword ptr fs:[00000000]
:004055AD 50 push eax
:004055AE 64892500000000 mov dword ptr fs:[00000000], esp
:004055B5 83EC08 sub esp, 00000008
:004055B8 56 push esi
:004055B9 68D8A44200 push 0042A4D8
:004055BE 8D4C2408 lea ecx, dword ptr [esp+08]
:004055C2 C744241801000000 mov [esp+18], 00000001
:004055CA E8D3340100 call 00418AA2
:004055CF 8B44241C mov eax, dword ptr [esp+1C]
:004055D3 33F6 xor esi, esi
:004055D5 C644241402 mov [esp+14], 02
:004055DA 8B48F8 mov ecx, dword ptr [eax-08]
:004055DD 85C9 test ecx, ecx
:004055DF 7E28 jle 00405609
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00405607(C)
|
:004055E1 83FE0A cmp esi, 0000000A
:004055E4 7D23 jge 00405609
:004055E6 0FBE0406 movsx eax, byte ptr [esi+eax]
:004055EA 99 cdq
:004055EB B90A000000 mov ecx, 0000000A
:004055F0 F7F9 idiv ecx
:004055F2 8D4C2404 lea ecx, dword ptr [esp+04]
:004055F6 80C230 add dl, 30
:004055F9 52 push edx
:004055FA E886370100 call 00418D85
:004055FF 8B44241C mov eax, dword ptr [esp+1C]
:00405603 46 inc esi
:00405604 3B70F8 cmp esi, dword ptr [eax-08]
:00405607 7CD8 jl 004055E1
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004055DF(C), :004055E4(C)
* Possible StringData Ref from Data Obj ->”zjfeng.yeah.net”
|
:00405609 68CC8C4200 push 00428CCC
:0040560E 8D4C2408 lea ecx, dword ptr [esp+08]
:00405612 E847370100 call 00418D5E
:00405617 8D542408 lea edx, dword ptr [esp+08]
:0040561B 6A0A push 0000000A
:0040561D 52 push edx
:0040561E 8D4C240C lea ecx, dword ptr [esp+0C]
:00405622 E8EBE00000 call 00413712
:00405627 50 push eax
:00405628 8D4C2408 lea ecx, dword ptr [esp+08]
:0040562C C644241803 mov [esp+18], 03
:00405631 E8EB340100 call 00418B21
:00405636 8D4C2408 lea ecx, dword ptr [esp+08]
:0040563A C644241402 mov [esp+14], 02
:0040563F E8F0330100 call 00418A34
:00405644 8B742420 mov esi, dword ptr [esp+20]
^^^ <–根据输入的ID算出的注册号;
:00405648 8B442404 mov eax, dword ptr [esp+04]
^^^ <–输入的假注册号;
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040566A(C)
|
:0040564C 8A10 mov dl, byte ptr [eax]
取[EAX]的第一位数
:0040564E 8ACA mov cl, dl
:00405650 3A16 cmp dl, byte ptr [esi]
取[ESI]的第一位数
:00405652 751C jne 00405670
不等就跳走
:00405654 84C9 test cl, cl
是否已是最后一位数
:00405656 7414 je 0040566C
是就跳走
:00405658 8A5001 mov dl, byte ptr [eax+01]
取[EAX]的下一位数
:0040565B 8ACA mov cl, dl
:0040565D 3A5601 cmp dl, byte ptr [esi+01]
取[ESI]的下一位数
:00405660 750E jne 00405670
不等就跳走
:00405662 83C002 add eax, 00000002
调整指针指向EAX再下一位
:00405665 83C602 add esi, 00000002
调整指针指向ESI再下一位
:00405668 84C9 test cl, cl
是否已是最后一位
:0040566A 75E0 jne 0040564C
不是就跳到0040564C循环取数比较
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00405656(C)
|
:0040566C 33C0 xor eax, eax
:0040566E EB05 jmp 00405675
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00405652(C), :00405660(C)
|
:00405670 1BC0 sbb eax, eax
:00405672 83D8FF sbb eax, FFFFFFFF
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040566E(U)
|
:00405675 85C0 test eax, eax
:00405677 5E pop esi
:00405678 C644241001 mov [esp+10], 01
:0040567D 8D4C2400 lea ecx, dword ptr [esp]
:00405681 7537 jne 004056BA
:00405683 E8AC330100 call 00418A34
:00405688 8D4C2418 lea ecx, dword ptr [esp+18]
:0040568C C644241000 mov [esp+10], 00
:00405691 E89E330100 call 00418A34
:00405696 8D4C241C lea ecx, dword ptr [esp+1C]
:0040569A C7442410FFFFFFFF mov [esp+10], FFFFFFFF
:004056A2 E88D330100 call 00418A34
:004056A7 B001 mov al, 01 <—注册成功标志
:004056A9 8B4C2408 mov ecx, dword ptr [esp+08]
:004056AD 64890D00000000 mov dword ptr fs:[00000000], ecx
:004056B4 83C414 add esp, 00000014
:004056B7 C20800 ret 0008
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00405681(C)
|
:004056BA E875330100 call 00418A34
:004056BF 8D4C2418 lea ecx, dword ptr [esp+18]
:004056C3 C644241000 mov [esp+10], 00
:004056C8 E867330100 call 00418A34
:004056CD 8D4C241C lea ecx, dword ptr [esp+1C]
:004056D1 C7442410FFFFFFFF mov [esp+10], FFFFFFFF
:004056D9 E856330100 call 00418A34
:004056DE 8B4C2408 mov ecx, dword ptr [esp+08]
:004056E2 32C0 xor al, al <—注册失败,标志位置0
根据上面的分析,相信大家都能够得出正常的注册码,还可以写出相应的注册机。
注册码:8901234567
ID:0123456789