科技>计算机>网络与互联网
Ghidra权威指南  

Ghidra权威指南  "

作者:杨超
ISBN:9787121445514
定价:¥139.99
字数:704千字
页数:440
出版时间:2022-11
开本:16开
版次:01-01
装帧:
出版社:电子工业出版社
简介

Ghidra是美国国家安全局(NSA)开发的免费和开源的逆向工程工具,已于2019年的RSA正式发布,包含了一整套功能齐全的高级软件分析工具,可以帮助广大研究人员在Windows、macOS和Linux各大常见系统平台上进行源代码分析。目前已在技术安全社区掀起一股学习热潮。

前言

前言 我们编写本书的目的是将Ghidra介绍给现在和未来的逆向工程师。在熟练的逆向工程师手中,Ghidra简化了分析过程,并允许用户自定义和扩展其功能,以满足个人需求并改进工作流程。新手逆向工程师使用Ghidra也很容易,特别是它包含的反编译器可以帮助他们在开始探索二进制分析领域时更清楚地理解高级语言和反汇编清单之间的关系。 写一本关于Ghidra的书是一项具有挑战性的任务。Ghidra是一个不断发展的复杂的逆向工程工具套件,开源社区在不断地改进和扩展其功能。与许多新的开源项目一样,Ghidra已经通过一系列快速释放的改进版本,开启了它的开源生涯。编写本书的主要目标是确保随着Ghidra的发展,本书的内容仍能够持续为读者提供广泛而深入的基础知识,以理解和有效利用不断演化的Ghidra版本来应对逆向工程的挑战。我们尽可能地保持本书适用于各种版本。幸运的是,新版本的Ghidra有良好的文档记录,如果遇到了与本书有差异的地方,详细的变更清单会提供特定版本的描述。 本书简介 这本书是第一本关于Ghidra的综合性书籍,旨在成为使用Ghidra进行逆向工程的百宝书。它提供介绍性内容以将新的探索者带入逆向工程世界,提供高级内容以扩展经验丰富的逆向工程师的世界观,并为新手和资深Ghidra开发者提供示例,以便他们可以继续扩展Ghidra的功能并成为Ghidra社区的贡献者。 本书面向的读者 本书面向有抱负和经验丰富的软件逆向工程师。如果您还没有逆向工程经验,那也没有关系,因为前面的章节介绍了逆向工程,以及使用Ghidra探索和分析二进制文件所需的背景材料。经验丰富的逆向工程师可以快速浏览前两部分,以获得对Ghidra的基本了解,然后跳转到感兴趣的特定章节。有经验的Ghidra用户和开发者可以关注后面的章节,以创建新的Ghidra扩展,并应用他们的经验和知识为Ghidra项目贡献新内容。 本书的结构 全书分为五个部分。第一部分介绍反汇编、逆向工程和Ghidra项目。第二部分涵盖Ghidra的基本用法。第三部分演示Ghidra的自定义和自动化,以使其为您工作。第四部分更深入地解释Ghidra模块的特定类型和支持概念。第五部分演示如何将Ghidra应用于逆向工程师可能遇到的一些实际情况。 第一部分 简介 第1章 反汇编简介 介绍反汇编理论和实践,并讨论两种常见反汇编算法的一些优缺点。 第2章 逆向与反汇编工具 讨论了可用于逆向工程和反汇编的主要工具类别。 第3章 初识Ghidra 初识Ghidra,了解它的起源,以及如何获取并开始使用这个免费的开源工具套件。 第二部分 Ghidra的基本用法 第4章 开始使用Ghidra 您与Ghidra的旅程从本章开始。当新建项目、分析文件并开始理解Ghidra图形用户界面(GUI)时,您将第一次看到Ghidra的实际应用。 第5章 Ghidra数据显示 介绍Ghidra用于文件分析的主要工具CodeBrowser,还将探讨它的几个主要的显示窗口。 第6章 理解Ghidra反汇编 理解Ghidra反汇编和导航的基本概念。 第7章 反汇编操作 学习如何对Ghidra的分析进行补充,并在自己的分析过程中操作Ghidra反汇编。 第8章 数据类型和数据结构 学习如何操作和定义编译程序中简单和复杂的数据结构。 第9章 交叉引用 详细介绍交叉引用、它们如何支持图形,以及它们在理解程序行为中所起的关键作用。 第10章 图形 介绍Ghidra的图形功能以及如何将图形作为二进制分析工具。 第三部分 让Ghidra为您工作 第11章 协作逆向工程 介绍Ghidra的一项独特功能——将Ghidra作为协作工具。学习如何配置Ghidra服务器,并与其他分析人员共享项目。 第12章 自定义Ghidra 了解如何通过配置项目和工具来自定义Ghidra,以支持个人的分析工作流程。 第13章 Ghidra功能扩展 介绍如何生成和应用库签名和其他专门的内容,以便Ghidra能够识别新的二进制结构。 第14章 Ghidra脚本开发 介绍如何在Ghidra内部编辑器中,通过Python和Java调用基本的Ghidra脚本功能。 第15章 Eclipse和GhidraDev 将Eclipse集成到Ghidra中,并探索这种组合所提供的强大脚本功能,包括构建新分析器的工作示例,从而将Ghidra脚本提升到一个全新的水平。 第16章 Ghidra无头模式 介绍在无需GUI的无头模式下使用Ghidra,并了解这种模式在常见的大规模重复性任务中的优势。 第四部分 深入探索 第17章 Ghidra加载器 深入了解Ghidra如何导入和加载文件,学习构建新的加载器来处理以前无法识别的文件类型。 第18章 Ghidra处理器 介绍Ghidra用于定义处理器架构的SLEIGH语言,探讨向Ghidra添加新处理器和指令的过程。 第19章 Ghidra反编译器 深入了解Ghidra最受欢迎的功能之一:Ghidra反编译器。了解它在幕后是如何工作的,以及它如何帮助分析的过程。 第20章 编译器变体 帮助您理解在使用不同编译器和针对不同平台编译的代码中可能看到的变化。 第五部分 实际应用 第21章 混淆代码分析 学习如何使用Ghidra在静态分析上下文中分析混淆代码,从而无须执行该代码。 第22章 修补二进制文件 介绍了一些在分析过程中使用Ghidra修补二进制文件的方法,包括在Ghidra内部修补以及为原始二进制文件创建新的修补版本。 第23章 二进制差分和版本跟踪 介绍了一项Ghidra特性,它允许您识别两个二进制文件之间的差异,并简要介绍了Ghidra高级的版本跟踪功能。 附录 IDA用户的Ghidra使用指南 如果您是经验丰富的IDA用户,本附录将为您提供将IDA术语和用法映射到Ghidra中类似功能的提示和技巧。 注:访问配套网站链接0-1和链接0-2获取本书中包含的代码清单。 致谢 如果没有No Starch Press出版社专业人员的帮助和支持,这本书是不可能完成的。Bill Pollock和Barbara Yien对于我们创作一本符合愿景的Ghidra图书给予了宝贵的支持。Athabasca Witschi在内容上的初步反馈给我们提供了宝贵的见解和指导。Laurel Chun的持续支持和耐心帮助让这本书变成了我们引以为豪的成品。我们还要感谢所有幕后工作人员为实现这一梦想所付出的辛勤工作,感谢Katrina Taylor、Barton D. Reed、Sharon Wilkey和Danielle Foster。 感谢技术编辑Brian Hay的审阅。他在Ghidra方面的知识和经验确保书中的技术内容扎实,他的教学经验也启迪了我们,令本书既能吸引新手,也能吸引经验丰富的逆向工程师。 感谢国家安全局的Ghidra开发团队,无论是过去还是现在,他们构建了Ghidra并将其作为开源项目与全球分享。 Kara特别要感谢Ben在她学习技术时的耐心,和Katie在她写作时给予的耐心。她要感谢Jen鼓舞人心的介绍,以及Dickie和Lenora的信任。最后,她还要感谢Brian的幽默和每时每刻的支持。 没有所有人的支持,就不可能有这本书。 推荐序 2016年,刘皎老师邀请我翻译Jonathan Levin的Android Internals: Vol I ,我毫不犹豫地答应了——主要是因为这本书好贵!而我既想读书,又不想花钱买……翻译这个活儿太适合我了,哈哈!可到2017年,出了Vault 7泄露事件,这本Android Internals: Vol I因为被CIA“盗版”用于内部培训,也一并被泄露。结果Levin只好在自己的主页上公开了这本书——这下不花钱也能看了。(小丑竟是我自己?!) 受Vault 7事件影响而公开的并不仅是这本Android Internals。 Ghidra,一款由美国国家安全局(NSA)研发的逆向工程工具,原本只是内部使用的工具,也在这一事件中泄露,因此被迫公开。现在Ghidra已经开源,可以直接在GitHub上获得。 初识Ghidra时,我对它的感觉是非常惊艳!当时我正在做一些恶意软件变种分析的项目。由于IDA pro自身没有二进制可执行文件的比对功能,所以经常要用BinDiff这类第三方工具/插件。当有一个功能与IDA类似、但竟然能直接进行二进制代码比对的软件时,我的感触之深不言而喻。而且,Ghidra竟然还是天生支持反编译的(与之对应,IDA的反编译模块是需要花大价钱购买的),并且效果似乎确实不错!因此,我曾把玩过一段时间的Ghidra,但当时只有软件自带的帮助文档,终究还是少了一盏指路的明灯,最终抵不过工期太紧,加上之前的工具已经用得很熟练了,渐渐只能暂时搁置了。 2020年8月,The Ghidra Book: the Definitive Guide一书出版了,而且1~2个月后就有了可以下载的电子版。我下载后迫不及待地开始阅读。显然,本书无论是书名、封面设计、还是内容,根本就是大名鼎鼎的The IDA Pro Book 的Ghidra版!更何况,其主要作者正是The IDA Pro Book的作者Chris Eagle! 本书内容由浅入深,循序渐进——从最基本的软件安装到图形界面操作、再从进阶到编写自己的分析脚本和处理器模块,最后竟然还有IDA Pro用户(比如我)如何转向Ghidra的建议!因此,不论是新手上路,还是逆向老手,都能从中获益匪浅。书中同时提供配套代码,使读者能够自己动手完成对应的操作,确实是一本又说又练的“真把式”好书。读完之后,我就向刘皎老师推荐了这本书,希望引进出版。 软件逆向工程工具本就不多,特别是在软件静态分析工具方面,Ghidra是少数能与IDA Pro比肩的软件。这一点不论是从它在GitHub上的星数,或者 “Ghidra”的百度搜索结果上都能看出来。古人云:“工欲善其事,必先利其器”。自从2015年“网络空间安全”正式成为“工学”门类下的一级学科后,国内网络安全相关研究和竞赛赛事蓬勃发展。不论是网络安全研究人员、相关专业的学生,还是爱好者都应该熟练掌握相关工具,然后方能在此基础上,事半功倍地发挥自己的聪明才智,做出自己的贡献。 本书译者是《CTF竞赛权威指南(pwn篇)》的作者杨超,他长期从事车联网安全研究和工具开发工作,拥有非常丰富的实践经验。本书译文精美、表达流畅、术语翻译精准,个人认为达到了“信达雅”的境界。中文版的面世,能为广大学子和从业人员掌握和熟练使用Ghidra提供有益的指导。相信有志学习者,经过认真钻研,必能早日登堂入室,为我国网络安全事业的发展添砖加瓦! 崔孝晨 Team 509成员 《Python绝技:运用Python成为顶级黑客》译者 译者序 Ghidra第一次出现在公众视野是在2017年3月,当时维基解密开始泄露Vault 7文档,这是美国中央情报局(CIA)最大的机密文件泄露事件,该文档包括各种秘密网络武器和间谍技术。其中,Vault 7的第一部分包括恶意软件库、0day武器化攻击,以及如何控制苹果的iPhone、谷歌的Android和微软的Windows设备。和Ghidra相关的内容就位于这一部分,包括最新版本的软件和安装使用手册。 在2019年的RSA会议上,NSA高级网络安全顾问Rob Joyce发表了Get Your Free NSA Reverse Engineering Tool的议题,解释了Ghidra的独特功能和特性,并发布了Ghidra二进制程序。最终,在当年的4月4日,NSA在GitHub上公布了Ghidra源码。 很难说是不是当年的泄露事件导致了这一开源行为,但对于广大逆向工程师来说,确实获得了一个功能强大且免费的工具。没有哪个逆向工具是完美的,它们都有各自的优缺点,并且在竞争中相互取长补短。即使你已经掌握了IDA Pro、Binary Ninja或者Radare2,也可以从Ghidra中受益。Ghidra的主要优势有:开源且免费(这意味着有无限可能);支持众多的处理器架构;允许在同一个项目中加载多个二进制文件,并同时进行相关操作;拥有设计强大且良好的API,方便开发自动化工具;支持团队协作模式;支持版本跟踪和匹配,等等。 本书的作者之一Chris Eagle是一位经验丰富的逆向工程专家,他早在十年前就出版了《IDA Pro权威指南》一书,到今天依然非常受欢迎,能有幸翻译他的这本新作让我备感荣幸。这两本书的结构大体相似,但在具体细节上有诸多不同,如果你已经熟练掌握了IDA Pro,那么切换到Ghidra也相当容易。甚至可以将它们结合起来使用,在一个工具中集成另一个工具的能力——已有研究表明结合多个反汇编程序可以明显地提升函数识别率。 本书的出版,首先要感谢我的大学室友刘晋和我的应届生导师丁增贤,他们贡献了第7章、第17章和附录的初稿;感谢电子工业出版社的刘皎老师,给予我充分的信任和耐心,并花费许多时间和精力校正各类错误;感谢父母的关心和支持,你们是我人生道路上最坚实的后盾;感谢白玉的监督和陪伴,祝你在今后的日子里少点苦、多点甜,少生气、多开心。最后,再一次向读者推荐我的母校西安电子科技大学网络与信息安全学院,那里有最好的老师和同学! 感谢读者购买此书。希望你们在探索Ghidra和逆向工程的道路上,能够享受到和我一样的乐趣。在翻译过程中,我努力将内容表述清楚,但限于英文水平和专业能力,译文中难免出现疏漏和错误,欢迎读者批评指正。 杨超 2022年10月于北京

