嵌入式设备逆向所需的工具链

news2024/7/6 18:48:19

导语:本文介绍了嵌入式设备逆向所需的工具链。

相关的应用程序或工具有:

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 软件。

总结

本文列出的工具只是对嵌入式系统/固件进行逆向工程所需的一些工具。旨在从硬件和软件的角度回顾嵌入式系统逆向工程的基础知识。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/493615.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

利用文本描述替换万物(Inpaint-Anything-Description)

文章目录 引言安装Demo github: https://github.com/Atlas-wuu/Inpaint-Anything-Description 引言 前段时间看了万物分割SAM、文生图Stable Diffusion、开集检测Grounding DINO,它们之间可以互相补充,AIGC变得更加可控。Inpaint Anything将…

RK3568平台开发系列讲解(网络篇)Linux 的 socket 套接字

🚀返回专栏总目录 文章目录 一、套接字的数据结构1.1、struct socket 数据结构1.2、struct sock 数据结构二、套接字的初始化三、套接字与文件四、Socket Buffer沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 Linux 内核支持的套接字如下: 我们创建套接字时,可以…

PCIe物理层弹性缓存机制(详细)解析-PCIe专题知识(四)

目录 前言一、简介二、详细解析2.1 实例解析2.2 具体实现过程 三、总结四、其他相关链接1、PCI总线及发展历程总结2、PCIe物理层总结-PCIE专题知识(一)3、PCIe数据链路层图文总结-PCIe专题知识(二)4、PCIe物理层链路训练和初始化总…

国产ChatGPT命名图鉴

很久不见这般热闹的春天。 随着ChatGPT的威名席卷全球,大洋对岸的中国厂商也纷纷亮剑,各式本土大模型你方唱罢我登场,声势浩大的发布会排满日程表。 有趣的是,在这些大模型产品初入历史舞台之时,带给世人的第一印象其…

进程替换函数组介绍exec*

目录 前述 execl execlp execle execv execvp execvpe 前述 介绍后缀的意义: l (list):表示参数采用列表。 v(vector):参数同数组表示。 p(path):自…

力扣题库刷题笔记704-二分查找

1、题目如下&#xff1a; 2、个人Python代码如下&#xff1a; 个人代码如下&#xff1a; class Solution: def search(self, nums: List[int], target: int) -> int: left 0 right len(nums) - 1 while left < right: mid (right left) >> 1 if nums[mid] >…

【C++类和对象之拷贝构造、赋值运算符重载】

拷贝构造、赋值运算符重载 ❀拷贝构造函数 特性 ❀赋值运算符重载 赋值运算符重载格式 &#x1f340;小结&#x1f340; &#x1f389;博客主页&#xff1a;小智_x0___0x_ &#x1f389;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f389;系列…

【数字图像处理】边缘检测

文章目录 0. 前言1. Sobel算子2. Canny算子3. 深度学习算法3.1 Holistically-Nested Edge Detection&#xff08;HED&#xff09;3.2 Richer Convolutional Features&#xff08;RCF&#xff09; 0. 前言 边缘检测是一种图像处理技术&#xff0c;旨在标识和定位数字图像中的边…

【信息系统安全/计算机系统安全】期末复习(HITWH)

PDF版本及更多资料&#xff08;百度网盘&#xff09;&#xff1a; 链接&#xff1a;信息系统安全期末复习 目录 第一章 绪论 第二章 安全认证 填空题 第三章 访问控制 填空题 第四章 安全审计 填空题 第五章 Windows操作系统安全 填空题 第六章 Linux操作系统安全 填…

JDBCSpring:使用Spring JDBC封装Dao

目录标题 1、工程目录pom.xml文件 2、创建数据表student3、在resources目录创建配置文件applicationContext.xmljdbc.properties 4、创建Bean对象Student 5、创建Dao类UserDao接口 6、插入数据一、直接注入jdbctemplate二、继承jdbcdaosupport类 7、运行结果图 1、工程目录 pom…

go 使用pprof分析性能,trace追踪

