轉。如果破解winiso5.3

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日
[email protected] 歡迎您提出寶貴指導!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章