标 题:破解winhex v9.3------上篇
发信人:DDXia[CCG
时 间:2000年04月08日
详细信息:

级别:战国时期-----由于局势不稳定-------还是请前辈们指点一二
作者:丁丁虾 又名:DDXia [CCG]
目的:非常的天真无‘牙’------好象小虾米的牙真的看不见哦!:D(不以任何商业用途为目的)
赞助:WINICE.DAT----------非常非常的感谢看雪兄的礼品。看雪真得很乐于助人。

软件名称:WinHEX
软件授权:共享软件
使用平台:Win95/98/NT
发布公司:http://www.muenster.de/~sf/winhex.html
软件简介:
    WinHEX V9.30 for 95/98/NT。共享。老牌 Hex 十六进制编辑器工具,文件小、速度快,可做 Hex

与 SCII 码。编辑修改,多文件搜寻取代功能,一般运算及逻辑运算,硬盘磁区编辑(支持 FAT16、

FAT32 和 NTFS)自动搜寻编辑,文件对比和分析等功能,另外 V8.4 版新增了 RAM 編輯功能。

昨夜寒蛩不住鸣,惊回千里梦,已三更。
起来独自绕阶行,人悄悄,帘外月胧明。

白首为功名,旧山松竹老,阻归程。
欲将心事付瑶琴,
知音少,弦断有谁听。 《小重山》----岳飞


刚刚背得一首词,好东东大家分享嘛!!!
WINHEX9.3的破解真的真的很好玩!
1、看一看它的注册方式,有点儿象UtralEdit,运行后,点击HELP----》Registration 会出现两个CODE

需要填写:
CODE1:123456789
CODE2:987654321
然后提示重新启动,没有任何的提示你输入的CODE是否正确,唯一的提示是菜单上的Registration还

在,需要重新注册它。

2、猜想它一定是先把CODE存于某个地方,然后重新启动时,再检查它,所要做的是找到那个地方,

这步非常关键,如果找不到,就没有办法拦截它,也没有办法破它了。不过,还有一种方法就是从头开始

的去读懂该程序。:) 阿拉功力有限。

3、猜想一:存在注册表中。启动Register Monitor,嗨!!无功而返。
猜想二:存在文件中。启动File Monitor,嗨!!还是无功而返。
猜想三:存在硬盘的某个扇区中。看了一下用它调用的API Function,没有哪个是对硬盘扇区进行

读写的!(怎么看它调用的API Function?我就知道你会问。其实用W32DASM反编译后,在它的工具条

中有一个按钮‘Imp In’,点击它就行了)
MY GOD!!!于是放了两天的时间。在一个偶然的机会看到了000ye写的一篇文章。

原文如下:{{

WinHex ver9.25是一个很优秀的Hex与ASCII码编辑软件,它不但体积小,而且功能强大,尤其对中文兼

容性极好,与UltraEdit-32相比,真的各有千秋,令人难以取舍,但UltraEdit-32对中文兼容性不是那么好

,有时用它把程序中的中文修改为英文(或英文修改为中文)后,重新运行程序,会发觉系统报错:产生无

效页面或此程序进行非法操作等,不如各位网友可有同感?WinHex防解密的手段主要是:先把Code1和

Code2储存在内存中,然后在重新运行程序的时候进行注册码比对,大家可以拿它来练习练习。下载网址

:http://www.joyo.com

000ye
2000.03.14 }}
非常感谢000ye的TIPS

好家伙! 居然存在内存中,好过分。相信各位心中有底了吧!!


这回我要换工具了,由于TRW2000还不是很完善,但它毕竟是中国人的骄傲啊!!是不是呢??

初初用SOFTICE,还是有点生生的。安装它用去我大约两个小时,下载的SOFTICE4.0 4.05除了要sn,还

要什么的产品号及服务号!弄得俺满世界得乱窜。幸好关键时候,看雪兄出现,一切都OK!!原来我下

载的全是升级版,需要先安装SOFTICE 3.25(对了,在阿伦的主页中有),然后再装升级版。还有看雪兄

