如果不是嵌入式 linux,固件映像可能是什么?

逆向工程 linux 手臂 嵌入式 闪光
2021-06-11 09:02:47

我决定玩弄一个旧的婴儿监视器,纯粹是为了了解这些东西(IE 嵌入式设备)是如何工作的。我成功地提取了闪存,我希望它有一个 uboot 映像和一个 squashfs 文件系统或类似的东西。binwalk 打破了我的希望:

$ binwalk motorola_1.bin

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------

相反,它显然充满了 ARM 指令:

$ binwalk -A motorola_1.bin

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
300           0x12C           ARM instructions, function prologue
328           0x148           ARM instructions, function prologue
404           0x194           ARM instructions, function prologue
428           0x1AC           ARM instructions, function prologue
1176          0x498           ARM instructions, function prologue
1580          0x62C           ARM instructions, function prologue

现在,在执行此操作之前,我连接到监视器的 UART 接头并显示了某种调试程序,该程序允许我查看相机的当前转换、调整显示设置等。如果我在芯片上运行,该程序打印输出的字符串在我从芯片中提取的二进制文件中都是可见的strings,所以这显然是在那里运行的。如果固件不是某种形式的 linux 映像,我很困惑它是如何运行的。

主板上没有我可以看到的其他闪存芯片,尽管有一个(遗憾的是无法识别的)IC,它显然是某种处理器或 SOC,我认为它可能具有内部闪存部分。

如果这不是某种形式的 linux 映像,那么它可能是什么?纯 ARM 指令意味着它只是一个程序,但我真的不明白它如何在没有操作系统启动的情况下执行程序来运行它。或者我可能只是遗漏了什么?

编辑:如果重要的话,该芯片是 Winbond W25Q16.V - 不完全是用于存储 linux 映像的大型芯片......或者在我看来无论如何。但我知道什么?

1个回答

有许多用于嵌入式系统的非 Linux 解决方案,从实时操作系统(如 eCos、FreeRTOS、ThreadX、Nucleus 等)到没有任何特定操作系统环境的完全单一的、定制的固件。关于确定的唯一方法是开始拆卸并弄清楚它是如何工作的。

我的旧演示文稿可能对背景信息有些用处:

https://github.com/skochinsky/papers/blob/master/2010-07%20%5BRecon%5D%20Intro%20to%20Embedded%20Reverse%20Engineering%20for%20PC%20reversers.pdf