转。如果破解winiso5.3

来源:互联网 发布:小广告制作软件 编辑:程序博客网 时间:2024/06/06 06:46
qduwg
2005-12-23, 13:45:56
题 目: WinISO V5.3 另类破解的成败得失 (电脑报合订本2003光盘)
工 具: Softice4.05, Fi, UltarEdit, W32Dasm,Prodump.
软件公司: http://www.winiso.com
软件授权:共享,根据附带文件称注册费US$30.
软件大小:1.268MB
软件介绍:
WinISO是一个CD-ROM映像文件格式转换工具,并且可以直接编辑光盘映像文件!它可以处理几乎所有CD-ROM映像文件,包括ISO和BIN。通过WinISO,你可以在映像文件内部添加、删除、重命名、提取文件。
破解目的:
去掉压缩和解压缩文件大小的限制和2个NAG窗口. 当压缩超过100MB的文件时提示出错,解压文件大于3MB时出现错误. 分别出现一个错误提示框. 据说注册码计算比较复杂,我就只好采取“下策”了。通过跟踪可以锻炼你的观察能力,为破解复杂算法的注册码打下基础。我希望以后能够在功力大长后找出注册码来,甚至注册机,那是最高境界!
适合读者: 菜鸟
难 度: 中偏下
爆 破 手: QduWg [俺也想早日加入[FCG]或者[CCG]组织,怎么加入?:)]


首先本文受到了Zest的WinISO V4.0破解短文启发,感谢他的文章。但他的文章没有讲到如何去掉NAG窗口,可能软件版本不同的缘故吧。我结合自己的实践,写了这个破解教程,希望能够对菜鸟有些启发. 错误之处在所难免(菜鸟水平,你还能够期望多高??*_^). 全当抛“砖”了!你最好砸些"玉"什么的过来!! 转入正题!

我手头收藏了不少电脑报合订本的光盘,里面的共享软件巨多, 只是让你尝个鲜,想用正版??对不起,请交费注册. 今天刚好看了一篇类似的教程,立即想实验一把,我没有WINISO V4.0,就只好拿WINISO V5.3开刀.

先用FI透视一下,原来用UPX v1.2加壳了,故"兵来将挡,水来土掩", 拿出Prodump去壳之,我比较幸运,一下子就去掉了壳。 方法很简单啦: 启动Prodump后,单击Unpack 按钮, 选择目标软件, 一会儿提示你重新保存,随便给个名字即可.这样你就得到了去壳的WinISO了. 如果不去壳,你用W32dasm打开,就发现程序地址跟你在SOFTICE内看到的完全不同啦. 下面是第二环节了:

用W32dasm打开去壳后的软件, 这个时候就是软件的真实面貌了。运行软件,首先你可以压缩一个大于100MB的文档,比如VCD文件. 然后保存,WinISO给你一个错误提示对话框,此时,你Ctrl+D打开Softice, 用hwnd命令查看该对话框句柄(下面我用xxxx表示,你替换成你找到的句柄即可), 注意查看时一定注意有Dialog字样的才是. 然后用如下命令下断点: bmsg xxxx wm_destroy, F5退出SoftICE, 点击对话框的"确定"按钮. 立即被断下, 按12下F12来到WinISO领空, 然后往上翻页,你会发现如下代码:
* Referenced by a CALL at Addresses:
|:004019F7 , :00404D5E , :00408939
|
:00411658 55 push ebp
:00411659 8BEC mov ebp, esp
:0041165B 83C48C add esp, FFFFFF8C
:0041165E B824C94C00 mov eax, 004CC924
:00411663 53 push ebx
:00411664 56 push esi
:00411665 57 push edi
.
.略去部分代码,F10跟踪略去的代码
.
:00411687 7573 jne 004116FC
:00411689 8B0D88134E00 mov ecx, dword ptr [004E1388]
:0041168F 8B01 mov eax, dword ptr [ecx]
:00411691 81B82406000000004006 cmp dword ptr [eax+00000624], 06400000 //此处进行文件大小比较,大于100MB玩完.
:0041169B 765F jbe 004116FC //此处改成jmp则活
:0041169D 6A10 push 00000010
:0041169F 8B1588134E00 mov edx, dword ptr [004E1388]
.
.略去部分代码,F10跟踪略去的代码
.
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004116CD(C)
|
:004116D3 B846BE4C00 mov eax, 004CBE46

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004116D1(U)
|
:004116D8 50 push eax
:004116D9 8B1588134E00 mov edx, dword ptr [004E1388]
:004116DF 8B02 mov eax, dword ptr [edx]
:004116E1 E8F27F0600 call 004796D8
:004116E6 50 push eax
:004116E7 E826310B00 call 004C4812 //此处出现错误提示对话框
:004116EC 33C0 xor eax, eax
:004116EE 8B16 mov edx, dword ptr [esi]
:004116F0 64891500000000 mov dword ptr fs:[00000000], edx
:004116F7 E929030000 jmp 00411A25
--------------------------------------------------------------------------
如此照搬, 把一个大于30MB的ISO文件解压缩, 出现错误提示对话框, 然后打开SoftICE, 查看对话框句柄, 下断点 bmsg xxxx wm_destroy, F5退出SoftICE, 点击对话框的"确定"按钮. 立即被断下, 按12下F12来到WinISO领空, 然后往上翻页,你会发现如下代码:
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00410332(C)
|
:00410348 B8EC1C4E00 mov eax, 004E1CEC
:0041034D 80782700 cmp byte ptr [eax+27], 00
:00410351 0F95C2 setne dl
:00410354 83E201 and edx, 00000001
:00410357 84D2 test dl, dl
:00410359 7568 jne 004103C3
:0041035B 81FF00003000 cmp edi, 00300000 //此处进行文件大小比较,大于3MB玩完.
:00410361 7660 jbe 004103C3 //改成jmp则活
:00410363 6A10 push 00000010
:00410365 8B0D88134E00 mov ecx, dword ptr [004E1388]
:0041036B 8B31 mov esi, dword ptr [ecx]
.
.略去部分代码,F10跟踪略去的代码
.
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00410393(C)
|
:00410399 B8C8BD4C00 mov eax, 004CBDC8

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00410397(U)
|
:0041039E 50 push eax
:0041039F 8B1588134E00 mov edx, dword ptr [004E1388]
:004103A5 8B02 mov eax, dword ptr [edx]
:004103A7 E82C930600 call 004796D8
:004103AC 50 push eax
:004103AD E860440B00 call 004C4812 //此处出现错误提示对话框
:004103B2 33C0 xor eax, eax
:004103B4 8B55D4 mov edx, dword ptr [ebp-2C]
:004103B7 64891500000000 mov dword ptr fs:[00000000], edx
:004103BE E95D010000 jmp 00410520
-----------------------------------------------------------------------------
小结:
:0041169B 765F 改为: eb 5f
:00410361 7660 改为: eb 60
现在胜利就属于你啦!!

不过这个软件运行的时候,还出现2个NAG窗口,比较烦人, 下面把他们干掉. 还是用上述方法进行设断. 按12次F12来到下面代码处:

:004012C0 55 push ebp
:004012C1 8BEC mov ebp, esp
:004012C3 83C4D4 add esp, FFFFFFD4
:004012C6 B8C4554C00 mov eax, 004C55C4
:004012CB 53 push ebx
:004012CC 56 push esi
:004012CD 57 push edi
:004012CE E891460B00 call 004B5964
:004012D3 E8022E0C00 call 004C40DA
:004012D8 3DA8030000 cmp eax, 000003A8
:004012DD 7513 jne 004012F2 //把jne 改为je ,就是75->74即可跳过下面的那个CALL。
:004012DF 6A40 push 00000040

* Possible StringData Ref from Data Obj ->"WinISO"
|
:004012E1 6885554C00 push 004C5585

* Possible StringData Ref from Data Obj ->"WinISO"
|
:004012E6 68DC544C00 push 004C54DC
:004012EB 6A00 push 00000000
:004012ED E820350C00 call 004C4812 //出现第一个NAG窗口
------------------------------------------------------------------------------------
还有第二个NAG窗口需要拿掉。通过前面的跟踪发现,第二个NAG在如下代码处出现。