的winice.dat文件使SOFTICE看起来象TRW2000的界面。

4、破解它:输入注册码,CTRL+D跳出SOFTICE,然后设断点,BPX HMEMCPY,CTRL+D返

回程序,按OK,被中断,记得 BD *可以按一下F11(有点象TRW2000中的PMOUDLE。具体的可以看一

下看雪主页的SOFTICE教学),然后按N次F12,还有N次F10,还有N次F8,哈哈哈,哈哈,其实我也不

知道到底按了多少,原因有两个,一是比较懒;二是返回程序代码中就行了。--------其实你们应该比俺熟

悉多了。:)) 然后来到下面程序。

* Reference To: user32.GetDlgItemInt, Ord:0000h
|
:0042358B E8B016FEFF Call 00404C40------------------->取回输入数值的十六进制,存于EAX
123456789=0x75BCD15
:00423590 25FFFFFF7F and eax, 7FFFFFFF
^^^^^^^^^^^^^^^^^^^^^^------------>返回此处,如果能拦截到GetDlgItemInt函数

,按一下F11就可以返回了。

:00423595 8945FC mov dword ptr [ebp-04], eax------>ebp-04=0x69F8CC
:00423598 6A00 push 00000000
:0042359A 68F8424500 push 004542F8
:0042359F 680B030000 push 0000030B
:004235A4 8B03 mov eax, dword ptr [ebx]
:004235A6 50 push eax

* Reference To: user32.GetDlgItemInt, Ord:0000h
|
:004235A7 E89416FEFF Call 00404C40------------------->987654321=0x3ADE68B1
:004235AC 25FFFFFF7F and eax, 7FFFFFFF
:004235B1 8945F8 mov dword ptr [ebp-08], eax------>存于ebp-08=0x69FC8

于是拦截 bpm 69F8CC
bpm 69F8C8
CTRL+D一会儿又被拦下来。BD * 看到如下代码:

:00424C37 8B55FC mov edx, dword ptr [ebp-04]------------->被拦截下来。
:00424C3A 8915A4214500 mov dword ptr [004521A4], edx-------->存入地址为4521A4内存中
:00424C40 8B55F8 mov edx, dword ptr [ebp-08]
:00424C43 8915A8214500 mov dword ptr [004521A8], edx-------->存入地址为4521A8内存中

总算是捉到你了!!!害得俺20:30还没有得吃晚饭。其实喝了一肚子的水。
退出WINHEX程序
设断点;bpm 4521A4
bpm 4521A8

:0043C340 A31C454500 mov dword ptr [0045451C], eax
:0043C345 8B879C000000 mov eax, dword ptr [edi+0000009C]-------->这里被拦下来!

EAX=0x75BCD15----CODE1

:0043C34B 03C0 add eax, eax
:0043C34D 8D0480 lea eax, dword ptr [eax+4*eax]
:0043C350 058A000000 add eax, 0000008A
:0043C355 3B87A0000000 cmp eax, dword ptr [edi+000000A0]
^^^^^^^^^^^^^^^^^^^^^^--------> [edi+000000A0]=0x3ADE68B1----CODE2
赶快把它记下来。0x4996035C =1234568028

:0043C35B 0F940505434500 setz byte ptr [00454305]------>如果相等的话,设为1。
:0043C362 8D8770010000 lea eax, dword ptr [edi+00000170]
:0043C368 50 push eax
:0043C369 E83A86FCFF Call 004049A8
:0043C36E A304454500 mov dword ptr [00454504], eax
:0043C373 803D1343450000 cmp byte ptr [00454313], 00
:0043C37A 740E je 0043C38A

赶紧去输入注册码。CODE1=123456789
CODE2=1234568028

MY GOD!!!!真的是和我过不去吗????居然注册失败,我倒,瘦弱的身躯再也不能支持这样的打

击了。呜呜呜呜呜呜。。。。。收工,不干了!(评语:丁丁虾有一颗脆弱的心)
(待续)

完成时间
2000.4.8 15:52


破解winhex v9.3(转载希望保持完整)-----下篇

