Nisy 发表于 2007-5-6 16:52:06

回复:第一章基础部分-基础补完-名片王的下断问题

由于本次数据恢复,少量数据(我们最后一次备份数据之后)的部分无法还原。我本版见到有会员提问这个问题,来解答一下:


8186名片王 2.1
http://www.onlinedown.net/soft/30233.htm

我猜想这篇文章,lovewxt兄弟的意思是让大家先体验一下自己亲自破解程序的乐趣。
至于该软件的破解原理,不是本文的重点。主要目的在于我们完成亲自来保存我们破解后的文件。

给大家点提示,我们注册的时候软件有一个“第几次输入注册码”,我们可以输入三次。

至于该软件的详细原理如果有时间的话我补充一下。

我们OD载入程序后,右键 搜索ASCII字符串,可以找到注册部分的关键字符“第 次注册”

004C601F\.C3            retn
004C6020   $55            push    ebp       // 我们在retn的下一行,即注册部分的起点来下断点
004C6021   .8BEC          mov   ebp, esp
004C6023   .6A 00         push    0
004C6025   .6A 00         push    0
004C6027   .6A 00         push    0
004C6029   .6A 00         push    0
004C602B   .6A 00         push    0
004C602D   .53            push    ebx
004C602E   .56            push    esi
004C602F   .57            push    edi
004C6030   .8BF9          mov   edi, ecx
004C6032   .8BF2          mov   esi, edx
004C6034   .8BD8          mov   ebx, eax
004C6036   .33C0          xor   eax, eax
004C6038   .55            push    ebp
004C6039   .68 E0614C00   push    004C61E0
004C603E   .64:FF30       push    dword ptr fs:
004C6041   .64:8920       mov   fs:, esp
004C6044   .33D2          xor   edx, edx
004C6046   .55            push    ebp
004C6047   .68 B1614C00   push    004C61B1
004C604C   .64:FF32       push    dword ptr fs:
004C604F   .64:8922       mov   fs:, esp
004C6052   .8BC3          mov   eax, ebx
004C6054   .E8 97FFFFFF   call    004C5FF0
004C6059   .84C0          test    al, al
004C605B   .0F85 44010000 jnz   004C61A5                         ;这里跳走就注册成功了 不跳走显示第几次注册
004C6061   .33D2          xor   edx, edx
004C6063   .55            push    ebp
004C6064   .68 9A614C00   push    004C619A
004C6069   .64:FF32       push    dword ptr fs:
004C606C   .64:8922       mov   fs:, esp
004C606F   .C607 00       mov   byte ptr , 0
004C6072   .8B0D A0E34C00 mov   ecx,                   ;pCard.004CFC34
004C6078   .8B09          mov   ecx,
004C607A   .B2 01         mov   dl, 1
004C607C   .A1 84584C00   mov   eax,
004C6081   .E8 468DF9FF   call    0045EDCC
004C6086   .8945 FC       mov   , eax
004C6089   .68 F8614C00   push    004C61F8                         ;第
004C608E   .8D55 F0       lea   edx,
004C6091   .8BC6          mov   eax, esi
004C6093   .E8 F42AF4FF   call    00408B8C
004C6098   .FF75 F0       push    dword ptr
004C609B   .68 04624C00   push    004C6204                         ;   次输入
004C60A0   .8D45 F4       lea   eax,
004C60A3   .BA 03000000   mov   edx, 3
004C60A8   .E8 3BE7F3FF   call    004047E8
004C60AD   .8B55 F4       mov   edx,
004C60B0   .8B45 FC       mov   eax,
004C60B3   .8B80 04030000 mov   eax,
004C60B9   .E8 D2F0F7FF   call    00445190
004C60BE   .4E            dec   esi
004C60BF   .7E 20         jle   short 004C60E1
004C60C1   .8B45 FC       mov   eax,
004C60C4   .8B80 FC020000 mov   eax,
004C60CA   .33D2          xor   edx, edx
004C60CC   .E8 BFF0F7FF   call    00445190
004C60D1   .8B45 FC       mov   eax,
004C60D4   .8B80 08030000 mov   eax,
004C60DA   .B2 01         mov   dl, 1
004C60DC   .E8 9FEFF7FF   call    00445080
004C60E1   >8B53 04       mov   edx,
004C60E4   .8B45 FC       mov   eax,
004C60E7   .8B80 1C030000 mov   eax,
004C60ED   .E8 9EF0F7FF   call    00445190
004C60F2   .8B45 FC       mov   eax,
004C60F5   .8B10          mov   edx,
004C60F7   .FF92 E8000000 call   
004C60FD   .8B45 FC       mov   eax,
004C6100   .83B8 24030000>cmp   dword ptr , 0
004C6107   .75 17         jnz   short 004C6120
004C6109   .C607 01       mov   byte ptr , 1
004C610C   .33DB          xor   ebx, ebx
004C610E   .E8 69DEF3FF   call    00403F7C
004C6113   .33C0          xor   eax, eax
004C6115   .5A            pop   edx
004C6116   .59            pop   ecx
004C6117   .59            pop   ecx
004C6118   .64:8910       mov   fs:, edx
004C611B   .E9 9D000000   jmp   004C61BD

