-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

二進制分析實戰

( 簡體 字)
作者:[荷]丹尼斯·安德里斯(Dennis Andriesse)類別:1. -> 程式設計 -> 綜合
譯者:
出版社:人民郵電出版社二進制分析實戰 3dWoo書號: 55271
詢問書籍請說出此書號!

缺書
NT售價: 650

出版日:10/1/2021
頁數:376
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787115556936
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

內容簡介:

如今,讀者可以找到許多關于匯編的書籍,甚至可以找到更多有關ELF和PE二進制格式的說明。關于信息流跟蹤和符號執行也有大量的文章。但是,沒有哪本書可以向讀者展示從理解基本匯編知識到進行高級二進制分析的全過程。也沒有哪本書可以向讀者展示如何插樁二進制程序、如何使用動態污點分析來跟蹤程序執行過程中的數據或使用符號執行來自動生成漏洞利用程序。換句話說,直到現在,沒有一本書可以教你二進制分析所需的技術、工具和思維方式。
目錄:

第 一部分 二進制格式

第 1章 二進制簡介 2
1.1 C編譯過程 3
1.1.1 預處理階段 3
1.1.2 編譯階段 5
1.1.3 匯編階段 6
1.1.4 鏈接階段 7
1.2 符號和剝離的二進制文件 9
1.2.1 查看符號信息 9
1.2.2 剝離二進制文件 10
1.3 反匯編二進制文件 11
1.3.1 查看對象文件 11
1.3.2 檢查完整的二進制執行體 13
1.4 加載并執行二進制文件 17
1.5 總結 19
1.6 練習 19
第 2章 ELF格式 20
2.1 ELF頭部 22
2.1.1 e_ident數組 22
2.1.2 e_type、e_machine及e_version字段 24
2.1.3 e_entry字段 24
2.1.4 e_phoff和e_shoff字段 25
2.1.5 e_flags字段 25
2.1.6 e_ehsize字段 25
2.1.7 e_*entsize和e_*num字段 25
2.1.8 e_shstrndx字段 26
2.2 節頭 26
2.2.1 sh_name字段 27
2.2.2 sh_type字段 28
2.2.3 sh_flags字段 28
2.2.4 sh_addr、sh_offset及sh_size字段 29
2.2.5 sh_link字段 29
2.2.6 sh_info字段 29
2.2.7 sh_addralign字段 29
2.2.8 sh_entsize字段 29
2.3 節 30
2.3.1 .init和.fini節 31
2.3.2 .text節 31
2.3.3 .bss、.data及.rodata節 33
2.3.4 延遲綁定和.plt、.got及.got.plt節 33
2.3.5 .rel.*和.rela.*節 36
2.3.6 .dynamic節 37
2.3.7 .init_array和.fini_array節 38
2.3.8 .shstrtab、.symtab、.strtab、.dynsym及.dynstr節 39
2.4 程序頭 40
2.4.1 p_type字段 41
2.4.2 p_flags字段 42
2.4.3 p_offset、p_vaddr、p_paddr、p_filesz及p_memsz字段 42
2.4.4 p_align字段 42
2.5 總結 42
2.6 練習 43
第3章 PE格式簡介 44
3.1 MS-DOS頭和MS-DOS存根 45
3.2 PE簽名、PF文件頭及PE可選頭 46
3.2.1 PE簽名 48
3.2.2 PE文件頭 48
3.2.3 PE可選頭 48
3.3 節表 49
3.4 節 49
3.4.1 .edata和.idata節 50
3.4.2 PE代碼節的填充 51
3.5 總結 51
3.6 練習 51
第4章 使用libbfd創建二進制加載器 53
4.1 什么是libbfd 53
4.2 一個簡單的二進制加載接口 54
4.2.1 Binary類 56
4.2.2 Section類 57
4.2.3 Symbol類 57
4.3 實現二進制加載器 57
4.3.1 初始化libbfd并打開二進制文件 58
4.3.2 解析基礎二進制屬性 60
4.3.3 加載符號 63
4.3.4 加載節信息 66
4.4 測試二進制加載器 68
4.5 總結 71
4.6 練習 71

第二部分 二進制分析基礎