级别:战国时期-----由于局势不稳定-------还是请前辈们指点一二
作者:丁丁虾 又名:DDXia [CCG]
目的:非常的天真无‘牙’------好象小虾米的牙真的看不见哦!:D(不以任何商业用途为目的)
赞助:WINICE.DAT----------非常非常的感谢看雪兄的礼品。看雪真得很乐于助人。

看一看上一回拦下来的代码:
:0043C340 A31C454500 mov dword ptr [0045451C], eax
:0043C345 8B879C000000 mov eax, dword ptr [edi+0000009C]-------->CODE1
:0043C34B 03C0 add eax, eax
:0043C34D 8D0480 lea eax, dword ptr [eax+4*eax]
:0043C350 058A000000 add eax, 0000008A
:0043C355 3B87A0000000 cmp eax, dword ptr [edi+000000A0]-------->CODE2
:0043C35B 0F940505434500 setz byte ptr [00454305]------>如果相等的话,设为1。
:0043C362 8D8770010000 lea eax, dword ptr [edi+00000170]
:0043C368 50 push eax
:0043C369 E83A86FCFF Call 004049A8
:0043C36E A304454500 mov dword ptr [00454504], eax
:0043C373 803D1343450000 cmp byte ptr [00454313], 00
:0043C37A 740E je 0043C38A
用BPM 454305 整个程序运行都没有用到。一定是作者有意设下的陷阱。

大家一定猜到了是:::有另一处地方还存着CODE1和CODE2。
设断点;bpm 4521A4
bpm 4521A8
拦到了另一处代码:
:00425689 8B45FC mov eax, dword ptr [ebp-04]
:0042568C A3E0214500 mov dword ptr [004521E0], eax
:00425691 8B45F8 mov eax, dword ptr [ebp-08]
:00425694 A3E4214500 mov dword ptr [004521E4], eax

于是退出WINHEX程序
设断点;bpm 4521E0
bpm 4521E4

功夫不费有心人,拦截到如下代码:
:0044CFD7 A1E0214500 mov eax, dword ptr [004521E0]------->取CODE1
:0044CFDC E8FF0FFEFF call 0042DFE0------------------------------->计算出CODE2
:0044CFE1 3B05E4214500 cmp eax, dword ptr [004521E4]-------->与输入的CODE2比较。
:0044CFE7 751E jne 0044D007

CODE1=123456789算出的CODE2=0xFFFFFFFF=4294967295
还是没有注册成功。为什么呢????
继续跟踪发现如下代码:

:0043C7F7 8D87E0000000 lea eax, dword ptr [edi+000000E0]------------->取CODE1
:0043C7FD 2B05BC434500 sub eax, dword ptr [004543BC]
:0043C803 8B00 mov eax, dword ptr [eax]
:0043C805 A3BC434500 mov dword ptr [004543BC], eax

vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
:0043C80A 813DBC43450038900D00 cmp dword ptr [004543BC], 000D9038 ------>0xD9038=888888
:0043C814 7F21 jg 0043C837
:0043C816 813DBC43450035820000 cmp dword ptr [004543BC], 00008235-------->0x8235=33333
:0043C820 7C15 jl 0043C837
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
以上四句是判断CODE1是否在 888888和33333之中。是对CODE1的限制。
:0043C822 A1BC434500 mov eax, dword ptr [004543BC]
:0043C827 B9E8030000 mov ecx, 000003E8
:0043C82C 99 cdq
:0043C82D F7F9 idiv ecx
:0043C82F 81FA47020000 cmp edx, 00000247
:0043C835 7507 jne 0043C83E
:0043C837 C6052443450000 mov byte ptr [00454324], 00----------->设置标志位

实际上CODE1用888888;844444;800000:755555:653421;500000;还是注册不了!看来还是有其他的判断程序,有兴趣的可以继续跟踪。
于是用了一个CODE1=321321
拦截:0044CFE1 3B05E4214500 cmp eax, dword ptr [004521E4]
得到:CODE2=0x9F2DC=621996

完成时间
2000.4.8 16:52