《揭秘数据解密的关键技术》一书即将上市
书号:978-7-115-19670-5
出版社:人民邮电出版社
估价:49
内容提要
本书是一本以游戏资源文件格式为研究对象的数据逆向工程的技术书籍,主要讲解如何分析和研究自定义文件格式的数据结构。本书内容包含反汇编的阅读和理解,数据在计算机中的存储原理,常用媒体格式的解析,加密和解密的识别和分析,数据压缩的特征识别,打包文件格式的识别和游戏窗口化的方法。本书对每一个问题都给出了详细和完整的分析过程,力求用最通俗和简单的方法让读者学会分析和研究自定义文件格式。
本书适合对数据解密、游戏资源提取、软件逆向工程感兴趣的读者以及广大编程爱好者阅读。
感谢
本书献给国内所有热爱修改游戏,以及不求回报无私奉献自己的时间和精力奋战在游戏汉化第一线的朋友们,非常感谢出版社黄焱为本书所做的编辑工作,同时还要感谢我的同学张介溆和孙庚教授,多谢你们审校本书,指出书中的错误并提出宝贵的修改意见,没有你们的工作和帮助本书是不可能完成的。
写作背景
在国内,数据解密的普及程度明显相当不足,在高校里也不太重视这个领域的知识,甚至在市面上的技术书籍也未曾见过一本专门讨论数据解密的书籍,而最接近这个领域的书籍在国内有“看雪论坛”的《加密与解密》,但此书重点是研究代码的逆向分析而非数据的逆向分析。
数据解密在日常的应用非常广泛,包括游戏资源提取、游戏外挂和游戏脚本修改器这些软件的开发都与数据解密形影不离。本书以研究和分析游戏中的资源文件数据结构作为学习数据解密的例子,通过学习这些例子读者能将此技术应用到其他软件领域。技术是一把双刃剑,本书的写作目的并不是鼓励读者通过学习本书的内容后去搞破坏和谋取利益,本书的写作目的很简单,那就是尽笔者最大的努力和能力告诉读者数据解密是怎么一回事罢了。
本书包含了笔者早年学习数据解密技术的资料、经验和研究成果,读者可以将此书作为一本数据解密的入门书籍来学习。本书并没有什么高深莫测的知识,研究和分析非公开数据结构只需读者具备耐性、时间和精力,如果读者已经具备了这三个条件,那么相信本书能很好地引导您入门。
内容简介
本书一共分为9章,每章节的内容组织如下。
第1章 走进数据解密
介绍了数据解密常用的方法和汇编语言的入门知识。如果读者已经具备了基本的汇编语言知识可以略过。数据解密并不一定需要掌握汇编知识,但有时候汇编是找到答案的惟一途径。
第2章 识别汇编代码的高级模式
代码逆向分析属于代码逆向工程的范畴。使用代码逆向有时或许并不一定是最好的方法但却是万能的方法,代码逆向分析成功与否很大程度上依赖于反汇编代码分析水平和经验,代码逆向分析主要是要找到反汇编代码和高级语言之间的对应关系,通过观察分析反汇编代码来识别出代码原来的高级模式是代码逆向工程的一项重要技能。
第3章 资源文件简介
简要介绍了游戏资源文件的定义和几个游戏资源提取工具,并分析了数据解密在不同领域上的应用。
第4章 揭秘文件数据基础——0和1
数据解密的基础是深入了解和明白数据在计算机上的存储形式,很多一直使用高级语言开发的人都不清楚自己在程序中定义的数据在计算机上是如何存储的,不知道数据如何存储就不知道如何解密数据,通过本章的学习有助于读者更深刻地理解数据的存储。
第5章 媒体数据格式解析
研究和分析游戏的资源文件主要是游戏中的图像文件和模型文件,所以有必要熟悉几种常用的多媒体文件存储格式,掌握图像文件和模型文件中大致要存储哪些数据对分析游戏使用的非公开数据结构的图像和模型格式非常有帮助。
第6章 数据加密VS 数据解密
现在很多游戏都使用了加密技术保护资源文件不被轻易提取,知己知彼才能在数据解密中少走弯路并找到解密的捷径和方法。本章主要讲解了一些游戏中常使用的公开加密算法识别方法和解密自定义加密算法的方法。
第7章 神奇的数据压缩算法
游戏几乎不可能不使用压缩技术处理资源文件,压缩过的资源文件对解密者又是一层障碍。本章介绍了压缩资源文件常用的压缩编码并总结了一些压缩编码的识别方法。
第8章 分析打包数据存储结构的模式
游戏的资源文件也叫归档、打包文件和封包文件。虽然不同的游戏的资源文件格式也不尽相同,但总的来说目前的打包文件格式可以分为6大类。本章主要讲解了6种不同类型的打包文件格式,详细分析了5个打包文件的过程和方法。
第9章 将游戏窗口化
在单机状态下使用RING3级的调试器调试全屏游戏首要解决的问题是如何不让游戏全屏显示,因为使用RING3级调试器调试全屏游戏时游戏可能会挡住了调试器的界面或只能以低分辨率显示调试器界面,这样对调试程序很不方便,本章通过实例讲解如何将游戏窗口化。
本书适合哪些读者
本书是针对有基本编程能力的读者,如果你不会基本的编程,那么很遗憾,本书不适合你。本书没有限制读者需要掌握什么编程语言,编程语言都是相通的,由于本书采用了C语言和Intel 80386汇编语言进行写作,所以读者阅读本书时至少需要能看懂C语言语法。对于汇编语言,读者不一定要掌握,但如果不熟悉汇编语言会影响本书中某些章节的阅读。
除此以外:
·如果你对C语言在汇编中的实现机制和汇编语言还原成C语言感兴趣;
·如果你对数据在计算机中的存储形式感兴趣;
·如果你对加密和压缩算法的识别感兴趣;
·如果你对游戏的资源文件格式研究和分析感兴趣;
·如果你对游戏资源的提取感兴趣;
·如果你对MOD游戏感兴趣。
那么恭喜你,本书正适合你。
目录
第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.2 16位和32位的80x86汇编语言 4
1.4 通用寄存器 5
1.4.1 EAX、EBX、ECX和EDX寄存器 5
1.4.2 EAX、EBX、ECX和EDX寄存器的用途 5
1.5 变址寄存器 6
1.5.1 ESI和EDI寄存器 6
1.5.2 ESI和EDI寄存器的用途 6
1.6 指针寄存器 6
1.6.1 EBP和ESP寄存器 7
1.6.2 EBP和ESP寄存器的用途 7
1.7 标志寄存器 7
1.7.1 EFLAGS寄存器 7
1.7.2 EFLAGS寄存器的用途 8
1.8 灵活的寻址方式 8
1.8.1 寻址方式的分类 9
1.8.2 高级语言中的数据结构和80386寻址方式的关系 9
1.9 80386指令 10
1.9.1 Intel格式和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.1 3种常用的调用约定 20
1.10.2 调用约定的参数传递顺序 21
1.11 字节码 21
1.11.1 代码和数据的区别 21
1.11.2 PE文件 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 汇编中的条件分支语句——C语言中的条件分支语句 46
2.5.1 条件分支语句的定义 46
2.5.2 if的实现机制 47
2.5.3 包含复杂表达式的if语句的实现机制 51
2.5.4 switch语句的实现机制 60
2.6 汇编中的循环——C语言中的循环 69
2.6.1 循环的定义 69
2.6.2 while语句的实现机制 70
2.6.3 do...while语句实现机制 71
2.6.4 for语句的实现机制 73
2.6.5 continue和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.1 Susie32 91
3.2.2 MultiEx Commander 92
3.2.3 Game Extractor 93
3.2.4 3D Ripper 94
3.2.5 RPGViewer 94
3.2.6 GameViewer 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.1 Winhex功能介绍 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.2 ASCII和UNICODE 107
4.4 数值的表示方法 108
4.4.1 十六进制表示方法 109
4.4.2 有符号数和无符号数 109
4.5 文件数据的存储顺序 110
4.5.1 Little-Endian 111
4.5.2 Big-Endian 112
4.6 数据存储实验 112
第5章 媒体数据格式解析 117
5.1 BMP图像文件格式 117
5.1.1 BMP图像文件介绍 118
5.1.2 BMP图像文件存储结构 118
5.1.3 分析BMP图像文件结构 122
5.2 PNG图像文件格式 128
5.2.1 PNG图像文件介绍 128
5.2.2 PNG图像文件存储结构 128
5.2.3 分析PNG图像文件结构 134
5.3 3D模型文件介绍 145
5.3.1 3D中的术语 146
5.3.2 X文件介绍 147
5.3.3 X文件存储结构 147
5.3.4 分析静态X文件结构 148
5.3.5 动画原理 154
5.3.6 分析动态X文件结构 155
5.4 md3模型文件格式 165
5.4.1 md3模型文件介绍 165
5.4.2 md3模型文件存储结构 165
5.4.3 分析md3模型文件结构 168
第6章 数据加密vs数据解密 177
6.1 数据加密的基础 177
6.1.1 AND运算 177
6.1.2 OR运算 178
6.1.3 XOR运算 178
6.1.4 NOT运算 179
6.1.5 SHL运算 179
6.1.6 SHR运算 180
6.1.7 位运算的应用 180
6.2 游戏中常用的加密算法 181
6.2.1 对称加密和非对称加密 181
6.2.2 对称加/解密和非对称加/解密的区别 182
6.2.3 XOR加密 182
6.2.4 XOR加密解密分析实例 196
6.2.5 MD5加密 202
6.2.6 CRC加密 204
6.2.7 BlowFish加密 207
6.2.8 TEA加密 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.1 RLE编码的识别 286
7.1.1 RLE编码介绍 286
7.1.2 如何识别RLE 287
7.2 Zlib编码的识别 288
7.2.1 Zlib编码介绍 288
7.2.2 如何识别Zlib编码 289
7.3 LZSS编码的识别 290
7.3.1 LZSS编码介绍 290
7.3.2 如何识别LZSS编码 290
7.4 LZO编码的识别 296
7.4.1 LZO和MiniLZO编码介绍 296
7.4.2 如何识别LZO编码 297
7.5 QuickLZ编码 300
7.5.1 QuickLZ编码介绍 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.1 pak打包文件格式分析 329
8.3.2 GPP打包文件格式分析 335
8.3.3 Pack打包文件格式分析 339
8.3.4 CCK打包文件格式分析 341
8.3.5 PCK打包文件格式分析 360
第9章 将游戏窗口化 368
9.1 2D游戏窗口化 368
9.1.1 2D游戏窗口化理论 369
9.1.2 2D游戏窗口化实例 369
9.2 3D游戏窗口化 373
9.2.1 3D游戏窗口化理论 373
9.2.2 3D游戏窗口化实例 374
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课