《冠軍足球經理2001》免光碟破解實錄_供菜鳥閱讀 (5千字)

看雪資料發表於2002-01-22

《冠軍足球經理2001》免光碟破解實錄
  啊,太爽了!破解成功的滋味就是一個爽字。你嘗過沒?NO? 跟我來。
  《冠》是我第一個自立破解成功的軟體。我是一個初學者,很多關於破解的知識還不懂,但我卻能破解成功,我想實踐是最重要的。之前我跟著一些破解實錄破過readbook和flashget,雖是依樣畫瓢,不懂其所以然,但是掌握瞭如何使用工具,如S-ice,trw2000,pw32dsm,Winhex等。不過這些實錄太過程化了,不好理解。我寫這篇文章一是為了和大家分享我的快樂,二是希望能給初學者又一個比較好的破解實錄。
  我的《冠》是D版的,兩張盤,B盤是中文版安裝盤,安裝後執行《冠》要檢測A盤有沒有cm0001.exe檔案(其實D商可以在B盤刻上這個檔案,我就不用多花五塊大洋,可見D商同時是J商),檢測了二三十次之多(是怎樣知道的?我用Filemon監視過)。接著怎麼幹呢?這裡我不建議用pw32dsm對《冠》的執行檔案cmc.exe反彙編,一是cmc.exe很大,反彙編要很長時間;二是反彙編後的程式碼跟我在Trw2000裡看到的不同,不知是不是pw32dsm的錯誤(望指教)。我是用Trw2000跟蹤的。
  啟動Trw2000,點瀏覽,選擇cmc.exe,點Load,《冠》就開始執行。在cmc.exe的程式入口trw2000會將其斷下來。這時trw2000視窗彈出,我們輸入bpx GetDriveTypeA(這是在cmc請求系統讀取磁碟機代號時設定斷點),接著按Ctrl+N回到遊戲(也可在遊戲裡出現要求光碟對話方塊後按Ctrl+N進入trw2000設同樣的斷點,按Ctrl+N回到遊戲,點確定),在遊戲處理資料庫開始時就會請求系統讀取磁碟機代號,trw2000將其斷下,彈出trw2000視窗,斷點顯示在:
KERNEL32!GetDriveTypeA
0167:BFF77997  57            PUSH EDI
斷點是在系統裡,我們輸入bd * 遮蔽掉設的斷點,不斷按F10單步執行,直到進入cmc領空(在trw2000視窗中顯示出cmc時就是到了cmc領空),這時程式碼顯示如下:
0167:007BF743  FFD7          CALL EDI
    007BF745  83F805        CMP  EAX,BYTE +05
    007BF748  7574          JNZ  007BF79E        //在這裡會跳走,不過再按幾下F10又回來了(大概是判斷光碟吧,請指教),經過幾次的迴圈後就向下執行
    007BF74A  6A65          PUSH BYTE +65        //65的ASCII碼是'E'
    007BF74C  6A78          PUSH BYTE +78        //78的ASCII碼是'X'
    007BF74E  6A65          PUSH BYTE +65        //65的ASCII碼是'E'
    007BF750  6A2E          PUSH BYTE +2E        //2E的ASCII碼是'.'
    007BF752  6A31          PUSH BYTE +31        //31的ASCII碼是'1'
    007BF754  6A30          PUSH BYTE +30        //30的ASCII碼是'0'
    007BF756  6A30          PUSH BYTE +30        //30的ASCII碼是'0'
    007BF758  6A30          PUSH BYTE +30        //30的ASCII碼是'0'
    007BF75A  6A6D          PUSH BYTE +6D        //6D的ASCII碼是'M'
    007BF75C  6A63          PUSH BYTE +63        //63的ASCII碼是'C'
    007BF75E  56            PUSH ESI
    007BF75F  8D9424F8030000      LEA  EDX,[ESP+03F8]
    007BF766  68E4AD9000    PUSH DWORD 0090ADE4
    007BF76B  52            PUSH EDX
    007BF76C  E82ECB1000    CALL 008CC29F
    007BF771  8D842404050000      LEA  EAX,[ESP+0504]
    007BF778  55            PUSH EBP
    007BF779  8D8C2404040000      LEA  ECX,[ESP+0404]
    007BF780  50            PUSH EAX
    007BF781  51            PUSH ECX
    007BF782  E8A986CFFF    CALL 004B7E30
    007BF787  83C440        ADD  ESP,BYTE +40
    007BF78A  85C0          TEST EAX,EAX
    007BF78C  7468          JZ  007BF7F6        //注意,重點!
    007BF78E  8D9424D0040000      LEA  EDX,[ESP+04D0]
    007BF795  52            PUSH EDX
    007BF796  E80588CFFF    CALL 004B7FA0
    007BF79B  83C404        ADD  ESP,BYTE +04
    ........