* Possible StringData Ref from Data Obj ->"WinISO"
|
:00401325 BA8C554C00 mov edx, 004C558C
:0040132A 8D45F8 lea eax, dword ptr [ebp-08]
:0040132D E8CA220C00 call 004C35FC
:00401332 FF45F0 inc [ebp-10]
:00401335 8B10 mov edx, dword ptr [eax]
:00401337 8B0DB0134E00 mov ecx, dword ptr [004E13B0]
:0040133D 8B01 mov eax, dword ptr [ecx]
:0040133F E8D4740600 call 00468818
:00401344 FF4DF0 dec [ebp-10]
:00401347 8D45F8 lea eax, dword ptr [ebp-08]
:0040134A BA02000000 mov edx, 00000002
:0040134F E84C240C00 call 004C37A0
:00401354 8B0DB0134E00 mov ecx, dword ptr [004E13B0]
:0040135A 8B01 mov eax, dword ptr [ecx]
:0040135C 8B0D88134E00 mov ecx, dword ptr [004E1388]
:00401362 8B15F4964C00 mov edx, dword ptr [004C96F4]
:00401368 E8BF780600 call 00468C2C ---------------------//出现第二个NAG窗口,需要按F8跟入哦,我开始却忽略了这个地方,结果跑了许多冤枉路,我以为里面没有道道呢。结果呢???猎物就藏在这里的。该CALL下面调用了多次
:0040136D A1B0134E00 mov eax, dword ptr [004E13B0]
:00401372 8B00 mov eax, dword ptr [eax]
:00401374 8B0D8C134E00 mov ecx, dword ptr [004E138C]
:0040137A 8B15E4B44C00 mov edx, dword ptr [004CB4E4]
:00401380 E8A7780600 call 00468C2C
:00401385 A1B0134E00 mov eax, dword ptr [004E13B0]
:0040138A 8B00 mov eax, dword ptr [eax]
:0040138C 8B0D9C134E00 mov ecx, dword ptr [004E139C]
:00401392 8B151CE14C00 mov edx, dword ptr [004CE11C]
:00401398 E88F780600 call 00468C2C

首先尝试把:00401368 处的CALL 改为90 90 90 90 90(好多软件按照这个办法改也是出现错误), 结果出现地址引用异常,所以此路不通啊! 想想其他办法.我突然灵机一动,因为启动程序的时候第一个NAG已经不出现了,直接出现第二个NAG, 这样就可以通过下断点bpx showwindow, 这可是我尝试了好多函数才找到的. 按F12多次直到来到主程序处,然后F10跟踪即可了。

:00465DAD 33C0 xor eax, eax
:00465DAF E8E0A0FFFF call 0045FE94
:00465DB4 8945F4 mov dword ptr [ebp-0C], eax
:00465DB7 33D2 xor edx, edx
:00465DB9 55 push ebp
:00465DBA 68285F4600 push 00465F28
:00465DBF 64FF32 push dword ptr fs:[edx]
:00465DC2 648922 mov dword ptr fs:[edx], esp
:00465DC5 8B45FC mov eax, dword ptr [ebp-04]
:00465DC8 E83BFEFFFF call 00465C08 ---------------------//此处出现NAG窗口的框架,没有内容
:00465DCD 33D2 xor edx, edx
:00465DCF 55 push ebp
:00465DD0 68875E4600 push 00465E87
.
.略去部分代码,F10跟踪略去的代码
.
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00465E3D(C)
|
:00465DFD 8B03 mov eax, dword ptr [ebx]
:00465DFF E8142D0000 call 00468B18
:00465E04 8B03 mov eax, dword ptr [ebx]
:00465E06 80B88C00000000 cmp byte ptr [eax+0000008C], 00
:00465E0D 740F je 00465E1E
:00465E0F 8B45FC mov eax, dword ptr [ebp-04]
:00465E12 C7803402000002000000 mov dword ptr [ebx+00000234], 00000002
:00465E1C EB14 jmp 00465E32

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00465E0D(C)
|
:00465E1E 8B45FC mov eax, dword ptr [ebp-04]
:00465E21 83B83402000000 cmp dword ptr [eax+00000234], 00000000
:00465E28 7408 je 00465E32
:00465E2A 8B45FC mov eax, dword ptr [ebp-04]
:00465E2D E826FDFFFF call 00465B58

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00465E1C(U), :00465E28(C)
|
:00465E32 8B45FC mov eax, dword ptr [ebp-04]
:00465E35 8B8034020000 mov eax, dword ptr [eax+00000234]
:00465E3B 85C0 test eax, eax
:00465E3D 74BE je 00465DFD ---------------与上面的:00465DFD构成循环,向前面的那个空NAG窗口内填充内容的。所以,你可以想到,把je 改成jne, 即74->75.

