winrar2.71的破解和對暴破的一點想法 (4千字)

看雪資料發表於2001-04-16

軟體名稱:winrar 2.71
軟體說明: 著名的windows平臺壓縮工具
軟體大小:589 KB
下載地址:ftp://zdftp.zdnet.com/pub/private/sWlIB/utilities/file_utilities/winrar.exe

我個人認為winrar比winzip好用,開啟一個壓縮包時,裡面的目錄結構一目瞭然;而且選extract to進行解壓時,路徑預設為壓縮包的檔名,所以一般不用自己輸入路徑。保護方法為keyfile保護。2.71版有40天的時間限制,主窗體標題中有(evaluation copy)字樣,about框中有40 days trial copy的字樣,老是出現註冊對話方塊要你註冊。該版本的保護非常弱,破解非常簡單,在此給出一種方法(肯定有更多的破解方法,但我的目的是能用就行,懶得想太多)。


用w32dasm調入winrar.exe,用search選單中的find text項找evaluation copy,只找到一處,就是下面這一段

:0041BA0D E8820B0400              call 0045C594
:0041BA12 83C40C                  add esp, 0000000C
:0041BA15 803DCC6C460000          cmp byte ptr [00466CCC], 00      ;注意
:0041BA1C 752E                    jne 0041BA4C

* Possible Reference to String Resource ID=00873: "evaluation copy"
                                  |
:0041BA1E 6869030000              push 00000369
:0041BA23 E894C6FEFF              call 004080BC
:0041BA28 50                      push eax

關閉w32dasm,開啟trw2000,裝入winrar.exe,下bpx 41ba15,g,trw很快彈出。看看[466ccc]的值是多少...答對了,是0。按F10到下一句,讓我們輸入rfl z跳過下面對SR id=873(十進位制的369): "evaluation copy"的引用,然後g全速執行。程式介面出來了,怎麼樣,標題中的evaluation copy字樣不見了吧。但about框中還是有40 days trial copy,註冊框也還是經常跳出來。不要著急,回想剛才的程式,憑經驗幾乎可以斷定[466ccc]這個全域性變數中放的就是註冊標誌,0代表沒有註冊,非零代表註冊。現在用trw重新裝入winrar,bc清中斷,然後下bpx 167:466ccc w,看看哪句話修改了[466ccc]的值,g吧。trw彈出時可以看到

426353 e8905d0100    call 43c0e8
426e58 a2cc6c4600    mov [466ccc],al
426e5d 53            push ebx

現在al=0,[466ccc]中已經是0了,把它改為1(下e 466ccc,敲1)。g,trw第二次彈出

41af44 e89f110200    call 43c0e8
41af49 a2cc6c4600    mov [466ccc],al

[466ccc]中又是0,再把它改回1。g,程式介面出來,怎麼樣,天下太平了吧,about框中的40 day trial copy也變成了register to。
這兩段程式都呼叫了子程式43c0e8,然後把al賦給466ccc。al怎麼變成0的呢?進去看看吧。用trw重新裝入winrar,bc清中斷,然後下bpx 167:43c0e8,g。trw彈出後按F10往下走,走不多遠就看見:

43c11c e8ab030000    call 43c4cc
43c121 84c0          test al,al
43c123 7511          jnz 43c136        ; no jump
43c125 33c0          xor eax,eax        ; eax清零了
43c127 8b55c8        mov edx,[ebp-38]
43c12a 64891500000000 mov [fs:00],edx
43c131 e950030000    jmp 43c486        ; 跳這麼遠,估計沒戲了吧。

跟到43c486,果然pop幾下就返回了。這下該怎麼改就清楚了,只需要改兩個位元組,把43c125的33c0換成b001就行了(mov al,1)。


對於暴破的信心和偏愛來自這樣一個假定:9x%的程式都是透過比較來判斷使用者的合法性的,可以透過改變比較轉移的方向或目的地址來暴破。另外有y%的程式是透過散轉的方式確定轉移的正確地址,未必不能破解。

下面是我個人對於暴破的一點經驗:

1.首先使用程式,看看未註冊的程式有哪些表現,如標題、about框中的未註冊字樣若有未註冊字樣,就用w32dasm找一找,若找到的語句上面有條件比較可以跳過未註冊字樣,那離成功就不遠了。就像上面的例子。

2.若第一步不行,就看看彈出來的提示框、註冊框。如果你能看出這個框是個messagebox,可以下bpx messageboxa。若是一個(非)模態對話方塊,可以下bpx createdialog,bpx dialogbox等等。不行就下bpx lockmytask,比較穩。然後關閉註冊框,一般trw都會彈出(delphi編的程式除外),按F12直到回到程式的天空,看看是那句話彈出的註冊框(一般是messageboxa,或),能不能跳過。若你能找到條件轉移語句能跳過註冊框,那就差不多了。

3.若還是中斷不了,還有一招笨辦法,就是用trw裝入程式,按F10一步一步從頭跟起(當然加殼的要先脫殼)。若帶過一個call後彈除了註冊框,那就記下位置,下次用F8進入call中再來,如disketer 1.0。經驗多了以後就會知道什麼編的程式大體是什麼結構,怎樣做可以提高跟蹤效率...

4.不少程式是透過讀取系統日期來判斷是否過期的,所以下bpx getsystemtime 或bpx getlocaltime,也有可能找到比較的關鍵點。如Snagit 5.1.0。

5.若程式是用序列號註冊的,那就可以與註冊號破解相結合。看看程式是怎樣判斷你輸入的註冊號的合法性。能找到序列號或算出序列號當然好了,找不到也沒關係。程式設計師都是很懶的(噓!不要讓他們聽到),這段程式通常也會放在程式的開頭,判斷使用者的合法性,沒註冊的就彈出一個註冊框給你看。所以這也經常幫助我們找到關鍵點,去掉開始的註冊框,甚至把程式變成註冊版。我就是這樣破解the bat 1.51的。

6.還有一招,就是比較一下程式註冊前和註冊後,在某些關鍵點的執行有何差別,是跳呢還是不跳。條件是你有一個正確的註冊碼(廢話,有了註冊碼還用破解嗎?否,對於一個狂熱的暴破分子來說,最重要的不是註冊,而是破解)。當然也可以比較程式過期前後的差別。BugTrapper 3.0.97我就是這樣破的,還有Ulead Photo Impact 6.0 trial。不過要小心,有不少程式一旦註冊或過期,就很難恢復到原來的狀態了。所以一定要看好你的登錄檔,備份好你的系統,要是有兩臺計算機供你使用,那就太幸福了。

寫了這麼多,好累,比破解還累。

相關文章