解压 ubi 镜像,其中包含 ubifs 镜像

问题描述 投票:0回答:2

我在研究过程中遇到了一个问题。 我有一个从互联网下载的固件文件,我正在尝试解压它以模拟固件。

好消息是我曾经成功完成过一次,但我恢复了我的机器,现在无法重新创建该过程。

首先,任何工具都无法提取该文件,因为你会得到一个错误,指出找到的布局块少于2个。

之后我转储了ubi文件的一些信息:

==> app_ubifs <==
1 named volumes found, 2 physical volumes, blocksize=0x20000
== volume b'bakfs' ==
-rw-r--r--  1 0     0       37879808 2020-04-22 01:27:47 ubifs

所以从我成功获得此操作的那一刻起,我就知道在卷 bakfs 中还有另一个 ubifs 映像,可以通过公共工具成功提取。

我测试了很多方法来挂载这个镜像,但总是挂载失败。

modprobe ubi 

modprobe nandsim first_id_byte=0x20 second_id_byte=0xaa \
                 third_id_byte=0x00 fourth_id_byte=0x15

我相信这是 blocksize=0x20000 的正确配置。

ubiformat /dev/mtd0 -f app_ubifs   
ubiformat: mtd0 (nand), size 268435456 bytes (256.0 MiB), 2048 eraseblocks of 131072 bytes (128.0 KiB), min. I/O size 2048 bytes
libscan: scanning eraseblock 2047 -- 100 % complete  
ubiformat: 2048 eraseblocks have valid erase counter, mean value is 0
ubiformat: flashing eraseblock 282 -- 100 % complete  
ubiformat: formatting eraseblock 2047 -- 100 % complete    

                 

格式化和闪烁也可以正常工作。

接下来的部分我真的不明白。 网上有 100 种不同的方法,但我似乎无法让它发挥作用。

如果有人可以在此过程中帮助我,我将不胜感激。

正如我所说,我已经有了带文件系统的解压版本。 但我现在无法重新创建拆包过程。 所以我知道这是可能的。

linux firmware ubifs ubi
2个回答
8
投票

访问映像内文件的另一种快速替代方法,如果 nandsim 模块不适用于当前内核(在我的例子中是基于 debian 的操作系统),请安装:

apt install liblzo2-dev
pip install python-lzo ubi_reader

然后在 ubifs 图像所在的同一文件夹中,执行

ubireader_extract_files ubifs.img
,然后就可以了:

├── ubifs.img
└── ubifs-root
    └── 705623055
        └── rootfs
            ├── bin
            ├── boot
            ├── dev
            ├── etc
            ├── home
            ├── lib
            ├── linuxrc -> /bin/busybox
            ├── media
            ├── mnt
            ├── opt
            ├── proc
            ├── sbin
            ├── Settings
            ├── srv
            ├── sys
            ├── tmp -> /var/tmp
            ├── usr
            ├── var
            └── www

2
投票

----解决方案

modprobe nandsim first_id_byte=0x2c second_id_byte=0xac third_id_byte=0x90 fourth_id_byte=0x15

使设备的blocksize=0x20000。

检查是否已设置。

cat /proc/mtd

让我们清洁它。

flash_erase /dev/mtd0 0 0

现在格式化并刷新图像。

ubiformat /dev/mtd0 -f image.ubi -O 2048

然后连接设备。

modprobe ubi 

ubiattach -p /dev/mtd0 -O 2048

现在我可以安装它了。

mount -t ubifs /dev/ubi0_X /mnt/ubifs

就我而言,它是 ubi0_1,请务必在 /dev 处检查它。

© www.soinside.com 2019 - 2024. All rights reserved.