模拟嵌入式设备的非 Linux 固件映像

逆向工程 固件 嵌入式 奇木
2021-06-23 03:29:04

我遇到了多个关于运行某种 Linux/Busybox 操作系统和文件系统的设备的 QEMU 仿真的问题/教程。但是,我正在寻找使用 QEMU 使用提取的图像文件运行基于 ARM 的嵌入式设备固件的方法。

此时,我一直在尝试使用以下方法多次:

qemu-system-arm -machine versatilepb -m 128M -option-rom MspApp.bin 

但是,在每种情况下,我最终都会遇到类似的崩溃:

R00=00000000 R01=00000000 R02=00000000 R03=00000000
R04=00000000 R05=00000000 R06=00000000 R07=00000000
R08=00000000 R09=00000000 R10=00000000 R11=00000000
R12=00000000 R13=00000000 R14=00000000 R15=08000000
PSR=400001d3 -Z-- A svc32
s00=00000000 s01=00000000 d00=0000000000000000
s02=00000000 s03=00000000 d01=0000000000000000
s04=00000000 s05=00000000 d02=0000000000000000
s06=00000000 s07=00000000 d03=0000000000000000
s08=00000000 s09=00000000 d04=0000000000000000
s10=00000000 s11=00000000 d05=0000000000000000
s12=00000000 s13=00000000 d06=0000000000000000
s14=00000000 s15=00000000 d07=0000000000000000
s16=00000000 s17=00000000 d08=0000000000000000
s18=00000000 s19=00000000 d09=0000000000000000
s20=00000000 s21=00000000 d10=0000000000000000
s22=00000000 s23=00000000 d11=0000000000000000
s24=00000000 s25=00000000 d12=0000000000000000
s26=00000000 s27=00000000 d13=0000000000000000
s28=00000000 s29=00000000 d14=0000000000000000
s30=00000000 s31=00000000 d15=0000000000000000
FPSCR: 00000000
Aborted

考虑到我没有模拟任何所需的硬件 - 稍后会出现问题 - 我最不想让设备启动,我知道执行不会走得很远。

目前,我一直在尝试用于池自动化的固件,从静态分析显示它在NXP 基于 ARM9i.MX28 板上的Nucleus RTOS运行固件由两个文件组成,一个似乎包含操作系统、一组 XML 文件(可能用于用户界面)以及一个 U-boot 引导加载程序。所有这些组件都在MspApp.bin文件中,我假设它是 ROM 映像。

所以我的问题是:1) 是否可以使用 QEMU 从固件 ROM 映像部分模拟嵌入式设备,如果可以 2) 我需要哪些信息/命令/修改让 QEMU 部分模拟提取的固件?

1个回答

可能的,但模拟原始 .bin 文件几乎永远不会起作用,除非它的布局与您使用的 QEMU 平台完全一样。如果您要运行的二进制文件是静态链接的,并且是 QEMU 知道的二进制格式,您可以使用 QEMU 用户模式来运行它,但您需要从二进制映像中提取它。 Binwalk可能对此非常有用。引导加载程序可能是用户模式仿真的一个很好的候选者,或者同样是静态链接的文件系统中的任何内容。一个很好的指南在这里:QEMU usermode, howto

对于任何动态链接并依赖于 Nucleus RTOS 的内容,您可能必须破解 QEMU 以获得操作系统支持。这可能是一项及时的工作。如果您知道内存布局以及 MspApp.bin 中所有内容的加载位置以启动,您可能能够使用 Unicorn Framework 取得一些进展(抱歉,还没有足够的代表发布超过 2 个链接),尽管您很快就会遇到未对特定于电路板的硬件进行建模的问题,这会很快导致您陷入困境。

祝你好运,嵌入式系统仿真是一项令人沮丧但有益的事业。不管你是否得到它的工作,当你完成的时候你会学到很多东西。