for new-newbies(脫殼+patch),學破解不足三天者請進,高手如果不怕浪費時間,也請指點一下。 (8千字)

看雪資料發表於2001-01-05

雖然網上現在到處找得到offline explorer 1.4的破解了,可是一個多月前我還辛辛苦苦地到處找破解(那時還有一次可憐兮兮地在論壇1212了一回,問了一句“OFFLINE EXPLORER好像很難破”之類的話,好不容易找到一個註冊碼,卻又是無用的),現在參照看雪教學幾篇文章破了幾個軟體之後,正好網上也沒找到關於它的教程,終於可以自己拿它來開刀了!同時也把這十餘天來學破解的一點經驗總結一下,可能有助於比我還要new的new-newbies。如果您是大、中級(大俠、大蝦、中俠、中蝦……)的那麼除非您有意指點一下,是無須浪費時間的了,因為我一定會很碌模。:-)      開工!
一 工具:1 國產精品:衝擊波和TRW2000 1.22,感謝兩位作者,(好像TRW2000不再更新了,不然怎麼主頁上有人問註冊的事卻沒人回答)。
        2 十六進位制(HEX)編輯器WINHEX(前幾天才從hying兄那兒學了一招,破之,馬上就派上用場了!)或HEXWORKSHOP等。以及W32DASM――靜態反彙編利器。
        3 看雪教學(有工具也得有課本啊!當字典用也行,這一編只是習題附不標準答案)。大家有什麼不明白的請查課本
        4 TARGET:OFFLINE EXPLORER 1.4317  OFFLINE EXPLORER PRO 1.4338

