逆向工程嵌入式固件使用了哪些技术?

逆向工程 固件
2021-07-07 04:26:40

这个问题与我在这里发布的另一个问题有关

我正在与一家小型公共交通机构合作开展一个简洁的开源项目,该项目将帮助我们向本地开发人员提供实时数据。我们需要的一个关键数据是给定车辆所在的当前公交路线。目前,只有一个电子系统知道这些信息:每辆车配备的车辆逻辑单元(VLU)。

当公交车司机开始一条路线时,他们将其 ID 号输入到操作员控制单元 (OCU) 的键盘中。这个 ID 号被发送到 VLU,然后它在总线上的 LED 标志上显示适当的文本。

在 OCU 上,有两个 DB9F 端口。在手册中,它们被描述为“J1708 端口”。其中一个连接到 VLU,另一个可供我插入。连接到它会为我提供一些数据,您可以在我的其他问题中阅读这些数据

我想做的是对 VLU 的固件进行逆向工程,看看它如何决定发送什么数据或如何解释接收到的数据。据我所知,固件使用RTTarget-32作为基础。我相信是这种情况,因为可以在固件文件中找到以下字符串:

RTTarget-32 5.0 16-Bit Boot Code (c) 1996,2006 On Time Informatik
On Time RTOS-32 5.0 Disk Loader (c) 1996,2009 On Time

我没有发布固件文件的链接,因为我知道在 SE 站点上通常不赞成链接到外部文件。但是,如果我应该上传它,我应该使用什么文件主机?

因此,正如我的问题标题所述,我应该使用什么技术来开始对该固件文件进行逆向工程?

2个回答

根据难度级别,反转固件格式可能涉及许多不同的事情。

您将从使用十六进制编辑器进行手动分析开始。

如果数据看起来结构良好,除了看起来被压缩的块(一些纯文本字符在这里和那里可见),那么它可能没有被混淆。

如果它看起来像是没有结构或几乎没有结构的胡言乱语(例如很少运行 0),则您需要反汇编引导加载程序(从设备转储)以提取混淆算法,假设您无法猜测它。

从那里开始识别固件映像的标头字段和组成部分。大多数将有一个内核和一个压缩文件系统。通常,标头中有偏移量,指向固件的组件。

您可能想尝试BinWalk,看看它是否标识了文件格式的任何常见组件。它正是为这个任务而设计的。它通常在 linux 固件上效果最好,这些固件使用常见的开源文件系统,如 squashfs 或 jffs2,但这里值得一试。

在时间有一个评估套件在这里,可以帮助你更多地了解它。看起来它会在相当标准的硬件上运行。最坏的情况是您可能必须转储 eeprom 并使用 IDA 或类似工具对其进行反编译。

http://en.wikipedia.org/wiki/J1708

这些端口的协议是开放的。所以你甚至可以从你自己的代码中与它通信。奇怪的是它是 RS-485 而不是 RS-232(它基本上是 RS-232 的总线版本,您可能需要不同的卡才能使用它)。那里的 wiki 页面列出了您可以尝试研究的可能的更高级别的协议。