导语:本文介绍了嵌入式设备逆向所需的工具链。
相关的应用程序或工具有:
UART(Universal Asynchronous Receiver Transmitter,通用异步收发器):
UBoot;
Depthcharge;
SPI (Serial Peripheral Interface,串行外设接口):
Flashrom;
I2C(Inter-Integrated Circuit,集成电路总线):
i2cdetect;
i2cdump;
JTAG (Joint Test Access Group,联合测试接入组)
OpenOCD;
UrJTAG;
除了使用上述协议提取固件外,我们还将使用 Ghidra 分析二进制文件,其中我们将涵盖以下内容:
将二进制块加载到 Ghidra;
了解 Ghidra 的 FlatProgramAPI:Java / Python;
增强 Ghidra 的自动分析;
理解Ghidra中的内存映射;
PCode仿真;
本文回顾了在建立嵌入式系统逆向工程实验室时所需要的一些工具。有两个部分,一个是硬件工具,一个是软件工具。阅读完本文后,你应该知道为逆向工程嵌入式系统和固件映像建立一实验环境需要什么。
让我们介绍一下将要使用的一些工具。
硬件
为了连接和分析本文中的逆向目标,我们将使用以下工具:
树莓派模型4;
FX2LA逻辑分析仪;
万用表;
RD6006电源;
Breadboard Wire 跳线;
烙铁;
Raspberry Pi
Raspberry Pi是一款基于linux的SBC(单板计算机),拥有多种外设。直到最近,对于许多嵌入式系统项目来说,Raspberry Pi 还是一种易于获取的低成本解决方案。
它利用Broadcom BCM2711,四核Cortex-A72 (ARM v8) 64位SoC @ 1.5GHz,并且有多种型号可供选择,可用外设,当然还有成本! Pi 最初是一个教育平台,但制造商和黑客都喜欢这个平台,并找到了很多方法来利用这个基于 Linux 的低成本 SBC。我发现 Raspberry Pi 在过去几年中已成为我的首选多功能工具,这主要是由于它支持的接口数量,如下图所示。
我们将使用这个平台来插入和连接各种嵌入式系统总线和外设。除了包含许多嵌入式系统上的标准外设外,它还运行 Linux!这使我们能够利用许多开源工具,甚至编写我们的程序来与这些外设进行交互。我们可以这样做,因为这些接口是通过 /dev/ 中的文件系统公开的。我们将是基于 Debian 的标准 Raspbian 映像,每一篇文章都将介绍如何配置Pi的相关接口。
电源:RD6006
在完成我们的目标时,我们需要从外部为它们提供动力。因此,无论我们是要为闪存芯片或微控制器等单个组件还是我们的整个平台供电,我们都需要一个可调节的电源。
Riden 6006 是一款可变台式电源,可根据你要使用的电源处理 6-70v 的输入电压。此电源要求你连接电源;对于我的台式设置,我使用连接到 RIDEN 6006 背面的 12V / 3A 交流适配器,如下所示:
该电源具有十个可编程预设(电压/电流设置),可通过 USB 或 WiFi 远程控制。
以下 python 片段显示了控制此电源是多么简单。
使用连接WiFi的版本,移动应用程序可以远程控制电源。需要以编程方式控制我们的电源,以防我们需要运行重复测试,我们循环电源到目标。第一部分中有一个示例:
Riden Link: Amazon
Riden Link: AliExpress
万用表
万用表是任何硬件实验室的必备品,万用表执行电子测量,例如:
电压(交流和直流);
当前的;
电阻;
连续性;
不同的万用表的成本和功能差异很大,选择万用表时需要注意的一些因素包括:
用于什么目的?
手动还是自动?
可用的测量方法是什么?
就我们的目的而言,我们不需要一个非常昂贵的万用表,因为我们将主要测量连续性、电压和电阻。需要注意的是,一些便宜的万用表比其他万用表需要更多的时间来测量,从而导致一些滞后。
逻辑分析仪
硬件黑客工具箱中另一个常用的工具是逻辑分析仪。逻辑分析仪捕获并显示数字电路中的电子信号。逻辑分析仪还可以解码和分析这些信号,将数字数据流转换为更易读的格式。
虽然我是 Salaea 逻辑分析仪的忠实粉丝,但对于大多数爱好者来说,这些都是相对昂贵的。因此,我将为此系列使用低成本的 fxXXX 系列逻辑分析仪。人们可以以相当低的价格从 eBay 或亚马逊购买这些分析仪。我们将与这些分析仪一起使用的软件将是 PulseView 软件套件。
在选择逻辑分析仪时,有几个因素需要考虑,我在下表中列出了这些因素。
对于我们将要研究的目标,24MHz的采样率就足够了。然而,对于专业使用,我建议使用Saleae或其他至少能够达到100MHz的逻辑分析仪。
Saleae Logic Analyzer
FX2LA Logic Analyzer
这些逻辑分析仪由 PulseView / Sigrok 软件支持,我们将在本文的示例中使用该软件。
面包板或跳线
我们需要一种方法将我们的 Raspberry Pi 连接到我们的各种目标,这必然会用到面包板。面包板使我们无需焊接即可制作电子电路原型。在使用 Raspberry Pi 时,我非常喜欢下图所示的机箱/面包板组合:
焊台
在某些示例中,可能需要焊接到我们的目标上。例如,有时我们需要直接焊接到组件上以对其进行测量/接口,而其他时候我们需要将所有部件都移除。
适合你烙铁需要满足以下条件:
你要焊接什么?
电路板;
汽车零部件;
布线;
你有多少可用的办公桌/工作台空间?
你需要返修台吗?
你会移除/添加 SMD/SMT 组件吗?
如果你正在寻找一个低成本的焊台,我推荐这个。它的温度范围可以从 392 到 896,并且可以通过操作台控制。如果你要进行 SMD 返修和移除 BGA 设备,你将需要选择具有热风返修台。
该视频可以提供有关选择合适工作站的更多信息。
其他硬件工具
到目前为止,我只列出了必需的工具。但是,许多其他工具和组件在你的硬件实验室中可能会有所帮助,比如:
硅胶垫:
为探测设备/焊接提供安全的表面平台;
显微镜:
印刷电路板;
FTDI越狱:
广泛支持各种编程语言的硬件多功能工具;
示波器:
用于查看模拟信号,适用于调查无法按预期工作的神秘/麻烦的数据线,也用于收集功率跟踪差分功率分析和电压故障;
选择示波器指南;
ChipWhisperer 平台
用于电压闪变和侧通道分析,NewAE还提供了一系列优秀的教程和示例。
随着你继续研究和分析更多目标,你的硬件需求将会增长。本文介绍了遵循此特定示例所需的基本组件。
软件工具
请记住,在逆向工程过程中,硬件通常只是第一个障碍。通常情况下,我们在硬件级别进行逆向工程,以增加对软件级别组件的访问。在本文中,我们将使用几个软件工具,并在下面重点介绍核心工具。
Ghidra
熟悉我背景的人都知道,Ghidra 已迅速成为我在软件逆向领域的首选工具。
Ghidra 是 NSA 开发的 SRE(软件逆向工程)工具套件。如果你熟悉 IDA-Pro、r2 或 Binary Ninja,那么你可能就熟悉 Ghidra。我们可以使用上面提到的任何工具对这个固件镜像进行逆向工程。尽管如此,我还是选择了 Ghidra,因为它是开源的,并且具有用于脚本和分析二进制文件的相对完整且记录良好的 API。
使用 Ghidra 的好处有很多:
它是完全开源和免费的;
支持架构的大型库;
适用于所有受支持架构的反汇编和反编译工具;
用于扩展分析/插件开发的 Java/Python API;
当我们在整个系列中查看固件映像时,我们将使用 Ghidra。此外,在本文中,我们将学到以下知识:
将内存区域添加到固件映像;
使用自定义 ghidra 扩展增强自动分析;
模拟 Ghidra 的 PCode 以更好地了解固件行为;
我在写了一篇关于设置开发环境来开发 Ghidra 模块和脚本的文章。当我们查看从目标中提取的固件映像时,我们将使用此环境。
Binwalk
在我们将二进制或固件映像加载到 Ghidra 之前,我们需要回答几个问题:
这个软件是为什么架构编写的?
此映像是压缩的还是加密的?
此固件映像中是否嵌入了其他文件或文件系统?
Binwalk 可以帮助我们避开几乎所有这些问题。Binwalk 是一种检查二进制文件并搜索预定义文件格式的工具。其中一些格式包括:
适用于多个操作系统的可执行格式;
文件系统映像;
多媒体文件;
Binwalk 还可以生成熵图,这在确定固件映像是加密还是压缩时非常有用。当我们从目标中提取固件映像时,我们将使用 binwalk 执行我们的初始分析。 binwalk 的输出将帮助我们确定提取感兴趣数据所需的后续步骤。
Kaitai Struct
一旦我们了解了给定二进制文件或固件映像的结构,我们可能需要编写一个解析器来提取感兴趣的数据。 Kaitai struct 很快成为我编写自定义二进制解析工具的首选工具。
Kaitai Struct 是一种声明性语言,用于描述布局在文件或内存中的各种二进制数据结构:即二进制文件格式、网络流数据包格式等。
其主要思想是,在Kaitai Struct语言中只描述一种特定的格式,然后可以将其编译成一种受支持的编程语言中的源文件。此外,这些模块将包含为解析器生成的代码,该解析器可以从文件/流中读取所描述的数据结构,并以易于理解的API访问它。
我们可以使用 Kaitai struct 为二进制文件编写模板,使用该模板,Kaitai 将为我们生成一个解析库。该工具非常节省时间,并且支持多种输出语言。下面是我为 ePOS RTOS 实现的自定义文件系统编写的 Kaitai Struct 的一些示例应用程序。
Kaitai 模板;
自动生成的解析器;
使用自动生成的解析器;
Kaitai 还具有可以在本地运行的基于 Web 的 IDE。
你可以从kaitai.io了解更多关于Kaitai的信息并下载相关工具
Pulseview / SigRok
Pulseview 是 Sigrok 的前端软件,我们将使用它来分析和查看我们使用逻辑分析仪捕获的数据。此外,Pulseview 将对我们捕获的流量应用各种协议解码器,使我们能够从捕获中获得更多含义,并使捕获的输出更具可读性。例如,使用UART解码器,我们可以这样做:
我们还可以导出这些数据以进行进一步分析,编写我们的插件,甚至以编程方式编写如何收集信息的脚本。Pulseview 和 sigrok 也是完全开源的,并且有许多兼容的设备,包括一些版本的 Saleae Logic 分析仪,你可以在此处下载 Pulseview 软件。
总结
本文列出的工具只是对嵌入式系统/固件进行逆向工程所需的一些工具。旨在从硬件和软件的角度回顾嵌入式系统逆向工程的基础知识。