跳到主要内容

逆向工程工具梳理

根据网上的资料,大概的介绍一下逆向工程的工具,以及这些工具的使用场景。

资源下载地址

看雪论坛 下载贴

相关论坛

反汇编工具

下面这两个工具都是用于反汇编和反编译二进制程序。它们可以将机器代码转换成更易于理解的汇编语言或高级语言代码。这对于理解程序如何工作以及查找代码中的漏洞至关重要。

IDA

IDA Pro(Interactive Disassembler Professional)是 Hex-Rays 公司出品的一款交互式反汇编工具,它功能强大、操作复杂,要完全掌握它,需要具备很多知识。IDA最主要的特性是交互和多处理器。用户可以通过对IDA的交互来指导IDA更好地进行反汇编。IDA 并不自动解决程序中的问题,但会按用户的指令找到程序中的可疑之处,用户的工作是通知 IDA 怎样去做。

Ghidra

由美国国家安全局(NSA)开发并公开的逆向工程工具,功能与 IDA 类似,但完全免费。它包括一个反编译器,可以将二进制代码转换成更容易理解的高级代码。Ghidra 同样支持多种处理器架构,并具有模块化和可扩展的架构。这个框架基于 java 写的,可以跨平台,包括了一套完善的软件分析工具,涵盖了反汇编、汇编、反编译、图形化以及许多其他有用的功能。

美国国家安全局于 2019 年 3 月将 Ghidra 开源放出。

apktool

一款功能强大且操作简单的 apk 反编译工具,能够将反编译的 apk 文件保存到同名目录中,还能帮用户将反编译的 dex、odex 重新编译成 dex 文件

https://github.com/iBotPeaches/Apktool

Jadx/Jadx-gui

非常方便的Java反编译工具,一般用到的功能主要是搜索、反混淆、查找方法调用这几样,性能和反编译出来的代码效果都比使用 dex2jar+jd-gui 之类的方式好。

https://github.com/skylot/jadx

调试工具

这些工具主要用于动态分析,即在程序运行时监控其行为。它们能帮助研究人员设置断点、检查寄存器、监控内存等,从而逐步跟踪程序执行的过程。

x64dbg

x64dbg 是一款开源的调试器,既支持 32 位和 64 位程序的调试,也支持插件的功能扩展,类似于 C 的表达式解析器,提供了图形模式代码流程、可调试的脚本支持等强大的功能。

其界面及操作方法与 OllyDbg 相似,很容易上手,目前已完全代替 OD,成为调试器主流。x32dbg.exe 适用于 32 位程序的调试;x64dbg.exe 适用于 64 位程序的调试。

官方:https://x64dbg.com/

OllyDbg v1.x

OllyDbg(简称“OD”)是由 Oleh Yuschuk 编写的一款具有可视化界面的用户模式调试器,可以在当前各种版本的 Windows 上运行,仅可调试 32 位的程序。OllyDbg 结合了动态调试和静态分析,具有GUI 界面,非常容易上手,对异常的跟踪处理相当灵活。此外,开放式的设计给了这个软件很强的生命力。

通过爱好者们的不断修改和扩充,OllyDbg 的脚本执行能力和开放插件接口使其变得越来越强大。

脚本和自动化工具

WinDbg

WinDbg 是 Windows 平台上一款强大的用户态和内核态调试工具,是微软公司提供的免费调试器。WinDbg 不仅可以调试应用程序,还可以完成内核调试、分析崩溃转储文件等工作。

自从知名的内核调试工具 SoftICE 停止开发后,WinDbg 就成了内核调试领域的首选调试器。因为它是微软公司的产品,所以在 Windows 平台的兼容性上有着强大的先天优势。尽管 WinDbg 提供了图形操作界面,但并不好用,它最强大的地方还是命令行(通常结合 GUI 和命令行进行操作)。WinDbg 支持的平台包括 x86、IA64、AMD64。

010 Editor

一款全新概念的十六进制编辑器,能解析和编辑一切可视的二进制文件方面功能强大,有别于传统的十六进制编辑器,特别对一些二进制文件进行分析时,简直是神器。。其最强大的功能在于支持模板和脚本操作,只要你为一种类型的二进制文件定义了模板,在以后编辑同一类型的文件的时候就能够调用原来的模板来进行自动分析文件。

Radare2

这是一个开源的逆向工程框架,包括一个反汇编器和调试器,支持多平台和多架构。Radare2 更偏向于命令行操作,适合喜欢使用命令行工具的用户。

Frida

frida 是最好用的 hook 框架没有之一,是一款基于 python + javascript 的 hook 框架,适用于 android/ios/linux/win/Mac OSX 等平台。Frida 的动态代码执行功能,主要是在它的核心引擎 Gum 中用 C 语言来实现的。

注入模式:附加到一个已经运行到进程,或者是在程序启动到时候进行劫持,然后再在目标进程中运行代码。这种方式是 Frida 最常用的使用方式。注入模式的大致实现思路是这样的,带有 GumJS 的 Frida 核心引擎被打包成一个动态连接库,然后把这个动态连接库注入到目标进程中,同时提供了一个双向通信通道,这样控制端就可以和注入的模块进行通信了,在不需要的时候,还可以在目标进程中把这个注入的模块给卸载掉。

嵌入模式:针对没 root 过的设备 Frida 提供了一个动态连接库组件 frida-gadget, 可以把这个动态库集成到程序里面来使用 Frida 的动态执行功能。一旦集成了 gadget,就可以和程序使用 Frida进行交互。

脱壳

Frida

如上介绍

dexDump

号称 “葫芦娃”,Frida集成工具,实现一键脱壳

网络抓包

WireShark

https://www.wireshark.org/

会话层抓包很方便,通常需要配合反编译找到协议的组成方式。 建议使用方式:电脑端开热点,然后指定用于创建热点的虚拟网卡,再把手机连上热点开始抓包

工具配合使用的例子

假设我们要分析一个未知的 Windows 二进制文件,我们可以按以下步骤进行:

  1. 使用 IDA Pro 或 Ghidra 分析文件结构:首先用 IDA Pro 打开二进制文件,分析其主要函数和可能的执行流程。IDA 的图形界面和强大的反编译功能可以帮助我们快速定位关键代码段。

  2. 用 OllyDbg 进行动态调试:确定需要深入分析的部分后,我们可以在 OllyDbg 中加载同一二进制文件,并设置断点在之前分析的关键位置。然后观察在实际运行时程序如何处理数据和响应不同的输入。

  3. 使用 Radare2 进行进一步自动化分析:使用 Radare2 的脚本功能,我们可以编写自定义脚本来搜索特定的代码模式或自动化繁重的分析任务,比如查找所有访问特定全局变量的代码位置。

简单例子

假设我们怀疑一个程序中有缓冲区溢出漏洞。我们可以:

  1. 使用 Ghidra 打开程序,反编译关键的输入处理函数。
  2. 识别出处理输入的代码段后,在 OllyDbg 中设置断点并观察当输入异常值时程序的行为。
  3. 如果发现溢出,使用 Radare2 的脚本自动化搜索整个程序中所有类似的漏洞。

通过这种方式,我们可以有效地利用各种工具的优势,进行更深入的分析和自动化处理,提高逆向工程的效率和效果。

References