muki01/Game_Memory_Hacking_Tutorial

GitHub: muki01/Game_Memory_Hacking_Tutorial

面向新手的 Python 游戏内存修改教程,通过经典游戏的注释脚本讲解进程内存读写与逆向工程基础。

Stars: 2 | Forks: 1

# 🕹️ Game_Memory_Hacking_Tutorial ![GitHub forks](https://img.shields.io/github/forks/muki01/Game_Memory_Hacking_Tutorial?style=flat) ![GitHub Repo stars](https://img.shields.io/github/stars/muki01/Game_Memory_Hacking_Tutorial?style=flat) ![GitHub Issues or Pull Requests](https://img.shields.io/github/issues/muki01/Game_Memory_Hacking_Tutorial?style=flat) ![GitHub License](https://img.shields.io/github/license/muki01/Game_Memory_Hacking_Tutorial?style=flat) ![GitHub last commit](https://img.shields.io/github/last-commit/muki01/Game_Memory_Hacking_Tutorial) 本仓库是一个对新手友好、内容全面的指南和脚本集合,旨在帮助大家学习游戏内存修改和逆向工程的基础知识。本项目的目标在于演示如何扫描进程内存、处理指针、使用 Cheat Engine 寻找静态 offset,以及在 runtime 动态读写数据。 其中包含了针对《侠盗猎车手:罪恶都市》(Grand Theft Auto: Vice City)、《侠盗猎车手:圣安地列斯》(GTA: San Andreas)、《古墓丽影》(Tomb Raider) 等经典游戏的简单且附带详细注释的概念验证脚本。 ## 🧠 工作原理:核心概念 当游戏运行时,它会将临时数据(如生命值、弹药量、坐标)存储在系统的 RAM 中。内存修改的核心操作就是找到这些数据所在的内存地址,并使用外部脚本来修改它们。 ### 1. 使用 Cheat Engine 查找地址 在编写脚本之前,我们必须先使用 **Cheat Engine** 找到内存地址: * **静态 Offset(基于 Module):** 某些数值位于距离游戏主 module 固定偏移量的位置(例如 `tomb2.dll + 0x2CA416`)。这些数值很容易被锁定,因为我们的脚本会动态获取 module 的基地址。 * **动态 Pointer(玩家基地址):** 现代或复杂的结构在每次游戏启动时都会改变其存储位置。我们需要找到一个**基地址 Pointer**(例如 `PLAYER_BASE`)并配合使用 **Offset**(如 `HP_OFFSET = 0x22`),从而始终能够相对于玩家对象找到正确的数据。 ### 2. Python 脚本如何操作 RAM 借助 `pymem` 库,我们的脚本会在一个持续循环中执行三个主要任务: 1. **打开进程句柄:** 附加到游戏进程(例如 `tomb123.exe`),以获取读写其内存的权限。 2. **读取 Pointer 路径:** 通过优先读取基地址 Pointer 来解析动态地址。 3. **写入 / 冻结数值:** 在游戏将数值扣减之前,持续使用我们期望的值覆盖目标内存地址(例如将生命值锁定在 `1000`)。 ## 💻 代码示例:古墓丽影 II 终极修改器 下面我们来快速了解一下如何用 Python 构建一个基础的内存修改脚本。该脚本可以冻结弹药、通过 pointer 锁定生命值,并引入了自定义的飞行/悬浮机制。 ``` import pymem import pymem.process import time import keyboard PROCESS_NAME = "tomb123.exe" MODULE_NAME = "tomb2.dll" # 通过 Cheat Engine 找到的 Offsets 和 Base Pointers PLAYER_BASE = 0x025B23A0 HP_OFFSET = 0x22 AIR_OFFSET = 0x2CA416 def tomb_raider_ultimate_cheat(): pm = pymem.Pymem(PROCESS_NAME) # Get the dynamic base address of the DLL module = pymem.process.module_from_name(pm.process_handle, MODULE_NAME).lpBaseOfDll print("[+] Trainer Active. Press 'X' to fly, 'Z' to hover.") while True: # 1. Freeze Static Value (Air/Oxygen) pm.write_short(module + AIR_OFFSET, 1800) # 2. Resolve Pointer for Dynamic Value (Health) p_ptr = pm.read_longlong(module + PLAYER_BASE) if p_ptr > 0: pm.write_short(p_ptr + HP_OFFSET, 1000) # Lock HP to 1000 time.sleep(0.01) # Prevent high CPU usage if __name__ == "__main__": tomb_raider_ultimate_cheat() ``` ## ⚙️ 项目结构与使用说明 每款游戏都有一个独立、简洁的脚本,旨在清晰展示附加到游戏进程、解析 pointer 以及修改特定参数(如无限弹药、无限生命或重力/飞行修改器)的完整过程。 ### 🔹 核心要求 要测试或运行这些基础脚本,你需要通过终端安装内存操作封装库和输入处理库: ``` pip install pymem keyboard ``` ### 🔹 仓库目录结构 这些脚本按照游戏名称进行了清晰的分类: * **`gta_vice_city/`** -> 包含用于修改弹药、生命值或启用飞行机制的脚本。 * **`gta_san_andreas/`** -> 包含用于修改《圣安地列斯》数值的内存操作脚本。 * **`tomb_raider/`** -> 包含经典的《古墓丽影》内存修改工具(例如针对生命值的动态 pointer 处理、针对氧气值的静态 module)。 ## 📱 图片与演示 ⏳ **即将推出!** 我们将很快在这里添加 Cheat Engine 扫描截图、pointer 架构图,以及展示修改器实际运行效果的游戏 GIF 图。 ## 🛠️ 涵盖的关键主题 * **进程附加:** 学习如何查找正在运行的游戏的进程 ID (PID),并使用 `pymem.Pymem` 安全地打开其虚拟内存空间的句柄。 * **内存读写:** 利用 Python (`write_short`、`write_int`、`read_longlong`) 中良好封装的基础系统 API 调用(如 `ReadProcessMemory` 和 `WriteProcessMemory`)。 * **Pointer 运算与 Offset:** 理解静态基地址 Pointer 和多级动态 offset 的工作原理,确保脚本在游戏重启或重新加载地图时依然能够正常运行。 * **修改器机制:** 实现高频循环 (`time.sleep(0.01)`) 以持续冻结或重写数值,从而维持无限状态(例如锁定氧气或弹药数量),并使用 `keyboard` 库追踪快捷键。 ## 📬 联系方式 如需了解信息、求职机会、项目合作或赞助,您可以通过电子邮件与我联系。 📧 邮箱:muksin.muksin04@gmail.com
标签:Cheat Engine, Python, 云资产清单, 内存修改, 教程文档, 无后门, 游戏开发, 逆向工具, 逆向工程