---
# System prepended metadata

title: Game Hacking! 破解植物大戰殭屍
tags: [113-1]

---

# Game Hacking! 破解植物大戰殭屍

日期：2024/10/01 (二)
時間：19:00 ~ 21:00
地點：Discord 直播區
上課資源：https://365mail-my.sharepoint.com/:u:/g/personal/b123040054_o365_student_nsysu_edu_tw/EVBzoUBB4xFCir3yWntU-wIBcMdwzwTXS1upBECUb_P8EQ?e=Qsucfn

----
# 外掛定義
- ~~小黃遊增加好感度~~
- 不會對其他人造成影響
    - 輔助資訊
- 會對他人造成影響
    - ~~槍戰射地丄會射到對手壞壞~~
# Cheat Engine
- 簡介
    ![image](https://hackmd.io/_uploads/S19MtUFCR.png)
    1. Cheat Engine可以針對其他process的記憶體數值進行更改
    2. Cheat Engine可以針對其他process的程式進行修改，甚至作為debugg
    3. dll injection(插入程式碼，~~壞透了~~)
- 功能簡介
    ![image](https://hackmd.io/_uploads/ByY89LtAR.png)
    - 第一次搜尋都用 first scan
    - undo scan 只能逆回去上一個，要再上上一個的話沒有辦法
<!--嗨 嗨，我不會逆向 那你乖乖共筆 嗨徐聖凱好醜 -->
- 搜尋功能
    ![image](https://hackmd.io/_uploads/BJKa5UFAC.png)
    
# 程式碼
- Asm
    - 程式碼編譯後會有中間語言，就是組合語言，特質介於組合語言與機器語言之間 
    ![image](https://hackmd.io/_uploads/rkQFNvY0R.png)
- 有了這些可以透過分析組合語言獲取遊戲過程

# LAB
- 改陽光數值
- `Ctrl + E`
- 更改植物數量
    - 更改了植物數量可能是link list的len
    - ![image](https://hackmd.io/_uploads/ryFoAUYRC.png)
- 更改陽光生成時間
    - case 1
    ![image](https://hackmd.io/_uploads/B1yq-DtRC.png)
    - case 2
    ![image](https://hackmd.io/_uploads/Hk-3WwtR0.png)
- 陽光收集器
    - 陽光生成
        - call sun_gen()
    - 撿陽光
        - call sun_pick()
        - 確定撿陽光位置
            - 首先檢陽光後應該有add 
            - 所以應該是
                ```
                sun_pick();
                sun_add();
                ```
            - 那這樣add的addres應該就會知道
# 好玩的東東
- interal
    - 內部的process影響
    - 比較難抓
    - eg. DLL injection
- external
    - 其他process影響
## Lab - 1：讓植物鎖血
- 方法
	- 讓血量無限大
	- 看一下 CE 裡面有什麼功能來實現此功能
- 讓血量無限大
	- ![image](https://hackmd.io/_uploads/S1hxlPFR0.png)
		- New scan用unchange
		- Next scan用decrase
		- Scan Type : Decreased value
- CE
	- Active 變成 X : 代表鎖住，不會讓數值做改變
	- ![image](https://hackmd.io/_uploads/HyDxZPtCC.png)


## Lab - 2：修改卡片冷卻
- 像太陽冷卻就好

## Cheat Engine 原理
- 透過 `OpenProcess` 拿到 `Process Handle`
- `Process Handle` 很像是管理權限
	- `ReadMemory`
	- `WriteMemory`

<!--謝謝社長大正咩 不客氣-->
![image](https://hackmd.io/_uploads/H1Le5PYAR.png)

## 
- 重新打開遊戲，memory address 都會做改變
- 保護區：偵測特定位置是否有做更動
	- 修改程式碼(Assembly Code)：容易被發現
	- 修改技能數值：不容易被發現
- Offset
	- base address + offset = 目的 address

<!--我拿向日葵......你在歧視薯餅嗎-->

    
    
    
![image](https://hackmd.io/_uploads/SkQxIDtA0.png)

<!--
閒聊

嗨，明天放假
嗨 徐聖凱好醜
...............
真假 水喔
-->