在 Ghidra 中分析STM32裸机固件

Ghidra中文版下载

原版下载

在本文中,我们将分析 Ghidra 中的 STM32 固件二进制文件。该固件适用于意法半导体的 STM32F103C 开发板。

分析固件二进制文件,通常与分析 PE 或 ELF 文件不同。PE(可移植可执行文件)是 Windows 上的标准可执行文件格式。.exe文件是底层的 PE。PE 文件格式适用于 32 位 Windows 系统。PE64 文件格式与 PE 类似,但适用于 64 位系统。

相应地,在 Linux 上,我们有 ELF(可执行和可链接格式)文件,其用途相同。这两种文件格式都具有明确的结构。它们都有一个文件头,描述了文件在执行时在内存中的存放方式。文件头中提供了代码段和数据段的地址。Ghidra 等反汇编程序会利用这些信息自动区分代码段和数据段,并将文件加载到正确的地址。

另一方面,扁平固件文件只是一个二进制 blob,一堆字节,没有文件头或描述文件布局的元数据。在检查此类文件时,分析师必须亲自将信息提供给 Ghidra。

安装

下载地址:https://github.com/NationalSecurityAgency/ghidra

在github里下载后进入文件夹,安装java环境:jdk-24版本

然后运行工具ghidraRun.bat

运行后会出现这个黑色的框框

将我们准备好的jdk文件根目录复制上去,然后回车

将我们准备好的jdk文件根目录复制上去,然后回车

如果出现这个界面的话就是配置成功

如图所示,我们只需保留主程序窗口就可以了

创建项目

  • 在初始界面左上角选择File->New Project...(也可以使用快捷键Ctrl+N)
  • 选择Non-Shared Project,单击Next(另一个选择Shared Project是会在本地监听一个端口,方便分享)
  • 设置项目的保存路径项目的名称 ,设置完成后点击Finish即可

导入项目文件

  • 可以选择左上角的File->Import File...(也可以直接将文件拖拽进Ghidra中)

设置导入文件的信息

STM32F103 是一系列基于ARM Cortex-M3处理器的微控制器。而Cortex-M3 是一款 32 位处理器,默认内存端模式是小端模式。点击"语言选项"按钮,并将语言设置为"ARM-Cortex-32-little"。

配置后,单击OK按钮即可

  • 完成上述步骤后,Ghidra会进行自动分析,等待一段时间(取决于反编译软件的复杂程度),Ghidra会显示出反编译软件的相关信息

打开项目

  • 将反编译的软件拖拽进Ghidra的CodeBrowser(左上角的龙图标)
  • 首次打开,会提示是否对反编译软件进行分析,单击Yes,接着单击Analyze

我们现在可以继续加载文件并双击在反汇编程序中打开。

  • 等待一段时间就可以得到反编译结果了

Ghidra 分析提示

Ghidra 将提示分析文件,我们点击"是",保留默认分析选项。分析完成后,我们来看看反汇编的代码。

Ghidra 中未解析的地址以红色标记

我们注意到,有几个地址用红色文本标记。这些地址的形式为08000XXX。当文件中不存在指定的地址时,Ghidra 会将其标记为红色。双击该地址不会有任何结果。

FUN_000003e4类似地,让我们通过在符号树上单击任何函数(比如)来分析它的反汇编列表。

怎么找到函数

我们可以找到左边的functions,找到entry(当然有些程序直接有main,或者_start等关键字)

通过Filter搜索可以更快一点,双击即可再右边看到entry代码

相关推荐
Wave8451 天前
基于 STM32 + ESP8266 + W25Q64 的双核 OTA 底层架构总结
stm32·嵌入式硬件·架构
xiangw@GZ1 天前
WiFi 全世代(WiFi1~WiFi7)技术规范与核心参数总结
嵌入式硬件
振南的单片机世界1 天前
CPU时钟:频率越高跑越快,但物理极限在“拖后腿”
stm32·单片机·嵌入式硬件
普中科技1 天前
【普中 51-Ai8051 开发攻略】-- 第 20 章 输入捕获实验
单片机·嵌入式硬件·输入捕获·pca·普中科技·ai8051u·aicube
d111111111d1 天前
直流电机位置式 PID 控制 和 舵机的区别
笔记·stm32·单片机·嵌入式硬件·学习
d111111111d1 天前
了解Modbus
网络·笔记·stm32·单片机·嵌入式硬件·学习
三佛科技-134163842121 天前
主控FT32F031便携式吸尘器方案,迷你手持吸尘器MCU控制方案开发
单片机·嵌入式硬件·物联网·智能家居·pcb工艺
一个平凡而乐于分享的小比特1 天前
一文读懂MCU与FPGA:核心区别、协同之道与双修秘籍
单片机·fpga开发·职场发展·mcu开发
踏着七彩祥云的小丑1 天前
嵌入式——认识电子元器件——微动开关系列
单片机·嵌入式硬件
调光IC-小雅1 天前
解析FP62××系列限流保护机制:为何它是DC/DC芯片的安全底线
单片机·嵌入式硬件