0%

在使用逆向工具(比如 jdax 等)反编译某些系统 App 的时候,会发现其代码其实是不全的,其实是因为系统应用的 APK 已经经过 odexvdex 化,导致代码分离。

比如在之前的文章(Android 拆包,提取 APK 或 Framework 文件)中,拆了 MIUI 的 Rom,其中小米系统界面(MiuiSystemUI)拆开后大致是这样的:

1
2
3
4
5
6
7
8
9
$ tree -s priv-app/MiuiSystemUI/
priv-app/MiuiSystemUI/
├── [ 17525476] MiuiSystemUI.apk
└── [ 0] oat
└── [ 0] arm64
├── [ 12669648] MiuiSystemUI.odex
└── [ 6418324] MiuiSystemUI.vdex

2 directories, 3 files

解压 MiuiSystemUI.apk 之后:

1
AndroidManifest.xml  assets/  META-INF/  res/  resources.arsc

可以看到 Apk 压缩文件中未包含 .dex 文件,而 priv-app/MiuiSystemUI/oat/arm64/ 路径下存在 .odex.vdex 的文件,我们要方便的查看其代码,就需要进行反编译(deodex)。

阅读全文 »

  • 在 Java 中 .java 源文件会先编译成 .classs 字节码文件,然后借由 JVM 虚拟机将 .class 字节码加载进内存,最终程序得到运行。其中.class 加载过程就是由 类加载器(ClassLoader) 来完成的。
  • 而 Android 与 Java 相似, .java 源文件会先编译成 .dex 文件(.class 的集合),然后 Android 虚拟机( ART虚拟机 和 Dalvik虚拟机)将 .dex 文件加载进内存,最终程序得到运行。dex 加载过程也是由 类加载器(ClassLoader)完成的。

什么是类加载?

凭借一个类的全限定名得到对应的可以描述该类的二进制字节流,并将这些字节流转化为方法区的某种数据结构,生成一个 java.lang.Class 对象作为方法区这个类各种数据访问入口。这个过程就是类加载。

类加载过程就是由 ClassLoader 来完成的。

阅读全文 »

先大致介绍一下各个 MIUI 版本:

  • 国内版 MIUI 国内版就是官方 MIUI 的国内版,优点:能吃上新功能,有小爱,缺点:有广告,臃肿,后台常驻很多系统组件,同时有不少系统组件没办法禁用,Google 套件不太好安装,安装好了之后也会经常因为不稳定而 Crash。官方站点:米柚
  • 国际版 MIUI 也称为 俄罗斯版,国际版就是官方 MIUI 的国际版,优点:自带 Google 套件,无广告,缺点:还是比较臃肿,自带的 Google 套件过多。官方站点:MIUI Global
  • 欧洲版 MIUI 也称为 波兰版,属于 MIUI 的第三方定制 Rom,也就是通常所说的 魔改MIUI,但不是小作坊制作,稳定性比较可靠。优点:自带 Google 套件,无广告,不臃肿,缺点:无小爱。 官方站点:XIAOMI.EU
    阅读全文 »

我们知道像 ClipboardManager, ActivityManager 实际上底层都是通过 Binderaidl 接口的形式实现的,对应的服务端类名都是 xxxService 的形式,例如 ClipboardService, ActivityManagerService。幸运的是,在 Xposed 框架支持下,我们也可以注册自定义的系统服务。

阅读全文 »