这个问题与我在此处发布的另一个问题有关。


我正在与一家小型公共交通部门合作开展一个简洁的开源项目,这将有助于我们提供实时数据发送给本地开发人员。我们需要的关键数据是给定车辆当前的公交路线。当前,只有一个电子系统知道此信息:每辆车都配备的车辆逻辑单元(VLU)。操作员控制单元(OCU)上的键盘。此ID号发送到VLU,然后VLU在总线上的LED指示灯上显示相应的文本。

在OCU上有两个DB9F端口。在手册中,它们称为“ J1708 PORTS”。其中一个已连接到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网站上通常不赞成外部文件。但是,如果我应该上传它,我应该使用哪个文件主机?

那么,正如我的问题标题所指出的那样,我应该使用什么技术来开始对该固件文件进行反向工程? br />

#1 楼

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

您将从使用十六进制编辑器进行手动分析开始。 ,那么它可能不会被混淆。

如果看起来像是乱七八糟的东西,几乎没有或没有任何结构(例如,很少运行0s),则需要拆卸引导加载程序(从设备中转储)以提取混淆算法,假设您无法猜到。

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

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

评论


您可能还应该提到自己的代码:code.google.com/p/firmware-mod-kit ...实际上,binwalk似乎部分依赖固件-mod-kit中的某些脚本。反之亦成立,您的项目包括binwalk :) ...几分钟前刚刚使用了extract-firmware.sh,所以我不禁发表评论。 +1

– 0xC0000022L♦
2013年4月4日23:29



我总是对提及自己参与的事情感到很奇怪。是的,Firmware Mod Kit的较新脚本依靠Binwalk识别固件段,然后根据Binwalk标识进行操作。记录布局,然后可以稍后对其进行重构。 Binwalk本身现在可以提取嵌入式文件系统。克雷格·赫夫纳(Craig Heffner)都在工作,因此功劳他。

–达斯塔
2013年4月5日在2:03

#2 楼

准时提供了一个评估工具包,可以帮助您了解更多信息。看起来它将在相当标准的硬件上运行。最坏的情况是,您可能必须转储eeprom并将其与IDA等进行反编译。

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

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