安卓逆向之路 基础扫盲
Android历史版本
API1: Android 1.0
API2: Android 1.1 Petit Four
API3: Android 1.5 Cupcake
API4: Android 1.6 Donut
API5: Android 2.0 éclair
API6: Android 2.0.1 éclair
API7: Android 2.1 éclair
API8: Android 2.2 - 2.2.3 Froyo
API9: Android 2.3 - 2.3.2 Gingerbread
API10:Android 2.3.3-2.3.7 Gingerbread
API11:Android 3.0 Honeycomb
API12:Android 3.1 Honeycomb
API13:Android 3.2 Honeycomb
API14:Android 4.0 - 4.0.2 Ice Cream Sandwich
API15:Android 4.0.3 - 4.0.4 Ice Cream Sandwich
API16:Android 4.1 Jelly Bean
API17:Android 4.2 Jelly Bean
API18:Android 4.3 Jelly Bean
API19:Android 4.4 KitKat
API20:Android 4.4W
API21:Android 5.0 Lollipop
API22:Android 5.1 Lollipop
API23:Android 6.0 Marshmallow
API24:Android 7.0 Nougat
API25:Android 7.1 Nougat
API26:Android 8.0 Oreo
从Android 5.0(Android L)开始,Android系统开始改用ART虚拟机,Android系统也开始分32位版本和64位版本
Android体系结构
APK基本结构
assets 资源文件(图片、音频、数据库、网页、配置文件等)
res 资源文件,需要编译(布局)
lib 各种平台下使用的对应的so文件
libs
META-INF 签名文件
resources.arsc 资源加密(语言包)
AndroidManifest.xml 清单文件(图标、界面、权限、入口)
classes.dex 源代码
JVM、DVM与ART
JVM
Java虚拟机,运行的是.java文件编译后的.class文件
Dalvik
Android4.4及以前使用的都是Dalvik虚拟机,我们知道Apk在打包的过程中会先将java等源码通过javac编译成.class文件,但是我们的Dalvik虚拟机只会执行.dex文件,这个时候dx会将.class文件转换成Dalvik虚拟机执行的.dex文件。Dalvik虚拟机在启动的时候会先将.dex文件转换成快速运行的机器码,又因为65535这个问题,导致我们在应用冷启动的时候有一个合包的过程,最后导致的一个结果就是我们的app启动慢,这就是Dalvik虚拟机的JIT特性。
ART
ART虚拟机是在Android5.0才开始使用的Android虚拟机,ART虚拟机必须要兼容Dalvik虚拟机的特性,但是ART有一个很好的特性AOT(ahead of time),这个特性就是我们在安装APK的时候就将dex直接处理成可直接供ART虚拟机使用的机器码,ART虚拟机将.dex文件转换成可直接运行的.oat文件,ART虚拟机天生支持多dex,所以也不会有一个合包的过程,所以ART虚拟机会很大的提升APP冷启动速度。
Xposed hook的是Java代码,所以Xposed不支持5.0以及以上系统。
APK文件结构
APK打包流程
APK安装流程
虚拟机
Android Killer配置