• 固件提取——ASUS.w格式固件提取遇到的问题


    问题

    ubi文件系统的提取:

    1. binwalk只提取到一个.ubi文件
      2.安装ubireader之后提取到的文件系统为空
      以华硕TUF_AX5400这款固件为例,固件下载地址:https://www.asus.com/Networking-IoT-Servers/WiFi-Routers/ASUS-Gaming-Routers/TUF-Gaming-AX5400/HelpDesk_BIOS/

    1

    使用binwalk直接提取只有0.ubi文件,发现是ubi文件系统,需要安装ubireader:

    ubireader

    下载或使用PIP安装,https://github.com/jrspruitt/ubi_reader
    四个命令:

    ubireader_display_info   //获取UBI信息以及布局块等信息
    ubireader_extract_images  //提取镜像
    ubireader_extract_files  //提取文件内容
    bireader_utils_info  //分析UBI镜像并创建shell脚本和UBI配置文件
    
    • 1
    • 2
    • 3
    • 4

    2

    安装后一般再使用binwalk就能提取到文件系统了,但这个固件提取到的文件系统是空的:
    在这里插入图片描述

    3

    先看是否准确识别UBI信息,看起来都识别到了,有4个卷

    ubireader_display_info [options] path/to/file
    
    • 1

    在这里插入图片描述

    使用以下命令完全提取文件,但是遇到其他文件系统就会失败。

    ubireader_extract_files [options] path/to/file
    
    • 1

    在这里插入图片描述

    4

    发现应该先提取镜像

    ubireader_extract_imgs [options] path/to/file
    
    • 1

    0.ubi下面出现了四个文件
    在这里插入图片描述
    在这里插入图片描述

    5

    用file查看属性,发现是squashfs文件系统
    在这里插入图片描述
    使用unsquashfs解压就得到了文件系统
    在这里插入图片描述
    查阅资料得知:
    在UBI之上运行squashfs文件是openwrt系统中常见的方式:
    rootfs运行squashfs (只读)
    roootfs_data运行ubifs (读写)

    此外

    ubidump

    使用ubi_reader会有一个问题:ubi_reader工具对于ubi文件要求较为严格,必须补齐每一个块内容,如下当最后一个块内容没填充满,会提示块空间大于文件:
    read Error: Block ends at 27394048 which is greater than file size 27267072
    extract_blocks Fatal: PEB: 208: Bad Read Offset Request
    根据PEB块大小,补齐00即可,如下将该块(size=0x20000)用00填充满
    在这里插入图片描述
    相对于ubi_reader,ubidump工具就更为简单,无需对齐块,应该是直接检索块头magic进行提取,该工具地址为:https://github.com/nlitsme/ubidump
    ubidump工具只是一个python2的脚本,无需安装,但需要安装依赖:
    $ sudo pip install python-lzo
    $ sudo pip install crcmod
    使用也比较简单:
    //查看image.ubi镜像里面的某个文件内容
    $ python ubidump.py -c /etc/passwd image.ubi
    //显示image.ubi镜像内容
    $ python ubidump.py -l image.ubi
    //提取镜像,该指令会在指定目录下生成rootfs目录
    $ python ubidump.py -s . image.ubi
    $ ls -ahl ./rootfs
    total 0
    drwxr-xr-x 11 nirva staff 352B Dec 29 20:32 .
    drwx------ 20 nirva staff 640B Dec 29 20:32 …
    drwxr-xr-x 53 nirva staff 1.7K Dec 29 20:32 bin
    drwxr-xr-x 3 nirva staff 96B Dec 29 20:32 data
    drwxr-xr-x 62 nirva staff 1.9K Dec 29 20:32 etc
    drwxr-xr-x 5 nirva staff 160B Dec 29 20:32 lib
    drwxr-xr-x 38 nirva staff 1.2K Dec 29 20:32 lib64
    drwxr-xr-x 15 nirva staff 480B Dec 29 20:32 sbin
    drwxr-xr-x 3 nirva staff 96B Dec 29 20:32 temp
    drwxr-xr-x 8 nirva staff 256B Dec 29 20:32 usr
    drwxr-xr-x 3 nirva staff 96B Dec 29 20:32 vendor
    不过对比 ubi_reader和ubidump工具的输出结果,可以发现ubi_reader提取的内容更为完整,而且也保留了文件的时间戳信息,而时间戳信息对取证等分析很有帮助。

    参考链接:
    https://gorgias.me/2019/12/27/%E5%9B%BA%E4%BB%B6%E6%8F%90%E5%8F%96%E7%B3%BB%E5%88%97-UBI%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E6%8F%90%E5%8F%96%E4%BB%A5%E5%8F%8A%E9%87%8D%E6%89%93%E5%8C%85/
    http://www.gandalf.site/2019/01/iotubi.html
    https://blog.csdn.net/darui_csdn/article/details/108412681

  • 相关阅读:
    491. 递增子序列
    你有对象类,我有结构体,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang结构体(struct)的使用EP06
    猿创征文 |【Ant Design Pro】使用ant design pro做为你的开发模板(二)新增一个页面与如何添加国际化
    【Oracle 客户端连接数据库过程解析】
    深入剖析SpringIOC和AOP的原理,收藏夹中的不二之选!!!
    MySQL索引设计原则
    C语言的学习快速入门
    Java程序设计(边学边练)(一)
    《第一行代码》读书笔记(2)—日志工具Log
    SpringBoot - 详细入门教程(创建、运行项目,REST服务样例)
  • 原文地址:https://blog.csdn.net/weixin_43487849/article/details/126281966