第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字節(jié)碼
1.1 1.1 代碼和數據的區(qū)別
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 匯編中的循環(huán)——C語言中的循環(huán)
2.6.1 循環(huán)的定義
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 游戲的發(fā)動機——游戲引擎
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 網絡協(xié)議的分析
第4章 揭秘文件數據基礎——0和
4.1 文件數據存儲原理
4.1.1 位
4.1.2 字節(jié)
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 分析靜態(tài)X文件結構
5.3.5 動畫原理
5.3.6 分析動態(tài)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 對稱加密/解密和非對稱加密/解密的區(qū)別
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 使用內聯(lián)匯編調用加密/解密函數
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游戲窗口化實例