編輯推薦
IDA Pro開發者親自推薦
步入IDA Pro和逆嚮工程的殿堂
逆嚮工程師的必備手冊
內容簡介
《IDA Pro指南(第2版)》共分為六部分,首先介紹瞭反匯編與逆嚮工程的基本信息和IDA Pro的背景知識,接著討論瞭IDA Pro的基本用法和高級用法,然後講解瞭其高擴展性及其在安全領域的實際應用,最後介紹瞭IDA的內置調試器(包括Bochs調試器),一方麵讓用戶對IDA Pro有全麵深入的瞭解,另一方麵讓讀者掌握IDA Pro在現實中的應用。相比上一版,這一版以IDA6。0為基礎,介紹瞭它的新的、基於Qt的圖形用戶界麵,以及IDAPython插件。
《IDA Pro指南(第2版)》適閤IT領域的所有安全工作者閱讀。
作者簡介
Chris Eagle是美國加利福尼亞州濛特雷海軍研究生院計算機科學係高級講師。他設計瞭很多IDA插件,還與人閤著瞭Gray Hat Hacking一書。他應邀在Balckhat、Defcon、Toorcon和Shmoocon等眾多安全會議上發錶過演講。
目錄
第一部分 IDA簡介
第1章 反匯編簡介
1.1 反匯編理論
1.2 何為反匯編
1.3 為何反匯編
1.3.1 分析惡意軟件
1.3.2 漏洞分析
1.3.3 軟件互操作性
1.3.4 編譯器驗證
1.3.5 顯示調試信息
1.4 如何反匯編
1.4.1 基本的反匯編算法
1.4.2 綫性掃描反匯編
1.4.3 遞歸下降反匯編
1.5 小結
第2章 逆嚮與反匯編工具
2.1 分類工具
2.1.1 file
2.1.2 PE Tools
2.1.3 PEiD
2.2 摘要工具
2.2.1 nm
2.2.2 ldd
2.2.3 objdump
2.2.4 otool
2.2.5 dumpbin
2.2.6 c++filt
2.3 深度檢測工具
2.3.1 strings
2.3.2 反匯編器
2.4 小結
第3章 IDA Pro背景知識
3.1 Hex-Rays公司的反盜版策略
3.2 獲取IDA Pro
3.2.1 IDA版本
3.2.2 IDA許可證
3.2.3 購買IDA
3.2.4 升級IDA
3.3 IDA支持資源
3.4 安裝IDA
3.4.1 Windows安裝
3.4.2 OS X和Linux安裝
3.4.3 IDA與SELinux
3.4.4 32位IDA與64位IDA
3.4.5 IDA目錄的結構
3.5 IDA用戶界麵
3.6 小結
第二部分 IDA基本用法
第4章 IDA入門
4.1 啓動IDA
4.1.1 IDA文件加載
4.1.2 使用二進製文件加載器
4.2 IDA數據庫文件
4.2.1 創建IDA數據庫
4.2.2 關閉IDA數據庫
4.2.3 重新打開數據庫
4.3 IDA桌麵簡介
4.4 初始分析時的桌麵行為
4.5 IDA桌麵提示和技巧
4.6 報告bug
4.7 小結
第5章 IDA數據顯示窗口
5.1 IDA主要的數據顯示窗口
5.1.1 反匯編窗口
5.1.2 函數窗口
5.1.3 輸齣窗口
5.2 次要的IDA顯示窗口
5.2.1 十六進製窗口
5.2.2 導齣窗口
5.2.3 導入窗口
5.2.4 結構體窗口
5.2.5 枚舉窗口
5.3 其他IDA顯示窗口
5.3.1 Strings 窗口
5.3.2 Names 窗口
5.3.3 段窗口
5.3.4 簽名窗口
5.3.5 類型庫窗口
5.3.6 函數調用窗口
5.3.7 問題窗口
5.4 小結
第6章 反匯編導航
6.1 基本IDA導航
6.1.1 雙擊導航
6.1.2 跳轉到地址
6.1.3 導航曆史記錄
6.2 棧幀
6.2.1 調用約定
6.2.2 局部變量布局
6.2.3 棧幀示例
6.2.4 IDA棧視圖
6.3 搜索數據庫
6.3.1 文本搜索
6.3.2 二進製搜索
6.4 小結
第7章 反匯編操作
7.1 名稱與命名
7.1.1 參數和局部變量
7.1.2 已命名的位置
7.1.3 寄存器名稱
7.2 IDA中的注釋
7.2.1 常規注釋
7.2.2 可重復注釋
7.2.3 在前注釋和在後注釋
7.2.4 函數注釋
7.3 基本代碼轉換
7.3.1 代碼顯示選項
7.3.2 格式化指令操作數
7.3.3 操縱函數
7.3.4 數據與代碼互相轉換
7.4 基本數據轉換
7.4.1 指定數據大小
7.4.2 處理字符串
7.4.3 指定數組
7.5 小結
第8章 數據類型與數據結構
8.1 識彆數據結構的用法
8.1.1 數組成員訪問
8.1.2 結構體成員訪問
8.2 創建IDA結構體
8.2.1 創建一個新的結構體(或聯閤)
8.2.2 編輯結構體成員
8.2.3 用棧幀作為專用結構體
8.3 使用結構體模闆
8.4 導入新的結構體
8.4.1 解析C結構體聲明
8.4.2 解析C頭文件
8.5 使用標準結構體
8.6 IDA TIL文件
8.6.1 加載新的TIL文件
8.6.2 共享TIL文件
8.7 C++逆嚮工程基礎
8.7.1 this指針
8.7.2 虛函數和虛錶
8.7.3 對象生命周期
8.7.4 名稱改編
8.7.5 運行時類型識彆
8.7.6 繼承關係
8.7.7 C++逆嚮工程參考文獻
8.8 小結
第9章 交叉引用與繪圖功能
9.1 交叉引用
9.1.1 代碼交叉引用
9.1.2 數據交叉引用
9.1.3 交叉引用列錶
9.1.4 函數調用
9.2 IDA繪圖
9.2.1 IDA外部(第三方)圖形
9.2.2 IDA的集成繪圖視圖
9.3 小結
第10章 IDA的多種麵孔
10.1 控製颱模式IDA
10.1.1 控製颱模式的共同特性
10.1.2 Windows控製颱
10.1.3 Linux控製颱
10.1.4 OS X控製颱
10.2 使用IDA的批量模式
10.3 小結
第三部分 IDA高級應用
第11章 定製IDA
11.1 配置文件
11.1.1 主配置文件:ida.cfg
11.1.2 GUI配置文件:idagui.cfg
11.1.3 控製颱配置文件:idatui.cfg
11.2 其他IDA配置選項
11.2.1 IDA顔色
11.2.2 定製IDA工具欄
11.3 小結
第12章 使用FLIRT簽名來識彆庫
12.1 快速庫識彆和鑒定技術
12.2 應用FLIRT簽名
12.3 創建FLIRT簽名文件
12.3.1 創建簽名概述
12.3.2 識彆和獲取靜態庫
12.3.3 創建模式文件
12.3.4 創建簽名文件
12.3.5 啓動簽名
12.4 小結
第13章 擴展IDA的知識
13.1 擴充函數信息
13.1.1 IDS文件
13.1.2 創建IDS文件
13.2 使用loadint擴充預定義注釋
13.3 小結
第14章 修補二進製文件及其他IDA限製
14.1 隱藏的補丁程序菜單
14.1.1 更改數據庫字節
14.1.2 更改數據庫中的字
14.1.3 使用匯編對話框
14.2 IDA輸齣文件與補丁生成
14.2.1 IDA生成的MAP文件
14.2.2 IDA生成的ASM文件
14.2.3 IDA生成的INC文件
14.2.4 IDA生成的LST文件
14.2.5 IDA生成的EXE文件
14.2.6 IDA生成的DIF文件
14.2.7 IDA生成的HTML文件
14.3 小結
第四部分 擴展IDA的功能
第15章 編寫IDA腳本
15.1 執行腳本的基礎知識
15.2 IDC語言
15.2.1 IDC變量
15.2.2 IDC錶達式
15.2.3 IDC語句
15.2.4 IDC函數
15.2.5 IDC對象
15.2.6 IDC程序
15.2.7 IDC錯誤處理
15.2.8 IDC永久數據存儲
15.3 關聯IDC腳本與熱鍵
15.4 有用的IDC函數
15.4.1 讀取和修改數據的函數
15.4.2 用戶交互函數
15.4.3 字符串操縱函數
15.4.4 文件輸入/輸齣函數
15.4.5 操縱數據庫名稱
15.4.6 處理函數的函數
15.4.7 代碼交叉引用函數
15.4.8 數據交叉引用函數
15.4.9 數據庫操縱函數
15.4.10 數據庫搜索函數
15.4.11 反匯編行組件
15.5 IDC腳本示例
15.5.1 枚舉函數
15.5.2 枚舉指令
15.5.3 枚舉交叉引用
15.5.4 枚舉導齣的函數
15.5.5 查找和標記函數參數
15.5.6 模擬匯編語言行為
15.6 IDAPython
15.7 IDAPython腳本示例
15.7.1 枚舉函數
15.7.2 枚舉指令
15.7.3 枚舉交叉引用
15.7.4 枚舉導齣的函數
15.8 小結
第16章 IDA軟件開發工具包
16.1 SDK簡介
16.1.1 安裝SDK
16.1.2 SDK的布局
16.1.3 配置構建環境
16.2 IDA應用編程接口
16.2.1 頭文件概述
16.2.2 網絡節點
16.2.3 有用的SDK數據類型
16.2.4 常用的SDK函數
16.2.5 IDA API迭代技巧
16.3 小結
第17章 IDA插件體係結構
17.1 編寫插件
17.1.1 插件生命周期
17.1.2 插件初始化
17.1.3 事件通知
17.1.4 插件執行
17.2 構建插件
17.3 插件安裝
17.4 插件配置
17.5 擴展IDC
17.6 插件用戶界麵選項
17.6.1 使用SDK的"選擇器"對話框
17.6.2 使用SDK創建自定義錶單
17.6.3 僅用於Windows的用戶界麵生成技巧
17.6.4 使用Qt生成用戶界麵
17.7 腳本化插件
17.8 小結
第18章 二進製文件與IDA加載器模塊
18.1 未知文件分析
18.2 手動加載一個Windows PE文件
18.3 IDA加載器模塊
18.4 使用SDK編寫IDA加載器
18.4.1 "傻瓜式"加載器
18.4.2 構建IDA加載器模塊
18.4.3 IDA pcap加載器
18.5 其他加載器策略
18.6 編寫腳本化加載器
18.7 小結
第19章 IDA處理器模塊
19.1 Python字節碼
19.2 Python解釋器
19.3 使用SDK編寫處理器模塊
19.3.1 processor_t結構體
19.3.2 LPH 結構體的基本初始化
19.3.3 分析器
19.3.4 模擬器
19.3.5 輸齣器
19.3.6 處理器通知
19.3.7 其他processor_t成員
19.4 構建處理器模塊
19.5 定製現有的處理器
19.6 處理器模塊體係結構
19.7 編寫處理器模塊
19.8 小結
第五部分 實際應用
第20章 編譯器變體
20.1 跳轉錶與分支語句
20.2 RTTI實現
20.3 定位main函數
20.4 調試版與發行版二進製文件
20.5 其他調用約定
20.6 小結
第21章 模糊代碼分析
21.1 反靜態分析技巧
21.1.1 反匯編去同步
21.1.2 動態計算目標地址
21.1.3 導入的函數模糊
21.1.4 有針對性地攻擊分析工具
21.2 反動態分析技巧
21.2.1 檢測虛擬化
21.2.2 檢測"檢測工具"
21.2.3 檢測調試器
21.2.4 防止調試
21.3 使用IDA對二進製文件進行"靜態去模糊"
21.3.1 麵嚮腳本的去模糊
21.3.2 麵嚮模擬的去模糊
21.4 基於虛擬機的模糊
21.5 小結
第22章 漏洞分析
22.1 使用IDA發現新的漏洞
22.2 使用IDA在事後發現漏洞
22.3 IDA與破解程序開發過程
22.3.1 棧幀細目
22.3.2 定位指令序列
22.3.3 查找有用的虛擬地址
22.4 分析shellcode
22.5 小結
第23章 實用IDA插件
23.1 Hex-Rays
23.2 IDAPython
23.3 collabREate
23.4 ida-x86emu
23.5 Class Informer
23.6 MyNav
23.7 IdaPdf
23.8 小結
第六部分 IDA調試器
第24章 IDA調試器
24.1 啓動調試器
24.2 調試器的基本顯示
24.3 進程控製
24.3.1 斷點
24.3.2 跟蹤
24.3.3 棧跟蹤
24.3.4 監視
24.4 調試器任務自動化
24.4.1 為調試器操作編寫腳本
24.4.2 使用IDA插件實現調試器操作自動化
24.5 小結
第25章 反匯編器/調試器集成
25.1 背景知識
25.2 IDA數據庫與IDA調試器
25.3 調試模糊代碼
25.3.1 啓動進程
25.3.2 簡單的解密和解壓循環
25.3.3 導入錶重建
25.3.4 隱藏調試器
25.4 IDAStealth
25.5 處理異常
25.6 小結
第26章 其他調試功能
26.1 使用IDA進行遠程調試
26.1.1 使用Hex-Rays調試服務器
26.1.2 連接到遠程進程
26.1.3 遠程調試期間的異常處理
26.1.4 在遠程調試過程中使用腳本和插件
26.2 使用Bochs進行調試
26.2.1 Bochs IDB模式
26.2.2 Bochs PE模式
26.2.3 Bochs磁盤映像模式
26.3 Appcall
26.4 小結
附錄A 使用IDA免費版本5.0
附錄B IDC/SDK交叉引用
前言/序言
《IDA Pro權威指南(第2版)》內容概述 《IDA Pro權威指南(第2版)》是一本專注於 IDA Pro 逆嚮工程工具的深度教程。本書旨在為讀者提供全麵、實用的 IDA Pro 使用技巧和高級概念,幫助其掌握這一行業領先的軟件分析平颱,從而更高效地進行軟件分析、惡意代碼研究、漏洞挖掘和安全審計等工作。 第一部分: IDA Pro 基礎入門 本部分內容為讀者打下堅實的基礎,從 IDA Pro 的基本概念和界麵入手,逐步引導讀者熟悉其強大的功能。 IDA Pro 概述與安裝: 介紹 IDA Pro 的曆史、核心價值以及在信息安全領域的地位。詳細講解 IDA Pro 的安裝流程,包括不同版本的選擇、配置和許可證的激活,確保讀者能夠順利搭建起工作環境。 用戶界麵與基本操作: 深入剖析 IDA Pro 的多窗口界麵,包括反匯編窗口、十六進製窗口、棧窗口、寄存器窗口、字符串窗口、函數窗口等。教授讀者如何進行文件加載、識彆文件類型、瀏覽代碼、定位特定函數和數據,以及使用基本的導航功能。 反匯編與反編譯: 詳細解釋反匯編的工作原理,以及 IDA Pro 如何將機器碼轉化為可讀的匯編代碼。介紹 IDA Pro 的反編譯能力,講解如何利用反編譯器將匯編代碼轉換為更高級的僞代碼(如 C 語言風格),並探討反編譯的局限性和注意事項。 基本調試功能: 介紹 IDA Pro 內置的調試器,包括如何附加到目標進程、設置斷點(硬件斷點、軟件斷點)、單步執行(步入、步過、步齣)、觀察寄存器和內存狀態,以及修改程序執行流程。 第二部分: 深入 IDA Pro 的高級技巧 在掌握基礎操作後,本部分將帶領讀者深入探索 IDA Pro 的高級功能,提升分析效率和深度。 交叉引用與命名: 講解如何利用交叉引用(Xrefs)功能追蹤代碼和數據的引用關係,快速理解代碼的調用鏈和數據流。教授讀者如何為函數、變量和常量進行有意義的命名,極大地提高代碼的可讀性。 數據結構與類型定義: 介紹 IDA Pro 的類型編輯器,包括如何定義和管理數據類型(結構體、枚舉、聯閤體等)。演示如何將自動識彆的未定義數據轉換為具有清晰結構的類型,以便更好地理解內存布局和數據訪問。 腳本化與自動化: 深入介紹 IDA Pro 的腳本語言(IDC 和 Python),演示如何編寫腳本來實現重復性任務的自動化,例如批量重命名、自動分析特定模式、生成報告等。提供豐富的腳本示例,幫助讀者快速上手。 插件與擴展: 講解 IDA Pro 插件係統的強大之處,介紹如何安裝和使用現有的插件來擴展 IDA Pro 的功能,如 Ghidra、IDAPython 相關的插件、高級可視化插件等。同時,也為有編程基礎的讀者提供編寫自定義插件的思路。 代碼分析與模式識彆: 探討如何利用 IDA Pro 進行復雜的代碼分析,包括識彆常見代碼模式(如字符串加密、函數混淆、虛擬化技術等)。教授讀者如何通過分析代碼特徵來推斷程序的意圖和功能。 內存分析與取證: 結閤 IDA Pro 的內存查看和調試功能,講解如何分析進程內存,提取關鍵信息,以及在內存取證場景下的應用。 第三部分: 特定應用場景與實戰案例 本部分將 IDA Pro 的強大功能應用於實際的逆嚮工程場景,通過詳細的案例分析,鞏固讀者的知識並提升實戰能力。 惡意代碼分析: 演示如何使用 IDA Pro 分析各種類型的惡意軟件,包括病毒、蠕蟲、木馬、勒索軟件等。重點講解如何識彆惡意行為、追蹤 C&C 通信、解密敏感數據等。 漏洞挖掘與利用: 講解如何利用 IDA Pro 查找軟件漏洞,如緩衝區溢齣、整數溢齣、邏輯錯誤等。演示如何分析漏洞的成因,並初步嘗試編寫簡單的漏洞利用代碼。 軟件保護與反分析技術: 探討軟件開發人員常用的代碼保護技術,如加殼、混淆、反調試、反虛擬機等。演示如何使用 IDA Pro 來繞過或分析這些保護措施。 固件逆嚮: 介紹 IDA Pro 在嵌入式係統和固件逆嚮分析中的應用,包括如何加載和分析固件鏡像,理解硬件交互,以及固件級彆的漏洞分析。 API Hooking 與函數跟蹤: 講解如何使用 IDA Pro 進行 API Hooking,監控程序對係統 API 的調用,以及更精細地跟蹤函數的執行流程。 本書的特點: 理論與實踐相結閤: 既深入講解 IDA Pro 的原理和概念,又提供大量實用的操作技巧和案例分析。 循序漸進的教學方式: 從基礎入門到高級應用,逐步引導讀者掌握 IDA Pro 的各項功能。 豐富的示例代碼與技巧: 大量提供可操作的示例,幫助讀者快速理解和應用所學知識。 麵嚮專業人士: 適閤安全研究員、漏洞挖掘者、惡意代碼分析師、軟件開發者等專業人士。 通過閱讀《IDA Pro權威指南(第2版)》,讀者將能夠全麵掌握 IDA Pro 的核心功能和高級技巧,並能夠將其應用於實際的安全分析和研究工作中,從而有效提升在軟件安全領域的專業能力。
這本書的包裝,第一眼就給我一種“值得期待”的信號。它並不是那種簡單的塑料薄膜包裹,而是用瞭更有質感的材質,並且在拆封的過程中,就能感受到一種“小心翼翼”的保護。打開書本,首先映入眼簾的是那種經典的、專業書籍常用的封麵設計,簡潔大方,卻又不失技術感。書名的字體和排版,都顯得非常講究,一看就知道是經過精心設計,並非隨意為之。我尤其注意到,這本書的重量和厚度,都恰到好處,不會顯得笨重,也不會過於單薄,給人一種“內容充實”的感覺。翻開扉頁,我注意到紙張的質量非常好,觸感溫潤,而且印刷非常清晰,即使是細小的文字,也不會模糊不清。這種對細節的關注,讓我對接下來的閱讀充滿瞭信心。我相信,一本在包裝和裝幀上都如此用心的書,其內容也一定不會讓我失望。