icer2 发表于 2010-1-18 12:07

【I.C.K伴你一同成长第三期】人人都能破解

本脱文适合刚刚入门的朋友学习, 会一点的朋友 都可以直接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 ebpF2下断点 Shift +F9 运行
Ps: 注册是否成功取决于你输入的注册码于真注册码的比较是否相等, 那么当提示这个字符串的时候,在这里的上面必定有比较的地方(这个地方也就是破解的关键了.)




注意看堆栈..这里已经写出了真注册码: xxxxxxxxxxxxxxx
堆栈地址=0012EF2C, (ASCII "xxxxxxxxxxxxxx")
eax=0012EECC


00401CAC   >55            push ebp
00401CAD   .8D8C24 EC0000>lea ecx,dword ptr ss:
00401CB4   .889C34 4C0100>mov byte ptr ss:,bl
00401CBB   .E8 F0010000   call UltraDic.00401EB0
00401CC0   .899C24 B40100>mov dword ptr ss:,ebx
00401CC7   .8DB424 840000>lea esi,dword ptr ss:            ;获取假注册码 = 1111111111111
00401CCE   .8D8424 480100>lea eax,dword ptr ss:         ;获取真注册码 = xxxxxxxxxxxxxx
00401CD5   >8A10          mov dl,byte ptr ds:
00401CD7   .8ACA          mov cl,dl
00401CD9   .3A16          cmp dl,byte ptr ds:
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:
00401CE4   .8ACA          mov cl,dl
00401CE6   .3A56 01       cmp dl,byte ptr ds:
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:
00401D14   .E8 8FEF0100   call UltraDic.00420CA8
00401D19   .8D7C24 20   lea edi,dword ptr ss:
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:
00401D26   .F7D1          not ecx
00401D28   .49            dec ecx
00401D29   .8DBC24 840000>lea edi,dword ptr ss:
00401D30   .C68424 B40100>mov byte ptr ss:,1
00401D38   .88540C 20   mov byte ptr ss:,dl
00401D3C   .41            inc ecx
00401D3D   .C6440C 20 0Amov byte ptr ss:,0A
00401D42   .885C0C 21   mov byte ptr ss:,bl
00401D46   .83C9 FF       or ecx,FFFFFFFF
00401D49   .F2:AE         repne scas byte ptr es:
00401D4B   .F7D1          not ecx
00401D4D   .49            dec ecx
00401D4E   .8D7C24 20   lea edi,dword ptr ss:
00401D52   .88940C 840000>mov byte ptr ss:,dl
00401D59   .41            inc ecx
00401D5A   .C6840C 840000>mov byte ptr ss:,0A
00401D62   .889C0C 850000>mov byte ptr ss:,bl
00401D69   .83C9 FF       or ecx,FFFFFFFF
00401D6C   .F2:AE         repne scas byte ptr es:
00401D6E   .F7D1          not ecx
00401D70   .49            dec ecx
00401D71   .8D4424 20   lea eax,dword ptr ss:
00401D75   .51            push ecx                                 ; /Arg2
00401D76   .50            push eax                                 ; |Arg1
00401D77   .8D4C24 18   lea ecx,dword ptr ss:            ; |
00401D7B   .E8 DCF10100   call UltraDic.00420F5C                   ; \UltraDic.00420F5C
00401D80   .8DBC24 840000>lea edi,dword ptr ss:
00401D87   .83C9 FF       or ecx,FFFFFFFF
00401D8A   .33C0          xor eax,eax
00401D8C   .F2:AE         repne scas byte ptr es:
00401D8E   .F7D1          not ecx
00401D90   .49            dec ecx
00401D91   .51            push ecx                                 ; /Arg2
00401D92   .8D8C24 880000>lea ecx,dword ptr ss:            ; |
00401D99   .51            push ecx                                 ; |Arg1
00401D9A   .8D4C24 18   lea ecx,dword ptr ss:            ; |
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:
00401DBC   .E8 AF010000   call UltraDic.00401F70
00401DC1   .8D4C24 10   lea ecx,dword ptr ss:
00401DC5   .889C24 B40100>mov byte ptr ss:,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:,3
00401DE3   .EB 1C         jmp short UltraDic.00401E01
00401DE5   >68 C0704300   push UltraDic.004370C0                   ;注册名或注册码不正确!
00401DEA   .8D8C24 EC0000>lea ecx,dword ptr ss:
00401DF1   .E8 7A010000   call UltraDic.00401F70
00401DF6   .C78424 B40100>mov dword ptr ss:,2
00401E01   >8D8C24 440100>lea ecx,dword ptr ss:
00401E08   .E8 CCEB0100   call UltraDic.004209D9
00401E0D   .8D8C24 E80000>lea ecx,dword ptr ss:
00401E14   .C78424 B40100>mov dword ptr ss:,-1
00401E1F   .E8 43AE0100   call UltraDic.0041CC67
00401E24   >8B8C24 AC0100>mov ecx,dword ptr ss:
00401E2B   .5F            pop edi
00401E2C   .5E            pop esi
00401E2D   .5D            pop ebp
00401E2E   .5B            pop ebx
00401E2F   .64:890D 00000>mov dword ptr fs:,ecx
00401E36   .81C4 A8010000 add esp,1A8
00401E3C   .C3            retn




Ps: 其实破解的关键在于找到关键Call以及跳转.
      这里只是一个最简单的破解思路, 希望大家能琢磨透彻 举一反三..

feiligood 发表于 2010-1-18 13:39

本帖最后由 feiligood 于 2010-1-18 13:42 编辑

下来学习 在破破在说啊
一载入就跑起来了、同学如何整啊 插件在那里下谢谢啊

Hmily 发表于 2010-1-18 14:11

楼主虽然分析的不是太完全,但是分享精神很好!继续努力!
页: [1]
查看完整版本: 【I.C.K伴你一同成长第三期】人人都能破解