WinRAR 2.71的初級破解 (4千字)

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

WinRAR 2.71的初級破解

前兩天裝上WinRAR 2.71,為的是解開下載的Revirgin。發現只能用40天,那個NagDialog始終在提醒我註冊。

此段時間一直在向hying兄學習脫殼的技術,看看以前破解WinRAR教程似乎不太難,想著來練練吧。

Dasm反彙編了一把,發現和以前教程裡寫的不同,暈倒......醒來過後只好自己開刀了。

首先發現[466CCC]這個地方很可疑,於是用trw2000下bpm 466CCC試驗了一下,看到只要[466CCC]=01,
啟動後WinRAR就沒有了evaluation copy字樣。看看About框,也有了Registered to字樣。
(當然,只要用Add Files to archive就會發現NagDialog由彈了出來,然後又成了evaluation copy了。)

既然如此,就看看何時[466CCC]被程式變成了00。檢查到了幾處,還好不多。

經過分析,發現43C0E8往下的這個Call很有問題,它在檢查rarreg.key檔案,看來首先對準這裡沒錯。

檢查呼叫它的三個Call,以下是其中一個呼叫:
* Reference To: USER32.FlashWindow, Ord:0000h
|
:00418373 E81F9B0400              Call 00461E97
:00418378 6A01                    push 00000001
:0041837A E8693D0200              call 0043C0E8
:0041837F A2CC6C4600              mov byte ptr [00466CCC], al <------------ al=00
:00418384 6A00                    push 00000000
:00418386 8B0D24B94600            mov ecx, dword ptr [0046B924]
:0041838C 51                      push ecx

那麼如何將al變成01呢?從43C0E8往下走可疑看到

:0043C10C BE25814600              mov esi, 00468125
:0043C111 A5                      movsd
:0043C112 A5                      movsd
:0043C113 A4                      movsb
:0043C114 5F                      pop edi
:0043C115 8D95BCFBFFFF            lea edx, dword ptr [ebp+FFFFFBBC]
:0043C11B 52                      push edx
:0043C11C E8AB030000              call 0043C4CC <--------- 檢查rarreg.key是否存在
:0043C121 84C0                    test al, al
:0043C123 7511                    jne 0043C136  <--------- 有的話就跳了
:0043C125 33C0                    xor eax, eax
:0043C127 8B55C8                  mov edx, dword ptr [ebp-38]
:0043C12A 64891500000000          mov dword ptr fs:[00000000], edx
:0043C131 E950030000              jmp 0043C486  <---------- 這裡直接就走到函式結束去了。

好吧好吧,既然我從來沒有試過SMC,這次來這裡試試看吧。
(大蝦可不要笑話哦,焉用牛刀哉! 俺學習嘛。)

首先在檔案的offset 0xF52找到了一堆的00(應該在哪裡找?大蝦可否指點?),
趕緊寫個patchcode在這裡(詳細請看toye兄主頁的SMC教程),在TRW2000裡找到位置為401952。
我的想法是這樣的,將43C131處先跳向401952,在這裡mov eax, 01, 然後再跳回43C486,就可以了。

說幹就幹,立刻把43C131處的程式碼改為jmp 00401952,(E91C58FCFF)
以下就是在401952下彙編的程式碼
mov eax, 01 (B801000000)  可能改為mov al,01就可以了,不過地方寬裕嘛......
jmp 43C486 (E923AB0300)
注意記下機械碼哦。

當然,只改這裡是不行的,看看跳NagDialog的地方吧:

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004011B2(C)
|
:00401506 833DC0CC460000          cmp dword ptr [0046CCC0], 00000000
:0040150D 7546                    jne 00401555
:0040150F 803D7430460000          cmp byte ptr [00463074], 00  <----- 這裡乾脆改為mov byte ptr [00463074], 01
:00401516 753D                    jne 00401555               
:00401518 803DCC6C460000          cmp byte ptr [00466CCC], 00
:0040151F 7534                    jne 00401555
:00401521 A1A8F54600              mov eax, dword ptr [0046F5A8]
:00401526 83F828                  cmp eax, 00000028  <-------- 40天
:00401529 7F04                    jg 0040152F <------ 這裡顯然不能讓跳去。
:0040152B 85C0                    test eax, eax
:0040152D 7D26                    jge 00401555

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00401529(C)
|
:0040152F C6057430460001          mov byte ptr [00463074], 01
:00401536 6A00                    push 00000000
:00401538 68A8BA4000              push 0040BAA8
:0040153D 8B1524B94600            mov edx, dword ptr [0046B924]
:00401543 52                      push edx

* Possible StringData Ref from Data Obj ->"REMINDER"    <--------- NagDialog。
                                  |
:00401544 68E73B4600              push 00463BE7
:00401549 8B0D20CC4600            mov ecx, dword ptr [0046CC20]
:0040154F 51                      push ecx
======================================================================================
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040EE78(C)
|
:0040EEBC 803DCC6C460000          cmp byte ptr [00466CCC], 00
:0040EEC3 7410                    je 0040EED5
:0040EEC5 803D9096470000          cmp byte ptr [00479690], 00
:0040EECC 7507                    jne 0040EED5
:0040EECE C605CC6C460000          mov byte ptr [00466CCC], 00  <------ 怎麼能讓它放進00呢,改成mov byte ptr [00466CCC], 01

不足的是About對話方塊裡沒有俺的名字。(當然,對WinRAR沒怎麼用,不知道是否改徹底了。)

相關文章