单机游戏存档修改
背景介紹:游戲是仙劍一,劇情在打苗疆三人組之前,目的是修改李逍遙屬性從而可以秒殺苗疆三人組的頭領。
進入原始存檔(存檔文件名為1.rpg,位于游戲根目錄下),查看李逍遙原始屬性,如下圖所示:
去后山打怪升級。打了一組樹怪后,李逍遙屬性升級,如下圖所示:
存一個新檔(存檔文件名為2.rpg)。為了盡量減少存檔之間的變化,存檔前回到原場景(客棧門前)。備份1.rpg和2.rpg兩個存檔文件。用VBinDiff(開源工具,網址https://www.cjmweb.net/vbindiff/)對比兩個存檔文件,把他們復制到VBinDiff文件夾下,然后用cmd運行VBinDiff:
效果如圖所示,按Enter鍵遍歷所有有區別的地方:
遍歷一遍之后,發現兩個存檔文件共有7塊發生不同的區域,其中許多地方是flag性質的改變(例如FF變為01,00變成0A),推測他們是一些與屬性無關的變化(例如存檔時的坐標、樹怪被消滅后是否刷新的標記、存檔時間等),最像屬性改變的區域(可以目測出是數值發生了少許增加),發生在:
雖然VBinDiff支持直接修改文件內容,但是為了以后使用方便,還是人工記下偏移地址和對應的變化:
| 地址 | 十六進制變化 | 十進制變化 | 推測屬性 |
|---|---|---|---|
| 0244 | 02->03 | 2->3 | 修行 |
| 0250 | AA->B6 | 170->182 | 體力上限 |
| 025C | 6C->74 | 108->116 | 真氣上限 |
| 0268 | 99->B6 | 153->182 | 當前體力 |
| 0274 | 6C->74 | 108->116 | 當前真氣 |
| 02C8 | 26->2B | 38->43 | 武術(疑似,-2) |
| 02D4 | 19->1E | 25->30 | 靈力 |
| 02E0 | 24->26 | 36->38 | 防御(疑似,-9) |
| 02EC | 20->23 | 32->35 | 身法 |
| 02F8 | 22->24 | 34->36 | 吉運 |
其中武術和防御的偏差,應該是人物裝備的影響,推測李逍遙的桃木劍+2武術,他的一身裝備+9防御。
為了秒殺BOSS,我們只需要修改武術。從數據的外表看,屬性只占2個字節,推測屬性值的類型應該是無符號短整型(unsigned short int),則最大值是0xFFFF。
回到仙劍目錄,用WinHex修改存檔文件2(2.rpg)的偏移地址02C8處為FFFF:
保存后重新進入游戲讀取存檔2。發現武力值變為1了,進入boss戰發現攻擊力很低,這應該是由于基礎武力加上裝備加成,造成了最終武力值的進位(溢出)。考慮到裝備的+2武力,修改基礎武力為0xFFFD,試圖達到最終武力的最大值:
重新進入游戲,發現李逍遙的武力為5535,推測真實值應該是65535,而游戲只顯示了后4位數:
進入客棧的boss戰,一刀砍出22348(boss的總血量),秒殺boss。
存檔修改成功!金錢,物品數量的修改都可以使用這個對比存檔文件的方法。如果想做存檔修改器的話,可以根據上面列表中的偏移地址做一個小工具。
總結
- 上一篇: WJC上学记
- 下一篇: Win10 下安装使用easyocr图片