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沒怎麼用,不知道是否改徹底了。)