目录

第一部分 简介 第1章 反汇编简介 1 1.1 反汇编理论 1 1.2 何为反汇编 2 1.3 为何反汇编 2 1.3.1 恶意软件分析 3 1.3.2 漏洞分析 3 1.3.3 软件互操作性 3 1.3.4 编译器验证 3 1.3.5 显示调试信息 4 1.4 如何反汇编 4 1.4.1 基础反汇编算法 4 1.4.2 线性扫描反汇编 5 1.4.3 递归下降反汇编 6 1.5 小结 9 第2章 逆向与反汇编工具 10 2.1 分类工具 10 2.1.1 file 10 2.1.2 PE Tools 12 2.1.3 PEiD 13 2.2 摘要工具 14 2.2.1 nm 14 2.2.2 ldd 16 2.2.3 objdump 17 2.2.4 otool 18 2.2.5 dumpbin 18 2.2.6 c++filt 19 2.3 深度检测工具 20 2.3.1 strings 20 2.3.2 反汇编器 21 2.4 小结 23 第3章 初识Ghidra 24 3.1 Ghidra许可证 24 3.2 Ghidra版本 24 3.3 Ghidra支持资源 24 3.4 下载Ghidra 25 3.5 安装Ghidra 25 3.5.1 Ghidra的目录结构 26 3.5.2 启动Ghidra 27 3.6 小结 27 第二部分 Ghidra的基本用法 第4章 开始使用Ghidra 28 4.1 启动Ghidra 28 4.2 创建新项目 29 4.2.1 Ghidra文件加载 30 4.2.2 使用原始二进制加载器 32 4.3 使用Ghidra分析文件 33 4.4 初始分析期间的桌面行为 36 4.5 Ghidra桌面提示和技巧 37 4.6 小结 38 第5章 Ghidra数据显示 39 5.1 CodeBrowser 39 5.2 CodeBrowser窗口 41 5.2.1 清单窗口 42 5.2.2 创建额外的反汇编窗口 45 5.2.3 函数图形化视图 46 5.2.4 程序树窗口 49 5.2.5 符号树窗口 50 5.2.6 数据类型管理器窗口 53 5.2.7 控制台窗口 53 5.2.8 反编译器窗口 53 5.3 其他窗口 55 5.3.1 字节窗口 55 5.3.2 数据定义窗口 56 5.3.3 字符串定义窗口 58 5.3.4 符号表和符号引用窗口 58 5.3.5 内存映射窗口 60 5.3.6 函数调用图窗口 61 5.4 小结 62 第6章 理解Ghidra反汇编 63 6.1 反汇编导航 63 6.1.1 名称和标签 63 6.1.2 在Ghidra中导航 64 6.1.3 Go To对话框 65 6.1.4 导航历史 65 6.2 栈帧 66 6.2.1 函数调用机制 66 6.2.2 调用约定 68 6.2.3 栈帧的其他思考 71 6.2.4 局部变量布局 72 6.2.5 栈帧示例 72 6.3 Ghidra栈视图 75 6.3.1 Ghidra栈帧分析 75 6.3.2 清单视图中的栈帧 76 6.3.3 反编译辅助栈帧分析 78 6.3.4 局部变量作为操作数 79 6.3.5 Ghidra栈编辑器 80 6.4 搜索 82 6.4.1 搜索程序文本 82 6.4.2 搜索内存 83 6.5 小结 84 第7章 反汇编操作 85 7.1 操作名称和标签 85 7.1.1 重命名参数和局部变量 86 7.1.2 重命名标签 89 7.1.3 添加新标签 89 7.1.4 编辑标签 90 7.1.5 删除标签 91 7.1.6 导航标签 91 7.2 注释 91 7.2.1 行末注释 92 7.2.2 前注释与后注释 92 7.2.3 块注释 93 7.2.4 可重复注释 94 7.2.5 参数和局部变量注释 94 7.2.6 注解 95 7.3 基本的代码转换 95 7.3.1 更改代码显示选项 95 7.3.2 格式化指令操作数 96 7.3.3 操纵函数 98 7.3.4 数据与代码的转换 100 7.4 基本的数据转换 100 7.4.1 指定数据类型 101 7.4.2 处理字符串 102 7.4.3 定义数组 103 7.5 小结 104 第8章 数据类型和数据结构 105 8.1 理解数据 105 8.2 识别数据结构的使用 106 8.2.1 数组成员访问 107 8.2.2 结构体成员访问 114 8.3 用Ghidra创建结构体 120 8.3.1 创建结构体 120 8.3.2 编辑结构体成员 122 8.3.3 应用结构体布局 124 8.4 C++逆向入门 125 8.4.1 this指针 125 8.4.2 虚函数和虚表 126 8.4.3 对象生命周期 129 8.4.4 名称改编 130 8.4.5 运行时类型识别 131 8.4.6 继承关系 132 8.4.7 C++逆向参考资料 133 8.5 小结 133 第9章 交叉引用 134 9.1 引用基础 134 9.1.1 交叉引用(反向引用) 135 9.1.2 引用示例 137 9.2 引用管理窗口 141 9.2.1 XRefs窗口 142 9.2.2 References To窗口 142 9.2.3 符号引用窗口 143 9.2.4 高级引用操作 143 9.3 小结 144 第10章 图形 145 10.1 基本块 145 10.2 函数图 146 10.3 函数调用图 152 10.4 树 157 10.5 小结 157 第三部分 让Ghidra为您工作 第11章 协作逆向工程 158 11.1 团队协作 158 11.2 Ghidra Server设置 158 11.3 共享项目 161 11.3.1 创建共享项目 161 11.3.2 项目管理 162 11.4 项目窗口菜单 163 11.4.1 文件菜单 163 11.4.2 编辑菜单 165 11.4.3 项目菜单 166 11.5 项目仓库 169 11.5.1 版本控制 169 11.5.2 示例场景 171 11.6 小结 175 第12章 自定义Ghidra 176 12.1 CodeBrowser窗口 176 12.1.1 重新排列窗口 177 12.1.2 编辑工具选项 177 12.1.3 编辑工具 179 12.1.4 特殊工具编辑功能 180 12.1.5 保存CodeBrowser布局 181 12.2 Ghidra项目窗口 182 12.3 工具菜单 185 12.4 工作区 189 12.5 小结 189 第13章 Ghidra功能扩展 190 13.1 导入文件 190 13.2 分析器 192 13.3 词模型 193 13.4 数据类型 195 13.5 Function ID分析器 198 13.6 Function ID插件 199 13.6.1 插件示例:UPX 200 13.6.2 插件示例:分析静态库 204 13.7 小结 207 第14章 Ghidra脚本开发 208 14.1 脚本管理器 208 14.1.1 脚本管理器窗口 209 14.1.2 脚本管理器工具栏 210 14.2 脚本开发 210 14.2.1 编写Java脚本 210 14.2.2 编辑脚本示例:正则搜索 212 14.2.3 编写Python脚本 215 14.2.4 支持其他语言 217 14.3 Ghidra API简介 217 14.3.1 地址接口 218 14.3.2 符号接口 218 14.3.3 引用接口 218 14.3.4 GhidraScript类 218 14.3.5 Program类 224 14.3.6 函数接口 225 14.3.7 指令接口 225 14.4 Ghidra脚本开发示例 226 14.4.1 示例1:枚举函数 226 14.4.2 示例2:枚举指令 226 14.4.3 示例3:枚举交叉引用 227 14.4.4 示例4:寻找函数调用 228 14.4.5 示例5:模拟汇编语言行为 229 14.5 小结 231 第15章 Eclipse和GhidraDev 232 15.1 Eclipse 232 15.1.1 Eclipse集成 232 15.1.2 启动Eclipse 233 15.1.3 使用Eclipse编辑脚本 233 15.2 GhidraDev菜单 234 15.2.1 GhidraDev→New 234 15.2.2 浏览包资源管理器 238 15.3 示例:Ghidra分析器模块项目 243 15.3.1 步骤1:定义问题 243 15.3.2 步骤2:创建Eclipse模块 244 15.3.3 步骤3:构建分析器 244 15.3.4 步骤4:使用Eclipse测试 分析器 249 15.3.5 步骤5:添加分析器到Ghidra 安装中 250 15.3.6 步骤6:使用Ghidra测试 分析器 250 15.4 小结 252 第16章 Ghidra无头模式 253 16.1 入门 253 16.1.1 步骤1:启动Ghidra 254 16.1.2 步骤2和3:在指定位新建 Ghidra项目 254 16.1.3 步骤4:将文件导入项目 255 16.1.4 步骤5和6:自动分析文件、 保存并退出 255 16.1.5 选项和参数 257 16.2 编写脚本 263 16.2.1 HeadlessSimpleROP 263 16.2.2 自动创建FidDb 267 16.3 小结 268 第四部分 深入探索 第17章 Ghidra加载器 269 17.1 未知文件分析 270 17.2 手动加载 Windows PE 文件 271 17.3 示例一:简易Shellcode加载器 279 17.3.1 步骤0:准备工作 280 17.3.2 步骤1:定义问题 282 17.3.3 步骤2:创建Eclipse模块 282 17.3.4 步骤3:构建加载器 283 17.3.5 步骤4:添加加载器到 Ghidra中 287 17.3.6 步骤5:在Ghidra中测试 加载器 288 17.4 示例二:简易Shellcode源代码 加载器 289 17.4.1 更新1:修改导入查询的 响应 289 17.4.2 更新2:在源代码中定位 Shellcode 290 17.4.3 更新3:将Shellcode转化为 二进制数组 290 17.4.4 更新4:导入二进制数组 291 17.4.5 生成结果 291 17.5 示例三:简易ELF加载器 292 17.5.1 统一代码规范 293 17.5.2 ELF头部格式 293 17.5.3 明确支持的加载规格 294 17.5.4 将文件内容加载到Ghidra中 295 17.5.5 数据格式化与添加入口点 296 17.5.6 语言定义文件 297 17.5.7 选项文件 297 17.5.8 结果 298 17.6 小结 300 第18章 Ghidra处理器 301 18.1 理解Ghidra处理器模块 302 18.1.1 Eclipse处理器模块 302 18.1.2 SLEIGH 303 18.1.3 处理器手册 304 18.2 修改Ghidra处理器模块 305 18.2.1 问题陈述 306 18.2.2 示例1:在处理器模块中添加 指令 306 18.2.3 示例2:修改处理器模块中的 指令 312 18.2.4 示例3:在处理器模块中添加 寄存器 319 18.3 小结 321 第19章 Ghidra反编译器 322 19.1 反编译器分析 322 19.2 反编译器窗口 324 19.2.1 示例1:在反编译器窗口中 编辑 325 19.2.2 示例2:无返回值函数 329 19.2.3 示例3:自动创建结构体 331 19.3 小结 334 第20章 编译器变体 336 20.1 高级结构 336 20.1.1 switch语句 336 20.1.2 示例:比较gcc与Microsoft C/ C++编译器 341 20.2 编译器构建选项 342 20.2.1 示例1:模运算符 343 20.2.2 示例2:三元运算符 345 20.2.3 示例3:函数内联 347 20.3 编译器特定的C++实现 348 20.3.1 函数重载 348 20.3.2 RTTI实现 349 20.4 定位main函数 352 20.4.1 示例1:gcc Linux x86-64从 _start到main 352 20.4.2 示例2:clang FreeBSD x86-64 从_start到main 353 20.4.3 示例3:Microsoft C/C++从 _start到main 354 20.5 小结 354 第五部分 实际应用 第21章 混淆代码分析 356 21.1 反逆向工程 356 21.1.1 混淆 356 21.1.2 反静态分析技术 357 21.1.3 导入函数混淆 366 21.1.4 反动态分析技术 370 21.2 使用Ghidra静态去混淆二进制文件 372 21.2.1 基于脚本的去混淆 373 21.2.2 基于模拟的去混淆 377 21.2.3 步骤1:定义问题 379 21.2.4 步骤2:创建Eclipse脚本 项目 379 21.2.5 步骤3:构建模拟器 379 21.2.6 步骤4:添加脚本到Ghidra 安装中 382 21.2.7 步骤5:使用Ghidra测试 脚本 382 21.3 小结 383 第22章 修补二进制文件 384 22.1 规划你的补丁 384 22.2 寻找需要修改的东西 385 22.2.1 搜索内存 385 22.2.2 搜索直接引用 386 22.2.3 搜索指令模式 386 22.2.4 寻找特定行为 389 22.3 应用你的补丁 390 22.3.1 做基本的修改 390 22.3.2 做重要的修改 394 22.4 导出文件 397 22.4.1 Ghidra导出格式 398 22.4.2 二进制导出格式 398 22.4.3 脚本辅助的导出 398 22.5 示例:修补二进制文件 400 22.6 小结 403 第23章 二进制差分和版本跟踪 404 23.1 二进制差分 404 23.1.1 程序差分工具 406 23.1.2 示例:合并两个已分析的 文件 408 23.2 比较函数 411 23.2.1 函数比较窗口 412 23.2.2 示例:比较加密例程 413 23.3 版本跟踪 417 23.4 小结 419 附录A IDA用户的Ghidra使用指南 420

作者简介

编辑推荐

作者寄语

电子资料

www.luweidong.cn

下一个