第5章 Linux二進制分析 74
5.1 使用file解決類型問題 75
5.2 使用ldd探索依賴性 77
5.3 使用xxd查看文件內容 79
5.4 使用readelf解析并提取ELF庫文件 81
5.5 使用nm解析符號 83
5.6 使用strings查看Hints 86
5.7 使用strace和ltrace跟蹤系統調用和庫文件調用 88
5.8 使用objdump檢查指令集行為 93
5.9 使用GDB轉儲動態字符串緩沖區 95
5.10 總結 97
5.11 練習 97
第6章 反匯編與二進制分析基礎 98
6.1 靜態反匯編 98
6.1.1 線性反匯編 99
6.1.2 遞歸反匯編 101
6.2 動態反匯編 104
6.2.1 示例:使用GDB跟蹤二進 制執行 105
6.2.2 代碼覆蓋策略 108
6.3 構建反匯編代碼和數據 111
6.3.1 構建代碼 112
6.3.2 構建數據 118
6.3.3 反編譯 119
6.3.4 中間語言 121
6.4 基本分析方法 123
6.4.1 二進制分析的特性 123
6.4.2 控制流分析 127
6.4.3 數據流分析 129
6.5 編譯器設置對反匯編的影響 132
6.6 總結 133
6.7 練習 134
第7章 簡單的ELF代碼注入技術 135
7.1 使用十六進制編輯器修改裸機二進制文件 135
7.1.1 在操作中觀察off-by-one漏洞 136
7.1.2 修復off-by-one漏洞 139
7.2 使用LD_PRELOAD修改共享庫行為 142
7.2.1 堆溢出漏洞 143
7.2.2 檢測堆溢出 145
7.3 注入代碼節 148
7.3.1 注入ELF節:高級概述 149
7.3.2 使用elfinject注入ELF節 151
7.4 調用注入的代碼 155
7.4.1 入口點修改 155
7.4.2 劫持構造函數和析構函數 158
7.4.3 劫持GOT條目 161
7.4.4 劫持PLT條目 164
7.4.5 重定向直接調用和間接調用 165
7.5 總結 166
7.6 練習 166

第三部分 高級二進制分析

第8章 自定義反匯編 168
8.1 為什么要自定義反匯編過程 168
8.1.1 一個自定義反匯編實例:代碼混淆 169
8.1.2 編寫自定義反匯編器的其他原因 171
8.2 Capstone介紹 172
8.2.1 Capstone安裝 173
8.2.2 Capstone線性反匯編 174
8.2.3 研究Capstone C的API 179
8.2.4 使用Capstone編寫遞歸反匯編器 180
8.3 實現一個ROP小工具掃描器 188
8.3.1 返回導向式編程簡介 189
8.3.2 尋找ROP的“gadget” 190
8.4 總結 196
8.5 練習 197
第9章 二進制插樁 198
9.1 什么是二進制插樁 198
9.1.1 二進制插樁的相關API 199
9.1.2 靜態二進制插樁和動態二進制插樁的對比 199
9.2 靜態二進制插樁 201
9.2.1 int 3方法 201
9.2.2 跳板方法 203
9.3 動態二進制插樁 207
9.3.1 DBI系統的體系結構 207
9.3.2 Pin介紹 209
9.4 使用Pin進行分析 210
9.4.1 Profiler的數據結構和創建代碼 210
9.4.2 解析函數符號 213
9.4.3 插樁基本塊 214
9.4.4 檢測控制流指令 216
9.4.5 指令、控制轉移及系統調用計數 219
9.4.6 測試Profiler 220
9.5 用Pin自動對二進制文件脫殼 224
9.5.1 可執行文件加殼器簡介 224
9.5.2 脫殼器的配置代碼及其使用的數據結構 225
9.5.3 對內存寫入插樁 228
9.5.4 插樁控制流指令 229
9.5.5 跟蹤內存寫入 229
9.5.6 檢測原始入口點并轉儲脫殼二進制文件 230
9.5.7 測試脫殼器 231
9.6 總結 236
9.7 練習 236
第 10章 動態污點分析的原理 237
10.1 什么是DTA 237
10.2 DTA三步:污點源、污點槽及污點傳播 238
10.2.1 定義污點源 238
10.2.2 定義污點槽 239
10.2.3 追蹤污點傳播 239
10.3 使用DTA檢測心臟滴血漏洞 239
10.3.1 心臟滴血漏洞概述 239
10.3.2 通過污點分析檢測心臟滴血漏洞 241
10.4 DTA設計因素:污點粒度、污點顏色及污點傳播策略 242
10.4.1 污點粒度 243
10.4.2 污點顏色 244
10.4.3 污點傳播策略 244
10.4.4 過污染和欠污染 246
10.4.5 控制依賴 246
10.4.6 影子內存 247
10.5 總結 249
10.6 練習 249
第 11章 基于libdft的動態污點分析 250
11.1 libdft簡介 250
11.1.1 libdft的內部結構 251
11.1.2 污點傳播策略指令 253
11.2 使用DTA檢測遠程控制流劫持攻擊 254
11.2.1 檢查污點信息 257
11.2.2 污點源:將收到的字節標記為污點 258
11.2.3 檢查點:檢查execve參數 260
11.2.4 檢測控制流劫持攻擊 261
11.3 用隱式流繞過DTA 266
11.4 基于DTA的數據泄露檢測器 268
11.4.1 污點源:追蹤打開文件的污點 270
11.4.2 檢查點:監控泄露數據的網絡發送 273
11.4.3 檢測數據泄露 275
11.5 總結 277
11.6 練習 277
第 12章 符號執行原理 278
12.1 符號執行概述 278
12.1.1 符號執行與正常執行的對比 279
12.1.2 符號執行的變體和局限 282
12.1.3 提高符號執行的可擴展性 286
12.2 使用Z3進行約束求解 288
12.2.1 證明指令的可達性 288
12.2.2 證明指令的不可達性 291
12.2.3 證明公式的永真性 292
12.2.4 簡化表達式 293
12.2.5 使用位向量對機器碼建立約束模型 294
12.2.6 用位向量求解不透明謂詞 296
12.3 總結 296
12.4 練習 297
第 13章 使用Triton實現符號執行 298
13.1 Triton的介紹 298
13.2 使用抽象語法樹維護符號狀態 299
13.2.1 完整的抽象語法樹 301
13.2.2 使用引用的抽象語法樹 301
13.3 使用Triton進行后向切片 302
13.3.1 Triton的頭文件以及相關配置 304
13.3.2 符號化配置文件 305
13.3.3 模擬指令 306
13.3.4 設置Triton的體系結構 307
13.3.5 計算后向切片 308
13.4 使用Triton提升代碼覆蓋率 310
13.4.1 創建符號變量 312
13.4.2 尋找新路徑的解 313
13.4.3 測試代碼覆蓋工具 316
13.5 漏洞利用自動化 319
13.5.1 包含脆弱調用點的程序 320
13.5.2 查找脆弱調用點的地址 323
13.5.3 構建漏洞利用生成器 325
13.5.4 獲取root權限的Shell 331
13.6 總結 334
13.7 練習 334

