第1部分 逆嚮101
         第1章 基礎 3
         1.1 什麼是逆嚮工程 3
         1.2 軟件逆嚮工程:逆嚮 4
         1.3 逆嚮應用 4
         1.3.1 與安全相關的逆嚮 5
         1.3.2 軟件開發中的逆嚮 8
         1.4 底層軟件 9
         1.4.1 匯編語言 10
         1.4.2 編譯器 11
         1.4.3 虛擬機和字節碼 12
         1.4.4 操作係統 13
         1.5 逆嚮過程 13
         1.5.1 係統級逆嚮 14
         1.5.2 代碼級逆嚮 14
         1.6 工具 14
         1.6.1 係統監控工具 15
         1.6.2 反匯編器 15
         1.6.3 調試器 15
         1.6.4 反編譯器 16
         1.7 逆嚮閤法嗎? 17
         1.7.1 互操作性 17
         1.7.2 競爭 18
         1.7.3 版權法 19
         1.7.4 商業機密和專利權 20
         1.7.5 美國數字韆禧版權法 20
         1.7.6 DMCA案例 22
         1.7.7 許可證協議 23
         1.8 代碼範例與工具 23
         1.9 結論 23
         第2章 底層軟件 25
         2.1 高階視角 26
         2.1.1 程序結構 26
         2.1.2 數據管理 29
         2.1.3 控製流 32
         2.1.4 高級語言 33
         2.2 低階視角 37
         2.2.1 底層數據管理 37
         2.2.2 控製流 43
         2.3 匯編語言101 44
         2.3.1 寄存器 44
         2.3.2 標誌位 46
         2.3.3 指令格式 47
         2.3.4 基本指令 48
         2.3.5 範例 52
         2.4 編譯器和編譯入門 53
         2.4.1 定義編譯器 54
         2.4.2 編譯器架構 55
         2.4.3 列錶文件 58
         2.4.4 專用編譯器 59
         2.5 執行環境 60
         2.5.1 軟件執行環境(虛擬機) 60
         2.5.2 現代處理器的硬件執行環境 63
         2.6 結論 68
         第3章 Windows基礎知識 69
         3.1 組件及基本架構 70
         3.1.1 簡要迴顧 70
         3.1.2 特徵 70
         3.1.3 支持的硬件 71
         3.2 內存管理 71
         3.2.1 虛擬內存和分頁 72
         3.2.2 工作集 74
         3.2.3 內核內存和用戶內存 74
         3.2.4 內核內存空間 75
         3.2.5 區段對象 77
         3.2.6 VAD樹 78
         3.2.7 用戶模式的內存分配 78
         3.2.8 內存管理API 79
         3.3 對象與句柄 80
         命名對象 81
         3.4 進程與綫程 83
         3.4.1 進程 84
         3.4.2 綫程 84
         3.4.3 運行狀態切換 85
         3.4.4 同步對象 86
         3.4.5 進程初始化順序 87
         3.5 應用程序編程接口 88
         3.5.1 Win32 API 88
         3.5.2 本地API 90
         3.5.3 係統調用機製 91
         3.6 可執行文件格式 93
         3.6.1 基本概念 93
         3.6.2 映像區段(Image Sections) 95
         3.6.3 區段對齊(Section Alignment) 95
         3.6.4 動態鏈接庫 96
         3.6.5 頭部 97
         3.6.6 導入與導齣 99
         3.6.7 目錄 99
         3.7 輸入與輸齣 103
         3.7.1 I/O係統 103
         3.7.2 Win32子係統 104
         3.8 結構化異常處理 105
         3.9 結論 107
         第4章 逆嚮工具 109
         4.1 不同的逆嚮方法 110
         4.1.1 離綫代碼分析 110
         4.1.2 現場代碼分析 110
         4.2 反匯編器——ILDasm 110
         4.3 調試器 116
         4.3.1 用戶模式調試器 118
         4.3.2 內核模式調試器 122
         4.4 反編譯器 129
         4.5 係統監控工具 129
         4.6 修補工具 131
         Hex Workshop 131
         4.7 其他類型的逆嚮工具 133
         可執行程序轉儲工具 133
         4.8 結論 138
         第2部分 應用逆嚮
         第5章 未公開的技術 141
         5.1 逆嚮和互操作性 142
         5.2 基本原則 142
         5.3 定位未公開的API函數 143
         我們要找什麼? 144
         5.4 案例研究:NTDLL.DLL中的
         5.4 Generic Table API 145
         5.4.1 RtlInitializeGenericTable 146
         5.4.2 RtlNumberGenericTableElements 151
         5.4.3 RtlIsGenericTableEmpty 152
         5.4.4 RtlGetElementGenericTable 153
         5.4.5 RtlInsertElementGenericTable 168
         5.4.6 RtlLookupElementGenericTable 188
         5.4.7 RtlDeleteElementGenericTable 193
         5.4.8 思路整理 194
         5.5 結論 196
         第6章 破譯文件格式 199
         6.1 Cryptex 200
         6.2 使用Cryptex 201
         6.3 逆嚮Cryptex 202
         6.4 口令校驗過程 207
         6.4.1 捕獲“Bad Password”消息 207
         6.4.2 口令變換算法 210
         6.4.3 對口令作hash處理 213
         6.5 目錄結構 218
         6.5.1 分析目錄處理代碼 218
         6.5.2 分析文件項 223
         6.6 轉儲目錄結構 227
         6.7 文件提取過程 228
         6.7.1 掃描文件列錶 234
         6.7.2 解密文件 235
         6.7.3 浮點運算代碼 236
         6.7.4 解密循環 238
         6.7.5 驗證Hash值 239
         6.8 要點總結 239
         6.9 進一步討論 241
         6.10 結論 242
         第7章 審查程序的二進製碼 243
         7.1 定義問題 243
         7.2 漏洞 245
         7.2.1 堆棧溢齣 245
         7.2.2 堆溢齣 255
         7.2.3 字符串過濾程序 256
         7.2.4 整數溢齣 256
         7.2.5 類型轉換錯誤 260
         7.3 案例研究:IIS索引服務漏洞 262
         7.3.1 CVariableSet::
         7.3.1 AddExtensionControlBlock 263
         7.3.2 DecodeURLEscapes 267
         7.4 結論 271
         第8章 逆嚮惡意軟件 273
         8.1 惡意軟件的分類 274
         8.1.1 病毒 274
         8.1.2 蠕蟲 274
         8.1.3 特洛伊木馬 275
         8.1.4 後門 276
         8.1.5 移動代碼 276
         8.1.6 廣告軟件和間諜軟件 276
         8.2 粘人的軟件(Sticky
         8.2 Software) 277
         8.3 未來的惡意軟件 278
         8.3.1 盜取信息的蠕蟲 278
         8.3.2 BIOS/固件惡意軟件 279
         8.4 惡意軟件的使用 280
         8.5 惡意軟件的弱點 281
         8.6 多態 282
         8.7 變形 283
         8.8 建立安全的環境 285
         8.9 Backdoor.Hacarmy.D 285
         8.9.1 脫殼可執行文件 286
         8.9.2 初次印象 290
         8.9.3 初次安裝 291
         8.9.4 初始化通信設置 294
         8.9.5 連接到服務器 296
         8.9.6 連接信道 298
         8.9.7 與後門進行通信 299
         8.9.8 運行SOCK4服務器 303
         8.9.9 清理犯罪現場 303
         8.10 The Backdoor.Hacarmy.D:
         8.10 命令參考 304
         8.11 結論 306
         第3部分 破解
         第9章 盜版與拷貝保護 309
         9.1 世界中的版權 309
         9.2 社會方麵 310
         9.3 軟件盜版 310
         9.3.1 明確問題 311
         9.3.2 群破解 312
         9.3.3 需求 313
         9.3.4 理論上不可破解的模型 314
         9.4 各種類型的保護 314
         9.4.1 基於介質的保護 314
         9.4.2 序列號 315
         9.4.3 質詢響應和在綫激活 315
         9.4.4 基於硬件的保護 316
         9.4.5 軟件即服務 317
         9.5 高級保護的概念 318
         加密處理器 318
         9.6 數字版權管理 319
         數字版權管理模型 320
         9.7 加水印 321
         9.8 可信計算 322
         9.9 破解拷貝保護技術 324
         9.10 結論 324
         第10章 反逆嚮技術 327
         10.1 為什麼要反逆嚮? 327
         10.2 反逆嚮的基本方法 328
         10.3 消除符號信息 329
         10.4 代碼加密 330
         10.5 活躍的反調試器技術 331
         10.5.1 調試器基礎 331
         10.5.2 API函數IsDebuggerPresent 332
         10.5.3 SystemKernelDebugger
         10.5.3 Information 333
         10.5.4 用單步中斷檢測SoftICE 334
         10.5.5 陷阱標誌 335
         10.5.6 代碼校驗和 335
         10.6 迷惑反匯編器 336
         10.6.1 綫性掃描反匯編器 337
         10.6.2 遞歸遍曆反匯編器 338
         10.6.3 應用 343
         10.7 代碼混淆 344
         10.8 控製流變換 346
         10.8.1 暗晦謂詞 346
         10.8.2 迷惑反編譯器 348
         10.8.3 錶譯碼 348
         10.8.4 內聯和外聯 353
         10.8.5 交叉代碼 354
         10.8.6 次序變換 355
         10.9 數據變換 355
         10.9.1 修改變量編碼 355
         10.9.2 重構數組 356
         10.10 結論 356
         第11章 突破保護 357
         11.1 修補程序(Patching) 358
         11.2 生成密鑰 364
         11.3 取密鑰生成算法 365
         11.4 高級破解:Defender 370
         11.4.1 逆嚮Defender的初始化程序 377
         11.4.2 分析解密後的代碼 387
         11.4.3 SoftICE的消失 396
         11.4.4 逆嚮分析第二個綫程 396
         11.4.5 擊敗“殺手(Killer)”綫程 399
         11.4.6 加載KERNEL32.DLL 400
         11.4.7 再加密函數 401
         11.4.8 迴到入口點 402
         11.4.9 解析程序的參數 404
         11.4.10 處理用戶名 406
         11.4.11 驗證用戶信息 407
         11.4.12 解密代碼 409
         11.4.13 暴力破解Defender 409
         11.5 Defender中的保護技術 415
         11.5.1 局部化的函數級加密 415
         11.5.2 混淆應用程序與操作係統
         11.5.2 之間的接口 416
         11.5.3 處理器時間戳驗證綫程 417
         11.5.4 在運行時生成解密密鑰 418
         11.5.5 重度內聯 419
         11.6 結論 419
         第4部分 反匯編之外
         第12章 逆嚮.NET 423
         12.1 基本原則 424
         12.2 .NET基礎 426
         12.2.1 托管代碼 426
         12.2.2 .NET程序設計語言 428
         12.2.3 通用類型係統 428
         12.3 中間語言 429
         12.3.1 求值堆棧 430
         12.3.2 活動記錄 430
         12.3.3 IL指令 430
         12.3.4 代碼實例 433
         12.4 反編譯器 443
         12.5 混淆器 444
         12.5.1 重命名符號 444
         12.5.2 控製流混淆 444
         12.5.3 中斷反編譯與中斷反匯編 444
         12.6 逆嚮混淆代碼 445
         12.6.1 XenoCode混淆器 446
         12.6.2 DotFuscator by Preemptive
         12.6.2 Solutions 448
         12.6.3 Remotesoft 混淆器與連接器 451
         12.6.4 Remotesoft Protector 452
         12.6.5 預編譯的匯編程序 453
         12.6.6 加密的匯編程序 453
         12.7 結論 455
         第13章 反編譯 457
         13.1 本地代碼的反編譯:是一個
         13.1 解決不瞭的問題嗎? 457
         13.2 典型的反編譯器架構 459
         13.3 中間錶示 459
         13.3.1 錶達式和錶達式樹 461
         13.3.2 控製流圖 462
         13.4 前端 463
         13.4.1 語義分析 463
         13.4.2 生成控製流圖 464
         13.5 代碼分析 466
         13.5.1 數據流分析 466
         13.5.2 類型分析 472
         13.5.3 控製流分析 475
         13.5.4 查找庫函數 475
         13.6 反編譯器後端 476
         13.7 Real-World IA-32反編譯 477
         13.8 結論 477
         附錄A 揭密代碼結構 479
         附錄B 理解編譯後的算術運算 519
         附錄C 破譯程序數據 537
         索引 561
      · · · · · ·     (
收起)