Android系统编译之后的打包阶段,会将所有编译出来的有需要的执行文件,库文件以及各种配置文件等打包到各个镜像文件中。有时候我们需要看一下镜像文件中都打包了什么东西,那就可以通过一些方法将其挂载到一个目录,然后进行查看。

目录

  • 1. 所用工具
    • 1.1 simg2img
    • 1.2 lpunpack
    • 1.3 unpack_bootimg
    • 1.4 mkdtimg
    • 1.5 dtc
  • 2. 解析image文件
    • 2.1 boot.img,recovery.img
    • 2.2 dtbo.img
    • 2.3 metadata.img,userdata.img
    • 2.4 super.img
  • 2.5 persist.img
  • 2.6 vbmeta.img,vbmeta_system.img

1. 所用工具

1.1 simg2img

简述:
将sparse格式的image文件转化为raw格式的image文件。
编译android源码默认会生成。

路径:
out/host/linux-x86/bin/simg2img


1.2 lpunpack

简述:
这个工具可以将system.img,product.img,vendor.img等文件从super.img解析出来。

路径:
out/host/linux-x86/bin/lpunpack

编译指令:

source build/envsetup.sh
lunch
make lpunpack

1.3 unpack_bootimg

简述:
专门用于解析boot.img的工具。

路径:
out/host/linux-x86/bin/unpack_bootimg
system/core/mkbootimg/unpack_bootimg.py

编译指令:

source build/envsetup.sh
lunch
make unpack_bootimg

1.4 mkdtimg

简述:
将dtbo.img文件转化为dtb文件,一个dtbo.img会包含多个dtb文件;
编译android源码默认会生成。

路径:
out/host/linux-x86/bin/mkdtimg


1.5 dtc

简述:
将dtb文件转化为可阅读的dts文件;
编译android源码默认会生成。

路径:
out/host/linux-x86/bin/dtc


2. 解析image文件

这次准备了下面这几个镜像文件进行举例解析:

#用file查看一下每个img文件的格式信息
sun@sun-pc:~/android/imgs$ file *.img
boot.img:          Android bootimg, kernel (0x8000), ramdisk (0x1000000), page size: 4096, cmdline (console=ttyMSM0,115200n8 androidboot.hardware=qcom androidboot.console=ttyMSM0 androidboot.memc)
dtbo.img:          data
metadata.img:      Android sparse image, version: 1.0, Total of 4096 4096-byte output blocks in 4 input chunks.
persist.img:       Linux rev 1.0 ext4 filesystem data, UUID=e44c9479-7df0-4905-8ac0-216d5c8adf3e (extents) (large files) (huge files)
recovery.img:      Android bootimg, kernel (0x8000), ramdisk (0x1000000), page size: 4096, cmdline (console=ttyMSM0,115200n8 androidboot.hardware=qcom androidboot.console=ttyMSM0 androidboot.memc)
super.img:         Android sparse image, version: 1.0, Total of 3145728 4096-byte output blocks in 120 input chunks.
userdata.img:      Android sparse image, version: 1.0, Total of 11564499 4096-byte output blocks in 28 input chunks.
vbmeta.img:        data
vbmeta_system.img: data

2.1 boot.img,recovery.img

这两个都是Android bootimg格式,方法都是一样的
boot.img

# sun@sun-pc:~/android/imgs$ ../system/core/mkbootimg/unpack_bootimg.py --boot_img boot.img --out boot
sun@sun-pc:~/android/imgs$ ../out/host/linux-x86/bin/unpack_bootimg --boot_img boot.img --out boot#查看解析出的boot目录
sun@sun-pc:~/android/imgs$ ls boot
dtb  kernel  ramdisk

recovery.img

# sun@sun-pc:~/android/imgs$ ../system/core/mkbootimg/unpack_bootimg.py --boot_img recovery.img --out recovery
sun@sun-pc:~/android/imgs$ ../out/host/linux-x86/bin/unpack_bootimg --boot_img recovery.img --out recovery#查看解析出的boot目录
sun@sun-pc:~/android/imgs$ ls recovery
dtb  kernel  ramdisk  recovery_dtbo

