我正在尝试对Devolo dlan wifi 500设备(MIPS架构)进行一些反向工程。我的目标是放一些经我修改的固件。
这是到目前为止我所到的地方: / pool / main / d / devolo-firmware-dlan500-wifi /

从debian软件包中提取固件图像Google代码)。
模块化图像
用fmk重建
使用设备的Web界面上传新固件

步骤7失败。例如“此文件不包含有效数据”。因此,设备在安装更新之前会进行某种形式的验证。
所以我一直在调查。 devolo映像包含devolo页眉/页脚,uboot和uimage。页眉/页脚必须包含某种校验和。我尝试选择有效的(未修改的)更新,并在填充上更改了一位,然后将其上传到设备上并得到了相同的错误消息。重建图像。但是我找不到关于devolo格式的文档。为了找到总和,我比较了两个devolo图像的十六进制:wifi和wireless(无线图像位于我下载wifi图像的同一站点上;无法发布此链接和fmk链接,因为我少于10声望:()。尽管大多数字段的页眉/页脚都非常相似,但我发现32byte字段不是一个总和。也许对逆向工程更有经验的人可以为我提供帮助。
我可以尝试蛮力求和。由于是一个总和,因此我可以通过在填充区域中添加位来产生冲突,为此,我有两个想法:

以各种可能的方式通过网络发送;
使用下载的图片的库以在本地测试总和;

选项1可能要花费几年的时间...
对于选项2,由于devolo libs使用旧的libc版本(https://stackoverflow.com/questions/29153924/how-to-
我的最后一个想法是以某种方式在我的amd64机器上模拟下载的固件,在那儿编译一些将使用devolo库的代码,从而规避依赖关系问题。
因此,我要感谢先前步骤中的任何提示/错误,以及有关如何在PC上运行下载的图像的任何提示。

评论

在提取的代码中找到错误消息,验证例程应该在附近。

找到了消息。它在可执行文件中,因此很难从那里获取内容。但这是一个好主意

如果您已经设置了用于交叉编译的系统,则在某处将有一个mips objdump。在可执行文件上运行它,然后检查代码; mips汇编程序比x86或arm更容易学习(imho)。您还可以使用www.onlinedisassembler.com而不是objdump,或检查Retargetable Decompiler现在是否可以更好地与MIPS配合使用(3个月前我上次没看)。
您能给我一些帮助以从下载的.dvl文件中提取垃圾箱吗?也许这将有助于清除我的dlan500 wifi

如果您有新问题,请单击“提问”按钮提问。如果它有助于提供上下文,请包括指向该问题的链接。 -来自评论

#1 楼

固件文件中的每个部分在其内容上都有一个crc32。 :
在squashfs映像中,有大量基于busybox的工具和一些独立程序。似乎有一个(/ usr / sbin / chunk)关于遍历固件文件的逻辑。它包含许多与固件文件中的值相匹配的32位值,这些值看起来像是magic / fourcc值。 strings(1)的输出也非常令人鼓舞。

评论


我喜欢这个答案,但是有点“你怎么知道?”会变得更好。

–贡特拉姆·布洛姆(Guntram Blohm)
15年3月23日在18:26

杜德,哇。哇完美运作。感谢您的代码。能否请您告诉我您是如何做到的?

– Camandros
15年3月23日在19:37

我使用IDA分析了答案的“更多细节”部分中提到的二进制文件。

– booto
15年3月24日在1:44

是的,但是为什么要使用usr / sbin / chunk?在所有二进制文件中,为什么要特别选择一个?还是您分析了所有这些? (再次感谢)

– Camandros
15年3月24日在10:59

我快速浏览了一下(这不是第一个),它看起来是最好的详细检查方法。多次出现操纵固件的信息以及fourcc值(例如DVCO,VRNT等)。文件本身的格式似乎与PNG(?)有点相似(crc有点不同,并且固件格式支持某些基本加密)。

– booto
2015年3月24日在11:28