android 逆向笔记
- 壳检测工具 GDA
2. 逆向分析APP 一般流程
1. 使用自动化检测工具检测APP是否加壳,或者借助一些反编译工具依靠经验判断是否加壳
2. 如果apk加壳,则需要先对apk进行脱壳
3. 使用`jeb`, `jadx`, `apktool`等反编译工具对apk进行反编译
4. 先依据静态分析得到的关键字符串、关键API调用快速定位到需要分析的函数和流程
5. 如果关键字符串或者关键API无法快速定位,则apk可能使用了字符串加密、反射调用等手段;此时可以使用hook或动态调试等手段
6. 定位到关键函数后,再跟进是java实现还是JNI实现进一步做分析,其中so中的函数逻辑分析难度较大
3. JAVA 的双亲委派模型原理及作用
原理:
- Bootstrap ClassLoader(引导类加载器)
C/C++ 实现的加载器,用于加载JDK的核心类库,比如: java.lang、java.util
等系统类。JAVA虚拟机启动就是通过Bootstrap ClassLoader;在JAVA里无法获取该类和对象,负责加载/lib下的类 - Extention ClassLoader (拓展类加载器)
JAVA 实现的加载器,提供了除了系统类之外的额外功能,可以在java里获取,负责加载/lib/ext下的类 - Application ClassLoader (应用程序类加载器)
JAVA 实现的加载器,开发人员写的代码默认就是由它来加载,ClassLoader.getSystemClassLoader返回的就是它
双亲委派模型:
当一个加载器要加载一个类时,会向上让父类去加载该类,该类加载不了,再向下加载,都加载不了,则该加载器加载
加载器加载类的顺序
Boostrap -> Extension -> Application -> 自定义的类加载器
作用:
- 避免重复加载,如果一个类被加载过了,则直接读取该记载的class
- 更加安全,无法通过自定义的类来替代系统的类,防止核心API库被随意篡改