繼續往下走
    007BF7E7  50            PUSH EAX
    007BF7E8  51            PUSH ECX
    007BF7E9  E8E233DFF    CALL 005B2BD0        //過了這個CALL就自動回到遊戲,彈出要求放入遊戲光碟的對話方塊。說明了什麼呢?
  說明從007BF743到007BF7E9就是在檢測遊戲光碟,那麼裡邊一定有當滿足條件就跳出這個迴圈的程式碼,趕快找找,發現在007BF78C可疑(其程式碼JZ  007BF7F6是當EAX為0就跳到007BF7F6),顯然007BF7F6是在迴圈外,那麼將JZ改為JNZ(非0跳走)不就行了嗎。
  這時我們可以試一試令EAX為0。當按F10單步執行到007BF78A時,輸入R(修改暫存器內容命令),trw2000裡的游標會在'EAX=FFFFFFFF'(我沒放光碟嘛)處閃爍,我們輸入0並確定。好,'EAX=00000000'了,按兩下F10,果然跳出去了。按Ctrl+N回到遊戲,對話方塊不見了,進度條飛快的跑起來,彷彿光明就要到來。啊~,該死的對話方塊又來了。想一想,哦!不是要檢測二三十次嘛,該死的《冠》。
  能否用83 C4 40 85 C0 74 68在16位編輯器Ultraedit或Winhex裡查詢並改為83 C4 40 85 C0 75 68(74=JZ,75=JNZ),事實是不行的,這麼短的程式碼有很多相同的,我試過。怎辦?
只能一遍一遍來啦。
  經過漫長的重複的工作後(重複上面的工作,地址不同,但彙編還是相同的),終於當上曼聯的主教練。哈哈哈!記住!一定要將JZ附近的16進位制程式碼記下來,記到紙上哦,也可記到大腦裡,只是三十多條罷了。不記得也沒關係,下面就是:
E8A986CFFF 83C440 85C0 7468 8D9424D0040000
E8ACC3C9FF 83C440 85C0 746F 8D8C24E4050000
E87114EFFF 83C440 85C0 7468 8D8C2470050000
E89CCBD2FF 83C440 85C0 7468 8D8C2484050000
E85541D9FF 83C440 85C0 7468 8D8C24DC030000
E82B8EF2FF 83C440 85C0 746F 8D9424F8030000
E86FAEC2FF 83C440 85C0 746F 8D8C2470030000
E866AAFFFF 83C440 85C0 7468 8D8C246C030000
E88511CCFF 83C440 85C0 7468 8D8C24E8030000
E8588FDEFE 83C440 85C0 7468 8D942418040000
E86A190800 83C440 85C0 746F 8D8C24E4050000
E81515D6FF 83C440 85C0 746E 8D8C241C070000
E8A4320800 83C440 85C0 7468 8D8C24E0050000
E8D630EFFF 83C440 85C0 7468 8D8C24DC030000
E88204F9FF 83C440 85C0 7468 8D8C24E4030000
E8B9800A00 83C440 85C0 7468 8D8C247C030000
E8105BECFF 83C440 85C0 7468 8D8C24E0030000
E83A12C2FF 83C440 85C0 7468 8D8C2470030000
E875A9CCFF 83C440 85C0 7468 8D8C246C030000
E8BCE6F3FF 83C440 85C0 7470 8D8C24E8050000
E842C5CCFF 83C440 85C0 7468 8D8C2470030000
E864D1D3FF 83C440 85C0 7468 8D8C246C030000
E8ADE2F4FF 83C440 85C0 7468 8D8C2474050000
E85A9BFFFF 83C440 85C0 746F 8D8C2490030000
E85F2EC7FF 83C440 85C0 746F 8D9424F4030000
E8D684D7FF 83C440 85C0 7468 8D8C24DC030000
E820B4E7FF 83C440 85C0 7468 8D8C24DC050000
E89513D8FF 83C440 85C0 7468 8D8C246C030000
E8F0A5CDFF 83C440 85C0 7468 8D8C24F8030000
E852D1C0FF 83C440 85C0 7468 8D8C2470030000
E82DE2C7FF 83C440 85C0 7468 8D8C2470030000
將這些程式碼裡的74改為75就行了,用Ultraedit或Winhex的方法不用我講了吧。
我在上面已經說過我是一名初學者,錯誤在所難免,希望和大家探討探討。我的Email地址是sinco@21cn.com。

相關文章