我正在尝试对 Devolo dlan wifi 500 设备(MIPS 架构)进行一些逆向工程。我的目标是在那里放一些我修改过的固件。
这是我到目前为止的地方:
- 从http://update.devolo.com/linux2/apt/pool/main/d/devolo-firmware-dlan500-wifi/下载固件更新
- 从 debian 包中提取固件映像
- 使用 binwalk 分析图像
- 使用固件模块工具包提取的内容(存在于谷歌代码中)。
- 修改后的图像
- 用 fmk 重建
- 使用设备的网络界面上传新固件
它在第 7 步失败。我收到一条消息,内容类似于“此文件不包含有效数据”。因此,在安装更新之前,设备会执行某种验证。
所以我一直在调查。devolo 映像包含一个 devolo 页眉/页脚、一个 uboot 和一个 uimage。页眉/页脚必须包含某种校验和。我尝试选择有效(未修改)的更新并在填充上更改一位,将其上传到设备并收到相同的错误消息。
如果我知道校验和在哪里或如何获得,我可以在重建图像后更改它。但是我没有找到关于 devolo 格式的文档。为了找到总和,我比较了两个 devolo 图像的十六进制:wifi 和无线(无线图像在我下载 wifi 图像的同一个站点上;无法发布此链接和 fmk 链接,因为我有不到 10声誉 :( )。页眉/页脚在大多数领域都非常相似,尽管我发现没有 32 字节的字段是一个总和。也许在逆向工程方面更有经验的人可以帮助我。
我可以尝试蛮力求和。由于它是一个总和,我可以通过向填充区域添加位来创建碰撞。为此,我有两个想法:
- 通过网络发送所有可能的组合;
- 使用下载的图像库在本地测试总和;
选项 1 可能需要几年时间......
对于选项 2,我尝试使用 qemu 虚拟机并在那里编译,然后交叉编译,但没有结果,因为 devolo 库使用旧的 libc 版本(https://stackoverflow.com/questions/29153924/how-to- solve-c-conflicts- between-system-and-library-dependencies)。
我的最后一个想法是以某种方式在我的 amd64 机器上模拟下载的固件,在那里编译一些将使用 devolo 库的代码,从而规避依赖问题。
所以,我要感谢我之前步骤中的任何提示/错误,以及有关如何在我的电脑上运行下载的图像的任何指示。