電腦游戲玩家都遇到過這樣的問題,很多游戲在運行時仍需要插入光盤(“完全安裝”情況下竟然也是如此!?)。如果光盤不慎遺失或光驅故障,面對安裝好的游戲你是否就無計可施了呢?你可能會選擇從網上下載高手制作的免CD補丁,可是並非每個光盤版游戲都能找到或能用這樣的補丁。本文就要讓你扮演一回高手的角色,自己來打造完美的硬盤版游戲 。
特別聲明:本文目的只是為了讓購買正版游戲的用戶能夠在不磨損光驅的情況下方便地進行游戲,以下修改例子中皆隱去了部分游戲名稱。
並不是每個光盤版游戲都能夠轉換為硬盤版,以下列舉了一些可修改的游戲類型和特征,並給出實際修改過程。
實戰1:去除光盤檢測
游戲特征:游戲所有文件均已安裝至硬盤中,僅在游戲開始時出於版權保護目的檢測一次光盤。
修改原理:在游戲程序開始位置有一段檢測光盤的代碼,最簡單的檢測方式就是從光盤中讀取特定文件,沒有讀到則彈出提示框並強制退出游戲,如果讀到並確認為該游戲光盤,則程序跳轉到游戲開始處。
修改難度:★★★
所需工具:W32DASM、RTA(原地址已不可用,據了解RTA和Hiew、010Editor同為16進制編輯器。)(注:以上兩軟件非PConline提供,請注意安全)
第一步:下載 W32DASM並解壓,運行解壓目錄中的W32dsm8.93+.exe。選擇W32DASM主界面菜單“Disassembler→Open File to Disassemble”(反匯編→打開需要反匯編的文件),在文件選擇框中選擇打開《××物語》安裝目錄下的zweipet.exe。
第二步:選擇菜單“Functions→Imports”(函數→輸入表),在彈出窗口中有一個列表框詳細列出了程序中用到的API函數。在窗口上方文本框中輸入 “GetDriveType”(不含引號)並點擊右側“Search”(搜索)按鈕,下方列表框中就選中了該函數所在行,接著雙擊它(見圖1)。
圖1 查找到“GetDriveType”
小提示:API是程序調用系統功能的函數接口,比如程序要檢測光盤,就必須使用GetDriveType函數來獲得盤符的設備類型。因此找到GetDriveType函數在程序中的調用位置,就一定能在附近找到光盤檢測代碼。
第三步:在 W32DASM主界面的代碼顯示框中就以高亮方式選中了GetDriveType函數的調用位置,將代碼框稍微往下拉一點就能看到光盤檢測代碼了(見圖 2)。代碼框最左側的藍色數字是代碼的位置,如本文中在zweipet.exe中找到GetDriveType的位置為0048843,而光盤檢測代碼的位置在004088BD處。以下是代碼簡要注釋:
圖2 提示“插入光盤”的光盤檢測代碼
圖3:004088D3位置處的代碼執行時會彈出此提示框
第三步:可以看到在004088C3處決定了程序走向(是繼續下一行代碼還是跳轉到004088DB處開始游戲),如果能讓程序不加判斷直接跳轉到004088DB,就等於跳過了光盤檢測。關閉W32DASM,打開剛才下載的RTA,選擇菜單命令“File→Open File”(文件→打開文件),同樣也是打開zweipet.exe。RTA界面立即顯示出zweipet.exe的匯編程序代碼。最左側的紅色數字為代碼位置,邊上藍色十六進制數為該行代碼的機器碼,右側黃色文字則為匯編代碼。找到要修改的位置004088C3,可這句匯編代碼為“JNZ SHORT 4088DB”,將其修改為“JMP SHORT 4088DB”(不含引號,機器碼為EB16)。
(圖4 修改前)
(圖5 修改後)
你知道嗎——JNZ和JMP是什麼意思?
JNZ為有條件轉移指令,先檢測一個條件,如果滿足則跳轉,否則繼續執行下一行代碼。而JMP則為無條件轉移指令,不檢測任何條件而直接跳轉至需要轉移的位置。
第四步:選擇菜單命令“File→Save File”(文件→保存文件),將修改成果保存。重新運行“××物語”,不再有討厭的“請插入××物語的游戲光盤”提示框出現,沒有光盤也能玩!
實戰2:把光盤文件轉移到硬盤
游戲特征:硬盤上僅有部分游戲文件,沒有復制的光盤文件的路徑記錄在文件或注冊表中。
修改原理:將需要從光盤中提取的內容復制到本地硬盤中,並修改路徑記錄使游戲程序從本地硬盤進行讀取。
典型游戲:《××醫院》
修改難度:★★
所需工具:記事本
第一步:《××醫院》在安裝過程中即使選擇“完全安裝”,在運行時也需要插入光盤,並且插入光盤後確實在游戲過程中有較大數據量的讀取,故判斷其有一部分游戲文件沒有安裝到本地硬盤中。插入該游戲光盤,浏覽其下文件並與硬盤中的游戲安裝目錄中的文件作比較,發現有幾個目錄中的文件數都不同,但光盤與硬盤的目錄結構一致。
第二步:從光盤中將缺少的游戲文件復制到硬盤中的游戲安裝目錄中(可用“覆蓋”),再次運行游戲卻發現仍提示插入游戲光盤。因為游戲程序並不知道你把缺少的游戲文件復制到硬盤中了,仍然去尋找光盤中的文件。那麼怎麼能讓游戲程序知道呢?我們需要修改游戲程序的“記憶”,尋找游戲設置文件(一般為文件名中包含“Config”、“cfg”、“settings”等關鍵字的文件),如本例中的游戲的設置文件為游戲安裝目錄下的Hospital.Cfg,用“記事本”打開此文件,將“INSTALL_PATH=”後的路徑修改為你游戲的安裝路徑(即硬盤中存放剛才復制過來的缺少文件的路徑,本例修改後的行如“INSTALL_PATH=C:\Program Files\Bullfrog\Hospital\”),保存並關閉文件。
第三步:再次運行游戲,發現不再需要插入光盤了。
修改過程總結
在給出以上實例後,我們比較概括地總結一下修改步驟。
首先通過文件比較及光驅讀盤時間等來判斷游戲的類型是A還是B。
A.僅檢測光盤,硬盤中已安裝所有游戲文件。
第一步:用W32DASM查看游戲程序文件的匯編程序代碼,找出光盤檢測部分的代碼位置。
第二步:分析這段代碼,找出條件轉移指令JNZ的位置。
第三步:用RTA編輯游戲程序文件,查看剛才記錄下的JNZ的位置,並將其修改為JMP(無條件轉移指令)。
小提示:以上情況僅用於未做進一步加密的游戲,有些游戲在光盤檢測代碼處使用了“花指令”或“動態加密”技術,則無法用此法修改。//本文來自電腦軟硬件應用網www.45it.com
B.硬盤中的游戲文件不全,需要從光盤中讀取。
第一步:比較硬盤中的游戲文件數與光盤中的文件數,將硬盤中缺少的文件復制到游戲安裝目錄相應位置中(也可復制到其他目錄並在第三步的路徑處做相應的修改,但出於兼容性考慮,強烈建議復制到游戲安裝目錄)。
小提示:有一些游戲對文件做了加密隱藏,用此法修改路徑後會出現類似“缺少文件”的提示。
第二步:根據文中給出的特征識別法尋找游戲用以存放光盤文件路徑的設置文件(或注冊表位置)。
第三步:編輯該設置文件,並將其中的文件存放路徑修改為游戲安裝目錄。