《冠軍足球經理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。