第一部分 IDA 簡介
第1 章 反匯編簡介 2
1.1 反匯編理論 2
1.2 何為反匯編 3
1.3 為何反匯編 3
1.3.1 分析惡意軟件 4
1.3.2 漏洞分析 4
1.3.3 軟件互操作性 4
1.3.4 編譯器驗證 4
1.3.5 顯示調試信息 5
1.4 如何反匯編 5
1.4.1 基本的反匯編算法 5
1.4.2 綫性掃描反匯編 6
1.4.3 遞歸下降反匯編 7
1.5 小結 10
第2 章 逆嚮與反匯編工具 11
2.1 分類工具 11
2.1.1 file 11
2.1.2 PE Tools 13
2.1.3 PEiD 14
2.2 摘要工具 14
2.2.1 nm 15
2.2.2 ldd 16
2.2.3 objdump 18
2.2.4 otool 18
2.2.5 dumpbin 19
2.2.6 c++filt 19
2.3 深度檢測工具 20
2.3.1 strings 20
2.3.2 反匯編器 22
2.4 小結 23
第3 章 IDA Pro 背景知識 24
3.1 Hex-Rays 公司的反盜版策略 24
3.2 獲取IDA Pro 25
3.2.1 IDA 版本 25
3.2.2 IDA 許可證 25
3.2.3 購買IDA 26
3.2.4 升級IDA 26
3.3 IDA 支持資源 26
3.4 安裝IDA 27
3.4.1 Windows 安裝 28
3.4.2 OS X 和Linux 安裝 28
3.4.3 IDA 與SELinux 29
3.4.4 32 位IDA 與64 位IDA 29
3.4.5 IDA 目錄的結構 30
3.5 IDA 用戶界麵 30
3.6 小結 31
第二部分 IDA 基本用法
第4 章 IDA 入門 34
4.1 啓動IDA 34
4.1.1 IDA 文件加載 35
4.1.2 使用二進製文件加載器 37
4.2 IDA 數據庫文件 38
4.2.1 創建IDA 數據庫 39
4.2.2 關閉IDA 數據庫 40
4.2.3 重新打開數據庫 41
4.3 IDA 桌麵簡介 42
4.4 初始分析時的桌麵行為 44
4.5 IDA 桌麵提示和技巧 45
4.6 報告bug 45
4.7 小結 46
第5 章 IDA 數據顯示窗口 47
5.1 IDA 主要的數據顯示窗口 47
5.1.1 反匯編窗口 47
5.1.2 函數窗口 52
5.1.3 輸齣窗口 52
5.2 次要的IDA 顯示窗口 52
5.2.1 十六進製窗口 52
5.2.2 導齣窗口 53
5.2.3 導入窗口 54
5.2.4 結構體窗口 54
5.2.5 枚舉窗口 55
5.3 其他IDA 顯示窗口 55
5.3.1 Strings 窗口 55
5.3.2 Names 窗口 57
5.3.3 段窗口 58
5.3.4 簽名窗口 58
5.3.5 類型庫窗口 59
5.3.6 函數調用窗口 59
5.3.7 問題窗口 60
5.4 小結 61
第6 章 反匯編導航 62
6.1 基本IDA 導航 62
6.1.1 雙擊導航 62
6.1.2 跳轉到地址 64
6.1.3 導航曆史記錄 64
6.2 棧幀 65
6.2.1 調用約定 66
6.2.2 局部變量布局 69
6.2.3 棧幀示例 70
6.2.4 IDA 棧視圖 73
6.3 搜索數據庫 77
6.3.1 文本搜索 77
6.3.2 二進製搜索 77
6.4 小結 78
第7 章 反匯編操作 79
7.1 名稱與命名 79
7.1.1 參數和局部變量 79
7.1.2 已命名的位置 80
7.1.3 寄存器名稱 82
7.2 IDA 中的注釋 82
7.2.1 常規注釋 83
7.2.2 可重復注釋 84
7.2.3 在前注釋和在後注釋 84
7.2.4 函數注釋 84
7.3 基本代碼轉換 85
7.3.1 代碼顯示選項 85
7.3.2 格式化指令操作數 87
7.3.3 操縱函數 88
7.3.4 數據與代碼互相轉換 93
7.4 基本數據轉換 94
7.4.1 指定數據大小 94
7.4.2 處理字符串 95
7.4.3 指定數組 97
7.5 小結 99
第8 章 數據類型與數據結構 100
8.1 識彆數據結構的用法 102
8.1.1 數組成員訪問 102
8.1.2 結構體成員訪問 107
8.2 創建IDA 結構體 112
8.2.1 創建一個新的結構體(或聯閤) 112
8.2.2 編輯結構體成員 113
8.2.3 用棧幀作為專用結構體 115
8.3 使用結構體模闆 115
8.4 導入新的結構體 118
8.4.1 解析C 結構體聲明 118
8.4.2 解析C 頭文件 119
8.5 使用標準結構體 120
8.6 IDA TIL 文件 123
8.6.1 加載新的TIL 文件 123
8.6.2 共享TIL 文件 123
8.7 C++逆嚮工程基礎 124
8.7.1 this 指針 124
8.7.2 虛函數和虛錶 125
8.7.3 對象生命周期 128
8.7.4 名稱改編 129
8.7.5 運行時類型識彆 130
8.7.6 繼承關係 131
8.7.7 C++逆嚮工程參考文獻 132
8.8 小結 132
第9 章 交叉引用與繪圖功能 133
9.1 交叉引用 133
9.1.1 代碼交叉引用 134
9.1.2 數據交叉引用 136
9.1.3 交叉引用列錶 138
9.1.4 函數調用 139
9.2 IDA 繪圖 140
9.2.1 IDA 外部(第三方)圖形 140
9.2.2 IDA 的集成繪圖視圖 147
9.3 小結 149
第10 章 IDA 的多種麵孔 150
10.1 控製颱模式IDA 150
10.1.1 控製颱模式的共同特性 150
10.1.2 Windows 控製颱 151
10.1.3 Linux 控製颱 152
10.1.4 OS X 控製颱 154
10.2 使用IDA 的批量模式 156
10.3 小結 157
第三部分 IDA 高級應用
第11 章 定製IDA 160
11.1 配置文件 160
11.1.1 主配置文件:ida.cfg 160
11.1.2 GUI 配置文件:idagui.cfg 161
11.1.3 控製颱配置文件:idatui.cfg 163
11.2 其他IDA 配置選項 164
11.2.1 IDA 顔色 165
11.2.2 定製IDA 工具欄 165
11.3 小結 167
第12 章 使用FLIRT 簽名來識彆庫 168
12.1 快速庫識彆和鑒定技術 168
12.2 應用FLIRT 簽名 169
12.3 創建FLIRT 簽名文件 172
12.3.1 創建簽名概述 172
12.3.2 識彆和獲取靜態庫 173
12.3.3 創建模式文件 174
12.3.4 創建簽名文件 175
12.3.5 啓動簽名 178
12.4 小結 178
第13 章 擴展IDA 的知識 179
13.1 擴充函數信息 179
13.1.1 IDS 文件 181
13.1.2 創建IDS 文件 182
13.2 使用loadint 擴充預定義注釋 184
13.3 小結 185
第14 章 修補二進製文件及其他IDA 限製 186
14.1 隱藏的補丁程序菜單 186
14.1.1 更改數據庫字節 187
14.1.2 更改數據庫中的字 187
14.1.3 使用匯編對話框 188
14.2 IDA 輸齣文件與補丁生成 189
14.2.1 IDA 生成的MAP 文件 189
14.2.2 IDA 生成的ASM 文件 190
14.2.3 IDA 生成的INC 文件 191
14.2.4 IDA 生成的LST 文件 191
14.2.5 IDA 生成的EXE 文件 191
14.2.6 IDA 生成的DIF 文件 191
14.2.7 IDA 生成的HTML 文件 192
14.3 小結 192
第四部分 擴展IDA 的功能
第15 章 編寫IDA 腳本 194
15.1 執行腳本的基礎知識 194
15.2 IDC 語言 196
15.2.1 IDC 變量 196
15.2.2 IDC 錶達式 197
15.2.3 IDC 語句 197
15.2.4 IDC 函數 198
15.2.5 IDC 對象 200
15.2.6 IDC 程序 200
15.2.7 IDC 錯誤處理 201
15.2.8 IDC 永久數據存儲 202
15.3 關聯IDC 腳本與熱鍵 203
15.4 有用的IDC 函數 204
15.4.1 讀取和修改數據的函數 204
15.4.2 用戶交互函數 205
15.4.3 字符串操縱函數 206
15.4.4 文件輸入/輸齣函數 206
15.4.5 操縱數據庫名稱 207
15.4.6 處理函數的函數 207
15.4.7 代碼交叉引用函數 208
15.4.8 數據交叉引用函數 209
15.4.9 數據庫操縱函數 209
15.4.10 數據庫搜索函數 210
15.4.11 反匯編行組件 210
15.5 IDC 腳本示例 211
15.5.1 枚舉函數 211
15.5.2 枚舉指令 212
15.5.3 枚舉交叉引用 212
15.5.4 枚舉導齣的函數 214
15.5.5 查找和標記函數參數 215
15.5.6 模擬匯編語言行為 217
15.6 IDAPython 219
15.7 IDAPython 腳本示例 220
15.7.1 枚舉函數 220
15.7.2 枚舉指令 221
15.7.3 枚舉交叉引用 222
15.7.4 枚舉導齣的函數 222
15.8 小結 223
第16 章 IDA 軟件開發工具包 224
16.1 SDK 簡介 225
16.1.1 安裝SDK 225
16.1.2 SDK 的布局 225
16.1.3 配置構建環境 226
16.2 IDA 應用編程接口 227
16.2.1 頭文件概述 228
16.2.2 網絡節點 230
16.2.3 有用的SDK 數據類型 237
16.2.4 常用的SDK 函數 238
16.2.5 IDA API 迭代技巧 242
16.3 小結 246
第17 章 IDA 插件體係結構 247
17.1 編寫插件 247
17.1.1 插件生命周期 249
17.1.2 插件初始化 250
17.1.3 事件通知 251
17.1.4 插件執行 252
17.2 構建插件 254
17.3 插件安裝 258
17.4 插件配置 259
17.5 擴展IDC 259
17.6 插件用戶界麵選項 262
17.6.1 使用SDK 的“選擇器”對話框 262
17.6.2 使用SDK 創建自定義錶單 265
17.6.3 僅用於Windows 的用戶界麵生成技巧 269
17.6.4 使用Qt 生成用戶界麵 269
17.7 腳本化插件 271
17.8 小結 272
第18 章 二進製文件與IDA 加載器模塊 273
18.1 未知文件分析 274
18.2 手動加載一個Windows PE 文件 275
18.3 IDA 加載器模塊 281
18.4 使用SDK 編寫IDA 加載器 282
18.4.1 “傻瓜式”加載器 284
18.4.2 構建IDA 加載器模塊 288
18.4.3 IDA pcap 加載器 288
18.5 其他加載器策略 294
18.6 編寫腳本化加載器 294
18.7 小結 296
第19 章 IDA 處理器模塊 297
19.1 Python 字節碼 298
19.2 Python 解釋器 298
19.3 使用SDK 編寫處理器模塊 299
19.3.1 processor_t 結構體 299
19.3.2 LPH 結構體的基本初始化 300
19.3.3 分析器 303
19.3.4 模擬器 308
19.3.5 輸齣器 310
19.3.6 處理器通知 315
19.3.7 其他processor_t 成員 316
19.4 構建處理器模塊 318
19.5 定製現有的處理器 322
19.6 處理器模塊體係結構 324
19.7 編寫處理器模塊 325
19.8 小結 326
第五部分 實際應用
第20 章 編譯器變體 328
20.1 跳轉錶與分支語句 328
20.2 RTTI 實現 332
20.3 定位main 函數 332
20.4 調試版與發行版二進製文件 339
20.5 其他調用約定 341
20.6 小結 342
第21 章 模糊代碼分析 344
21.1 反靜態分析技巧 344
21.1.1 反匯編去同步 344
21.1.2 動態計算目標地址 347
21.1.3 導入的函數模糊 353
21.1.4 有針對性地攻擊分析工具 356
21.2 反動態分析技巧 357
21.2.1 檢測虛擬化 357
21.2.2 檢測“檢測工具” 358
21.2.3 檢測調試器 359
21.2.4 防止調試 360
21.3 使用IDA 對二進製文件進行“靜態去模糊” 361
21.3.1 麵嚮腳本的去模糊 361
21.3.2 麵嚮模擬的去模糊 366
21.4 基於虛擬機的模糊 375
21.5 小結 377
第22 章 漏洞分析 378
22.1 使用IDA 發現新的漏洞 379
22.2 使用IDA 在事後發現漏洞 384
22.3 IDA 與破解程序開發過程 388
22.3.1 棧幀細目 389
22.3.2 定位指令序列 392
22.3.3 查找有用的虛擬地址 394
22.4 分析shellcode 395
22.5 小結 397
第23 章 實用IDA 插件 398
23.1 Hex-Rays 398
23.2 IDAPython 401
23.3 collabREate 402
23.4 ida-x86emu 404
23.5 Class Informer 404
23.6 MyNav 406
23.7 IdaPdf 407
23.8 小結 408
第六部分 IDA 調試器
第24 章 IDA 調試器 410
24.1 啓動調試器 410
24.2 調試器的基本顯示 414
24.3 進程控製 416
24.3.1 斷點 417
24.3.2 跟蹤 420
24.3.3 棧跟蹤 422
24.3.4 監視 423
24.4 調試器任務自動化 423
24.4.1 為調試器操作編寫腳本 424
24.4.2 使用IDA 插件實現調試器操作自動化 428
24.5 小結 430
第25 章 反匯編器/調試器集成 431
25.1 背景知識 431
25.2 IDA 數據庫與IDA 調試器 432
25.3 調試模糊代碼 434
25.3.1 啓動進程 435
25.3.2 簡單的解密和解壓循環 436
25.3.3 導入錶重建 439
25.3.4 隱藏調試器 443
25.4 IDAStealth 448
25.5 處理異常 449
25.6 小結 454
第26 章 其他調試功能 455
26.1 使用IDA 進行遠程調試 455
26.1.1 使用Hex-Rays 調試服務器 455
26.1.2 連接到遠程進程 458
26.1.3 遠程調試期間的異常處理 458
26.1.4 在遠程調試過程中使用腳本和插件 458
26.2 使用Bochs 進行調試 459
26.2.1 Bochs IDB 模式 459
26.2.2 Bochs PE 模式 460
26.2.3 Bochs 磁盤映像模式 461
26.3 Appcall 461
26.4 小結 463
附錄A 使用IDA 免費版本5.0 464
附錄B IDC/SDK 交叉引用 466
· · · · · · (
收起)