2.2 dtbo.img

(1) 先从dtbo.img解析出dtb文件

#创建dtbo目录,然后使用mkdtimg工具解析dtbo.img,-b后边是输出路径(dtb是自定义的文件名前缀)
sun@sun-pc:~/android/imgs$ mkdir dtbo && ../out/host/linux-x86/bin/mkdtimg dump dtbo.img -b dtbo/dtb
sun@sun-pc:~/android/imgs$ ls dtbo
dtb.0  dtb.1  dtb.10  dtb.11  dtb.12  dtb.13  dtb.14  dtb.15  dtb.16  dtb.17  ...  dtb.6  dtb.7  dtb.8  dtb.9#查看一下文件信息,的确是dtb(Device Tree Blob)文件
sun@sun-pc:~/android/imgs$ file dtbo/dtb.0
dtbo/dtb.0: Device Tree Blob version 17, size=110367, boot CPU=0, string block size=7979, DT structure block size=102332

(2) 再将上一步的dtb文件转化为可以阅读的dts文件

#将dtb.0转化为0.dts
sun@sun-pc:~/android/imgs$ ../out/host/linux-x86/bin/dtc dtbo/dtb.0 dtbo/0.dts#如果觉得一个个文件转化比较麻烦,可以使用下面的命令
find ./dtbo -name 'dtb.*' | xargs -n1 sh -c '../out/host/linux-x86/bin/dtc $1 -o $1.dts && rename "s/dtb\.//" $1.dts' sh

2.3 metadata.img,userdata.img

这两个解析步骤一样,下面以metadata.img为例
(1) 将sparse格式的metadata.img转化为raw格式的metadata_raw.img

sun@sun-pc:~/android/imgs$ ../out/host/linux-x86/bin/simg2img metadata.img metadata_raw.img

(2) 将metadata_raw.img挂载到一个目录上,此时访问这个目录就可以访问镜像文件的内容了

#首先创建目录metadata,然后将metadata_raw.img挂载到此目录
sun@sun-pc:~/android/imgs$ mkdir metadata && sudo mount -o ro metadata_raw.img metadata#可以看到metadata目录已经有内容了
sun@sun-pc:~/android/imgs$ ls
lost+found

2.4 super.img

(1) sparse格式转化为raw格式

sun@sun-pc:~/android/imgs$ ../out/host/linux-x86/bin/simg2img super.img super_raw.img

(2) 使用lpunpack解析super_raw.img

sun@sun-pc:~/android/imgs$ mkdir super
sun@sun-pc:~/android/imgs$ ../out/host/linux-x86/bin/lpunpack super_raw.img supersun@sun-pc:~/android/imgs$ ls super
product_a.img  product_b.img  system_a.img  system_b.img  vendor_a.img  vendor_b.img

(3) 挂载解析出来的镜像文件

