具體描述
作 者:(美)瑞安·奧尼爾(Ryan O'Neill) 著;棣琦 譯 定 價:59 齣 版 社:人民郵電齣版社 齣版日期:2017年12月01日 頁 數:254 裝 幀:平裝 ISBN:9787115469236 ●第1章 Linux環境和相關工具1
●1.1 Linux工具1
●1.1.1 GDB2
●1.1.2 GNU binutils中的objdump2
●1.1.3 GNU binutils中的objcopy3
●1.1.4 strace3
●1.1.5 ltrace4
●1.1.6 基本的ltrace命令4
●1.1.7 ftrace4
●1.1.8 readelf4
●1.1.9 ERESI——ELF反編譯係統接口5
●1.2 有用的設備和文件6
●1.2.1 /proc//maps6
●1.2.2 /proc/kcore6
●1.2.3 /boot/System.map6
●1.2.4 /proc/kallsyms7
●1.2.5 /proc/iomem7
●1.2.6 ECFS7
●1.3 鏈接器相關環境指針7
●1.3.1 LD_PRELOAD環境變量8
●部分目錄
內容簡介
二進製分析屬於信息安全業界逆嚮工程中的一種技術,通過利用可執行的機器代碼(二進製)來分析應用程序的控製結構和運行方式,有助於信息安全從業人員更好地分析各種漏洞、病毒以及惡意軟件,從而找到相應的解決方案。
《Linux二進製分析》是一本剖析Linux ELF工作機製的圖書,共分為9章,其內容涵蓋瞭Linux環境和相關工具、ELF二進製格式、Linux進程追蹤、ELF病毒技術、Linux二進製保護、Linux中的ELF二進製取證分析、進程內存取證分析、擴展核心文件快照技術、Linux/proc/kcore分析等。
《Linux二進製分析》適閤具有一定的Linux操作知識,且瞭解C語言編程技巧的信息安全從業人員閱讀。 (美)瑞安·奧尼爾(Ryan O'Neill) 著;棣琦 譯 瑞安·奧尼爾,是一名計算機安全研究員兼軟件工程師,具有逆嚮工程、軟件開發、安全防禦和取證分析技術方麵的背景。他是在計算機黑客亞文化的世界中成長起來的——那個由EFnet、BBS係統以及係統可執行棧上的遠程緩衝區溢齣組成的世界。他在年輕時就接觸瞭係統安全、開發和病毒編寫等領域。他對計算機黑客的極大熱情如今已經演變成瞭對軟件開發和專業安全研究的熱愛。Ryan在DEFCON和RuxCon等很多計算機安全會議上發錶過演講,還舉辦瞭一個為期兩天的ELF二進製黑客研討會。
他的職業生涯很好成功,曾就職於.Pikewerks、Leviathan安全集團這樣的大公司,很近在Backtrace擔任軟件工等
《探秘數字生命:從底層代碼到高級指令的解構之旅》 在信息爆炸的時代,軟件如同城市的建築,承載著我們的生活、工作和娛樂。然而,這些由無數代碼堆砌而成的復雜係統,其內在的運行邏輯和潛在的奧秘,卻常常被深埋在抽象的邏輯和高級語言的錶達之下。當我們撥開層層迷霧,深入到構成這些數字生命最根本的指令層麵時,我們將發現一個充滿挑戰與智慧的全新世界。 本書旨在帶領讀者踏上一段深入探索計算機程序執行底層機製的旅程。我們不關注特定操作係統的方方麵麵,也不深入探討某個應用程序的開發細節。相反,我們將聚焦於程序在執行過程中最核心的構成要素——二進製指令。從最基礎的匯編語言,到指令在處理器上的直接體現,再到數據如何在內存中流動和被處理,我們將一步步揭示隱藏在代碼之下的真實運作。 第一部分:理解代碼的基石——指令集架構與匯編語言 要理解二進製分析,首先需要建立起對計算機底層運作的基本認知。本部分將從指令集架構(ISA)入手,介紹不同處理器傢族(如 x86-64、ARM)的基本設計哲學和核心指令集。我們將詳細講解寄存器、內存尋址模式、指令的編碼格式等概念,為後續深入分析打下堅實的基礎。 隨後,我們將聚焦於匯編語言,將其視為直接操作處理器指令的一種“低級”但卻至關重要的編程語言。讀者將學習如何閱讀、理解和編寫簡單的匯編程序,掌握跳轉、循環、函數調用等基本控製流的匯編實現。我們將通過對比高級語言(如 C 語言)與其對應的匯編代碼,直觀地展示編譯器的工作原理,以及高級抽象是如何被轉化為機器可以理解的指令序列的。 核心內容將涵蓋: 指令集架構概覽: RISC vs CISC,通用寄存器、標誌寄存器、程序計數器等。 核心指令詳解: 數據傳輸指令(MOV)、算術邏輯指令(ADD, SUB, AND, OR, XOR)、比較指令(CMP)、跳轉指令(JMP, JZ, JNZ)、棧操作指令(PUSH, POP)等。 內存尋址模式: 直接尋址、寄存器間接尋址、基址加偏移量尋址等。 匯編語言的語法與結構: 段、節、標簽、僞指令等。 函數調用約定(Calling Conventions): 參數傳遞、棧幀的創建與銷毀、返迴值處理等。 編譯器的作用: 高級語言如何被編譯成機器碼。 第二部分:窺探程序的運行現場——內存、棧與堆 程序在執行過程中,其數據和指令都離不開內存的支持。本部分將深入探討內存管理的基本原理,以及程序在內存中的典型布局。我們將重點解析棧(Stack)和堆(Heap)這兩種重要的數據結構,以及它們在程序執行中的作用。 棧是函數調用和局部變量存儲的核心區域,理解棧幀的構建與銷毀對於分析函數調用關係、跟蹤程序執行流程至關重要。我們將詳細講解棧溢齣(Stack Overflow)等常見漏洞的成因,以及如何通過分析棧信息來理解程序的控製流。 堆是動態內存分配的場所,理解堆的分配、釋放以及常見的堆漏洞(如堆溢齣、use-after-free)對於深入分析程序行為和安全漏洞至關重要。我們將介紹常見的內存分配器(如 glibc malloc)的工作原理,以及如何通過分析堆結構來恢復被破壞的數據。 核心內容將涵蓋: 內存模型: 綫性地址空間、物理地址空間、分段與分頁(簡要介紹)。 程序的內存布局: 代碼段(.text)、數據段(.data, .rodata)、BSS段(.bss)、棧(Stack)、堆(Heap)等。 棧幀(Stack Frame): 保存返迴地址、局部變量、函數參數等。 棧溢齣現象與原理: 如何通過覆蓋返迴地址控製程序執行流。 堆的分配與管理: 內存塊的分配、釋放、碎片化等。 常見的堆漏洞: 堆溢齣、unlink、double free、use-after-free 等。 內存調試工具的使用: 簡單介紹 GDB 等工具在內存分析中的應用。 第三部分:解構二進製文件——靜態與動態分析的藝術 掌握瞭底層的指令和內存模型後,我們將進入實際的二進製分析階段。本部分將介紹兩種核心的分析方法:靜態分析和動態分析,並探討它們各自的優勢、局限以及如何相互結閤。 靜態分析是在不實際運行程序的情況下,通過反匯編(Disassembly)和反編譯(Decompilation)等技術來解析程序的二進製代碼。我們將介紹如何使用專業的反匯編工具(如 IDA Pro, Ghidra)來解析程序的指令流,識彆函數、數據結構和控製流。讀者將學習如何分析函數的調用圖,理解程序的整體結構,並從中提取有價值的信息。 動態分析則是在程序運行時,通過調試器(Debugger)或進程注入(Process Injection)等技術來觀察程序的行為。我們將詳細講解如何使用調試器(如 GDB, WinDbg)來設置斷點、單步執行、觀察寄存器和內存狀態,從而實時追蹤程序的執行過程。通過動態分析,我們可以瞭解程序在特定輸入下的反應,發現隱藏的邏輯,以及驗證靜態分析的結論。 核心內容將涵蓋: 二進製文件的結構: ELF, PE 等可執行文件格式的概覽。 反匯編工具的使用: IDA Pro, Ghidra 等主流工具的界麵與基本操作。 函數識彆與分析: 函數入口、齣口、基本塊、控製流圖(CFG)的繪製。 數據結構識彆: 字符串、數組、結構體等的識彆與分析。 調試器(Debugger)的使用: GDB, WinDbg 等,斷點設置、單步執行、內存查看、寄存器觀察。 動態分析技術: 內存斷點、硬件斷點、進程附加、進程注入(簡要介紹)。 靜態與動態分析的結閤: 如何相互印證,提高分析效率。 第四部分:深入挖掘——代碼混淆、反調試與漏洞利用基礎 在實際的二進製分析場景中,我們常常會遇到經過混淆(Obfuscation)和反調試(Anti-Debugging)處理的程序。本部分將介紹這些常見的保護技術,以及如何對抗它們,從而更深入地揭示程序的真實麵貌。 代碼混淆旨在增加逆嚮分析的難度,通過加密、指令插入、控製流平鋪等技術來擾亂程序的正常邏輯。我們將探討常見的混淆技術,以及如何通過模式識彆、重構代碼等方法來應對。 反調試技術則旨在檢測和阻止調試器的存在,一旦發現調試器,程序可能會終止運行或錶現齣異常行為。我們將介紹常見的反調試技術,如時間檢測、中斷指令、API 調用檢測等,並探討如何通過修改程序或調試器來繞過這些檢測。 最後,我們將觸及二進製分析的終極目標之一:漏洞挖掘與利用。雖然本書並非一本專門講解漏洞利用的書籍,但我們會從二進製分析的角度,簡要介紹一些基礎的漏洞概念,如緩衝區溢齣、格式化字符串漏洞等,以及如何通過分析程序邏輯來發現潛在的漏洞。理解這些漏洞的二進製層麵的成因,是進行更高級的漏洞分析和利用的基礎。 核心內容將涵蓋: 代碼混淆技術: 指令替換、死代碼插入、控製流平鋪、代碼加密等。 反調試技術: 針對性的檢測方法,如 `IsDebuggerPresent`、時間檢測、CPU 標誌檢測等。 繞過反調試: 修改程序、使用特製的調試器等。 漏洞概念簡介: 緩衝區溢齣、格式化字符串漏洞、整數溢齣等。 從二進製分析的角度理解漏洞: 如何通過分析匯編代碼來發現潛在的漏洞點。 調試與分析工具的進階應用: 腳本化調試、自動化分析的初步探索。 本書的獨特之處 與市麵上大量側重於特定領域(如操作係統內核、惡意軟件分析、漏洞利用開發)的圖書不同,《探秘數字生命》緻力於構建一個堅實而全麵的二進製分析基礎知識體係。我們避免陷入特定技術的細節泥潭,而是將重點放在讀者理解底層原理、掌握通用分析方法論上。無論您是希望深入理解程序執行的本質,還是對計算機安全領域的逆嚮工程産生濃厚興趣,抑或是希望提升自己在軟件開發過程中對代碼質量和安全性的認識,本書都將為您提供一條清晰且富有啓發性的學習路徑。 通過本書的學習,您將不再僅僅將程序視為一串抽象的代碼,而是能夠以一種全新的視角,去“看到”它們在處理器上如何一步步被執行,如何管理和操作數據,以及它們內部隱藏的復雜邏輯。這將是一場深入理解數字世界運行機製的精彩旅程,一次對計算機科學核心原理的深刻探索。