1.加固apk的特征(各家.so文件名特征 使用软件检测)(腾讯乐加固 360加固 梆梆 爱加密 等 等)
2.第三方加固/自己加固(一般在哪家应用市场发布 就要用哪家的加固方案)
3.为什么要加固(一定程度保护源代码)
4.加固方式(.dex加固 .so加固)
新APK运行
先加载壳APP--->壳APP读Dex文件末尾的源APKD大小---->在内存中壳APP解密出源APP--->运 行源APP
壳APK有自己的Application对象
源APK有自己的Application对象
壳APK启动时 在AndroidMenifest.xml里找源APK的Application 执行它的oncreate方法 启动源 APK
逆向/脱壳方法
反编译/Hook技术和动态调试
Hook:先取得要Hook函数/方法的控制权,不用破坏程序
动态调试:反调试,汇编,计算内存地址
Hook Java层
Hook Native层(.so库)
在代码层 寻找要Hook的地方
进行Hook 改下代码逻辑
脱壳原理:
在壳APK解密源APK后,源APK被加载前,拦截这个过程中的系统函数 把内存中Dex dump出来
手动脱壳:
通过动态调试,跟踪计算Dex源文件的内存偏移地址,从内存中Dump出Dex文件 难度大,寄存器,汇编,反调试,反读写IDA
工具脱壳:
HOOK技术/内存特征寻找 简单易操作
基于xposed 脱壳工具:Fdex2:Hook ClassLoader loadClass方法 通用脱壳 dumpDex:https://github.com/WrBug/dumpDex
重写底层函数:DexExtractor:重写libdvm.so dexFileParse函数。脱梆梆 爱加密 libart.so 安卓7.0
逆向框架:筑好底层 提供开发接口 xposed(Java 编译) frida(Python Javascript 代码注入) 主要系统函数都已HOOK/基于xposed frida开发脱壳工具/有大神已开发上层应用模块 开发工具要了解 APP启动 加载过程的原理.