如何修改 jffs2 图像中的文件

逆向工程 固件
2021-07-02 05:20:48

我正在使用 SIP 电话的固件。我从固件中提取了 JFFS2 文件系统映像,并使用 modprobe 将其安装如下:

sudo modprobe mtdram total_size=36360
sudo modprobe mtdblock 
sudo modprobe jffs2
sudo modprobe block2mtd
sudo dd if=~/1C6A83.jffs2  of=/dev/mtdblock0
sudo mount -t jffs2 /dev/mtdblock0 ~/mnt

但是,当我尝试更改已安装设备上的文件时,出现错误“设备上没有剩余空间”。我究竟做错了什么?可能是我的设备 mtdblock0 受到写入保护?

1个回答

我想做同样的事情,并且没有在设备上留下空间(我在某处读到该错误可能是由于图像不完整......),但我不知道如何更新图像。md5sum原始文件没有改变,sync在谷歌搜索后按照建议运行也没有成功......

我采用了提取jffs2镜像然后重新打包jffs2文件系统的方式。
我把所有东西都放在 github 上,但这里是本质:

这会将.jffs2文件系统解压缩/my/target/dir并重新打包到mtd_root.sum.bin

开箱

mount -t jffs2 -o ro /tmp/mtdblock0 /tmp/e2jffs2
(cd /tmp/e2jffs2; tar cf - .) | (cd "/my/target/dir" ; tar xpf -)
umount /tmp/e2jffs2

重新包装

mount -t jffs2 -o ro /tmp/mtdblock0 /tmp/e2jffs2
mkfs.jffs2 --root=/tmp/e2jffs2/ --output=/tmp/mtd_root.bin --eraseblock=128KiB --pad --no-cleanmarkers
sumtool  --pad --eraseblock=128KiB --input=/tmp/mtd_root.bin --output=$(dirname "/my/target/dir")/mtd_root.sum.bin