逆向工程核心原理
有趣的二进制 软件安全与逆向分析
逆向工程实战
逆向工程权威指南 上册
9787115350183 9787115403995
9787115388933 9787115434456
逆向工程权威指南 上册
逆向工程是一种分析目标系统的过程,旨在于识别系统的各组件以及组件间关系,以便于通过其它形式、或在较高的抽象层次上,重建系统的表征。 本书专注于软件的逆向工程,是写给初学者的一本quanwei指南。全书共分为12个部分,共102章,涉及X86/X64、ARM/ARM-64、MIPS、Java/JVM等重要话题,详细解析了Oracle RDBMS、Itanium、软件狗、LD_PRELOAD、栈溢出、ELF、Win32 PE文件格式、x86-64(第、critical sections、syscalls、线程本地存储TLS、地址无关代码(PIC)、以配置文件为导向的优化、C++ STL、OpenMP、SHE等众多技术话题,堪称是逆向工程技术百科全书。除了详细讲解,本书来给出了很多习题来帮助读者巩固所学的知识,附录部分给出了习题的解答。 本书适合对逆向工程技术、操作系统底层技术、程序分析技术感兴趣的读者阅读,也适合专业的程序开发人员参考。
DIYI部分 编码模式 第1章 CPU简介 3 1.1 指令集的作用 3 第2章 ZUI简函数 5 2.1 x86 5 2.2 ARM 5 2.3 MIPS 5 2.3.1 MIPS指令集与寄存器名称 6 第3章 Hello,world! 7 3.1 x86 7 3.1.1 MSVC 7 3.1.2 GCC 9 3.1.3 GCC:AT&T;语体 9 3.2 x86-64 11 3.2.1 MSVC-x86-64 11 3.2.2 GCC-x86-64 12 3.3 GCC的其他特性 12 3.4 ARM 13 3.4.1 Keil 6/2013——未启用优化功能的ARM模式 14 3.4.2 Thumb模式下、未开启优化选项的Keil 15 3.4.3 ARM模式下、开启优化选项的Xcode 15 3.4.4 Thumb-2模式下、开启优化选项的Xcode(LLVM) 16 3.4.5 ARM64 18 3.5 MIPS 19 3.5.1 全局指针Global pointer 19 3.5.2 Optimizing GCC 19 3.5.3 Non-optimizing GCC 21 3.5.4 栈帧 23 3.5.5 Optimizing GCC: GDB的分析方法 23 3.6 总结 24 3.7 练习 24 3.7.1 题目1 24 3.7.2 题目2 24 第4章 函数序言和函数尾声 25 4.1 递归调用 25 第5章 栈 26 5.1 为什么栈会逆增长? 26 5.2 栈的用途 27 5.2.1 保存函数结束时的返回地址 27 5.2.2 参数传递 28 5.2.3 存储局部变量 29 5.2.4 x86:alloca()函数 29 5.2.5 (Windows)SEH结构化 异常处理 31 5.2.6 缓冲区溢出保护 31 5.3 典型的栈的内存存储格式 31 5.4 栈的噪音 31 5.5 练习题 34 5.5.1 题目1 34 5.5.2 题目2 34 第6章 printf()函数与参数调用 36 6.1 x86 36 6.1.1 x86:传递3个参数 36 6.1.2 x64:传递9个参数 41 6.2 ARM 44 6.2.1 ARM模式下传递3个参数 44 6.2.2 ARM模式下传递8个参数 46 6.3 MIPS 50 6.3.1 传递3个参数 50 6.3.2 传递9个参数 52 6.4 总结 56 6.5 其他 57 第7章 scanf() 58 7.1 演示案例 58 7.1.1 指针简介 58 7.1.2 x86 58 7.1.3 MSVC+OllyDbg 60 7.1.4 x64 62 7.1.5 ARM 63 7.1.6 MIPS 64 7.2 全局变量 65 7.2.1 MSVC:x86 66 7.2.2 MSVC:x86+OllyDbg 67 7.2.3 GCC:x86 68 7.2.4 MSVC:x64 68 7.2.5 ARM: Optimizing Keil 6/2013 (Thumb模式) 69 7.2.6 ARM64 70 7.2.7 MIPS 70 7.3 scanf()函数的状态监测 74 7.3.1 MSVC:x86 74 7.3.2 MSVC:x86:IDA 75 7.3.3 MSVC:x86+OllyDbg 77 7.3.4 MSVC:x86+Hiew 78 7.3.5 MSVC:x64 79 7.3.6 ARM 80 7.3.7 MIPS 81 7.3.8 练习题 82 第8章 参数获取 83 8.1 x86 83 8.1.1 MSVC 83 8.1.2 MSVC+OllyDbg 84 8.1.3 GCC 84 8.2 x64 85 8.2.1 MSVC 85 8.2.2 GCC 86
逆向工程实战
本书是一本涵盖x86、x64 和ARM 操作系统的逆向工程类图书,由浅入深地讲解了包括Windows内核模式代码的恶意软件和驱动程序、虚拟机保护技术等内容。作者通过大量真实案例和示例,提供了系统化的解决方案。本书适合所有程序员和想要开始学习逆向工程的读者阅读。
第1 章 x86 与x64111 寄存器组与数据类型112 指令集3121 语法3122 数据移动413 练习9131 算术运算9132 栈操作与函数调用1114 练习1415 系统机制21151 地址转换21152 中断与异常2316 综合练习2317 练习2918 x64 30181 寄存器组与数据类型30有趣的二进制 软件安全与逆向分析
《有趣的二进制 软件安全与逆向分析》通过逆向工程,揭开人们熟知的软件背后的机器语言的秘密,并教给读者读懂这些二进制代码的方法。理解了这些方法,技术人员就能有效地Debug,防止软件受到恶意攻击和反编译。本书涵盖的技术包括:汇编与反汇编、调试与反调试、缓冲区溢出攻击与底层安全、钩子与注入、Metasploit等安全工具。
第1章 通过逆向工程学习如何读懂二进制代码 11.1 先来实际体验一下软件分析吧 31.1.1 通过Process Monitor的日志来确认程序的行为 41.1.2 从注册表访问中能发现些什么 61.1.3 什么是逆向工程 9专栏:逆向工程技术大赛 101.2 尝试静态分析 111.2.1 静态分析与动态分析 11专栏:Stirling与BZ Editor的区别 121.2.2 用二进制编辑器查看文件内容 131.2.3 看不懂汇编语言也可以进行分析 141.2.4 在没有源代码的情况下搞清楚程序的行为 161.2.5 确认程序的源代码 181.3 尝试动态分析 201.3.1 设置Process Monitor的过滤规则 201.3.2 调试器是干什么用的 231.3.3 用OllyDbg洞察程序的详细逻辑 241.3.4 对反汇编代码进行分析 26专栏:什么是寄存器 281.3.5 将分析结果与源代码进行比较 29专栏:选择自己喜欢的调试器 301.4 学习·基础的汇编指令 321.4.1 没必要记住所有的汇编指令 321.4.2 汇编语言是如何实现条件分支的 331.4.3 参数存放在栈中 351.4.4 从汇编代码联想到C语言源代码 371.5 通过汇编指令洞察程序行为 401.5.1 给函数设置断点 401.5.2 反汇编并观察重要逻辑 42专栏:学习编写汇编代码 47第2章 在射击游戏中防止玩家作弊 512.1 解读内存转储 532.1.1 射击游戏的规则 532.1.2 修改4个字节就能得高分 542.1.3 获取内存转储 582.1.4 从进程异常终止瞬间的状态查找崩溃的原因 632.1.5 有效运用实时调试 662.1.6 通过转储文件寻找出错原因 68专栏:除了个人电脑,在其他计算机设备上运行的程序也可以进行分析吗 74专栏:分析Java编写的应用程序 742.2 如何防止软件被别人分析 762.2.1 反调试技术 76专栏:检测调试器的各种方法 772.2.2 通过代码混淆来防止分析 79专栏:代码混淆的相关话题 802.2.3 将可执行文件进行压缩 812.2.4 将压缩过的可执行文件解压缩:解包 862.2.5 通过手动解包UPX来理解其工作原理 872.2.6 用硬件断点对ASPack进行解包 91专栏:如何分析.NET编写的应用程序 95第3章 利用软件的漏洞进行攻击 973.1 利用缓冲区溢出来执行任意代码 993.1.1 引发缓冲区溢出的示例程序 993.1.2 让普通用户用管理员权限运行程序 1003.1.3 权限是如何被夺取的 1023.1.4 栈是如何使用内存空间的 1043.1.5 攻击者如何执行任意代码 1073.1.6 用gdb 查看程序运行时的情况 1103.1.7 攻击代码示例 1133.1.8 生成可用作shellcode的机器语言代码 1163.1.9 对0x00的改进 121专栏:printf类函数的字符串格式化bug 1253.2 防御攻击的技术 1273.2.1 地址随机化:ASLR 1273.2.2 除存放可执行代码的内存空间以外,对其余内存空间尽量禁用执行权限:Exec-Shield 1303.2.3 在编译时插入检测栈数据完整性的代码:StackGuard 1313.3 绕开安全机制的技术 1343.3.1 使用libc中的函数来进行攻击:Return-into-libc 1343.3.2 利用未随机化的模块内部的汇编代码进行攻击:ROP 136专栏:计算机安全为什么会变成猫鼠游戏 137
逆向工程核心原理
《逆向工程核心原理》十分详尽地介绍了代码逆向分析的核心原理。作者在Ahnlab 研究所工作多年,书中不仅包括其以此经验为基础亲自编写的大量代码,还包含了逆向工程研究人员必须了解的各种技术和技巧。彻底理解并切实掌握逆向工程这门技术,就能在众多IT相关领域进行拓展运用,这本《逆向工程核心原理》就是通向逆向工程大门的捷径。 想成为逆向工程研究员的读者或正在从事逆向开发工作的开发人员一定会通过《逆向工程核心原理》获得很大帮助。同时,想成为安全领域专家的人也可从《逆向工程核心原理》轻松起步。
,部分 代码逆向技术基础第1章 关于逆向工程 21.1 逆向工程 21.2 代码逆向工程 21.2.1 逆向分析法 21.2.2 源代码、十六进制代码、汇编代码 41.2.3 “打补丁”与“破解” 51.3 代码逆向准备 51.3.1 目标 51.3.2 激情 61.3.3 谷歌 61.4 学习逆向分析技术的禁忌 61.4.1 贪心 61.4.2 急躁 71.5 逆向分析技术的乐趣 7第2章 逆向分析Hello World!程序 82.1 Hello World!程序 82.2 调试HelloWorld.exe程序 92.2.1 调试目标 92.2.2 开始调试 92.2.3 入口点 102.2.4 跟踪40270C函数 102.2.5 跟踪40104F跳转语句 122.2.6 查找main()函数 122.3 进一步熟悉调试器 142.3.1 调试器指令 142.3.2 “大本营” 152.3.3 设置“大本营”的四种方法 152.4 快速查找指定代码的四种方法 172.4.1 代码执行法 182.4.2 字符串检索法 192.4.3 API检索法(1):在调用代码中设置断点 202.4.4 API检索法(2):在API代码中设置断点 212.5 使用“打补丁”方式修改“Hello World!”字符串 232.5.1 “打补丁” 232.5.2 修改字符串的两种方法 242.6 小结 28
剖析数字世界的奥秘:通往底层代码的深度探索之旅 在信息爆炸的时代,软件已经渗透到我们生活的方方面面,成为现代社会不可或缺的基石。然而,我们日常使用的应用程序、系统背后,隐藏着复杂的逻辑和精妙的设计。理解这些“黑箱”的运作机制,洞察其内在的精髓,不仅能满足求知欲,更是掌握核心技术、保障信息安全、乃至创新发展的关键。本书系,正是为你量身打造的深度探索之旅,它将带领你穿越层层代码迷雾,直抵数字世界的灵魂深处。 一、 颠覆性视角:从“如何使用”到“如何构建与洞察” 长期以来,我们习惯于扮演软件的使用者角色,享受其带来的便利。然而,真正的技术掌握,在于理解其“如何工作”乃至“如何被构建”。逆向工程,正是这样一门反其道而行之的学问。它并非简单的“破解”,而是一种严谨的科学分析方法,通过对已有的二进制程序进行反编译、反汇编、调试和分析,来揭示其内部结构、算法逻辑、设计思想,甚至隐藏的脆弱点。 本书系的核心价值,在于提供了一种颠覆性的学习视角。它鼓励你从“知其然而不知其所以然”的使用者,转变为“知其然且知其所以然”的洞察者。通过本书系的引导,你将不再满足于仅仅知道软件能做什么,而是能深入理解它之所以能这么做的原理,以及其背后蕴含的设计哲学。这种能力的提升,将极大地拓展你在软件开发、安全审计、漏洞挖掘、恶意代码分析等领域的视野和实操能力。 二、 全景式覆盖:从理论基石到实战演练 本书系以其全面性和系统性著称,它为不同层次的学习者提供了一条清晰的学习路径。 理论基石的夯实: “逆向工程核心原理”作为理论的基石,将带领你系统性地梳理逆向工程涉及的关键概念。从计算机体系结构(CPU、内存、寄存器等)的基础知识,到二进制文件的结构(ELF、PE等),再到指令集架构(x86、ARM等)的运作方式,每一个基础环节都将得到详尽的阐述。你将理解汇编语言如何成为连接高级语言和机器指令的桥梁,掌握栈帧、调用约定、数据类型转换等核心概念,并学会如何运用反汇编工具阅读和理解汇编代码。此外,对于常见的操作系统内核机制、进程管理、内存管理等,也将进行深入剖析,为后续的深入分析奠定坚实的基础。 进阶能力的塑造: “软件安全与逆向分析”则将理论与实践相结合,重点聚焦于软件安全领域中的逆向工程应用。你将学习如何运用静态分析和动态分析相结合的方法,来检测和分析软件中的潜在漏洞。静态分析部分,将教授如何利用反编译工具(如IDA Pro, Ghidra)将二进制代码还原成可读性更高的伪代码,识别关键函数、数据结构,并分析程序流程。动态分析部分,则会深入讲解调试器的使用,如OllyDbg, WinDbg,如何设置断点、单步跟踪、查看内存和寄存器状态,实时观察程序的执行过程,捕捉关键行为。同时,本书系还将覆盖常见的安全漏洞类型(如缓冲区溢出、格式化字符串漏洞、整数溢出等)及其在二进制程序中的表现形式,并演示如何通过逆向分析来发现和理解这些漏洞。 实战能力的锻造: “逆向工程实战”则将理论知识转化为直接的动手能力。本书系精选了一系列具有代表性的实战案例,涵盖了从简单的程序破解到复杂的恶意代码分析。每一个案例都将详尽地指导你如何运用前面所学的工具和技术,一步步地攻克难关。例如,如何分析一个简单的加密程序,找到加密算法和密钥;如何分析一个简单的加壳程序,还原其真实入口点;如何分析一个简单的外挂程序,理解其功能实现方式。通过这些实操,你将深刻体会到逆向工程的强大威力,并积累宝贵的实战经验。 趣味性与拓展: “有趣的二进制”则以一种更加轻松和启发性的方式,带领你领略二进制世界的奇妙之处。它可能通过一些趣味性的例子,如二维码的编码与解码,图像文件格式的解析,或者网络通信协议的分析,来展示二进制数据在日常生活中的应用,并引导你思考二进制的本质。这种“趣味性”的设计,旨在激发你的好奇心,让你在轻松愉快的氛围中,发现逆向工程的乐趣,从而更加主动地投入到深入的学习中。 权威性的奠基: “逆向工程权威指南(上册+下册)”构成了整个书系的权威核心。它如同一个庞大而精密的知识体系,从宏观到微观,层层深入。上册可能侧重于基础理论、原理和工具的使用,为读者打下坚实的根基。下册则会进一步拓展到更高级的主题,例如复杂的反调试技术、反反汇编技术、软件保护机制的分析、内存取证、以及在特定平台(如移动设备、嵌入式系统)上的逆向工程应用。本书系的权威性体现在其内容的深度、广度和准确性,它汇集了该领域顶尖的知识和经验,力求成为读者在逆向工程领域最可靠的参考。 三、 赋能未来:掌握数字世界的“内幕” 通过对本书系的系统学习,你将获得以下关键能力: 1. 代码洞察力: 能够深入理解任何软件的运行机制,无论其源代码是否公开。 2. 安全审计能力: 能够独立分析软件的安全性,发现潜在的漏洞和风险。 3. 恶意代码分析能力: 能够高效地分析病毒、木马等恶意软件的行为,理解其传播机制和攻击方式,为安全防护提供依据。 4. 软件漏洞挖掘能力: 能够主动寻找软件中的安全漏洞,为软件厂商提供修复建议,或者为安全研究做出贡献。 5. 创新与优化能力: 能够通过分析优秀的软件设计,学习其精妙之处,并将其应用到自己的开发实践中,进行软件优化或创新。 6. 跨平台技术视野: 能够将学到的逆向工程技术,灵活应用于不同的操作系统和硬件平台。 四、 谁适合阅读本书系? 本书系适合以下人群: 软件开发者: 希望更深入地理解软件运行原理,提升代码质量和安全性。 安全研究员/工程师: 需要掌握逆向工程技能,进行漏洞分析、恶意代码分析、渗透测试等工作。 计算机科学/网络安全专业的学生: 学习计算机底层原理,拓展技术视野,为未来职业发展打下坚实基础。 对软件底层技术充满好奇的技术爱好者: 希望揭开软件神秘面纱,探索数字世界的奥秘。 结语 逆向工程是一门既古老又充满活力的技术,它挑战着我们对软件的认知,也赋予我们超越使用者的力量。本书系,正是你开启这段深度探索之旅的最佳伙伴。它将用严谨的理论、详实的案例、以及启发性的引导,带你一步步成为数字世界的“解码者”和“洞察者”。准备好迎接挑战,深入代码的世界,去发现那些隐藏的逻辑、精妙的设计,以及无限的可能性吧!
阅读体验上,我必须给一个大大的好评,因为它成功地在专业性和可读性之间找到了一个完美的平衡点。很多技术书籍的排版要么就是过于拥挤,要么就是图文分离严重,但这一套书在这方面做得非常优雅。代码示例的注释清晰明了,图示的质量也非常高,很多流程图和结构示意图的绘制水平达到了专业绘图的水准,极大地减轻了大脑在处理复杂信息时的负担。而且,书中的内容更新速度也体现了作者对这个领域的持续关注,并没有停留在几年前的过时技术上,而是融入了对现代编译器优化和新兴安全机制的探讨。对于一个希望长期在软件安全领域深耕的从业者而言,一套能够与时俱进、并且能提供扎实基础的参考资料是至关重要的。这套书无疑就是我书架上最希望被频繁翻阅的那一本。