目前越来越多的恶意apk文件为了对抗杀毒软件以及分析人员的分析,以及由于商业软件自身的保密需要,很大程度上都会进行一定的混淆,更有甚者采用全反射调用的来掩藏自己的真实意图。虽然一定程度上经过混淆的文件的其文件大小都会变小。以著名的proguard为例,经过处理的apk文件大小往往不到其未经过处理的apk文件的1/3。虽然文件变小以后其信息熵会明显的增大,但是对于大量恶意apk文件的自动化分析中,前期的混淆判断如果采用信息熵的置信区间来处理往往需要统计大量的apk文件,而且需要对apk实现解压,因为在解压的情况下,apk文件中的资源会对信息熵的计算造成稀释,并且还会存在一个模糊地带。 由于apk文件的混淆往往是伴随着文件的压缩和代码的优化问题,混淆的apk文件解压转换为jar文件,使用ju-gui打开以后有一个不太引人注意的细节问题---其中找不到资源文件类。 利用这一特性,我们可以直接利用apktool解压apk文件,对其smali文件的文件名进行分析,如果存在一个或以上的资源的smali文件,就可以证明该apk文件没有混淆,反之,则说明已经是混淆过了的文件。如下图所示 而全反射调用的判断就比较简单了,直接判断是否存在forname函数。 该方法比较好的一点在于便于使用脚本实现,有利于文件的批处理。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!