#以system_a.img为例,其他同理
sun@sun-pc:~/android/imgs/super$ mkdir system_a
sun@sun-pc:~/android/imgs/super$ sudo mount -o ro system_a.img system_a#查看system_a.img解析出来的文件
sun@sun-pc:~/android/imgs/super$ ll system_a
总用量 172
drwxr-xr-x. 22 root root  4096 1月   1  2009 ./
drwxrwxr-x   3 sun  sun   4096 8月  26 13:49 ../
drwxr-xr-x.  2 root root  4096 1月   1  2009 acct/
drwxr-xr-x.  2 root root  4096 1月   1  2009 apex/
lrw-r--r--.  1 root root    11 1月   1  2009 bin -> /system/bin
lrw-r--r--.  1 root root    50 1月   1  2009 bugreports -> /data/user_de/0/com.android.shell/files/bugreports
lrw-r--r--.  1 root root    11 1月   1  2009 cache -> /data/cache
lrw-r--r--.  1 root root    19 1月   1  2009 charger -> /system/bin/charger
dr-xr-xr-x.  2 root root  4096 1月   1  2009 config/
lrw-r--r--.  1 root root    17 1月   1  2009 d -> /sys/kernel/debug/
drwxrwx--x.  2 sun  sun   4096 1月   1  2009 data/
drwxr-xr-x.  2 root root  4096 1月   1  2009 debug_ramdisk/
lrw-------.  1 root root    23 1月   1  2009 default.prop -> system/etc/prop.default
drwxr-xr-x.  2 root root  4096 1月   1  2009 dev/
lrw-r--r--.  1 root root    11 1月   1  2009 etc -> /system/etc
lrwxr-x---.  1 root 2000    16 1月   1  2009 init -> /system/bin/init
-rwxr-x---.  1 root 2000  2067 1月   1  2009 init.environ.rc*
-rwxr-x---.  1 root 2000 34196 1月   1  2009 init.rc*
-rwxr-x---.  1 root 2000  3343 1月   1  2009 init.recovery.qcom.rc*
-rwxr-x---.  1 root 2000  7690 1月   1  2009 init.usb.configfs.rc*
-rwxr-x---.  1 root 2000  5649 1月   1  2009 init.usb.rc*
-rwxr-x---.  1 root 2000   611 1月   1  2009 init.zygote32.rc*
-rwxr-x---.  1 root 2000  1029 1月   1  2009 init.zygote64_32.rc*
drwx------.  2 root root 16384 1月   1  2009 lost+found/
drwxr-xr-x.  2 root root  4096 1月   1  2009 metadata/
drwxr-xr-x.  2 root sun   4096 1月   1  2009 mnt/
drwxr-xr-x.  2 root root  4096 1月   1  2009 odm/
drwxr-xr-x.  2 root root  4096 1月   1  2009 oem/
drwxr-xr-x.  2 root root  4096 1月   1  2009 postinstall/
drwxr-xr-x.  2 root root  4096 1月   1  2009 proc/
drwxr-xr-x.  2 root root  4096 1月   1  2009 product/
lrw-r--r--.  1 root root    24 1月   1  2009 product_services -> /system/product_services
drwxr-xr-x.  3 root root  4096 1月   1  2009 res/
drwxr-x---.  2 root 2000  4096 1月   1  2009 sbin/
lrw-r--r--.  1 root root    21 1月   1  2009 sdcard -> /storage/self/primary
drwxr-x--x.  2 root 1028  4096 1月   1  2009 storage/
drwxr-xr-x.  2 root root  4096 1月   1  2009 sys/
drwxr-xr-x. 14 root root  4096 1月   1  2009 system/
-rw-r--r--.  1 root root  2608 1月   1  2009 ueventd.rc
drwxr-xr-x.  2 root 2000  4096 1月   1  2009 vendor

2.5 persist.img

这个镜像是linux ext4格式的,直接挂载即可

sun@sun-pc:~/android/imgs$ mkdir persist
sun@sun-pc:~/android/imgs$ sudo mount -o ro persist.img persistsun@sun-pc:~/android/imgs$ ls persist
lost+found  sensors

2.6 vbmeta.img,vbmeta_system.img

这两个镜像文件暂时还没有找到相关解析方法,后续找到再更新

