帮助编辑&重新打包(重新打包).img wi-fi 相机固件

逆向工程 嵌入式
2021-07-01 04:55:15

我一直在玩便宜的(沃尔玛特价 15 美元)WiFi 相机。它有一个 UART 端口,可以让我进入一个 shell,我可以从中启动 telnetd 并轻松登录。然而,即使文件系统以读写方式挂载,当我编辑任何内容(即 init.d)然后重新启动时,文件系统会返回到其先前的状态并且 telnetd 不会运行。:(

我的长期目标是弄清楚如何替换或编辑相机的流式二进制文件,以便它不依赖于托管的云服务器来存储和流式传输视频。目前从我家外面流式传输,视频从他们的云服务器反弹;我必须使用他们的专有应用程序!)我的短期(当前)目标是弄清楚如何重新打包固件并重写到相机。

我能够嗅探固件更新,固件文件位于:

https://app.isecurityplus.com/seedonk/firmware/minions/A356_upgrade_00.10.008_20161107.img

$ file A356_upgrade_00.10.008_20161107.img 
A356_upgrade_00.10.008_20161107.img: u-boot legacy uImage, Imogen-X860-I, Linux/ARM, OS Kernel Image (Not compressed), 6709304 bytes, Mon Nov  7 02:33:58 2016, Load Address: 0x80008000, Entry Point: 0x80008000, Header CRC: 0x37467C4E, Data CRC: 0x93CBB08E

binwalk 显示:

$ binwalk -Me A356_upgrade_00.10.008_20161107.img 

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             uImage header, header size: 64 bytes, header CRC: 0x37467C4E, created: 2016-11-07 02:33:58, image size: 6709304 bytes, Data Address: 0x80008000, Entry Point: 0x80008000, data CRC: 0x93CBB08E, OS: Linux, CPU: ARM, image type: OS Kernel Image, compression type: none, image name: "Imogen-X860-I"
10063         0x274F          xz compressed data
10284         0x282C          xz compressed data

<etc..snip.. eventually it creates a 0.cpio file>

$ cpio -idv < 0.cpio 
$ ls
0.cpio      dev     init        lib32       media       package     run  system     var
bin     etc     ko      libexec     mnt     proc        sbin        tmp
cpio-root   home        lib     linuxrc     opt     root        sys     usr

这个社区很棒,我学到了很多关于 RE 的知识。我在这里找到了一些关于重新包装这类东西的帖子,但我仍然有足够的知识差距来不知道下一步会在哪里。任何指导?

非常感谢!

1个回答

然而,即使文件系统以读写方式挂载,当我编辑任何内容(即 init.d)然后重新启动时,文件系统会返回到其先前的状态并且 telnetd 不会运行。

在这种情况下,为了使对文件系统的修改在设备重新启动后保持不变,必须对固件映像本身进行更改,然后必须使用设备提供的“升级”工具将修改后的映像写入内存。以下是根据Google Code上的固件模块套件存档页面的一般工作流程

  1. 将固件映像提取到其组成部分 用户要求
  2. 修改固件的文件系统或 Web UI (webif)
  3. 重建固件
  4. 将修改后的固件闪存到设备上并将其变成砖块 (ha)

由于提取似乎不是问题,而且由于文件系统格式cpio不是更奇特的格式,因此您可以使用GNUcpio实用程序而不需要任何特殊工具来修改文件系统,然后重新压缩它。

修改后的文件系统可能需要位于引导加载程序期望的重建固件映像中的偏移处。作为参考,devttys0 在他的文章固件修补:修复 TEW-632BRP 中有完整的演练

其他资源:

固件修改套件 - 赋予您自定义固件的能力

比特币论坛

如何查看、修改和重新创建 initrd.img