跳转至
Game Hacking 中文版
第四部分导读
正在初始化搜索引擎
Game Hacking 中文版
首页
关于作者与审校者
序言
致谢
引言
引言
引言导读
读者应具备的条件
游戏破解简史
为什么要破解游戏?
本书结构
关于在线资源
如何使用本书
出版社的话
第一部分 工具与技巧
第一部分 工具与技巧
第一部分导读
第 1 章 扫描内存:使用 Cheat Engine
第 1 章 扫描内存:使用 Cheat Engine
本章导读
为什么内存扫描器很重要
基本内存扫描
Cheat Engine 的内存扫描器
扫描类型
运行你的第一次扫描
后续扫描
Cheat 表
游戏中的内存修改
用 Cheat Engine 手动修改
训练器生成器
基本内存编辑
指针扫描
指针链
指针扫描基础
pointerScan() 函数
rScan() 函数
使用 Cheat Engine 进行指针扫描
关键选项
视情况而定的选项
指针重扫
指针扫描练习
Lua 脚本环境
搜索汇编模式
搜索字符串
优化内存代码
结束语
第 2 章 用 OllyDbg 调试游戏
第 2 章 用 OllyDbg 调试游戏
本章导读
OllyDbg 用户界面速览
OllyDbg 的 CPU 窗口
查看和导航游戏的汇编代码
查看和编辑寄存器内容
查看和搜索游戏内存
查看游戏的调用栈
多客户端补丁
创建代码补丁
确定补丁大小
跟踪汇编代码
OllyDbg 的表达式引擎
在断点中使用表达式
在表达式引擎中使用操作符
处理基本表达式元素
用表达式访问内存内容
OllyDbg 表达式实战
在绘制特定玩家名字时暂停执行
找出在哪里暂停
设计条件断点
当角色生命值下降时暂停执行
编写检查生命值的表达式
找出从哪里开始跟踪
激活跟踪
游戏黑客的 OllyDbg 插件
用 Asm2Clipboard 复制汇编代码
用 Cheat Utility 把 Cheat Engine 加进 OllyDbg
通过命令行控制 OllyDbg
用 OllyFlow 可视化控制流
修补 if() 语句
结束语
第 3 章 用 Process Monitor 和 Process Explorer 侦察
第 3 章 用 Process Monitor 和 Process Explorer 侦察
本章导读
Process Monitor
记录游戏内事件
检查 Process Monitor 日志中的事件
调试游戏以收集更多数据
查找高分文件
Process Explorer
Process Explorer 的用户界面和控件
检查进程属性
句柄操纵选项
关闭互斥体
检查文件访问
查找并关闭互斥体
结束语
第二部分 游戏解剖
第二部分 游戏解剖
第二部分导读
第 4 章 从代码到内存:通用入门
第 4 章 从代码到内存:通用入门
本章导读
变量和其他数据在内存中的表现
数值数据
字符串数据
数据结构
结构元素顺序和对齐
结构如何工作
联合
类和 VF 表
一个简单类
带虚函数的类
类实例和虚函数表
VF 表和 Cheat Engine
x86 汇编速成课
命令语法
指令
操作数语法
汇编命令
处理器寄存器
通用寄存器
索引寄存器
为什么有些 x86 寄存器有子寄存器?
执行索引寄存器
EFLAGS 寄存器
段寄存器
调用栈
结构
栈帧
游戏破解的重要 x86 指令
数据修改
算术
分支
函数调用
结束语
第 5 章 高级内存取证
第 5 章 高级内存取证
本章导读
高级内存扫描
推断用途
用 OllyDbg 找到玩家的生命值
确定游戏更新后的新地址
自动查找当前生命值和最大生命值
识别游戏数据中的复杂结构
std::string 类
检查 std::string 的结构
忽视 std::string 会毁掉你的乐趣
确定数据是否存储在 std::string 中
std::vector 类
检查 std::vector 的结构
确定数据是否存储在 std::vector 中
std::list 类
检查 std::list 的结构
确定游戏数据是否存储在 std::list 中
用脚本找到根节点
std::map 类
可视化 std::map
访问 std::map 中的数据
确定游戏数据是否存储在 std::map 中
结束语
第 6 章 读写游戏内存
第 6 章 读写游戏内存
本章导读
获取游戏的进程标识符
获取进程句柄
使用 OpenProcess()
访问内存
使用 ReadProcessMemory() 和 WriteProcessMemory()
使用 ReadProcessMemory() 和 WriteProcessMemory() 访问内存中的值
编写模板化的内存访问函数
内存保护
区分 x86 Windows 内存保护属性
特殊保护类型
更改内存保护
地址空间布局随机化
禁用 ASLR 以简化机器人开发
生产中绕过 ASLR
结束语
第三部分 进程操控
第三部分 进程操控
第三部分导读
第 7 章 代码注入
第 7 章 代码注入
本章导读
用线程注入注入代码洞穴
创建汇编代码洞穴
把汇编翻译成 Shellcode
把代码洞穴写入内存
用线程注入执行代码洞穴
劫持游戏主线程以执行代码洞穴
构建汇编代码洞穴
生成骨架 Shellcode 并分配内存
找到并冻结主线程
诱使进程加载你的 DLL
在注入的 DLL 中访问内存
在注入的 DLL 中绕过 ASLR
结束语
第 8 章 操纵游戏中的控制流
第 8 章 操纵游戏中的控制流
本章导读
NOP 掉不需要的代码
何时使用 NOP
如何进行 NOP 填充
练习 NOP 填充
钩子重定向游戏执行
调用钩子
处理内存中的近调用
钩住近调用
清理栈
编写调用钩子
VF 表钩子
关于 VF 表的真相
编写 VF 表钩子
使用 VF 表钩子
IAT 钩子
为可移植性付出代价
遍历 IAT
放置 IAT 钩子
用 IAT 钩子与游戏线程同步
跳转钩子
放置跳转
编写蹦床函数
完成跳转钩子
专业 API 钩子库
把调用钩子应用到 Adobe AIR
进入 RTMP 金矿
钩住 RTMPS 的 encode() 函数
钩住 RTMPS 的 decode() 函数
放置钩子
把跳转钩子和 VF 钩子应用到 Direct3D
绘制循环
找到 Direct3D 设备
跳转钩住 EndScene()
设备、Direct3D 和 VF 钩子的含义
放置和移除跳转钩子
编写回调和蹦床
为 EndScene() 编写钩子
为 Reset() 编写钩子
接下来是什么?
可选稳定性修复
结束语
第四部分 创建机器人
第四部分 创建机器人
第四部分导读
第 9 章 用超感知对抗战争迷雾
第 9 章 用超感知对抗战争迷雾
本章导读
背景知识
用光照破解揭示隐藏细节
添加中央环境光源
增加绝对环境光
创建其他类型的光照破解
用透视揭示隐蔽敌人
使用 Z 缓冲渲染
创建 Direct3D 透视
切换 Z 缓冲
更改敌人纹理
指纹识别要揭示的模型
用缩放破解获得更宽视野
使用 NOP 的缩放破解
钩子缩放破解的皮毛
用 HUD 显示隐藏数据
创建经验 HUD
用钩子定位数据
其他 ESP 破解概览
范围破解
加载画面 HUD
选人阶段 HUD
楼层间谍破解
结束语
第 10 章 响应式破解
第 10 章 响应式破解
本章导读
观察游戏事件
监控内存
检测视觉线索
拦截网络流量
典型的数据包解析函数
一个更棘手的解析器
混合解析系统
解析器破解
执行游戏内动作
模拟键盘
SendInput() 函数
SendMessage() 函数
发送数据包
用这个调用 __thiscall
把所有部分串起来
制作完美治疗者
抵抗敌人群体控制攻击
避免浪费魔法
结束语
第 11 章 综合运用:编写自主机器人
第 11 章 综合运用:编写自主机器人
本章导读
控制理论与游戏破解
状态机
状态机与游戏破解
结合控制理论和状态机
一个基本治疗者状态机
一个复杂的假设状态机
误差校正
为恒定比率调整
实现自适应误差校正
用搜索算法寻路
两种常见搜索技术
障碍物如何干扰搜索
一个 A* 搜索算法
创建 A* 节点
编写 A* 搜索函数
创建路径列表
A* 搜索特别有用的情况
A* 搜索的其他用途
常见而酷炫的自动化破解
用洞穴机器人搜刮
存入金币和补充补给
用角色当诱饵
允许玩家编写自定义行为脚本
用战斗机器人自动化战斗
自动墙机器人
自动狙击机器人
自动放风筝机器人
结束语
第 12 章 保持隐身
第 12 章 保持隐身
本章导读
著名的反作弊软件
PunkBuster 工具包
基于签名的检测
截图
哈希验证
ESEA 反作弊工具包
VAC 工具包
DNS 缓存扫描
二进制验证
误报
GameGuard 工具包
用户模式 Rootkit
内核模式 Rootkit
Warden 工具包
停机问题
仔细管理机器人的足迹
最小化机器人足迹
掩盖足迹
教机器人检测调试器
调用 CheckRemoteDebuggerPresent()
检查中断处理程序
检查硬件断点
打印调试字符串
检查 DBG_RIPEXCEPTION 处理程序
给关键例程计时
检查调试驱动程序
反调试技术
造成不可避免的死循环
溢出栈
造成蓝屏死机
击败基于签名的检测
击败截图
击败二进制验证
击败反作弊 Rootkit
击败启发式检测
动作间隔
路径重复
不切实际的游戏时间
完美准确度
结束语
索引
资源
第四部分 创建机器人
¶
本部分包含第 9–12 章。
回到页面顶部