遊戲輔助 | 植物大戰殭屍 (C# 打不死的植物)
工具準備
Cheat EngineVisual StudioPlants vs. Zombies
行前準備
- 閱讀x86組合語言教學。
- 閱讀Cheat Engine基本教學。
輔助構思
- 透過
Cheat Engine抓取扣血的地址並分析 - 使用
C#呼叫Win32API進行修改
CE補充
有時你可能不知道要搜索的值的確切編號,或者它更改得太快而無法正常掃描。這就是為什麼Cheat Engine提供了幾種尋找值的方法。
無論你是否知道,這些掃描選項都可以查找任何值。
可用的選項分為兩個:“第一次掃描”選項和“下次掃描”選項。
首次掃描選項為
Exact Value(確切值)Bigger than...(比…更大)Smaller than...(比…小)Value between...(之間的值…)Unknown initial value(初始值未知)
下一步掃描選項是
Exact Value(確切值)Bigger than...(比…更大)Smaller than...(比…小)Value between...(之間的值…)Increased Value(增值)Increased Value by...(價值增加…)Decreased Value(價值下降)Decreased Value by...(價值下降…)Changed Value(變更值)Unchanged Value(不變價值)Same as First Scan(與第一次掃描相同)
所有這些選擇都能說明一切。Cheat Engine會記住上一次掃描中找到的值,從而使其能夠將新值與舊值進行比較並還原為上一次掃描。它還會記住“首次掃描”的值。
找尋基址
- 開啟
Plants vs. Zombies主程式 - 稍微遊玩到可以種植
牆果

- 開啟
Cheat Engine - 選擇
Plants vs. Zombies程序

- 根據遊戲輔助 | 植物大戰殭屍 (C# 陽光修改器)文章提及基址
- 此時手動添加地址
006A9EC0、006A9F38加上偏移量768和5560(反向) - 修改數值為
9999方便之後的分析

- 等待殭屍出現
- 種植
牆果植物到最前線

- 選擇
Unknown initial value(初始值未知),首次搜尋

- 殭屍咬到
牆果 - 再次搜尋
Decreased Value(價值下降) - 反覆多次觀察數值變動
- 最終找到
0F7742D8(每次都會不一樣) - 對該地址點擊兩下,新增至下方的作弊表內
- 修改數值變
5000,發現牆果從破損狀態恢復成完整狀態
註:搜尋的示範GIF圖檔太大,影響頁面Loading速度,固直接提供GIF檔下載點我下載
- 對
0F7742D8右鍵選擇Find out what writes to this address(找出是什麼改寫了這個地址) - 會開啟
The following opcodes write to 0F7742D8視窗

- 回到
Plants vs. Zombies - 讓殭屍繼續咬
牆果 - 回至
Cheat Engine - 可見
The following opcodes write to 0F7742D8視窗內多一筆資料

- 點擊該筆資料
1 | EAX=00000000 |
這邊要知道的是做
add這個指令是在哪個地址,發現是0052FCF0這邊可以判定為,當殭屍咬食
牆果,這地址做的動作是加-04點擊
Show disassembler

- 代碼修改
1 | // 修改前 |
- 注意最十六進位資料變化
1 | // 修改前 |
- 第四個位置由
FC變成00 - 所以要修改的地址為
0052FCF3
註:修改玩代碼後,可以回到
Plants vs. Zombies看殭屍咬食牆果是否數值不會動了。

編寫輔助
沿用上一章節的PZCheat project程式碼來進行修改
- 調整
PZHelper
1 | using System; |
- 開啟
Form1.cs[設計] - 新增一個
CheckBox

雙擊
CheckBox建立CheckedChanged事件撰寫程式
1 | private Boolean lock_blood = false; |
重開
Plants vs. Zombies運行測試
勾選
CheckBox開始遊玩遊戲,發現植物不會扣血
恭喜打不死的植物的修改完成
註:如要分享
.exe檔案,請到專案目錄下的Debug資料夾內,將其全部複製給別人即可。注意因為使用C#撰寫,對方的電腦要有安裝.NET Framework才可執行。
註:以上參考了
植物大戰殭屍 (Plants vs Zomebies) 遊戲簡介、下載與完整攻略
植物大战僵尸(5) 打不死的植物