第四部分 附錄

附錄A x86匯編快速入門 336
A.1 匯編程序的布局 336
A.1.1 匯編指令、偽指令、標號及注釋 337
A.1.2 代碼與數據分離 338
A.1.3 AT&T和Intel語法 339
A.2 x86指令結構 339
A.2.1 x86指令的匯編層表示 339
A.2.2 x86指令的機器級結構 339
A.2.3 寄存器操作數 340
A.2.4 內存操作數 342
A.2.5 立即數 343
A.3 常見的x86指令 343
A.3.1 比較操作數和設置狀態標志位 344
A.3.2 實現系統調用 345
A.3.3 實現條件跳轉 345
A.3.4 加載內存地址 345
A.4 匯編的通用代碼構造 345
A.4.1 棧 346
A.4.2 函數調用與函數棧幀 347
A.4.3 條件分支 351
A.4.4 循環 352
附錄B 使用libelf實現PT_NOTE覆蓋 354
B.1 請求頭 354
B.2 elfinject使用的數據結構 355
B.3 初始化libelf 356
B.4 獲取可執行頭 360
B.5 查找PT_NOTE段 360
B.6 注入代碼 362
B.7 為注入的節對齊加載地址 362
B.8 覆蓋.note.ABI-tag節頭 363
B.9 設置注入節的名稱 367
B.10 覆蓋PT_NOTE程序頭 369
B.11 修改入口點 372
附錄C 二進制分析工具清單 373
C.1 反匯編工具 373
C.1.1 IDA Pro(Windows、Linux、macOS) 373
C.1.2 Hopper(Linux、macOS) 373
C.1.3 ODA(所有操作系統) 374
C.1.4 Binary Ninja(Windows、Linux、macOS) 374
C.1.5 Relyze(Windows) 374
C.1.6 Medusa(Windows、Linux) 374
C.1.7 radare(Windows、Linux、macOS) 374
C.1.8 objdump(Linux、macOS) 374
C.2 調試器 374
C.2.1 GDB(Linux) 374
C.2.2 OllyDbg(Windows) 375
C.2.3 Windbg(Windows) 375
C.2.4 Bochs(Windows、Linux、macOS) 375
C.3 反匯編框架 375
C.3.1 Capstone(Windows、Linux、macOS ) 375
C.3.2 distorm3(Windows、Linux、macOS) 375
C.3.3 udis86(Linux、macOS) 375
C.4 二進制分析框架 376
C.4.1 angr(Windows、Linux、macOS) 376
C.4.2 Pin(Windows、Linux、macOS) 376
C.4.3 Dyninst(Windows、Linux) 376
C.4.4 Unicorn(Windows、Linux、macOS) 376
C.4.5 libdft(Linux) 376
C.4.6 Triton(Windows、Linux、macOS) 376
序: