解包、修改、重新打包和刷写固件

逆向工程 linux 闪光 垃圾桶
2021-06-25 14:42:52

我一直在想如何修改我最近以便宜的价格购买的 DVR 上的固件。内置软件不是很好,除了插入 USB 驱动器并通过其 UI 运行导出之外,没有提供任何导出视频的选项。理想情况下,我想修改它以通过 FTP 或 NFS 或按计划导出。

您可以通过将制造商提供的升级映像放在 USB 驱动器上来升级设备上的固件,将其插入,打开设备电源,然后让它完成升级固件的工作。

所以我下载了固件并在上面运行了 binwalk。它能够提取屋顶,我可以看到它正在运行嵌入式 Linux。这是我提取的文件附带的输出:


Scan Time:     2020-05-15 02:16:35
Target File:   /vagrant/rootfs-3531dv100
MD5 Checksum:  18a010179a1e5ae03c260ccc9609ddbc
Signatures:    404

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             uImage header, header size: 64 bytes, header CRC: 0xCB1642A1, created: 2019-09-26 01:53:07, image size: 9761796 bytes, Data Address: 0x0, Entry Point: 0x0, data CRC: 0x35F26A52, OS: Linux, CPU: ARM, image type: Filesystem Image, compression type: none, image name: "hirootfs"
64            0x40            JFFS2 filesystem, little endian

在 rootfs 上的文件中,我找到了运行的 init 脚本。有趣的是,那里有一个被注释掉的启动 telnetd 的调用。在 /etc/passwd 中还设置了 root 用户的密码。

我的问题是:如果我修改 init 脚本以取消注释该行,以便它在启动时运行 telnetd 并在 /etc/password 中为 root 用户生成一个新的密码哈希,我如何将它打包成一个可启动的映像,我可以放到 USB 驱动器上吗?这甚至会起作用吗?

1个回答

假设没有经过加密签名,那应该是可能的。您只需要按照相反的步骤操作即可。如果您使用了binwalk的提取选项,那就太容易了;您需要弄清楚如何手动解包/打包图像(也许详细选项将提供有关所采取步骤的更多信息)。我意识到这是一个通用的听起来的答案,但在不知道确切的固件结构的情况下很难推测。

如果您更改任何内容,您还需要注意任何需要修改的校验和/哈希。

但是,如果您尝试刷新不正确的固件,则可能会使设备变砖。最好看看它是否支持任何固件恢复模式,或者板上是否有硬件调试端口来协助恢复。