具体描述
作 者:(美)瑞安·奥尼尔(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 标志检测等。 绕过反调试: 修改程序、使用特制的调试器等。 漏洞概念简介: 缓冲区溢出、格式化字符串漏洞、整数溢出等。 从二进制分析的角度理解漏洞: 如何通过分析汇编代码来发现潜在的漏洞点。 调试与分析工具的进阶应用: 脚本化调试、自动化分析的初步探索。 本书的独特之处 与市面上大量侧重于特定领域(如操作系统内核、恶意软件分析、漏洞利用开发)的图书不同,《探秘数字生命》致力于构建一个坚实而全面的二进制分析基础知识体系。我们避免陷入特定技术的细节泥潭,而是将重点放在读者理解底层原理、掌握通用分析方法论上。无论您是希望深入理解程序执行的本质,还是对计算机安全领域的逆向工程产生浓厚兴趣,抑或是希望提升自己在软件开发过程中对代码质量和安全性的认识,本书都将为您提供一条清晰且富有启发性的学习路径。 通过本书的学习,您将不再仅仅将程序视为一串抽象的代码,而是能够以一种全新的视角,去“看到”它们在处理器上如何一步步被执行,如何管理和操作数据,以及它们内部隐藏的复杂逻辑。这将是一场深入理解数字世界运行机制的精彩旅程,一次对计算机科学核心原理的深刻探索。