從0開始在代碼層製作一份改版,並非貼圖動畫資源修改
所需軟件,工具:
cheat engine7.5中文版(下文簡稱ce)
x32dbg
植物大戰殭屍中文第二版(下文簡稱遊戲)
植物大戰殭屍偏移表(下文簡稱偏移表)
植物大戰殭屍函數表(下文簡稱函數表)
1.打開遊戲,打開ce 附加到遊戲,打開x32dbg附加到遊戲
2.查詢函數表可得知發射子彈函數為40D620 使用x32dbg在40D620處下斷
3.返回遊戲 種植一棵捲心菜投手 等待捲心菜投手發射子彈後程序被斷下
4.刪除斷點 然後利用調用堆棧窗口 跳轉到調用函數40D620處 如圖
對比函數表可得push eax為子彈的id
5.在push eax處下斷 f9運行程序等待程序斷下
程序斷下後 修改右上寄存器窗口eax的值為0 然後f9運行遊戲
此時發現遊戲內捲心菜投手剛剛發射的子彈變為了普通豌豆
這就證明這個地方的push就是子彈的id傳參 我們只需要取一個隨機數 然後判斷隨機數後push玉米炮子彈id進去即可實現隨機投出炮彈
6.取消斷點 f9運行遊戲 打開ce反彙編窗口 選擇 工具,掃描代碼洞 取消勾選只讀內存 搜索256字節大小的代碼洞
7.右鍵掃描到的代碼洞 複製 保存好 然後在x32dbg中修改push eax為jmp 代碼洞起始地址 將程序跳轉到空白區域
8.雙擊jmp指令 進入代碼洞內
根據函數表可得遊戲內自帶一個隨機數函數
我們直接調用這個隨機數函數 用來進行概率計算
在代碼洞內彙編編碼:
9.返回遊戲查看效果
注:此處代碼為公共代碼段,會導致所有植物都隨機發射出玉米加農炮 查詢寄存器可知此處ebp為植物指針 所以可以在代碼洞寫代碼前加入如下兩行進行植物判斷
此時 只有植物為捲心菜投手時才會進行隨機發射玉米炮
至此修改結束 在x32dbg中ctrl+p修補文件名PlantsVsZombies.exe到桌面 然後關閉遊戲 移動桌面上修改過的遊戲執行文件到遊戲目錄內進行替換 啟動後即是修改過後的程序
x32dbg下載鏈接:https://sourceforge.net/projects/x64dbg/files/snapshots/
植物大戰殭屍漢化第二版下載鏈接:https://pvz.lanzoux.com/iau42bc
ce修改器 偏移表 函數表:https://bxwl.lanzouw.com/b028kik1lc
密碼:c72i