好友
阅读权限10
听众
最后登录1970-1-1
|
icer2
发表于 2010-1-18 12:07
本脱文适合刚刚入门的朋友学习, 会一点的朋友 都可以直接Pass吧.. 因为我也是刚刚才入门的.
PEID查壳 Microsoft Visual C++ 6.0 无壳..
OD载入 最首先的当然是查看ASCII码了..
插件/超级字符参考/查找ASCII
超级字串参考,项目 22
地址=00401D0B
反汇编=push UltraDic.004370F4
文本字串=C:\regbanyet.dat
超级字串参考,项目 24
地址=00401DB0
反汇编=push UltraDic.004370D8
文本字串=非常感谢您的支持,注册成功!
超级字串参考,项目 25
地址=00401DE5
反汇编=push UltraDic.004370C0
文本字串=注册名或注册码不正确!
OK. 双击 非常感谢您的支持,注册成功! 并往上翻.. 来到 00401CAC > 55 push ebp F2下断点 Shift +F9 运行
Ps: 注册是否成功取决于你输入的注册码于真注册码的比较是否相等, 那么当提示这个字符串的时候,在这里的上面必定有比较的地方(这个地方也就是破解的关键了.)
注意看堆栈.. 这里已经写出了真注册码: xxxxxxxxxxxxxxx
堆栈地址=0012EF2C, (ASCII "xxxxxxxxxxxxxx")
eax=0012EECC
00401CAC > 55 push ebp
00401CAD . 8D8C24 EC0000>lea ecx,dword ptr ss:[esp+EC]
00401CB4 . 889C34 4C0100>mov byte ptr ss:[esp+esi+14C],bl
00401CBB . E8 F0010000 call UltraDic.00401EB0
00401CC0 . 899C24 B40100>mov dword ptr ss:[esp+1B4],ebx
00401CC7 . 8DB424 840000>lea esi,dword ptr ss:[esp+84] ; 获取假注册码 [esp+84] = 1111111111111
00401CCE . 8D8424 480100>lea eax,dword ptr ss:[esp+148] ; 获取真注册码 [esp+148] = xxxxxxxxxxxxxx
00401CD5 > 8A10 mov dl,byte ptr ds:[eax]
00401CD7 . 8ACA mov cl,dl
00401CD9 . 3A16 cmp dl,byte ptr ds:[esi]
00401CDB . 75 1C jnz short UltraDic.00401CF9
00401CDD . 3ACB cmp cl,bl
00401CDF . 74 14 je short UltraDic.00401CF5
00401CE1 . 8A50 01 mov dl,byte ptr ds:[eax+1]
00401CE4 . 8ACA mov cl,dl
00401CE6 . 3A56 01 cmp dl,byte ptr ds:[esi+1]
00401CE9 . 75 0E jnz short UltraDic.00401CF9
00401CEB . 83C0 02 add eax,2
00401CEE . 83C6 02 add esi,2
00401CF1 . 3ACB cmp cl,bl
00401CF3 .^ 75 E0 jnz short UltraDic.00401CD5
00401CF5 > 33C0 xor eax,eax
00401CF7 . EB 05 jmp short UltraDic.00401CFE
00401CF9 > 1BC0 sbb eax,eax
00401CFB . 83D8 FF sbb eax,-1
00401CFE 3BC0 cmp eax,ebx ; 用ebx 减去 eax
00401D00 0F85 DF000000 jnz UltraDic.00401DE5 ; 若相减不等于0就跳相错误, 反之不跳走向正确.. <==则可以把jnz改为 jz 或者 nop掉就可以了.
00401D06 . 68 01100000 push 1001
00401D0B . 68 F4704300 push UltraDic.004370F4 ; c:\regbanyet.dat <== 保存注册信息
00401D10 . 8D4C24 18 lea ecx,dword ptr ss:[esp+18]
00401D14 . E8 8FEF0100 call UltraDic.00420CA8
00401D19 . 8D7C24 20 lea edi,dword ptr ss:[esp+20]
00401D1D . 83C9 FF or ecx,FFFFFFFF
00401D20 . 33C0 xor eax,eax
00401D22 . B2 0D mov dl,0D
00401D24 . F2:AE repne scas byte ptr es:[edi]
00401D26 . F7D1 not ecx
00401D28 . 49 dec ecx
00401D29 . 8DBC24 840000>lea edi,dword ptr ss:[esp+84]
00401D30 . C68424 B40100>mov byte ptr ss:[esp+1B4],1
00401D38 . 88540C 20 mov byte ptr ss:[esp+ecx+20],dl
00401D3C . 41 inc ecx
00401D3D . C6440C 20 0A mov byte ptr ss:[esp+ecx+20],0A
00401D42 . 885C0C 21 mov byte ptr ss:[esp+ecx+21],bl
00401D46 . 83C9 FF or ecx,FFFFFFFF
00401D49 . F2:AE repne scas byte ptr es:[edi]
00401D4B . F7D1 not ecx
00401D4D . 49 dec ecx
00401D4E . 8D7C24 20 lea edi,dword ptr ss:[esp+20]
00401D52 . 88940C 840000>mov byte ptr ss:[esp+ecx+84],dl
00401D59 . 41 inc ecx
00401D5A . C6840C 840000>mov byte ptr ss:[esp+ecx+84],0A
00401D62 . 889C0C 850000>mov byte ptr ss:[esp+ecx+85],bl
00401D69 . 83C9 FF or ecx,FFFFFFFF
00401D6C . F2:AE repne scas byte ptr es:[edi]
00401D6E . F7D1 not ecx
00401D70 . 49 dec ecx
00401D71 . 8D4424 20 lea eax,dword ptr ss:[esp+20]
00401D75 . 51 push ecx ; /Arg2
00401D76 . 50 push eax ; |Arg1
00401D77 . 8D4C24 18 lea ecx,dword ptr ss:[esp+18] ; |
00401D7B . E8 DCF10100 call UltraDic.00420F5C ; \UltraDic.00420F5C
00401D80 . 8DBC24 840000>lea edi,dword ptr ss:[esp+84]
00401D87 . 83C9 FF or ecx,FFFFFFFF
00401D8A . 33C0 xor eax,eax
00401D8C . F2:AE repne scas byte ptr es:[edi]
00401D8E . F7D1 not ecx
00401D90 . 49 dec ecx
00401D91 . 51 push ecx ; /Arg2
00401D92 . 8D8C24 880000>lea ecx,dword ptr ss:[esp+88] ; |
00401D99 . 51 push ecx ; |Arg1
00401D9A . 8D4C24 18 lea ecx,dword ptr ss:[esp+18] ; |
00401D9E . E8 B9F10100 call UltraDic.00420F5C ; \UltraDic.00420F5C
00401DA3 . 6A 03 push 3 ; /FileAttributes = READONLY|HIDDEN
00401DA5 . 68 F4704300 push UltraDic.004370F4 ; |c:\regbanyet.dat
00401DAA . FF15 8CB24200 call dword ptr ds:[<&KERNEL32.SetFileAtt>; \SetFileAttributesA
00401DB0 . 68 D8704300 push UltraDic.004370D8 ; 非常感谢您的支持,注册成功!
00401DB5 . 8D8C24 EC0000>lea ecx,dword ptr ss:[esp+EC]
00401DBC . E8 AF010000 call UltraDic.00401F70
00401DC1 . 8D4C24 10 lea ecx,dword ptr ss:[esp+10]
00401DC5 . 889C24 B40100>mov byte ptr ss:[esp+1B4],bl
00401DCC . E8 77EF0100 call UltraDic.00420D48
00401DD1 . 8BCD mov ecx,ebp
00401DD3 . E8 44B50100 call UltraDic.0041D31C
00401DD8 . C78424 B40100>mov dword ptr ss:[esp+1B4],3
00401DE3 . EB 1C jmp short UltraDic.00401E01
00401DE5 > 68 C0704300 push UltraDic.004370C0 ; 注册名或注册码不正确!
00401DEA . 8D8C24 EC0000>lea ecx,dword ptr ss:[esp+EC]
00401DF1 . E8 7A010000 call UltraDic.00401F70
00401DF6 . C78424 B40100>mov dword ptr ss:[esp+1B4],2
00401E01 > 8D8C24 440100>lea ecx,dword ptr ss:[esp+144]
00401E08 . E8 CCEB0100 call UltraDic.004209D9
00401E0D . 8D8C24 E80000>lea ecx,dword ptr ss:[esp+E8]
00401E14 . C78424 B40100>mov dword ptr ss:[esp+1B4],-1
00401E1F . E8 43AE0100 call UltraDic.0041CC67
00401E24 > 8B8C24 AC0100>mov ecx,dword ptr ss:[esp+1AC]
00401E2B . 5F pop edi
00401E2C . 5E pop esi
00401E2D . 5D pop ebp
00401E2E . 5B pop ebx
00401E2F . 64:890D 00000>mov dword ptr fs:[0],ecx
00401E36 . 81C4 A8010000 add esp,1A8
00401E3C . C3 retn
Ps: 其实破解的关键在于找到关键Call以及跳转.
这里只是一个最简单的破解思路, 希望大家能琢磨透彻 举一反三.. |
免费评分
-
查看全部评分
|