Android APP保护技术也是一把双刃剑,黑客也广泛使用它来保护恶意和重打包的APP,使得难以被分析和判定,在一定程度上提高了传播的范围。所以对于恶意程序分 析人员来说,甚至对于软件相似性检测、代码抄袭等相关电子取证技术,破除APP的保护也是必不可少的第一步。
我们主要研究了6种主流的AndroidAPP保护厂商的产品:梆梆、腾讯、爱加密、360、阿里和百度(截止2015年9月)。通过相关的一些分析,下面来看一看这些厂商是如何来实现APP的保护的。
360:将原有的dex文件加密后存储在libjiagu.so/libjiagu_art.so,在运行时动态释放并解密。
阿里:将原有的dex文件拆分为两部分,一部分主体保存为libmobisecy.so,另一部分包含了一部 分class_data_item和code_item。在运行的时候将两部分释放在内存中,并修复相关的指针,恢复数据之间的连接关系。同时一些 annotation_off被设置为无效的值。
百度:将一些class_data_item存储在dex文件的外部,在运行时恢复与主体的dex的连接关系。在dex文件加载后,其头部的魔数,校验和以及签名值会被擦除。同时某些方法被改写,使得其在执行前相关的指令才会被恢复,在执行之后便立即擦除。
梆梆:提前准备了一个odex或oat文件,并加密保存为外部的jar文件,运行时解密;同时hook了libc.so中的一些函数,如read,write,mmap等,监视其操作区域是否包含了dex的头部,保证无法使用这些函数对于dex文件进行操作。
爱加密:同样是加密原有的dex文件,在运行时整体释放并解密,只不过其释放的处于固定路径下的临时文件的名字是随机的。
腾讯:提供选项可以指定需要保护的方法。如果某个方法被保护,则在dex文件中的相关 class_data_item中无法看到其数据,即为一个假的class_data_item;在运行时释放真正的class_data_item并连 接到dex文件上,但是其code_item却一直存在于原有的dex文件中。同样地,一些annotation_off和debug_info_off 被填充为无效值来阻止静态反编译。只支持在DVM环境下运行。