WinHex是个很优秀的Edit Tool,它的版本升级很快,目前好象到9.64了吧。 前面我已介绍了9.5和9.62版的免注册版破解方法,对于初学者来说,大概 有点云里雾里,什么感觉了、运气了,有点玄虚。实际上,还是有章可循 的。这不,今天下载了个9.64版,用了不到二十分钟的时间就破了。 破解常备兵器: 屠龙刀:SoftIce for Win 4.95 依天剑:W32Dasm 8.93 玄铁剑:Hiew 6.40 碧血剑:UltraEdit 8.0 破WinHex只需屠龙刀和玄铁剑两把“粗笨”兵器足矣。 将9.64版本安装上以后,反复打开、关闭若干次后,出现了一个提示对话框, 大意是:这是一个共享软件,可以任意传播和使用,要想得到它的全部功能, 就掏钱注册吧。赶紧设断 bpx lockmytask 按确定后被断,按几次F12回到WinHex代码区 0163:0040CE61 Call user32.IsDlgButtonChecked 0163:0040CE66 dec eax 0163:0040CE67 sete byte ptr [0045A7F5] 0163:0040CE6E mov eax, dword ptr [ebp+10] 0163:0040CE71 push eax 0163:0040CE72 mov eax, dword ptr [ebp+08] 0163:0040CE75 push eax 0163:0040CE76 Call user32.EndDialog 0163:0040CE7B jmp 0040CE92 〈-返回此处 这是操作提示对话框的调用代码,没有有价值的线索,又按了N次F12(N是几没 有必要告诉你,自己一试便知),再次回到WinHex代码区 0163:00405018 push ebp 0163:00405019 mov ebp, esp 0163:0040501B push ebx 0163:0040501C push 00000000 0163:0040501E mov ebx, dword ptr [ebp+08] 0163:00405021 push ebx 0163:00405022 push ecx 0163:00405023 push edx 0163:00405024 push eax 0163:00405025 Call user32.DialogBoxParamA 0163:0040502A pop ebx 〈-返回此处 0163:0040502B pop ebp 0163:0040502C ret 0004 这是程序对对话框函数DialogBoxParamA的一个调用,快抓住狐狸的尾巴了。 慢慢追踪,按F12 0163:0040CF23 mov byte ptr [0045A7AD], 01 0163:0040CF2A cmp dword ptr [0045A8F0], 00000000 0163:0040CF31 je 0040CF3B 0163:0040CF33 mov ebx, dword ptr [0045A8F0] 0163:0040CF39 jmp 0040CF41 0163:0040CF3B mov ebx, dword ptr [0045500C] 0163:0040CF41 push 0040CE04 0163:0040CF46 mov ecx, dword ptr [0045B728] 0163:0040CF4C mov edx, 000003E8 0163:0040CF51 mov eax, ebx 0163:0040CF53 call 00405018 0163:0040CF58 mov byte ptr [0045A7AD], 00 〈-返回此处 因为上面的几个短跳均未跳过0040CF53,因此以上的几个内存地址应该不是存放 注册标志的地方。再按两次F12 * 0163:0044E739 cmp byte ptr [0045A7FB], 00 0163:0044E740 jne 0044E75D 0163:0044E742 mov eax, 00000004 0163:0044E747 call 00402980 0163:0044E74C dec eax * 0163:0044E74D je 0044E75D 0163:0044E74F cmp byte ptr [0045A7BF], 00 * 0163:0044E756 jne 0044E75D 0163:0044E758 call 00432804 0163:0044E75D mov eax, ebx 〈-返回此处 哈,有戏!在三个*出均可跳过0044E758(即调用对话框)。 [0045A7FB]和[0045A7FB]可疑,下断 bpm 0045A7BF 重新运行WinHex,被断,将[0045A7BF]设为1,好象没什么作用,判断该处似乎 是决定共享版WinHex运行几次后弹出提示对话框的。PASS,再下断 bpm 0045A7FB 事实上,从程序流程来看,是否跳过对话框,[0045A7FB]处的优先处理权要高于 [0045A7FB]。果然,重新运行WinHex,被断 ** 0163:0043FA2D cmp byte ptr [0045A787], 00 0163:0043FA34 setne al 0163:0043FA37 mov edx, 0045A803 0163:0043FA3C sub edx, 00000008 0163:0043FA3F mov byte ptr [edx], al ;EDX=0045A7FB 0163:0043FA41 push 00000000 〈-此处被断 d 0045A7FB 将[0045A7FB]改为1,按F5,程序在几处被断,都是来比较[0045A7FB]的值,啥 话也别说,接着按F5,来到主程序窗口。乌拉!已经成注册版本了。 再回过头分析上面的代码,发现[0045A7FB]的值由[0045A787]决定的,[0045A787] 不为0,就表示程序已注册过了。再下断 bpm 0045A787 重新运行WinHex,程序只在**下一处被断,以前我还纳闷,什么地方给[0045A787] 赋值呢,现在想来,大概是这样的: BOOL registed; /缺省值为FALSE ... 注册模块 { if 注册码正确 { registed=TRUE; } } ... if registed /这里对应**处 { 已注册版本; } else { 未注册版本; } 这里,变量registed即对应内存单元[0045A787],因为一直没有正确的注册, 所以registed=TRUE语句始终没有被执行。 找到了钥匙,开锁就是举手之劳。将**处改为 cmp byte ptr [0045A787], 01 即可。**处的代码为803D87A7450000,调出Hiew,按F4进入DECODE模式,按F7 搜索803D87A7450000,找到后按F3,把后面的0000改为0001,按F9存盘,退出。 至此,你已得到了全部功能的WinHex9.64免注册版本,是不是感觉挺简单? 写这个破解文章比破解还累,用了我一个下午的时间。但想想看雪同志是那样 勤勤恳恳,辛辛苦苦地为大家整理破解教程,我还能说什么,只要大家高兴就 好。 南阳:woLONGwxd 2001-1-8