前言 pprof是Go程序自带的性能分析工具&#xff0c;prof是profile&#xff08;画像&#xff09;的缩写&#xff0c;用于分析go程序的性能。 Profile Descriptions: allocs: A sampling of all past memory allocations 已分配内存采样 block: Stack traces that led to bloc…

梯度下降算法

梯度下降算法的公式&#xff1a; 公式依次代表为“下次迭代的点”、“目前所在的点”、“学习率”和“最大负向梯度”。按照这个公式&#xff0c;每次迭代都会根据上次的步长减去学习率乘以“梯度”的值&#xff0c;去一步一步更新&#xff0c;这样能可以每次迭代都朝着最大负方…

基于xml的Spring应用-1

基于xml的Spring应用 Spring的get方法 方法定义返回值和参数Object getBean (String beanName)根据beanName从容器中获取Bean实例&#xff0c;要求容器中Bean唯一返回值为Object&#xff0c;需要强转T getBean (Class type)根据Class类型从容器中获取Bean实例&#xff0c;要求…

SpringBoot 创建 WebService

开发环境: IDEA 2022.1.4 目录 1. 概述 2. 实现步骤 2.1 POM现加依赖 2.2 定义接口 IWebService 2.3 创建类 IWebServiceImpl 并实现接口 IWebService 2.4 配置类 CxfConfig 2.5 启动服务 2.6 测试 1. 概述 虽然webservice这块使用很少&#xff0c;但在局域网作服务还是相…

自动化测试之 selenium 的安装以及 selenium IDE 录制自动化脚本的用法

文章目录 1. 什么是自动化测试1&#xff09;单元测试2&#xff09;接口自动化3&#xff09;UI 自动化 2. Selenium 介绍1&#xff09;Selenium IDE2&#xff09;Webdriver3&#xff09;Selenium Grid 3. 如何使用 Selenium IDE 录制脚本4. 在 python 环境中安装 Selenium 框架 …

RSA--维纳攻击--代码和题目分析

文章目录 维纳攻击原理&#xff1a;维纳攻击脚本[羊城杯 2020]RRRRRRRSA 1题目描述&#xff1a;题目分析&#xff1a; 收获与体会&#xff1a; 维纳攻击原理&#xff1a; 两位大佬讲得非常清楚&#xff08;搬运工就是我&#xff09;&#xff1a;https://zhuanlan.zhihu.com/p/…

代码随想录算法训练营第五十二天| 300.最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组

文章目录 300.最长递增子序列674. 最长连续递增序列718. 最长重复子数组 300.最长递增子序列 想清楚如何推导dp数组是关键 两层for循环&#xff0c;因为递增序列不是连续的 题目链接&#xff1a;代码随想录 解题思路&#xff1a; 1.dp[i]表示i之前包括i的以nums[i]结尾的最长递…

SpringBoot整合Mybatis-Plus实现浏览数据新增、Redis进行热度排名

在开发Web项目时&#xff0c;常用到的技术就是SpringBoot和Mybatis-Plus。本文将介绍如何使用SpringBoot整合Mybatis-Plus实现一个浏览数据新增功能&#xff0c;以及如何用Redis进行热度排名统计&#xff0c;最后用Vue进行数据渲染。 一、SpringBoot整合Mybatis-Plus 1. 新建…

0 基础 Java 自学之路(2023年最新版)

目录 一、语言的选择二、Java学习路线三、学习资料哪里找&#xff1f;1、Java经典书籍推荐2、Java经典视频推荐3、经典博客推荐 四、如何规划时间&#xff1f;五、是否要报培训班&#xff1f; 写了10多年的代码&#xff0c;之前做过某东的高级架构师&#xff0c;在技术这条路上…

BIOS主板(非UEFI)安装fedora36的方法

BIOS主板(非UEFI)安装fedora36的方法 现实困难&#xff1a;将Fedora-Workstation-Live-x86_64-38-1.6.iso写入U盘制作成可启动U盘启动fedora38安装时报错如下内容&#xff1a; Failed to find a suitable stage1 device: EFI System Partition cannot be of type ntfs: EFI Sys…