二 手動脫殼:我覺得新手學脫殼其實也沒什麼,對於一些簡單的殼(什麼是殼?看書去!不過也可以一句話來形容,就是把殼剝了,我們才可以對蛋白蛋黃為所欲為),有了我們們的國產精品,實在是so easy!何況現在要找一個沒加殼的實在不是一件容易的事(可不是所有的殼都這麼易脫的,只是我運氣好罷了,脫不了別怪我)。
        1 將衝擊波挎到OE目錄下,執行它,視窗中的數字就是蛋白之所在了,我這兒是00504C08。
        2 執行TRW,載入OE.EXE,LOAD,於是我們來到了TRW的視窗。
        3 bpx cs:504c08,因為這樣可樣設一個斷點,當程式執行時就會停在那兒(別笑,別罵我攏際蔽業娜肥橇飧齠家胂氳摹#┗爻擔G,再回車,你會發現你在XXX:00504c08處。
        4 MAKEPE AAA.EXE,那麼你將會在OE的目錄下生成一個AAA.EXE的檔案,這就是脫殼後的程式了,這就是蛋白蛋黃了,你會發現蛋白、蛋黃、比原先完全的一個還要大,原來是494K,現在成了1.40M了。是不是SO EASY!
   
二 開始PATCH OFFLINE EXPLORER 1.4317
        1 我們的物件是OFFLINE EXPLORER 1.4317,因為我覺得它比較有助於思考,比OFFLINE EXPLORER PRO 1.4338要麻煩一點。開啟TRW,CTRL+N,我們又來到WINDOWS視窗,跟平時輸註冊碼一樣,輸入自己的NAME,再隨便輸入一列數字,不要按OK。再按CTRL+N,回到TRW,bpx hmemcpy(這是WINDOWS的底層函式,不明白?沒關係,要明白的話,就去看課本),按一下F5,又來到了WINDOWS,按下OK,我們又到了TRW視窗,這時你可以看到視窗下面有KERNEL的字樣,這時我們不在程式中,鍵入bc *,清除我們上面設的斷點,pmoudle,你會發現視窗下面已經變成了OE!CODE等字樣了,也就是說,我們來到了程式中了!
        2 連續按F10,來到下面
016F:004CE0A1  MOV      EAX,[0050BD84]
016F:004CE0A6  MOV      EAX,[EAX]
016F:004CE0A8  CALL    004534B0  //SORRY視窗出現,按下確定
016F:004CE0AD  XOR      EAX,EAX    //又回到TRW
016F:004CE0AF  POP      EDX
        3 執行W32DASM,反彙編。(當然你也可樣在TRW中用U命令。)找到上面的語句,看如何跳過上面的SORRY視窗,運氣好的話,上面很容易找到一個比較,你跳過去後,就可以註冊了,不過我們的運氣不好。
:004CE0A8 E80354F8FF              call 004534B0

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004CDFD1(U), :004CDFE8(U)
|
:004CE0AD 33C0                    xor eax, eax //有兩處可以JMP過來,let's go!
讓我們往前看:
:004CDF66 E869490200              call 004F28D4//FORTH    //這個CALL可疑,F8進去看看
:004CDF6B 84C0                    test al, al            //THIRD這兒不能為0
:004CDF6D 747E                    je 004CDFED //SECOND這兒就可以跳過下面的JMP,我們可以試一試,在:004CDF6F A16CBB5000              mov eax, dword ptr [0050BB6C]  HEX編輯器下改機器碼為757E,即je
:004CDF74 8B00                    mov eax, dword ptr [eax]      改為jne,好像成功了,但是沒有,你:004CDF76 C6808806000001          mov byte ptr [eax+00000688], 01 執行程式,又成了NOT REGISTER
:004CDF7D A16CBB5000              mov eax, dword ptr [0050BB6C]  所以NEXT
:004CDF82 8B00                    mov eax, dword ptr [eax]
:004CDF84 058C060000              add eax, 0000068C
:004CDF89 8B55FC                  mov edx, dword ptr [ebp-04]
:004CDF8C E8E75EF3FF              call 00403E78
:004CDF91 A16CBB5000              mov eax, dword ptr [0050BB6C]
:004CDF96 8B00                    mov eax, dword ptr [eax]
:004CDF98 0590060000              add eax, 00000690
:004CDF9D 8B55F8                  mov edx, dword ptr [ebp-08]
:004CDFA0 E8D35EF3FF              call 00403E78
:004CDFA5 8BB310030000            mov esi, dword ptr [ebx+00000310]
:004CDFAB 807E4700                cmp byte ptr [esi+47], 00
:004CDFAF 7425                    je 004CDFD6
:004CDFB1 8D55F4                  lea edx, dword ptr [ebp-0C]
:004CDFB4 8B8608020000            mov eax, dword ptr [esi+00000208]
:004CDFBA 8B08                    mov ecx, dword ptr [eax]
:004CDFBC FF511C                  call [ecx+1C]
:004CDFBF 8B4DF4                  mov ecx, dword ptr [ebp-0C]
:004CDFC2 A16CBB5000              mov eax, dword ptr [0050BB6C]
:004CDFC7 8B00                    mov eax, dword ptr [eax]
:004CDFC9 8B55FC                  mov edx, dword ptr [ebp-04]
:004CDFCC E873530200              call 004F3344
:004CDFD1 E9D7000000              jmp 004CE0AD  //FIRST如何不讓程式執行這JMP呢?
上面的CALL(之所以程式重新開始又變成NOT REGISTER,是因為程式開始時又呼叫了這個CALL,檢測到AL為0,你可以用TRW載入程式前為這個CALL設個斷點看看)進入後一直來到下面:
:004F2E58 3B02                    cmp eax, dword ptr [edx]
:004F2E5A 7506                    jne 004F2E62
:004F2E5C C645FF01                mov [ebp-01], 01    //  THIRD若置1,則為註冊
:004F2E60 EB06                    jmp 004F2E68        //  上面有許多個直接JMP到4F2E68,都不能跳
:004F2E62 83C204                  add edx, 00000004
:004F2E65 4B                      dec ebx
:004F2E66 75F0                    jne 004F2E58
:004F2E68 33C0                    xor eax, eax   
:004F2E6A 5A                      pop edx
:004F2E6B 59                      pop ecx
:004F2E6C 59                      pop ecx
:004F2E6D 648910                  mov dword ptr fs:[eax], edx
:004F2E70 688A2E4F00              push 004F2E8A
:004F2E75 8D45F0                  lea eax, dword ptr [ebp-10]
:004F2E78 BA03000000              mov edx, 00000003
:004F2E7D E8C60FF1FF              call 00403E48
:004F2E82 C3                      ret
:004F2E83 E99409F1FF              jmp 0040381C
:004F2E88 EBEB                    jmp 004F2E75
:004F2E8A 8A45FF                  mov al, byte ptr [ebp-01]//SECOND [EBP-1]中為註冊標誌
:004F2E8D 5E                      pop esi                   
:004F2E8E 5B                      pop ebx
:004F2E8F 8BE5                    mov esp, ebp
:004F2E91 5D                      pop ebp
:004F2E92 C3                      ret//FIRST      CALL結束,向上看
所以實際上只要把上面一個你會直接JMP到4F2E68的語句改為JMP向4F2E5C就可以了(在實際上我是4F2E26這一句的),你可以先在TRW下鍵入A指令測試,A 4F2E26,回車,然後把變化了的機器碼抄下來(最好抄長一些,保證它在程式中是唯一的),用HEX編輯器改一下,再執行一下,怎麼樣?可以了吧。把時間向後調,成功了!
四 關於OFFLINE EXPLORER PRO 1.4338
在這個版本中,比較跟上面在同個原理的,如下
:004CFDD6 E8FD800200              call 004F7ED8    //這個CALL裡面也是比較,進去看看
:004CFDDB 84C0                    test al, al
:004CFDDD 747E                    je 004CFE5D
--------------
:004F7ED8 8BC2                    mov eax, edx
:004F7EDA 8BD1                    mov edx, ecx
:004F7EDC E89BFAFFFF              call 004F797C    //很快又是一個CALL?再進去!
:004F7EE1 C3                      ret
又是一連串的比較,最終又看AL的值是否為1,這兒可以按上面的方法將AL置1,但是這兒還有另一種修改的方法,如果你在進這個CALL之前把ESP EBP ESI EDI 的值記一下,你會發現它們的值並沒有變(我的理解是不變就可以不理下面的東西,不知有沒有錯,各位大俠請指點一下),所以實際上你只要把剛進入這個CALL的指令改為AL置1,再RET就可以了。用HEX編輯器改一下,重新居動,你會發現已經是REGISTERED的了,只是沒有你的名字而已。這應該在登錄檔中可以改動的,不過我沒試,你可以自己找找。
那麼前面的是否也可以用第二種方法?好像不行,至少我沒找到可以修改的地方,在進入TEST AL AL之前那個CALL之後的機器碼我用十六進位制編輯器開啟後並沒有找到,不知是何原因,如果你找到了麻煩你告訴我。
五 幾句廢話
1 如果你有什麼問題不懂的話,最好先去看看書,好像論壇常有人問些教學裡說得很明白的問題。
2 如果你對破解本身不感興趣而只為了某個軟體找不到破解而要學和話,我勸你還是等一等,如果網上沒有,一般也不是你我這種菜鳥學上幾天就可以搞掂的。破解可能是一種樂趣,也可能是一種痛苦。論壇精華中有小樓的一篇破解雜談,建議看看。

相關文章