预购商品
书目分类
特别推荐
基礎知識的介紹包含Windows 例外機制、核心基礎、偵錯器、加密演算法等,核心技術方面則有反組譯技術、靜態分析技術、動態分析技術、程式植入技術、Hook 技術、漏洞分析技術、脫殼技術等;以軟體逆向為切入點,講述了軟體安全領域相關的基礎知識和技能。讀者閱讀本書後,很容易就能在逆向分析、漏洞分析、安全程式設計、病毒分析等領域進行擴展。這些知識點的相互關聯,將促使讀者開闊思路,融會貫通,領悟更多的學習方法,提升自身的學習能力。 本書特色 本書技術覆蓋面廣、可操作性強,詳細而透徹地說明了系統底層的基礎知識和安全核心技術的實作技能,適合安全技術相關工作者、對逆向調試技術/軟體保護感興趣之人員,及關注個人資訊安全、電腦安全技術並想瞭解技術內幕的讀者閱讀。
基礎篇 CHAPTER 01 基礎知識 1.1 什麼是加密與解密 1.1.1 軟體的加密與解密 1.1.2 軟體逆向工程 1.1.3 逆向工程分析技術 1.2 文字字元 1.2.1 ASCII 與Unicode 字元集 1.2.2 位元組儲存順序 1.3 Windows 作業系統 1.3.1 Win32 API 函數 1.3.2 WOW64 1.3.3 Windows 訊息機制 1.3.4 虛擬記憶體 偵錯篇 CHAPTER 02 動態分析技術 2.1 OllyDbg 偵錯器 2.1.1 OllyDbg 的介面 2.1.2 OllyDbg 的設定 2.1.3 基本操作 2.1.4 常用中斷點 2.1.5 外掛程式 2.1.6 Run trace 2.1.7 Hit trace 2.1.8 偵錯符號 2.1.9 載入程式 2.1.10 OllyDbg 的常見問題 2.2 x64dbg 偵錯器 2.3 MDebug 偵錯器 2.3.1 MDebug 的介面 2.3.2 運算式 2.3.3 偵錯 2.3.4 中斷點 2.3.5 MDebug 的其他功能 2.4 WinDbg 偵錯器 2.4.1 WinDbg 的安裝與設定 2.4.2 偵錯過程 2.4.3 中斷點指令 2.4.4 堆疊視窗 2.4.5 記憶體指令 2.4.6 指令稿 2.4.7 偵錯功能擴充 2.4.8 小結 CHAPTER 03 靜態分析技術 3.1 檔案類型分析 3.2 反組譯引擎 3.2.1 OllyDbg 的ODDisasm 3.2.2 BeaEngine 3.2.3 Udis86 3.2.4 Capstone 3.2.5 AsmJit 3.2.6 Keystone 3.2.7 小結 3.3 靜態反組譯 3.3.1 IDA Pro 簡介 3.3.2 IDA 的設定 3.3.3 IDA 主視窗 3.3.4 交換參考 3.3.5 參考重新命名 3.3.6 標籤的用法 3.3.7 格式化指令運算元 3.3.8 函數的操作 3.3.9 程式和資料轉換 3.3.10 字串 3.3.11 陣列 3.3.12 結構 3.3.13 列舉類型 3.3.14 變數 3.3.15 FLIRT 3.3.16 IDC 指令稿 3.3.17 外掛程式 3.3.18 IDA 偵錯器 3.3.19 遠端偵錯 3.3.20 其他功能 3.3.21 小結 3.4 十六進位工具 3.5 靜態分析技術應用實例 3.5.1 解密初步 3.5.2 逆向工程初步 解密篇 CHAPTER 04 逆向工程分析技術 4.1 32 位元軟體逆向工程技術 4.1.1 啟動函數 4.1.2 函數 4.1.3 資料結構 4.1.4 虛擬函數 4.1.5 控制敘述 4.1.6 循環敘述 4.1.7 數學運算子 4.1.8 文字字串 4.1.9 指令修改技巧 4.2 64 位元軟體逆向工程技術 4.2.1 暫存器 4.2.2 函數 4.2.3 資料結構 4.2.4 控制敘述 4.2.5 循環敘述 4.2.6 數學運算子 4.2.7 虛擬函數 4.2.8 小結 CHAPTER 05 展示版本保護技術 5.1 序號保護方式 5.1.1 序號保護機制 5.1.2 如何攻擊序號保護機制 5.1.3 字串比較形式 5.1.4 製作註冊機 5.2 警告視窗 5.3 時間限制 5.3.1 計時器 5.3.2 時間限制 5.3.3 拆解時間限制保護 5.4 選單功能限制 5.4.1 相關函數 5.4.2 拆解選單限制保護 5.5 KeyFile 保護 5.5.1 相關API 函數 5.5.2 拆解KeyFile 保護 5.6 網路驗證 5.6.1 相關函數 5.6.2 破解網路驗證的一般想法 5.7 光碟檢測 5.7.1 相關函數 5.7.2 拆解光碟保護 5.8 只執行1 個實例 5.8.1 實現方法 5.8.2 實例 5.9 常用中斷點設定技巧 CHAPTER 06 加密演算法 6.1 單向雜湊演算法 6.1.1 MD5 演算法 6.1.2 SHA 演算法 6.1.3 SM3 密碼雜湊演算法 6.1.4 小結 6.2 對稱加密演算法 6.2.1 RC4 流密碼 6.2.2 TEA 演算法 6.2.3 IDEA 演算法 6.2.4 BlowFish 演算法 6.2.5 AES 演算法 6.2.6 SM4 區塊編碼器演算法 6.2.7 小結 6.3 公開金鑰加密演算法 6.3.1 RSA 演算法 6.3.2 ElGamal 公開金鑰演算法 6.3.3 DSA 數位簽章演算法 6.3.4 橢圓曲線密碼編碼學 6.3.5 SM2 演算法 6.4 其他演算法 6.4.1 CRC32 演算法 6.4.2 Base64 編碼 6.5 常見的加密函數庫介面及其識別 6.5.1 Miracl 大數運算函數庫 6.5.2 FGInt 6.5.3 其他加密演算法函數庫介紹 6.6 加密演算法在軟體保護中的應用 系統篇 CHAPTER 07 Windows 核心基礎 7.1 核心理論基礎 7.1.1 許可權等級 7.1.2 記憶體空間版面配置 7.1.3 Windows 與核心啟動過程 7.1.4 Windows R3 與R0 通訊 7.1.5 核心函數 7.1.6 核心驅動模組 7.2 核心重要資料結構 7.2.1 核心物件 7.2.2 SSDT 7.2.3 TEB 7.2.4 PEB 7.3 核心偵錯基礎 7.3.1 使用WinDbg 架設雙機偵錯環境 7.3.2 載入核心驅動並設定符號表 7.3.3 SSDT 與Shadow SSDT 的檢視 CHAPTER 08 Windows 下的例外處理 8.1 例外處理的基本概念 8.1.1 例外列表 8.1.2 例外處理的基本過程 8.2 SEH 的概念及基礎 8.2.1 SEH 的相關資料結構 8.2.2 SEH 處理常式的安裝和移除 8.2.3 SEH 實例追蹤 8.3 SEH 例外處理常式原理及設計 8.3.1 例外分發的詳細過程 8.3.2 執行緒例外處理 8.3.3 例外處理的堆疊展開 8.3.4 MSC 編譯器對執行緒例外處理的增強 8.3.5 頂層例外處理 8.3.6 例外處理常式的安全性 8.4 向量化例外處理 8.4.1 向量化例外處理的使用 8.4.2 VEH 與SEH 的異同 8.4.3 向量化例外處理的新內容 8.5 x64 平台上的例外處理 8.5.1 原生x64 程式的例外分發 8.5.2 WOW64 下的例外分發 8.6 例外處理常式設計中的注意事項 8.7 例外處理的實際應用 8.7.1 使用SEH 對使用者輸入進行驗證 8.7.2 SEH 在加密與解密中的應用 8.7.3 用VEH 實現API Hook 8.8 本章小結 CHAPTER 09 Win32 偵錯API 9.1 偵錯相關函數簡要說明 9.2 偵錯事件 9.3 建立並追蹤處理程序 9.4 偵錯循環本體 9.5 處理偵錯事件 9.6 執行緒環境 9.7 將程式植入處理程序 CHAPTER 10 VT 技術 10.1 硬體虛擬化的基本概念 10.1.1 概述 10.1.2 相關結構和組合語言指令 10.1.3 EPT 機制 10.2 VT 技術的應用 10.2.1 編譯執行ShadowWalker 10.2.2 分析Hypervisor 10.2.3 檢測VT 支援情況 10.2.4 VMCS 的設定 10.2.5 EPT 的設定 10.2.6 開啟VT 10.2.7 記憶體隱藏的實現 10.3 VT 偵錯方法 CHAPTER 11 PE 檔案格式 11.1 PE 的基本概念 11.1.1 基底位址 11.1.2 虛擬位址 11.1.3 相對虛擬位址 11.1.4 檔案偏移位址 11.2 MS-DOS 表頭 11.3 PE 檔案表頭 11.3.1 Signature 欄位 11.3.2 IMAGE_FILE_HEADER 結構 11.3.3 IMAGE_OPTIONAL_HEADER結構 11.4 區塊 11.4.1 區塊表 11.4.2 常見區塊與區塊合併 11.4.3 區塊的對齊值 11.4.4 檔案偏移與虛擬位址的轉換 11.5 輸入表 11.5.1 輸入函數的呼叫 11.5.2 輸入表的結構 11.5.3 輸入位址表 11.5.4 輸入表實例分析 11.6 綁定輸入 11.7 輸出表 11.7.1 輸出表的結構 11.7.2 輸出表實例分析 11.8 基址重定位 11.8.1 基址重定位的概念 11.8.2 基址重定位表的結構 11.8.3 基址重定位表實例分析 11.9 資源 11.9.1 資源結構 11.9.2 資源結構實例分析 11.9.3 資源編輯工具 11.10 TLS 初始化 11.11 偵錯目錄 11.12 延遲載入資料 11.13 程式例外資料 11.14 .NET 表頭 11.15 撰寫PE 分析工具 11.15.1 檢查檔案格式 11.15.2 讀取FileHeader 和OptionalHeader 的內容 11.15.3 獲得資料目錄表資訊 11.15.4 獲得區塊表資訊 11.15.5 獲得輸出表資訊 11.15.6 獲得輸入表資訊 CHAPTER 12 植入技術 12.1 DLL 植入方法 12.1.1 透過干預輸入表處理過程載入目標DLL 12.1.2 改變程式執行流程使其主動載入目標DLL 12.1.3 利用系統機制載入DLL 12.2 DLL 植入的應用 12.3 DLL 植入的防範 12.3.1 驅動層防範 12.3.2 應用層防範 CHAPTER 13 Hook 技術 13.1 Hook 概述 13.1.1 IAT Hook 篡改MessageBox訊息 13.1.2 Inline Hook 篡改指定 MessageBox 訊息 13.2 Hook 的分類 13.2.1 Address Hook 13.2.2 Inline Hook 13.2.3 以例外處理為基礎的Hook 13.2.4 不是Hook 的Hook 13.3 Hook 位置的挑選 13.4 Hook 的典型過程 13.4.1 Address Hook 的實施過程 13.4.2 Inline Hook 的實施過程 13.4.3 以例外處理為基礎的Hook實施過程 13.4.4 二次Hook 的注意事項 13.4.5 通用Hook 引擎的實現 13.5 Detour 函數的典型用法 13.6 Hook 中的注意事項 13.7 Hook 在x64 平台上的新問題 13.8 Hook 技術的應用 13.9 Hook 的檢測、恢復與對抗 13.9.1 Hook 的檢測與恢復 13.9.2 Hook 的對抗 13.10 本章小結 漏洞篇 CHAPTER 14 漏洞分析技術 14.1 軟體漏洞原理 14.1.1 緩衝區溢位漏洞 14.1.2 整數溢位漏洞 14.1.3 UAF 漏洞 14.2 Shellcode 14.2.1 Shellcode 的結構 14.2.2 Shellcode 通用技術 14.2.3 實戰Shellcode 撰寫 14.3 漏洞利用 14.3.1 漏洞利用基本技術 14.3.2 漏洞利用進階技術 14.4 漏洞樣本 14.5 樣本分析 14.5.1 準備工作 14.5.2 靜態分析 14.5.3 動態偵錯 14.5.4 追根溯源 14.5.5 小結 脫殼篇 CHAPTER 15 專用加密軟體 15.1 認識殼 15.1.1 殼的概念 15.1.2 壓縮引擎 15.2 壓縮殼 15.2.1 UPX 15.2.2 ASPack 15.3 加密殼 15.3.1 ASProtect 15.3.2 Armadillo 15.3.3 EXECryptor 15.3.4 Themida 15.4 虛擬機器保護軟體 15.4.1 虛擬機器介紹 15.4.2 VMProtect 簡介 CHAPTER 16 脫殼技術 16.1 基礎知識 16.1.1 殼的載入過程 16.1.2 脫殼機 16.1.3 手動脫殼 16.2 尋找OEP 16.2.1 根據跨段指令尋找OEP 16.2.2 用記憶體存取中斷點尋找OEP 16.2.3 根據堆疊平衡原理尋找OEP 16.2.4 根據編譯語言特點尋找OEP 16.3 抓取記憶體映射 16.3.1 Dump 原理 16.3.2 反Dump 技術 16.4 重建輸入表 16.4.1 輸入表重建的原理 16.4.2 確定IAT 的位址和大小 16.4.3 根據IAT 重建輸入表 16.4.4 用Import REC 重建輸入表 16.4.5 輸入表加密概括 16.5 DLL 檔案脫殼 16.5.1 尋找OEP 16.5.2 Dump 映射檔案 16.5.3 重建DLL 的輸入表 建置重定位表 16.6 附加資料 16.7 PE 檔案的最佳化 16.8 壓縮殼 16.8.1 UPX 外殼 16.8.2 ASPack 外殼 16.9 加密殼 16.10 靜態脫殼 16.10.1 外殼Loader 分析 16.10.2 撰寫靜態脫殼器 保護篇 CHAPTER 17 軟體保護技術 17.1 防範演算法求逆 17.1.1 基本概念 17.1.2 堡壘戰術 17.1.3 遊擊戰術 17.2 抵禦靜態分析 17.2.1 花指令 17.2.2 SMC 技術實現 17.2.3 資訊隱藏 17.2.4 簡單的多形變形技術 17.3 檔案完整性檢驗 17.3.1 磁碟檔案驗證的實現 17.3.2 校正碼 17.3.3 記憶體映射驗證 17.4 程式與資料結合 17.4.1 準備工作 17.4.2 加密演算法的選用 17.4.3 手動加密程式 17.4.4 使 .text 區塊寫入 17.5 關於軟體保護的許多忠告 CHAPTER 18 反追蹤技術 18.1 由BeingDebugged 引發的蝴蝶效應 18.1.1 BeingDebugged 18.1.2 NtGlobalFlag 18.1.3 Heap Magic 18.1.4 從源頭消滅BeingDebugged 18.2 回歸Native:使用者態的夢魘 18.2.1 CheckRemoteDebuggerPresent 18.2.2 ProcessDebugPort 18.2.3 ThreadHideFromDebugger 18.2.4 DebugObject 18.2.5 SystemKernelDebuggerInformation 18.2.6 Native API 18.2.7 Hook 和AntiHook 18.3 真正的奧秘:小技巧一覽 18.3.1 SoftICE 檢測方法 18.3.2 OllyDbg 檢測方法 18.3.3 偵錯器漏洞 18.3.4 防止偵錯器附加 18.3.5 父處理程序檢測 18.3.6 時間差 18.3.7 透過Trap Flag 檢測 18.3.8 雙處理程序保護 CHAPTER 19 外殼撰寫基礎 19.1 外殼的結構 19.2 加殼主程式 19.2.1 判斷檔案是否為PE格式 19.2.2 檔案基本資料讀取 19.2.3 附加資料的讀取 19.2.4 輸入表的處理 19.2.5 重定位表的處理 19.2.6 檔案的壓縮 19.2.7 資源資料的處理 19.2.8 區塊的融合 19.3 用組合語言寫外殼部分 19.3.1 外殼的載入過程 19.3.2 自建輸入表 19.3.3 外殼啟動段 19.3.4 外殼第2 部分 19.3.5 將外殼部分增加至原程式 19.4 用C++ 撰寫外殼部分 CHAPTER 20 虛擬機器的設計 20.1 虛擬機器保護技術原理 20.1.1 反組譯引擎 20.1.2 指令分類 20.2 啟動架構和呼叫約定 20.2.1 排程器 20.2.2 虛擬環境 20.2.3 平衡堆疊vBegin 和vCheckSTACK 20.3 Handler 的設計 20.3.1 輔助Handler 20.3.2 普通Handler 和指令拆解 20.3.3 標示位問題 20.3.4 相同作用的指令 20.3.5 傳輸指令 20.3.6 傳輸跳躍指令的另一種實現 20.3.7 call 指令 20.3.8 retn 指令 20.3.9 不可模擬指令 20.4 列管碼的例外處理 20.4.1 VC++ 的例外處理 20.4.2 Delphi 的例外處理 20.5 本章小結 CHAPTER 21 VMProtect 逆向和還原淺析 21.1 VMProtect 逆向分析 21.1.1 VMProtect 虛擬執行引擎的全景圖 21.1.2 VMProtect 虛擬引擎的基本架構 21.1.3 指令分類 21.2 VMProtect 的還原 21.2.1 虛擬執行系統 21.2.2 產生完整的位元組串流速度程圖 21.2.3 替Handler 命名並增加語義動作 21.2.4 將位元組碼的低階描述轉為中級描述 21.2.5 清除無用的位元組碼 21.2.6 用真值表化簡邏輯指令 21.2.7 從特徵中建立部分暫存器對映資訊 21.2.8 其他無法確定的暫存器的圖著色演算法 21.2.9 使用DAG 比對產生指令 21.2.10 其他問題 軟體重構篇 CHAPTER 22 專用加密軟體 22.1 檔案更新 22.2 記憶體更新 22.2.1 跨處理程序記憶體存取機制 22.2.2 Debug API 機制 22.2.3 利用偵錯暫存器機制 22.2.4 利用DLL 植入技術 22.2.5 利用Hook 技術 22.2.6 利用VT 技術 22.3 SMC 更新技術 22.3.1 單層SMC 更新技術 22.3.2 多層SMC 更新技術 22.4 更新工具 CHAPTER 23 程式的延伸開發 23.1 資料對齊 23.2 增加空間 23.2.1 區塊間隙 23.2.2 手動建置區塊 23.2.3 工具輔助建置區塊 23.3 獲得函數的呼叫資訊 23.3.1 增加輸入函數 23.3.2 顯性連結呼叫DLL 23.4 程式的重定位 23.4.1 修復重定位表 23.4.2 程式的自定位技術 23.5 增加輸出函數 23.6 訊息循環 23.6.1 WndProc 函數 23.6.2 尋找訊息循環 23.6.3 WndProc 組合語言形式 23.7 選單擴充 23.7.1 擴充WndProc 23.7.2 擴充Exit 選單的功能 23.7.3 擴充Open 選單的功能 23.8 DLL 擴充 23.8.1 擴充介面 23.8.2 擴充訊息循環 語言和平台篇 CHAPTER 24 專用加密軟體 24.1 .NET 概述 24.1.1 什麼是 .NET 24.1.2 基本概念 24.1.3 第1 個 .NET 程式 24.2 MSIL 與中繼資料 24.2.1 PE 結構的擴充 24.2.2 .NET 下的組合語言MSIL 24.2.3 MSIL 與中繼資料的結合 24.3 程式分析與修改技術 24.3.1 靜態分析 24.3.2 動態偵錯 24.3.3 程式修改 24.4 .NET 程式保護技術及其逆向工程 24.4.1 強式名稱 24.4.2 名稱混淆 24.4.3 流程混淆 24.4.4 壓縮 24.4.5 加密 24.4.6 其他保護方法 24.5 本章小結 取證篇 CHAPTER 25 專用加密軟體 25.1 硬碟資料的取得和固定 25.1.1 硬碟資料的取得 25.1.2 電子資料的固定 25.2 硬碟的分區和資料恢復 25.2.1 分區的解析 25.2.2 以檔案系統為基礎的資料恢復原理 25.3 記憶體分析 25.3.1 記憶體映像檔的取得 25.3.2 記憶體映像檔的分析 25.4 動態模擬技術 25.4.1 模擬專用硬體 25.4.2 軟體模擬 25.5 登錄檔 25.5.1 Hive 檔案 25.5.2 登錄檔中的時間 25.5.3 USB 行動存放裝置 25.6 檔案格式 25.6.1 檔案修復和特徵碼 25.6.2 以檔案為基礎的資料恢復技術 25.6.3 資料隱藏的分析 術語表 參考文獻
作者簡介 段鋼 於資訊安全領域具有廣泛影響力的安全網站「看雪學院」的創始人及營運管理者,致力於研究資訊安全等相關技術,曾與相關領域專業人士共同出版數本技術專著。2016年創立上海看雪科技有限公司後,以看雪學院為基礎,致力於營造一個能供PC、智慧型行動裝置安全研究及逆向工程開發者和愛好者討論的交流平台。
客服公告
热门活动
订阅电子报