我一直在想如何修改我最近以便宜的价格购买的 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 驱动器上吗?这甚至会起作用吗?