使用的原理呢就是:通过修改跳转使程序执行注册成功后的代码来达到使用注册后的功能。如果有问题欢迎大家开帖讨论。

soso 发表于 2007-5-9 09:29:53

那怎么知道是这一行的呢?
004C605B   .0F85 44010000 jnz   004C61A5                         ;这里跳走就注册成功了 不跳走显示第几次注册

是不是搜索到之后往上找第一个跳转???

Nisy 发表于 2007-5-9 10:30:47

程序之所以执行这些代码,就是因为验证失败导致,我们来一个无论成败都让他执行注册成功的代码就可以到达了暴破目的. 这一部分如果还有疑惑可以先跳过看下一章节,当以后接触多了,这里自然就明白了~


004C6054   .E8 97FFFFFF   call    004C5FF0    // 关键CALL
004C6059   .84C0          test    al, al             //关键CALL返回的标志位
004C605B   .0F85 44010000 jnz   004C61A5   //关键跳转
004C6061   .33D2          xor   edx, edx
004C6063   .55            push    ebp
004C6064   .68 9A614C00   push    004C619A
004C6069   .64:FF32       push    dword ptr fs:
004C606C   .64:8922       mov   fs:, esp
004C606F   .C607 00       mov   byte ptr , 0
004C6072   .8B0D A0E34C00 mov   ecx,                   ;pCard.004CFC34
004C6078   .8B09          mov   ecx,
004C607A   .B2 01         mov   dl, 1
004C607C   .A1 84584C00   mov   eax,
004C6081   .E8 468DF9FF   call    0045EDCC
004C6086   .8945 FC       mov   , eax
004C6089   .68 F8614C00   push    004C61F8                         ;第
004C608E   .8D55 F0       lea   edx,
004C6091   .8BC6          mov   eax, esi
004C6093   .E8 F42AF4FF   call    00408B8C
004C6098   .FF75 F0       push    dword ptr
004C609B   .68 04624C00   push    004C6204                         ;   次输入

soso 发表于 2007-5-9 10:49:00

我们OD载入程序后,右键 搜索ASCII字符串,可以找到注册部分的关键字符“第 次注册”


这个我用野猪的dbg也没有 -.-
不过有右键---超级字符串参考+(U)---查找ASCII   然后滚动条在最下面的时候按一下pageup可以看到
双击一下 “第” ~~可以看到跟你一样的代码

Nisy 发表于 2007-5-9 20:05:14

野猪OD2.0 大家在使用时一定要看下对这个软件(OD修改后的说明),否则可能会出现一些以外.
建议新手使用a_p兄弟修改的ICY~ 这个更安全些. 野猪OD2.0调试强壳更合适.

pw2000 发表于 2007-5-26 16:21:27

下载来对照着学习。

roor 发表于 2007-10-27 09:25:16

谢谢, 我想来想去真是不知道怎么找到那个地址的, 幸好坛主作了补充

jfxwc 发表于 2007-12-21 09:39:35

努力学习中。破解我还是菜鸟啊。

csbinghu 发表于 2008-1-26 19:54:42

努力学习中。破解我还是菜鸟啊。

snms 发表于 2008-10-5 21:13:43

看懂了,谢谢楼主
页: [1] 2
查看完整版本: 回复:第一章基础部分-基础补完-名片王的下断问题