当前位置: 首页 > article >正文

解析安卓镜像包和提取DTB文件的操作日志

概述

想查看一下安卓的镜像包里都存了什么内容

步骤

  • 使用RKDevTool_v3.15RK3528_DC_HK1_RBOX_K8_Multi_WIFI_13_20230915.2153.img解包

    • 路径: 高级(Advancing) > 固件(firmware) > 解包(unpacking)
    • 得到\Output\Android\Image
      • boot.img
      • uboot.img
      • super.img
  • 处理boot.img

    • HxD打开, 文件格式魔数的ASCII文本是: ANDROID
    • Linux下(或git-bash窗口下)使用boot-img-split.tar.gz中的split_bootimg.pl对文件进行分割
    • 解析结果
      • boot.img-kernel
        • 通过 file boot.img-kernel 输出 Linux kernel ARM64 boot executable Image, little-endian, 4K pages
      • boot.img-ramdisk.gz
        • 解压缩后,再解压得到一个目录
        • init 二进制程序; fstab.rk30board 磁盘挂载信息; build.prop 系统编译参数;
      • boot.img-second.gz
        • dtb文件和BMP图片文件
        • dtb搜索D0 0D FE ED, 后4个字节是长度
        • bmp搜索42 4D, 后4个字节是长度 : 几个电池状态图标和HK1的开机logo
    • boot.img-second.gz
      • HxD打开, 文件格式魔数的ASCII文本是: RSCE, 解压软件无法解压

      • 查看已有的dtb文件(用adb从运行的系统中提取的), 确定文件格式魔数为D0 0D FE ED, 其后4个字节为大端格式的文件长度的16进制(和window文件属性的字节数一致)

      • 文件长度是包含魔数和文件长度这8个字节的

      • 选中表示文件长度的4个字节, 在右侧底部选择大端, 上面int32显示对应的10进制

      • 下图示例为后面补的
        在这里插入图片描述
        在这里插入图片描述

      • 选中魔数, 点击菜单>编辑>选择范围, 选择长度/十六进制, 填入表示文件长度的4个字节的值(无特殊处理,按顺序填), 填完后点击十进制, 查看是否一致

      • 补充图片
        在这里插入图片描述

      • 点击确定后选择, 右键复制 , 菜单>新建, 粘贴, 保存为新文件, 取名 HK1_RBOX_K8_IMG.dtb

      • 在linux(ubuntu,自带dtc)下对文件反编译 dtc -I dtb -O dts -o HK1_RBOX_K8_IMG.dts HK1_RBOX_K8_IMG.dtb # 有警告信息

  • 处理 uboot.img

    • HxD打开, 文件格式魔数是: D0 0D FE ED, 提取文件
    • 在linux(ubuntu,自带dtc)下对文件反编译 dtc -I dtb -O dts -o uboot.img.dts uboot.img.dtb # 居然无警告信息
      • 没啥内容, 应该是arm平台通用的用于加载下一级boot.img的镜像
    • 在linux下通过 dumpimage -l uboot.img 可以查看格式信息, 但是无法提取DTB
      • dumpimage -i fit-image.itb -T firmware -o u-boot.itb u_boot
  • 处理super.img

    • 下载 cygwin1.dll lpunpack.exe simg2img.exe
    • cygwin1.dll 放在和exe同级目录
    • 先转换镜像格式后执行解压
      • simg2img.exe super.img super.raw.img
      • lpunpack.exe super.raw.img
    • 后续用diskgenus挂载查看

工具

  • cygwin1.dll lpunpack.exe simg2img.exe https://github.com/thka2016/lpunpack_and_lpmake_cmake/releases
  • HxD https://github.com/ophub/kernel/releases > tools > HxD
  • dtc Ubuntu系统自带
  • boot-img-split.tar.gz http://dl.linux-sunxi.org/users/arete74/tools.tar.gz
  • RKDevTool_v3.15 (应该是通用的) https://github.com/ophub/kernel/releases > tools > Radxa_rock5b_RKDevTool_Release_v2.96__DriverAssitant_v5.1.1.tar.gz
  • diskgenus

其他

  • 文件格式魔数: 部分文件的开头几个字节是固定的

http://www.kler.cn/a/399186.html

相关文章:

  • 游戏如何应对内存修改
  • Vue2教程002:Vue指令
  • 【设计模式】行为型模式(五):解释器模式、访问者模式、依赖注入
  • WebRTC视频 03 - 视频采集类 VideoCaptureDS 上篇
  • Go语言24小时极速学习教程(四)MySQL数据库的增删改查
  • 【论文复现】STM32设计的物联网智能鱼缸
  • Unity6 + Android Studio 开发环境搭建【备忘】
  • 机器学习实战笔记32-33:网格搜索原理、参数详解及代码实操
  • 关于性能测试:数据库的 SQL 性能优化实战
  • STL序列式容器之priority_queue
  • vue使用List.reduce实现统计
  • 前端开发设计模式——责任链模式
  • acwing算法基础03-递归,枚举
  • 【JavaScript】call、apply、bind
  • 数据结构中的抽象数据类型、逻辑结构、存储结构等到底是什么?
  • LeetCode 445.两数相加 II
  • 【不写for循环】玩玩行列
  • nfs服务器--RHCE
  • 论文学习(四) | 基于数据驱动的锂离子电池健康状态估计和剩余使用寿命预测
  • 后台运行docker compose项目,一直失败,提示:Timeout exceeded while awaiting headers?让我来看看~
  • idea 删除本地分支后,弹窗 delete tracked brank
  • 移门缓冲支架:减少噪音,提升生活质量
  • 【开源免费】基于SpringBoot+Vue.JS购物推荐网站(JAVA毕业设计)
  • Ubuntu22.04 安装mysql8 无法修改端口及配置的问题 坑啊~~~~
  • Uni-APP+Vue3+鸿蒙 开发菜鸟流程
  • Linux中配置ntp服务