APK文件:
APK是Android Package的缩写,即Android安装包。APK是类似Symbian Sis或Sisx的文件格式。通过将APK文件直接传到Android模拟器或Android手机中执行即可安装。
APK文件目录:
assets 不经过 aapt 编译的资源文件
lib .so文件
META-INF 文件摘要,摘要加密和签名证书文件目录
CERT.RSA 公钥和加密算法描述
CERT.SF 加密文件,它是使用私钥对摘要明文加密后得到的 密文信息,只有使用私钥配对的公钥才能解密该文 件
MANIFEST.MF 程序清单文件,它包含包中所有文件的摘要明文
res 资源文件目录,二进制格式
drawable 图片
layout 布局
menu 菜单
resources.arsc 经过 aapt 编译过的资源文件
classes.dex 可执行文件
AndroidManifest.xml 配置文件
APK打包流程:
打包资源(res/assets/AndroidManifest.xml/Android基础类库)文件,生成 R.java和resources.ap_文件
处理AIDL文件,生成对应的.java文件
编译Java文件,生成对应的.class文件
把.class文件转化成Davik VM支持的.dex文件(.java=>.class=>.dex)
打包生成未签名的.apk文件
对未签名.apk文件进行签名
对签名后的.apk文件进行对齐处理
APK安装流程:
1.安装方式
系统程序安装
通过Android市场安装
ADB安装(adb devices:显示当前连接的设备;adb install 安装包路径)
手机自带安装
2.安装过程
复制APK安装包到/data/app目录下,解压并扫描安装包,把dex文 件(Dalvik字节码)保存到/data/dalvik-cache目录,并/data/data目录 下创建对应的应用数据目录。
3.安装后文件所在目录
/system/app
系统自带的应用程序,获得adb root权限才能删除
/data/app
用户程序安装的目录,安装时把apk文件复制到此目录
/data/data
存放应用程序的数据
/data/dalvik-cache
将apk中的dex文件安装到dalvik-cache目录下
4.卸载过程
删除安装过程中在上述三个目录下创建的文件及目录。
APK反编译与回编译:
先查壳,再反编译看验证
.apk文件==>反编译apk(dex/配置文件/资源文件(apk反编译败)) ==>修改关键文件实现自己的目的==>重新打包签名(无法重新打包) ==>apk安装后无法 运行。
apktool .dex=>.smali
dex2jar .dex=>.jar
Apktool工具实际上只反编译以下三种类型文件:
.xml文件、.dex文件、.arsc文件
去除广告和弹窗,撇开不存在于smali的这种情况,容易的就是 可以在XML中寻到Activity,难的就是寻不到,发生这种情况时, 就要分析代码,程序逻辑,抓住关键信息,界面和函数。
注意:
当字符串等关键信息搜不到时,可以从三个方向考虑:1.字符串 在so层;2.字符串被加密了3.结合了服务器,服务器返回,本地 显示。
虚拟机:
1.java虚拟机
java字节码
基于栈架构
2.dalvik虚拟机(jit机制)
Android 5.0以下
dalvik字节码
dalvik可执行文件体积更小
基于寄存器架构
3.art虚拟机(aot机制)
Android 5.0版本及以上
注意:
.dex =>dexopt=>.odex dalvik加载执行的odex文件
.dex=>dex2oat=>.oat art加载执行的是oat文件