首页
社区
课程
招聘
WinISO V5.3 另类破解的成败得失[原创]
发表于: 2005-12-23 13:45 8367

WinISO V5.3 另类破解的成败得失[原创]

qduwg 活跃值
35
2005-12-23 13:45
8367
题    目: 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    欢迎您提出宝贵指导!

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (18)
雪    币: 44229
活跃值: (19960)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
2
最初由 qduwg 发布
我到现在为止才学习破解正好2个月,在这段时间,学习有苦也有乐,我在电脑前一坐,基本不挪窝


中毒不浅  ;)
下一篇希望看到你的算法,如是简单爆破不能评精华。
2005-12-23 13:56
0
雪    币: 206
活跃值: (32)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
比较适合我等学习。
2005-12-23 14:16
0
雪    币: 475
活跃值: (1130)
能力值: ( LV9,RANK:1410 )
在线值:
发帖
回帖
粉丝
4
感谢KANXUE的指点。我会努力的!我希望不久的将来成为一名老鸟,也写几个注册机出来。为我加油吧!!:)

我的目的不是为了创精华贴,为了菜鸟,即使不是精华贴也不要紧的。只要对别人有点启发就行了。

我相信以后我会找出软件注册码的。
2005-12-23 15:05
0
雪    币: 254
活跃值: (126)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
5
好象某个日期或时间会触发一个检测暗桩的
2005-12-23 15:29
0
雪    币: 313
活跃值: (250)
能力值: ( LV9,RANK:650 )
在线值:
发帖
回帖
粉丝
6
学习一下,好久没学习了。
2005-12-23 18:57
0
雪    币: 41
活跃值: (55)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
nrj
7
学习呀 对我很有用  谢谢啦  辛苦啦  加油 为我等菜鸟多写点
2005-12-23 19:04
0
雪    币: 427
活跃值: (412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
自己再仔细看看容量限制代码,多动脑。你这个爆破不是很好的爆破。
2005-12-23 19:12
0
雪    币: 11705
活跃值: (970)
能力值: ( LV12,RANK:779 )
在线值:
发帖
回帖
粉丝
9
爆破的话,最好是爆破注册标志。从全局入手,找到算法的返回值。
让他认为你是注册的。
依次爆破单个限制不是很好的,难免疏漏。
2005-12-23 20:03
0
雪    币: 243
活跃值: (190)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
10
好像在哪已经看到过注册机了,呵呵
2005-12-23 21:25
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
新人,难得
2005-12-23 23:23
0
雪    币: 414
活跃值: (531)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
12
楼主的精神着实可嘉,向你学习.
但:
  WinISO 5.3这么爆是解决不了多大的问题的,里面还有桩了.
但做为实践文章,我觉得足够了,如果那照片是楼主本人的话,
电脑玩久了,你的镜片度数怕要翻翻了.

  再次感谢楼主的奉献.
2005-12-24 06:48
0
雪    币: 257
活跃值: (105)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
13
和楼上的同感,健康很重要!
2005-12-24 09:00
0
雪    币: 427
活跃值: (412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
最初由 readyu 发布
爆破的话,最好是爆破注册标志。从全局入手,找到算法的返回值。
让他认为你是注册的。
依次爆破单个限制不是很好的,难免疏漏。


很多软件对这个方法无效的。3D组号大师,VCDCut Pro等等很多。
2005-12-24 11:00
0
雪    币: 475
活跃值: (1130)
能力值: ( LV9,RANK:1410 )
在线值:
发帖
回帖
粉丝
15
to:鸡蛋壳等朋友:

欢迎鸡蛋壳给我点启发和指点。

to:nig:  非常荣幸的告诉你,照片是我本人的。另外我的眼镜片度数自从大学毕业以来基本没有太大增长,一般在350-400度。我已经毕业10年了,而我看到许多朋友镜片更换倒是非常频繁的。不过,在电脑前呆的时间长了,我觉得颈椎不好,另外就是疲劳。因为辐射太厉害了。希望各位大侠注意身体啦! 我知道我的爆破不是太PERFECT,只是给菜鸟一点思路,从菜鸟角度看问题啦。我希望以后能够精益求精!

另外,即使有了注册机,也是对那些不会破解的朋友用的,我们还是自己找出破解方法来比较好。你说那。
2005-12-24 22:21
0
雪    币: 2506
活跃值: (1000)
能力值: (RANK:990 )
在线值:
发帖
回帖
粉丝
16
看老兄这个年纪还如此热衷于Crack,我也要帮你顶一下!我记得好像WinISO是TRW的作者liutaotao搞的吧?当年也和那个磁盘工具vopt98一起算是难破的软件之一。
2005-12-24 23:56
0
雪    币: 165
活跃值: (46)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
引用原文
略去部分代码,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则活
如果 004116FC 是正确跳转地址,看看前面满足什么条件会先跳
2005-12-25 13:50
0
雪    币: 165
活跃值: (46)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
引用原文
:0041034D 80782700                    cmp byte ptr [eax+27], 00
:00410351 0F95C2                      setne dl
这里应该是 比较标志
2005-12-25 13:52
0
雪    币: 475
活跃值: (1130)
能力值: ( LV9,RANK:1410 )
在线值:
发帖
回帖
粉丝
19
非常感谢您的指点!QDUWG
2005-12-25 21:50
0
游客
登录 | 注册 方可回帖
返回
//