Android系统 —— image文件解析相关推荐

  1. Android init.rc文件解析过程详解(三)

    Android init.rc文件解析过程详解(三) 三.相关结构体 1.listnode listnode结构体用于建立双向链表,这种结构广泛用于kernel代码中, android源代码中定义了l ...

  2. 安卓 linux init.rc,[原创]Android init.rc文件解析过程详解(二)

    Android init.rc文件解析过程详解(二) 3.parse_new_section代码如下: void parse_new_section(struct parse_state *state ...

  3. Android init.rc文件解析过程详解(二)

    Android init.rc文件解析过程详解(二) 3.parse_new_section代码如下: void parse_new_section(struct parse_state *state ...

  4. Android init.rc文件解析过程详解(一)

        Android init.rc文件解析过程详解(一) 一.init.rc文件结构介绍 init.rc文件基本组成单位是section, section分为三种类型,分别由三个关键字(所谓关键字 ...

  5. Android so(ELF) 文件解析

    文章目录 前言 生成 so 文件 相关工具 objdump readelf 整体结构图 头部结构 段表结构 字符串表结构 程序表结构 符号表结构 重定位表结构 其他结构 解析代码 打开 ELF 文件 ...

  6. Android系统ODEX文件格式解析

    对于一个Android的apk应用程序,其主要的执行代码都在其中的class.dex文件中.在程序第一次被加载的时候,为了提高以后的启动速度和执行效率,Android系统会对这个class.dex文件 ...

  7. 【Android 逆向】Android 系统中文件的用户和分组 ( 文件所有者与分组 | /sdcard/ 的文件分组 | /data/ 目录分析 | 用户类型 )

    文章目录 一.文件所有者与分组 二./sdcard/ 的文件分组 三./data/ 目录分析 四.用户类型 一.文件所有者与分组 使用 ls -l 命令 , 查看 Android 系统根目录 , 下图 ...

  8. Android系统架构基本模式解析

    Android系统架构总共被分为四层,在这里大家就可以通过介绍对这四个层次进行一个深入的解读,以加深大家对这一系统的认识. 如今,大家面对市场中种类繁多的手机必然挑的眼花缭乱.不过,在智能手机占据主要 ...

  9. Android APK包文件解析

    原博文题目:Android 篡改apk文件的可行性分析 Android的.apk文件实际上就是一个zip文件 可以直接用winrar打开 如下图所示: 包括了一个META-INF目录 一个res目录 ...

最新文章

  1. 设置让TortoiseGit记住账号和密码
  2. POJ 1696 Space Ant(极角排序)【计算几何】
  3. python用一行代码编写一个回声程序_利用Python实现一个WC程序
  4. 转 Openfire 性能优化
  5. nzhtl1477-ただいま帰りました ( bfs )
  6. chrome vue插件_「Vue学习记录一」开发环境准备
  7. click事件在什么时候出发_什么是移动端?
  8. (19)Xilinx PCIE中断理论(学无止境)
  9. 数据存储的问题(1)
  10. java1.6升级1.7_jdk从1.6升级到1.7可能会遇到的Version问题
  11. java+线程安全的hash,多线程下HashMap安全问题-ConcurrentHashMap解析
  12. 东大14春学期《计算机应用基础》在线作业1,东大18春学期《计算机应用基础》在线作业...
  13. BGP路由反射器原理和实现(华为设备)
  14. springboot 和springMVC interceptor使用
  15. 5G即将全面普及,我们到底该换手机卡还是换手机?
  16. 微信小程序监听手势左右滑动
  17. 在fpga中用Cordic算法来产生正弦函数
  18. 快递100企业版接口(API)gitee
  19. 华为云ECS服务器中通过docker部署jenkins
  20. 太香了!墙裂推荐 6 个Python数据分析神器!!

热门文章

  1. 突破无人驾驶量产瓶颈,威蓝科技利用仿真测试降本增效
  2. 奇妙的AE特效插件之红巨人粒子特效Trapcode Suite
  3. 1秒消失 alert jquery_jquery 弹窗信息显示几秒后自动消失
  4. 网狐6603服务器列表加载失败,600 秒后将重新加载, ADO 错误:0x80004005,连接失败
  5. java 拒绝连接_java.net.ConnectException:连接被拒绝
  6. pytorch rnn 实现手写字体识别
  7. 三极管三种放大组态的比较?为什么共基频带宽呢?(硬件每日一题)
  8. JavaScript利用Date对象实现倒计时效果
  9. 百度之星1005 序列变换(lis)
  10. 基于asp.net网上选课系统设计