软件:H******** 4.01.11
保护方式:授权文件保护,未注册时每次启动会有一个提示注册的对话框
该版本的保护方式与以前版本的保护方式不同,由序列号方式改为授权文件方式,注册时要求输入授权文件的全部内容。这对小弟的破解工作倒没有什么影响,小弟偏爱暴力法破解(本人比较懒,懒得算注册号),且喜欢装入程序,从头单步运行,直到弹出注册对话框(当然加壳的程序除外)。
先把H*****.exe 拷到别的目录,作为备份。
启动trw2000,打开C:\Program Files\H******** 4\H*****.exe,装入,按F10。若按F10带过一个call时,弹出提示注册对话框,就关闭对话框,trw2000会自动弹出。实在不行的话,退出程序,trw2000也会自动弹出。用鼠标选中刚才的call,按F9设断点,g,程序会正常运行。关闭程序,重新装入,全速运行,在刚才的断点中断。按F8进入call内,按F10重复刚才的过程,用不了几次,就能找到关键部位。请看(本人用log2命令无法存盘,只好keyin了,哪位大哥知道log2的用法,不妨指点小弟一下):
42E279 8B837001000 mov eax,[ebx+170]; [ebx+170]=[4fdd30]=0
42e27f 85c0 test eax,eax
42e281 0f85d9000000 jnz near 42e360; (no jump)
这时如果敲入rfl z命令,g,哈哈,注册对话框没有出现。很明显4fdd30这个全局变量中放的就是注册标志,若为0,就是没有注册。现在,重新装入程序,bc,下bpm
167:4fdd30 w,g。来到下面这一段:
436fcd e85ec9feff call 423930
436fd2 83c404 add esp,4
436fd5 a330dd4f00 mov [4fdd30],eax; eax=0
是谁让我们的eax变成0的?一定是上面那个call了。bc,下bpx 42e279,g。退出hypersnap,从新装入,g。
trw在436fcd中断,按F8进入。废话少说,来到下面这一段:
423a6c 33c0 xor eax,eax ;原来在这里了。
423a6e 5b pop ebx
423a6f 8b4df4
...
423a7c c3 ret
记下代码(建议大家多抄几行,我的是e870f606005f5e33c0),启动uedit,查找e870f606005f5e33c0,找到后将33c0改为9090。存盘,试一下。
居然弹出一个对话框,说程序被损坏了,怎么办呢?有了,ctrl+m呼出trw,下bpm lockmytask,g。按ok按钮,trw立即弹出。按几次F12,回到H*****的领空,看看上一行是什么?原来是call
user32!messagebox。早知是这样,下bpx messagebox不久完了吗。现在怎么办呢?往上看看,有没有比较语句,能跳过messagebox,若找不到,就ret到上一层call中,找一找能不能跳过这个call。我ret了三四次,找到下面这一段:
42de41 e89a5cffff call 423ae0
42de46 85c0 test eax,eax
42de48 751d jnz 42de67;
把751d改为eb1d就行了,不再出程序被损坏的messagebox了,程序可以运行了,抓下的图片中没有公司标记了,行了吗?不行,程序现在动不动就出现非法操作,然后只能退出。下面是win98的提示信息。
H***** 在 00de:f5fa0f3d 的模块
<未知> 中导致无效页错误。
Registers:
EAX=0073fad4 CS=0167 EIP=f5fa0f3d EFLGS=00010246
EBX=0073fad4 SS=016f ESP=00640004 EBP=00640024
ECX=006400a8 DS=016f ESI=8174cedc FS=229f
EDX=bff768d5 ES=016f EDI=006400d0 GS=0000
Bytes at CS:EIP:
Stack dump:
bff768c9 006400d0 0073fad4 006400ec 006400a8 006401dc bff768d5 0073fad4 006400b8
bff882eb 006400d0 0073fad4 006400ec 006400a8 f5fa0f3d 00640294
我比较了一下,每次退出时的ip,寄存器都是一样的,于是有了一个办法。装入程序,下bp if (eax==73fad4),因为每次出错时的eax都是73fad4。g。程序启动了,画面出来了,似乎一切正常。动一动鼠标,没动几下,出来一个蓝屏,trw说它不能中断。上帝啊,连trw都不能中断,我要绝望了。
还有一招,内存补丁。希望你备份的H*****.exe还在,把它考回来。我用的补丁是ppatcher 3.93,这可是ppatcher的作者thewd亲自email给我的。thewd挺负责任的,有信必回,你要是能对ppatcher提出什么意见或建议,他还会发给你一个最新版的ppatcher。扯远了。ppatcher.ppc的内容如下:
#Process Patcher Configuration File
Version=3.93
PatchAuthor=thewd
PatchContactInformation=thewd@hotmail.com
DisplayName=h*****.exe v4.01.11
Filename=h*****.exe
Filesize=1056768
Address=0x42de48:0x75:0xeB
Address=0x4337e6:0x75:0xeB
Address=0x4387e5:0x75:0xeB
Address=0x42e281:0x0f:0xe9
Address=0x42e282:0x85:0xda
Address=0x42e283:0xd9:0x00
Address=0x42e284:0x00:0x00
Address=0x42e285:0x00:0x00
Address=0x42e286:0x00:0x90
#End of Configuration File
这回行了吧。ppatcher.ppc所修改的地址跟我刚才说的不太一样,因为光修改423a6c处的xor eax,eax,还有一点问题。按菜单中的关于和注册两项时,还会出现非法操作。修改也很简单,只要下bpm
4fdd30,就很容易找到比较点了。
罗里罗唆说了半天,总结一下。
1. 4fdd30 是一个全局变量,存放的是注册标志,跟注册有关的判断都以它为依据。
2. 程序有自校验功能,但在42de48处可以跳过。
3. 程序还有暗桩,修改之后动不动就非法操作。本人功力不够找不到,只好用内存补丁。比较遗憾。请高手们赐教。
注:H*** 3.53 和 3.63.01 的自校验方式与 4.01.11不同,修改文件后,再运行会提示有个文件找不到,而且用trw2000也无法装入。颇为奇怪。那位有兴趣共同研究一下。3.63.01避注册框的比较点是45ae8b。
- 标 题:H******** 4.01.11的不完全破解 (4千字)
- 作 者:kingtall
- 时 间:2001-4-14 13:07:31
- 链 接:http://bbs.pediy.com