0%

Android 拆包,提取 APK 或 Framework 文件

之前由于开发一个关于 MIUI 系统界面的 Xposed 插件,为了适配不同的 Rom,需要查看不同 Rom 中的 SystemUI.apk

Android Rom 结构

  • 在 5.0 之前,Android 的系统包(卡刷包)是可以直接解压出来 system 目录,从它里面就可以直接提取出 Rom 内部的 Apk 文件。

  • 5.0 ~ 8.0 中,Android 的 Rom 包里面有 system.new.dat 文件,无法直接解压提取,很明显,我们要的 Rom 就在这里面:

    1
    2
    3
    4
    5
    6
    7
    -rwxrwx---+ 1 Tianma None   24618314 1月   1 2009 boot.img
    -rwxrwx---+ 1 Tianma None 1734469 1月 1 2009 file_contexts.bin
    drwxrwx---+ 1 Tianma None 0 5月 11 17:42 firmware-update
    drwxrwx---+ 1 Tianma None 0 5月 11 17:42 META-INF
    -rwxrwx---+ 1 Tianma None 3089031168 1月 1 2009 system.new.dat
    -rwxrwx---+ 1 Tianma None 0 1月 1 2009 system.patch.dat
    -rwxrwx---+ 1 Tianma None 16288 1月 1 2009 system.transfer.list
  • 8.1 之后,Android 的 Rom 包里面有 system.new.dat.br 文件,这个是被压缩为 .br(brotli) 格式的 system.new.dat 文件,也无法直接提取:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    -rwxrwx---+ 1 Tianma None   50484554 1月   1 2009 boot.img
    -rwxrwx---+ 1 Tianma None 9230 1月 1 2009 compatibility.zip
    drwxrwx---+ 1 Tianma None 0 5月 14 23:26 firmware-update
    drwxrwx---+ 1 Tianma None 0 5月 14 23:26 META-INF
    -rwxrwx---+ 1 Tianma None 1694882420 1月 1 2009 system.new.dat.br
    -rwxrwx---+ 1 Tianma None 0 1月 1 2009 system.patch.dat
    -rwxrwx---+ 1 Tianma None 15019 1月 1 2009 system.transfer.list
    -rwxrwx---+ 1 Tianma None 370088219 1月 1 2009 vendor.new.dat.br
    -rwxrwx---+ 1 Tianma None 0 1月 1 2009 vendor.patch.dat
    -rwxrwx---+ 1 Tianma None 3815 1月 1 2009 vendor.transfer.list

拆包步骤

准备:

  1. 系统:windows 10
  2. 环境:
    • Python3,并添加 Python3 到环境变量的 Path
    • 7-zip,并添加 7-zip 到环境变量的 Path
  3. 下载 system.new.dat-extractor

操作步骤:

  1. system.new-data-extractor 工具放到一个路径中没有空格的目录下
  2. 将 Rom 的 .zip 放到与前面相同的目录下
  3. 打开 system_image_extractor-V4.cmd 文件,之后会自动解包,提取出来的文件存放在 extracted_files 目录下

最终解压出来的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
drwxr-xr-x 1 Tianma 197121      0  5月 11 18:10 app/
drwxr-xr-x 1 Tianma 197121 0 5月 11 18:10 bin/
-rw-r--r-- 1 Tianma 197121 12843 5月 11 18:10 build.prop
-rw-r--r-- 1 Tianma 197121 20961 5月 11 18:10 compatibility_matrix.xml
drwxr-xr-x 1 Tianma 197121 0 5月 11 18:10 data-app/
drwxr-xr-x 1 Tianma 197121 0 5月 11 18:10 etc/
drwxr-xr-x 1 Tianma 197121 0 5月 11 18:10 fake-libs/
drwxr-xr-x 1 Tianma 197121 0 5月 11 18:10 fake-libs64/
drwxr-xr-x 1 Tianma 197121 0 5月 11 18:10 fonts/
drwxr-xr-x 1 Tianma 197121 0 5月 11 18:10 framework/
drwxr-xr-x 1 Tianma 197121 0 5月 11 18:10 lib/
drwxr-xr-x 1 Tianma 197121 0 5月 11 18:10 lib64/
drwxr-xr-x 1 Tianma 197121 0 5月 11 18:10 lost+found/
-rw-r--r-- 1 Tianma 197121 2808 5月 11 18:10 manifest.xml
drwxr-xr-x 1 Tianma 197121 0 5月 11 18:10 media/
drwxr-xr-x 1 Tianma 197121 0 5月 11 18:10 priv-app/
-rw-r--r-- 1 Tianma 197121 830651 5月 11 18:10 recovery-from-boot.p
drwxr-xr-x 1 Tianma 197121 0 5月 11 18:10 tts/
drwxr-xr-x 1 Tianma 197121 0 5月 11 18:10 usr/
drwxr-xr-x 1 Tianma 197121 0 5月 11 18:10 vendor/
drwxr-xr-x 1 Tianma 197121 0 5月 11 18:10 xbin/

参考