|
論壇說明 |
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
|
主題工具 | 顯示模式 |
2006-08-07, 11:28 AM | #1 |
榮譽會員
|
軟體 - 偷天換日——光碟版遊戲完美轉換硬碟版
偷天換日——光碟版遊戲完美轉換硬碟版
偷天換日——光碟版遊戲完美轉換硬碟版 電腦遊戲玩家都遇到過這樣的問題,很多遊戲在執行時仍需要插入光碟(「完全安裝」情況下竟然也是如此!?)。如果光碟不慎遺失或光碟故障,面對安裝好的遊戲你是否就無計可施了呢?你可能會選擇從網上下載高手製作的免CD修正檔,可是並非每個光碟版遊戲都能找到或能用這樣的修正檔。本文就要讓你扮演一回高手的角色,自己來打造完美的硬碟版遊戲。 特別聲明:本文目的只是為了讓購買正版遊戲的用戶能夠在不磨損光碟的情況下方便地進行遊戲,以下修改例子中皆隱去了部分遊戲名稱。 並不是每個光碟版遊戲都能夠轉換為硬碟版,以下列舉了一些可修改的遊戲類型和特徵,並給出實際修改過程。 實戰1:去除光碟檢測 遊戲特徵:遊戲所有文件均已安裝至硬碟中,僅在遊戲開始時出於版權保護目的檢測一次光碟。 修改原理:在遊戲程式開始位置有一段檢測光碟的代碼,最簡單的檢測方式就是從光碟中讀取特定文件,沒有讀到則彈出提示視窗並強制退出遊戲,如果讀到並確認為該遊戲光碟,則程式跳轉到遊戲開始處。 修改難度:★★★ 所需工具:W32DASM(下載位址:http://www.pediy.com/tools/Disassemblers/W32Dasm/W32dsm8.93.rar),RTA(下載位址:http://www.pediy.com/tools/Editors/RTA/rta.zip)。 第一步:下載W32DASM並解壓,執行解壓目錄中的W32dsm8.93+.exe。選擇W32DASM主界面表菜單「Disassembler→Open File to Disassemble」(反彙編→打開需要反彙編的文件),在文件選擇框中選擇打開《××物語》安裝目錄下的zweipet.exe。 第二步:選擇表菜單「Functions→Imports」(函數→輸入表),在彈出視窗中有一個列表框詳細列出了程式中用到的API函數。在視窗上方文本框中輸入「GetDriveType」(不含引號)並點擊右側「Search」(搜索)按鍵,下方列表框中就選中了該函數所在行,接著雙擊它(見圖1)。 小提示 API是程式呼叫系統功能的函數接頭,比如程式要檢測光碟,就必須使用GetDriveType函數來獲得磁碟代號的設備類型。因此找到GetDriveType函數在程式中的呼叫位置,就一定能在附近找到光碟檢測代碼。 第三步:在W32DASM主界面的代碼顯示框中就以高亮方式選中了GetDriveType函數的呼叫位置,將代碼框稍微往下拉一點就能看到光碟檢測代碼了(見圖2)。代碼框最左側的藍色數位是代碼的位置,如本文中在zweipet.exe中找到GetDriveType的位置為0048843,而光碟檢測代碼的位置在004088BD處。以下是代碼簡要註釋: 2:提示「插入光碟」的光碟檢測代碼 :004088BD mov eax,dword ptr[esp+14] :004088C1 test eax, eax //檢查是否有光碟 :004088C3 jnz 004088DB //有光碟則跳轉到004088DB位置(即遊戲開始位置),沒有光碟則不跳轉 :004088C5 push 00000000 :004088C7 push 00428934 :004088CC push 00428919 :004088D1 push 00000000 :004088D3 call dword ptr[004233EC] //彈出一個提示視窗「請插入××物語的遊戲光碟」 :004088D9 jmp 00408933 //程式轉向代碼結束部分,也就是強制退出遊戲 (見圖3) 圖3:004088D3位置處的代碼執行時會彈出此提示視窗 第三步:可以看到在004088C3處決定了程式走向(是繼續下一行代碼還是跳轉到004088DB處開始遊戲),如果能讓程式不加判斷直接跳轉到004088DB,就等於跳過了光碟檢測。關閉W32DASM,打開剛才下載的RTA,選擇表菜單命令「File→Open File」(文件→開啟文件),同樣也是打開zweipet.exe。RTA界面立即顯示出zweipet.exe的彙編程式代碼。最左側的紅色數位為代碼位置,邊上藍色十六進制數為該行代碼的機器碼,右側黃色文字則為彙編代碼。找到要修改的位置004088C3,可這句彙編代碼為「JNZ SHORT 4088DB」,將其修改為「JMP SHORT 4088DB」(不含引號,機器碼為EB16)。 (圖4 修改前) 你知道嗎——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(無條件轉移指令)。 小提示 以上情況僅用於未做進一步加密的遊戲,有些遊戲在光碟檢測代碼處使用了「花指令」或「動態加密」技術,則無法用此法修改。 B.硬碟中的遊戲文件不全,需要從光碟中讀取。 第一步:比較硬碟中的遊戲文件數與光碟中的文件數,將硬碟中缺少的文件複製到遊戲安裝目錄相應位置中(也可複製到其他目錄並在第三步的路徑處做相應的修改,但出於相容性考慮,強烈建議複製到遊戲安裝目錄)。 小提示 有一些遊戲對文件做了加密隱藏,用此法修改路徑後會出現類似「缺少文件」的提示。 第二步:根據文中給出的特徵識別法尋找遊戲用以存放光碟文件路徑的設置文件(或註冊表位置)。 第三步:編輯該設置文件,並將其中的文件存放路徑修改為遊戲安裝目錄。 |
__________________ |
|
送花文章: 3,
|
向 psac 送花的會員:
|
ubs2200 (2007-08-14)
感謝您發表一篇好文章 |