順祝忘了自己喜得貴子!:)
hdy 2002.05.27
愷撒大帝3中文光碟版去除CD檢測
hdy
2002.05.24
此老遊戲今天被翻出來,想再玩一下,發現我的老光碟機在讀它的時候聲音奇大,於是,就做個硬碟版吧. :)
使用工具:FileInfo2.49,W32Dasm Gold8.93中文版,UltraEdit32v9.00a
破解程度:非常簡單.
1.分析
安裝愷撒大帝3中文光碟版,選擇完全安裝,然後從光碟機中取出光碟,執行遊戲程式c3.exe(811,008 位元組),程式在彈出一個MessageBox後,要你選擇確定或取消,取消則退出.此處顯示為亂碼.
先用FI檢視一下,發現是VC++6.0編譯的,沒有加殼.於是用W32Dasm將其反彙編,查詢字串MessageBoxA,得到下面兩處,
* Reference To: USER32.MessageBoxA, Ord:01BEh
|
:0040C824 FF1564414A00
Call dword ptr [004A4164]
:0040C82A 83F806 cmp eax, 00000006
:0040C82D
C605FAC7500000 mov byte ptr [0050C7FA], 00
:0040C834 750C jne 0040C842
:0040C836 881D706A6B00 mov byte ptr [006B6A70], bl
:0040C83C 881DCCCA5000
mov byte ptr [0050CACC], bl
----------------------------------------------------------
* Possible StringData Ref from Data Obj ->"smk\intro.smk"
|
:0049CCE8 68C8B04B00 push 004BB0C8
:0049CCED E8BE75FCFF call 004642B0
:0049CCF2 83C438 add esp, 00000038
:0049CCF5 85C0 test eax, eax
:0049CCF7
755E jne 0049CD57
* Reference To: USER32.MessageBoxA, Ord:01BEh
|
:0049CCF9 8B3564414A00 mov esi, dword ptr [004A4164]
用W32Dasm的除錯->載入處理,在這兩處設下斷點,F9執行...結果中斷後螢幕被遊戲畫面擋住了
:( 用工作管理員將遊戲強行關閉,發現除錯窗停在:0049CCF9處的斷點處.向上找發現了條件跳轉指令jne 0049CD57,只要將它改為jmp 0049CD57無條件跳轉就OK了.
2.修改
使用UltraEdit,根據W32Dasm給出的檔案偏移量0x9ccf7,將jne的機器碼75改為jmp的機器碼EB,存檔測試,發現已經透過CD檢測.