论文部分内容阅读
随着Android应用覆盖到了用户生活的方方面面,移动应用的开发者需要在开发的应用中嵌入各种各样的第三方库,以用来在应用中实现各种不同的功能,如社交、支付、导航等。第三方库的广泛使用给应用的开发者带来了便利,大大缩短了应用的开发周期。但同时,由于嵌入第三方库会给应用中引入第三方库的代码,会给应用带来一些安全性的风险。现阶段的关于应用中含有的第三方库的检测方法主要分为基于白名单的方式和基于机器学习的方式。在基于机器学习的方法中又根据在统计特征时是否包含有数据类型标签,分为有监督学习的分类和无监督学习的聚类两种。因为目前市场上第三方库的数量的快速增长,基于白名单的方式无法做到白名单的及时更新。又因为市场上的第三方库种类多,很多第三方库都没有可以用于区分的特征,基于分类的方式也无法满足需求。基于聚类的方式便成为了一种可行的解决方案,但是在聚类结果的精准度上还有很大的提升空间。本文针对于聚类结果的精准度问题,做了如下的工作:1、针对于聚类时需要提取的应用特征,从源码上对应用进行分析,探索提取的特征信息与聚类结果精准度上的联系。2、本文从子包之间的联系出发,提出模块的概念,将联系紧密的子包划分到同一个模块。同时也提出了模块分解的概念,将整个应用中的所有子包,根据子包之间功能性上的继承关系、接口调用关系、函数调用关系、成员变量关系进行模块划分,将联系紧密的子包划分到同一个模块中。最终得到应用的子包依赖分布图。3、本文将模块分解以及聚类识别结合在一起,完成整个系统的搭建。并且在Google Play上下载了 183089个应用作为基础以进行比对实验。通过将本文的系统得到的实验结果,跟之前的研究结果进行全方面的比对,证实了本文设计的方法不仅仅能够即时的,高效的检测应用中含有的第三方库,而且具有更高的准确性。