可是重新启动程序发现解压缩时的对话框也是一闪而过,失去焦点.看来这里不能够轻易改动的!!!需要想其他办法. :革命尚未成功,同志仍需努力啊,继续战斗。。。。

--------------------------------------
既然从前面得知在401368处的CALL出现错误提示,通过设置bpx xxxx wm_destroy断点,F8跟入第一个468c2c调用。你可以看到一大长串代码比较有规律,最后一个地方是关键地方,请看如下代码:

从地址468c5d call 4015a8 处跟入:

:004015A8 55 push ebp
:004015A9 8BEC mov ebp, esp
:004015AB 83C4B0 add esp, FFFFFFB0

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00401598(C)
|
:004015AE 84D2 test dl, dl
:004015B0 53 push ebx
:004015B1 56 push esi
:004015B2 8855F8 mov byte ptr [ebp-08], dl
:004015B5 7E05 jle 004015BC
:004015B7 E890290C00 call 004C3F4C

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004015B5(C)
|
:004015BC 894DD0 mov dword ptr [ebp-30], ecx
:004015BF 8855D7 mov byte ptr [ebp-29], dl
:004015C2 8945FC mov dword ptr [ebp-04], eax
:004015C5 8D5DFC lea ebx, dword ptr [ebp-04]
:004015C8 8D75D8 lea esi, dword ptr [ebp-28]
:004015CB B8A0724C00 mov eax, 004C72A0
:004015D0 E88F430B00 call 004B5964
:004015D5 66C746100800 mov [esi+10], 0008
:004015DB 8B4DD0 mov ecx, dword ptr [ebp-30]

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00401577(C)
|
:004015DE 33D2 xor edx, edx
.
.略去部分代码,F10跟踪略去的代码
.
:0040184F C6805406000001 mov byte ptr [eax+00000654], 01
:00401856 8B16 mov edx, dword ptr [esi]
:00401858 64891500000000 mov dword ptr fs:[00000000], edx
:0040185F 8B03 mov eax, dword ptr [ebx]
:00401861 807DD700 cmp byte ptr [ebp-29], 00
:00401865 7405 je 0040186C -----------//此处就是关键,必须跳走,否则碰壁,74->75即可
:00401867 E8ED260C00 call 004C3F59 --------- //此行就是出现第二个NAG的地方,它竟然隐藏在这里,让我找 的好辛苦。终究逃不出我们的法眼!!

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00401865(C)
|
:0040186C 5E pop esi
:0040186D 5B pop ebx
:0040186E 8BE5 mov esp, ebp
:00401870 5D pop ebp
:00401871 C3 ret

----------------------------------------------------------------------------------------
总结:用W32DASM打开去壳后的软件,对照里面给出的文件VA,用UltraEdit修改对应位置的相应字节即可。

后记:
现在终于可以喘口气了,用了4个小时边写边破解,终于有了此文。关键问题是我在文章里面对成功和失败的地方进行了对比,可以给菜鸟一点启发。发现走不下去的时候,需要转换脑筋思路哦!我就是碰了好几次壁才折回来的。希望大家不要走弯路。当然适当走点还是有好处的啊!
这样修改完毕,重新启动程序,哇塞!第一个NAG窗口不出现,第二个NAG窗口也没有了声息,所以不必象以前那样按"确定"按钮了.哈哈!可以收工啦!
我到现在为止才学习破解正好2个月,在这段时间,学习有苦也有乐,我在电脑前一坐,基本不挪窝,当写出点还算有点参考价值的东西的时候,感到无比快乐。我自己感到也离破解殿堂越来越近了。希望早日步入高手行列!那是我们菜鸟们的期盼!!:)
写教程的确比较辛苦,但是看到我写的东西能够引起许多大侠的共鸣,能够对菜鸟的进步起那么一点点作用,我心里就生出无限动力,驱使我写完一篇还想下写一篇。

现在是晚上11点30,我该睡觉了。明天还有更有趣的破解任务等着我呢!!:)


---------------
自由撰稿:QduWg
完成日期:2005年12月23日
qduwg@163.com 欢迎您提出宝贵指导!
原创粉丝点击