第1章 走进数据解密 1
1.1数据解密是什么 1
1.1.1代码逆向工程和数据逆向工程 1
1.2数据解密的方法 2
1.2.1黑盒分析法 2
1.2.2白盒分析法 2
1.2.3黑盒分析法与白盒分析法的比较 3
1.3万能的汇编语言 3
1.3.1为什么选择汇编语言 4
1.3.216位和32位的80×86汇编语言 4
1.4通用寄存器 5
1.4.1EAX、EBX、ECX和EDX寄存器 5
1.4.2EAX、EBX、ECX和EDX寄存器的用途 5
1.5变址寄存器 6
1.5.1ESI和EDI寄存器 6
1.5.2ESI和EDI寄存器的用途 6
1.6指针寄存器 6
1.6.1EBP和ESP寄存器 7
1.6.2EBP和ESP寄存器的用途 7
1.7标志寄存器 7
1.7.1EFLAGS寄存器 7
1.7.2EFLAGS寄存器的用途 8
1.8灵活的寻址方式 8
1.8.1寻址方式的分类 9
1.8.2高级语言中的数据结构和80386寻址方式的关系 9
1.980386指令 10
1.9.1Intel格式和AT&T格式的指令 10
1.9.2数据传送指令MOV、XCHG、PUSH、POP 11
1.9.3地址传送指令 12
1.9.4算数运算指令 13
1.9.5逻辑运算指令 15
1.9.6移位指令 17
1.9.7条件转移指令 18
1.9.8函数调用指令 19
1.10函数调用约定 20
1.10.13种常用的调用约定 20
1.10.2调用约定的参数传递顺序 21
1.11字节码 21
1.11.1代码和数据的区别 21
1.11.2PE文件 22
第2章 识别汇编代码的高级模式 23
2.1汇编中的常量、指针和变量——C语言中的常量、指针和变量 24
2.1.1常量、指针和变量的定义 25
2.1.2常量、指针和变量的实现机制 25
2.2汇编中的字符串——C语言中的字符串 27
2.2.1字符串的定义 27
2.2.2字符串的实现机制 27
2.3汇编中的数组——C语言中的数组 29
2.3.1数组的定义 29
2.3.2数组的实现机制 30
2.3.3维数组的实现机制 32
2.4汇编中的结构体——C语言中的结构体 34
2.4.1结构体的定义 34
2.4.2结构体的实现机制 35
2.5汇编中的条件分支语句—— 46
C语言中的条件分支语句 46
2.5.1条件分支语句的定义 46
2.5.2if的实现机制 47
2.5.3包含复杂表达式的if语句的实现机制 51
2.5.4switch语句的实现机制 60
2.6汇编中的循环——C语言中的循环 69
2.6.1循环的定义 69
2.6.2while语句的实现机制 70
2.6.3do…while语句实现机制 71
2.6.4for语句的实现机制 73
2.6.5continue和break的实现机制 74
2.7汇编中的函数——C语言中的函数 75
2.7.1函数的定义 75
2.7.2按值传递的函数的实现机制 76
2.7.3按地址传递的函数的实现机制 80
2.7.4函数的返回值实现机制 83
第3章 资源文件简介 87
3.1资源文件概述 87
3.1.1将游戏资源文件打包 87
3.1.2游戏的发动机——游戏引擎 89
3.1.3游戏的皮肤——图像 89
3.1.4游戏的声音——音频 90
3.1.5游戏的导演——脚本 90
3.2提取游戏资源的利器 91
3.2.1Susie32 91
3.2.2MultiExCommander 92
3.2.3GameExtractor 93
3.2.43DRipper 94
3.2.5RPGViewer 94
3.2.6GameViewer 94
3.3逆向数据结构的应用 94
3.3.1检测数据的安全性 95
3.3.2增加软件的兼容性 95
3.3.3挖掘未公开的技术 96
3.3.4游戏的修改 96
3.3.5网络协议的分析 97
第4章 揭秘文件数据基础——0和1 98
4.1文件数据存储原理 98
4.1.1位 99
4.1.2字节 99
4.1.3数据类型 100
4.2十六进制编辑器介绍 101
4.2.1Winhex功能介绍 101
4.2.2计算器 102
4.2.3位置管理器和书签 102
4.2.4文件同步比较 103
4.2.5数据解释器 104
4.3字符串 105
4.3.1字符串存储原理 105
4.3.2ASCII和UNICODE 107
4.4数值的表示方法 108
44.1十六进制表示方法 109
4.4.2有符号数和无符号数 109
4.5文件数据的存储顺序 110
4.5.1Little-Endian 111
4.5.2Big-Endian 112
4.6数据存储实验 112
第5章 媒体数据格式解析 117
5.1BMP图像文件格式 117
5.1.1BMP图像文件介绍 118
5.1.2BMP图像文件存储结构 118
5.1.3分析BMP图像文件结构 122
5.2PNG图像文件格式 128
5.2.1PNG图像文件介绍 128
5.2.2PNG图像文件存储结构 128
5.2.3分析PNG图像文件结构 134
5.33D模型文件介绍 145
5.3.13D中的术语 146
5.3.2X文件介绍 147
5.3.3X文件存储结构 147
5.3.4分析静态X文件结构 148
5.3.5动画原理 154
5.3.6分析动态X文件结构 155
5.4md3模型文件格式 165
5.4.1md3模型文件介绍 165
5.4.2md3模型文件存储结构 165
5.4.3分析md3模型文件结构 168
第6章 数据加密VS数据解密 177
6.1数据加密的基础 177
6.1.1AND运算 177
6.1.2OR运算 178
6.1.3XOR运算 178
6.1.4NOT运算 179
6.1.5SHL运算 179
6.1.6SHR运算 180
6.1.7位运算的应用 180
6.2游戏中常用的加密算法 181
6.2.1对称加密和非对称加密 181
6.2.2对称加密/解密和非对称加密/解密的区别 182
6.2.3XOR加密 182
6.2.4XOR加密解密分析实例 196
6.2.5MD5加密 202
6.2.6CRC加密 204
6.2.7BlowFish加密 207
6.2.8TEA加密 209
6.3自定义的加密/解密算法 211
6.3.1查找主程序中的字符串 212
6.3.2查找DLL的导出函数表 213
6.3.3使用内联汇编调用加密/解密函数 214
6.3.4调用DLL中的加密/解密函数 229
6.4实例:分析一个游戏的资源文件解密方式 242
6.4.1收集信息 242
6.4.2详细分析 244
第7章 神奇的数据压缩算法 285
7.1RLE编码的识别 286
7.1.1RLE编码介绍 286
7.1.2如何识别RLE 287
7.2Zlib编码的识别 288
7.2.1Zlib编码介绍 288
7.2.2如何识别Zlib编码 289
7.3LZSS编码的识别 290
7.3.1LZSS编码介绍 290
7.3.2如何识别LZSS编码 290
7.4LZO编码的识别 296
7.4.1LZO和MiniLZO编码介绍 296
7.4.2如何识别LZO编码 297
7.5QuickLZ编码 300
7.5.1QuickLZ编码介绍 300
7.5.2如何识别QuickLZ 301
7.6破解未知的压缩编码 302
7.6.1如何识别数据被压缩了 303
7.6.2如何破解未知的压缩编码 303
7.6.3常见的压缩编码特征 304
第8章 分析打包数据存储结构的模式 305
8.1常见的打包文件的数据结构存储模式 305
8.1.1目录结构 306
8.1.2分目录结构 308
8.1.3外部目录结构 311
8.1.4数据块结构 312
8.1.5分数据块结构 314
8.1.6树型结构 316
8.2验证常见的数据类型 320
8.2.1文件大小 321
8.2.2文件偏移量 321
8.2.3文件数量 323
8.2.4文件头标记 324
8.2.5文件名 324
8.2.6哈希散列值 325
8.2.7数据填充 327
8.2.8验证数据的准确性 328
8.3打包文件格式分析实例 329
8.3.1pak打包文件格式分析 329
8.3.2GPP打包文件格式分析 335
8.3.3Pack打包文件格式分析 339
8.3.4CCK打包文件格式分析 341
8.3.5PCK打包文件格式分析 360
第9章 将游戏窗口化 368
9.12D游戏窗口化 368
9.1.12D游戏窗口化理论 369
9.1.22D游戏窗口化实例 369
9.23D游戏窗口化 373
9.2.13D游戏窗口化理论 373
9.2.23D游戏窗口化实例 374
附录 386