第1章 走进数据解密
1.1 数据解密是什么
1.1.1 代码逆向工程和数据逆向工程
1.2 数据解密的方法
1.2.1 黑盒分析法
1.2.2 白盒分析法
1.2.3 黑盒分析法与白盒分析法的比较
1.3 万能的汇编语言
1.3.1 为什么选择汇编语言
1.3.2 16位和32位的80x86汇编语言
1.4 通用寄存器
1.4.1 EAX、EBX、ECX和EDX寄存器
1.4.2 EAX、EBX、ECX和EDX寄存器的用途
1.5 变址寄存器
1.5.1 ESI和EDI寄存器
1.5.2 ESI和EDI寄存器的用途
1.6 指针寄存器
1.6.1 EBP和ESP寄存器
1.6.2 EBP和ESP寄存器的用途
1.7 标志寄存器
1.7.1 EFLAGS寄存器
1.7.2 EFLAGS寄存器的用途
1.8 灵活的寻址方式
1.8.1 寻址方式的分类
1.8.2 高级语言中的数据结构和80386寻址方式的关系
1.9 80386指令
1.9.1 Intel格式和AT&T格式的指令
1.9.2 数据传送指令MOV、XCHG、PUSH、POP
1.9.3 地址传送指令
1.9.4 算数运算指令
1.9.5 逻辑运算指令
1.9.6 移位指令
1.9.7 条件转移指令
1.9.8 函数调用指令
1.1 0函数调用约定
1.1 0.1 3种常用的调用约定
1.1 0.2 调用约定的参数传递顺序
1.1 1字节码
1.1 1.1 代码和数据的区别
1.1 1.2 PE文件
第2章 识别汇编代码的高级模式
2.1 汇编中的常量、指针和变量——C语言中的常量、指针和变量
2.1.1 常量、指针和变量的定义
2.1.2 常量、指针和变量的实现机制
2.2 汇编中的字符串——C语言中的字符串
2.2.1 字符串的定义
2.2.2 字符串的实现机制
2.3 汇编中的数组——C语言中的数组
2.3.1 数组的定义
2.3.2 数组的实现机制
2.3.3 二维数组的实现机制
2.4 汇编中的结构体——C语言中的结构体
2.4.1 结构体的定义
2.4.2 结构体的实现机制
2.5 汇编中的条件分支语句——C语言中的条件分支语句
2.5.1 条件分支语句的定义
2.5.2 if的实现机制
2.5.3 包含复杂表达式的if语句的实现机制
2.5.4 switch语句的实现机制
2.6 汇编中的循环——C语言中的循环
2.6.1 循环的定义
2.6.2 while语句的实现机制
2.6.3 do...while语句实现机制
2.6.4 for语句的实现机制
2.6.5 continue和break的实现机制
2.7 汇编中的函数——C语言中的函数
2.7.1 函数的定义
2.7.2 按值传递的函数的实现机制
2.7.3 按地址传递的函数的实现机制
2.7.4 函数的返回值实现机制
第3章 资源文件简介
3.1 资源文件概述
3.1.1 将游戏资源文件打包
3.1.2 游戏的发动机——游戏引擎
3.1.3 游戏的皮肤——图像
3.1.4 游戏的声音——音频
3.1.5 游戏的导演——脚本
3.2 提取游戏资源的利器
3.2.1 Susie3
3.2.2 MultiExCommander
3.2.3 GameExtractor
3.2.4 3DRipper
3.2.5 RPGViewer
3.2.6 GameViewer
3.3 逆向数据结构的应用
3.3.1 检测数据的安全性
3.3.2 增加软件的兼容性
3.3.3 挖掘未公开的技术
3.3.4 游戏的修改
3.3.5 网络协议的分析
第4章 揭秘文件数据基础——0和
4.1 文件数据存储原理
4.1.1 位
4.1.2 字节
4.1.3 数据类型
4.2 十六进制编辑器介绍
4.2.1 Winhex功能介绍
4.2.2 计算器
4.2.3 位置管理器和书签
4.2.4 文件同步比较
4.2.5 数据解释器
4.3 字符串
4.3.1 字符串存储原理
4.3.2 ASCII和UNICODE
4.4 数值的表示方法
4.4.1 十六进制表示方法
4.4.2 有符号数和无符号数
4.5 文件数据的存储顺序
4.5.1 Little-Endian
4.5.2 Big-Endian
4.6 数据存储实验
第5章 媒体数据格式解析
5.1 BMP图像文件格式
5.1.1 BMP图像文件介绍
5.1.2 BMP图像文件存储结构
5.1.3 分析BMP图像文件结构
5.2 PNG图像文件格式
5.2.1 PNG图像文件介绍
5.2.2 PNG图像文件存储结构
5.2.3 分析PNG图像文件结构
5.3 3D模型文件介绍
5.3.1 3D中的术语
5.3.2 X文件介绍
5.3.3 X文件存储结构
5.3.4 分析静态X文件结构
5.3.5 动画原理
5.3.6 分析动态X文件结构
5.4 md3模型文件格式
5.4.1 md3模型文件介绍
5.4.2 md3模型文件存储结构
5.4.3 分析md3模型文件结构
第6章 数据加密vs数据解密
6.1 数据加密的基础
6.1.1 AND运算
6.1.2 OR运算
6.1.3 XOR运算
6.1.4 NOT运算
6.1.5 SHL运算
6.1.6 SHR运算
6.1.7 位运算的应用
6.2 游戏中常用的加密算法
6.2.1 对称加密和非对称加密
6.2.2 对称加密/解密和非对称加密/解密的区别
6.2.3 XOR加密
6.2.4 XOR加密解密分析实例
6.2.5 MD5加密
6.2.6 CRC加密
6.2.7 BlowFish加密
6.2.8 TEA加密
6.3 自定义的加密/解密算法
6.3.1 查找主程序中的字符串
6.3.2 查找DLL的导出函数表
6.3.3 使用内联汇编调用加密/解密函数
6.3.4 调用DLL中的加密/解密函数
6.4 实例:分析一个游戏的资源文件解密方式
6.4.1 收集信息
6.4.2 详细分析
第7章 神奇的数据压缩算法
7.1 RLE编码的识别
7.1.1 RLE编码介绍
7.1.2 如何识别RLE
7.2 Zlib编码的识别
7.2.1 Zlib编码介绍
7.2.2 如何识别Zlib编码
7.3 LZSS编码的识别
7.3.1 LZSS编码介绍
7.3.2 如何识别LZSS编码
7.4 LZO编码的识别
7.4.1 LZO和MiniLZO编码介绍
7.4.2 如何识别LZO编码
7.5 QuickLZ编码
7.5.1 QuickLZ编码介绍
7.5.2 如何识别QuickLZ
7.6 破解未知的压缩编码
7.6.1 如何识别数据被压缩了
7.6.2 如何破解未知的压缩编码
7.6.3 常见的压缩编码特征
第8章 分析打包数据存储结构的模式
8.1 常见的打包文件的数据结构存储模式
8.1.1 目录结构
8.1.2 分目录结构
8.1.3 外部目录结构
8.1.4 数据块结构
8.1.5 分数据块结构
8.1.6 树型结构
8.2 验证常见的数据类型
8.2.1 文件大小
8.2.2 文件偏移量
8.2.3 文件数量
8.2.4 文件头标记
8.2.5 文件名
8.2.6 哈希散列值
8.2.7 数据填充
8.2.8 验证数据的准确性
8.3 打包文件格式分析实例
8.3.1 pak打包文件格式分析
8.3.2 GPP打包文件格式分析
8.3.3 Pack打包文件格式分析
8.3.4 CCK打包文件格式分析
8.3.5 PCK打包文件格式分析
第9章 将游戏窗口化
9.1 2D游戏窗口化
9.1.1 2D游戏窗口化理论
9.1.2 2D游戏窗口化实例
9.2 3D游戏窗口化
9.2.1 3D游戏窗口化理论
9.2.2 3D游戏窗口化实例