
移动互联网应用技术高速迭代,诈骗APP层出不穷,防反编译技术应用频繁。
取证实战中,拿到一个恶意APK文件,你的第一反应是什么?
很多人可能会直接把它拖进反编译工具开始分析,然后“惊喜”发现APP能正常运行,却什么都分析不出来;Java代码几乎为空;类名全部混淆,看不到业务逻辑;找不到关键类和方法...
难道是APK文件有问题吗?其实不然。
有可能是因为这个APK文件被加固保护了。
大家都知道对涉案APK文件取证时效性要求非常高,因此在拿到涉案APK文件需要快速完成初步判断,避免影响整体分析效率。
今天,航哥就和大家分享一下实战中几个常用于辅助判断“APK是否加固”的方法,帮助大家快速识别“有问题”的APK。

简单来说,“APP加固”就是在APK外面增加一层“保护壳”。
开发者将核心代码文件-“DEX文件”,进行加密,并在APK中植入壳程序。APP启动时,壳程序先解密、释放真实代码,从而提高反编译和篡改的难度。整体加固流程如下图:

4种常用方法
辅助识别APP是否加固
01
检查classes.dex文件大小
PINGHANG
使用7-Zip、WinRAR等压缩工具直接解压打开APK文件,查看根目录下的dex文件,该类文件是存放Java代码编译结果的核心文件。
常规APP包含较完整的业务代码,DEX文件体积较大。而加固APP的真实代码被加密,APK内只保留用于启动的壳程序,DEX文件往往只有几十KB。
若一个功能完整的应用,DEX文件体积却极小,则可初步认为该APK可能存在加固。
02
识别lib目录中的SO文件特征
PINGHANG
在lib目录下查看其中的.so文件,商业加固方案通常会在APK中植入对应的SO文件,用于代码解密和动态加载。
部分加固方案的壳SO文件名具有较明显的特征,可据此进一步识别加固厂商(即可进一步判断该APK文件可能存在加固)。
{常见so文件命名特征,详见Link+本期内容}
03
查看AndroidManifest.xml的
Application配置
PINGHANG
通过工具查看AndroidManifest.xml文件(即APK清单文件),定位<application>标签中的android:name属性。
正常APP:通常加载自身业务入口类,如android:name="com.xxx.MyApplication"。
加固APP:Application被替换为壳程序入口,名称中常出现Stub、Proxy、Wrapper、Shell等字样。
Application入口被替换为壳程序类名,也是判断商业加固的重要特征之一,代表APP启动流程已由壳程序接管。
04
使用反编译工具观察代码结构
PINGHANG
将APK导入JADX,等待反编译完成后,观察左侧代码树中的包结构和类数量。
正常APP:包含大量业务包和功能类,如login、user、message、pay、setting等。
加固APP:真实DEX未存放在APK中,反编译后只剩少量壳代码,如stub、shell、proxy等。
反编译后几乎看不到业务逻辑代码,说明真实DEX大概率在运行时动态加载,而非直接打包在APK内。
但仍需要注意的是,单一特征不能完全确定APP是否加固。
实际工作中,我们还需结合DEX文件大小、SO特征、Manifest配置、代码结构等多个维度综合判断。

自动化识别方案
让分析更高效
面对批量分析需求或自定义加固方案,手动分析识别存在效率瓶颈。
对此,平航应用逆向分析系列产品内置丰富的加固特征库,可识别30+种主流加固类型,可基于APK结构、DEX、SO、Manifest等多维特征进行综合分析,自动判断加固类型及对应厂商,并通过内置的脱壳方案,快速实现加固脱壳,尤其在存在大量待分析样本时,效率可显著提升!
更多逆向分析实战难题
可询平航区域销售/技术,获取支撑
更多取证小知识
可以关注平航官方微信公众号
或通过平航Link+知识库了解学习
产品试用可联系区域销售获取












