APK文件目录结构
asset 不经过 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文件进行对齐处理# 欢迎使用Markdown编辑器
APK安装流程
1.安装方式
系统程序安装
通过Android市场安装
ADB安装
手机自带安装
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.卸载过程
删除安装过程中在上述三个目录下创建的文件及目录。
虚拟机
1.java虚拟机
java字节码
基于栈架构
2.dalvik虚拟机(jit机制)
Android 5.0以下
dalvik字节码
dalvik可执行文件体积更小
基于寄存器架构
dex文件反汇编工具:smali.jar\ddx.jar
3.art虚拟机(aot机制)
Android 5.0版本及以上
注意:
.dex =>dexopt=>.odex dalvik加载执行的odex文件
.dex=>dex2oat=>.oat art加载执行的是oat文件
快速定位关键代码:
- 分析流程
搜索特征字符串
搜索关键api
通过方法名来判断方法的功能 - 快速定位关键代码
反编译APK程序
AndroidManifest.xml=>包名/系统版本/组件
程序的主activity
每个Android程序有且只有一个主Activity
分析程序的执行流程
需重点关注的application
pplication执行时间
授权验证 - 定位关键代码的技巧
信息反馈法(资源id/字符串)
特征函数法(api函数)
顺序查看法(分析程序执行流程/病毒分析)
代码注入法(动态调式/插入log/查看logcat/分析加解密)
栈跟踪法(动态调式/函数调用流程)
Method Profiling(方法剖析=>动态调式/热点分析//函数调用流程)
游戏内购
去除可能会产生费用的危险权限
android.permission.SEND_SMS
android.permission.CALL_PHONE
支付接口
电信支付接口
logcat字符串定位(Egame支付成功/Egame支付Cancel/orderid)=>搜索字符串,向上分析,回溯分析/函数名替换
联通支付接口
logcat字符串定位(Unicom支付cancel/Unicom支付成功)=>在下面类修改处理,可以用goto或switch方法
移动支付接口
logcat字符串定位(购买道具:[] 成功/购买道具:[] 失败)=>在下面类修改
特征码
中国移动 46000、46002、46007、46020
中国联通 46001、46006、46010
中国电信 46003、46005、46011
内购技巧
从静态代码分析程序逻辑,找到修改点
程序逻辑分析=>最重要的又是流程分析/流程图=>核心(层次)
关键性信息查找=>静态(整体分析与局部分析)/动态
移动MM:onbillingfinish,onresult无用
对关键onsuccess()函数的筛选与定位
4399:notifyDeliverGoods
支付宝:搜索字符串 “9000”