1-1-逆向分析和脱壳的意义
本文描述初步识别安卓加固、逆向分析APP的一般流程。
识别加固
经验方法:判断一个App是否加固,通常可以直接解压查看文件。(各大厂商加固逻辑不相同,导致出现各种特征)
文件:libjiagu.so(360) 特征类:qihoo360
使用Android Killer:直接打开APK查看反编译失败信息。
识别入口点
AndroidManifest.xml: 清单文件中查找<activity android:name=”com.meishshubao.client.activity.StatupActivity” …/>
android Killer: 自动识别入口点。
被加壳了:DEX被保护了。
编译失败:有对反编译工具的应对策略。
GDA反编译工具
Packed: (加固信息,使用了一些腾讯服务)
360sec{site:jiagu.360.cn}
bangcle Enterprise Edition{site:www.bangcle.com}
Note:提示被加固,需要先进行脱壳
识别并非100%准确,但可以用于确定是否被加固
推进书籍:
非虫《Android软件安全与逆向分析》
姜维《Android应用安全防护和逆向分析》
邓凡平《深入理解Android: Java虚拟机ART》
脱壳需要了解什么?
Android平台的apk开发流程有基本的认识,四大组件、App的运行流程等等。只有懂得正向开发,才知道如何逆向分析。
逆向分析APP的一般流程
- 使用自动化检测工具检测apl是否加壳。(或者反编译工具以及依靠经验推断加壳)
- 对apk进行脱壳
- 使用jeb、jadx、apktool反编译工具对apk反编译
- 先通过静态分析得到关键字符串、关键api调用等。快速定位关键代码喝流程。
- 无法通过字符串、关键api定位时,则apk可能进行了字符串加密与反射盗用等处理。此时需结合hook、动态调试等方法。
- 定位到关键函数后,根据是Java实现还是jni实现进一步进行分析,其中so中的函数逻辑分析难度较大。
注意事项
被加固的apk,在脱壳取出dex后,有可能存在magic信息被修改的情况,只需要找到正常的dex文件复制修复即可。
onCreateVMP化保护。
1 | protected native void onCreate(Bundle arg1) { |
动态注册的函数(例如Check函数)在JNI_OnLoad中,并加了ollvm的保护的情况。
针对这种情况,通常使用动态调试或者Hook的方式对RegisterActivity以及art注册进行监控,以便快速定位到Check函数。