一种检测移动应用第三方库功能的方法与流程

文档序号:15115566发布日期:2018-08-07 19:59阅读:737来源:国知局

本发明提供一种检测移动应用第三方库功能的方法,具体涉及一种使用深度学习检测安卓移动应用第三方程序库功能的方法。



背景技术:

目前,随着手机的广泛普及。移动应用越来越多。由于手机通用操作系统的出现,开发人员开发应用也变得越来越便捷。

移动应用会使用很多第三方库。每个第三方库都有自己的功能。但是通常一个库都包含了很多功能,并且这些功能有很多都是重复的。如何识别重复功能就成了一个问题。如果重复功能可以被识别,开发者就能够从中挑选自己需要的第三方库,从而降低手机应用程序的功能冗余。

机器学习是近年来流行的一项技术,在有大数据支撑的情况下,可以训练出判定模型。对样本进行分类识别。



技术实现要素:

本发明的目的是提供一个新的方法,能够分析出给定安卓系统第三方库的功能集合,判定安卓应用第三方库的功能类别。

本发明的原理是:先把第三方库进行反编译,然后提取出使用到的api,以及对应的使用次数;再将它输入预先训练好的神经网络中,神经网络依次对各个分类进行判断,输出对应各个类别的判断。

本发明提供的技术方案如下:

一种检测移动应用第三方库功能的方法,包括以下步骤:

1)收集若干第三方库,统计每个第三方库的api调用情况,根据各api调用的次数对每个第三方库生成一个向量;

2)对各第三方库的功能类别进行标注,使用步骤1)生成的向量对不同功能类别的第三方库训练神经网络模型;

3)对于待检测的第三方库,使用步骤1)的方法生成对应的向量,然后将该向量输入步骤2)得到的神经网络模型,从而判定该待检测的第三方库的功能类别。

对上述方法进一步具体说明如下:

a.得到一个第三方库时:

a1.使用反编译工具分析出api调用的地方;

a2.统计每个api被调用的次数;

a3.将每个应用的统计信息都整理成一个向量,即对每个第三方库生成一个向量,

向量中的每个元素对应一个api的被调用次数;

b.训练神经网络时:

b1.对第三方库的功能进行标注,按照不同的功能类别将标记好的数据切分为训练集和测试集;

b2.利用训练集训练出一个神经网络模型;

b3.对神经网络模型进行交叉验证;

b4.修改神经网络模型的参数,重新训练,得到更好的神经网络模型。

c.训练好神经网络模型后,就可以判定第三方库功能类别:

c1.将需要判定的第三方库,使用a中方法,生成对应向量;

c2.将向量输入神经网络模型,输出第三方库的功能类别。

本发明的有益效果是:利用本发明提供的技术方案,可以快速自动判定给定安卓应用第三方库的功能类别。

附图说明

图1是本发明的第三方库预处理流程图。

图2是本发明的训练流程图。

图3是本发明的功能判定流程图。

具体实施方式

本发明的具体实施方式如下:

a.从apk应用程序中抽取训练用的特征,执行如下操作:

a1.将这些apk进行反编译。从反编译后的代码中找到第三方库,进而中找到第三方库中所有的安卓api调用,并记录下来。

a2.统计出每个api的调用情况,将每个api被调用的次数提取出来。

a3.根据上述信息,对每个第三方库生成一个向量,向量中的每个元素都对应着一个api的被调用次数。

a4.通过人工手段,标注出一个训练数据集。

b.对应用生成向量后,要训练出一个神经网络模型,执行如下操作:

b1.对第三方库的功能进行标注。然后按照不同的功能类别将数据切分为训练集和测试集。

b2.利用训练集数据,对于不同的功能类别都使用三层神经网络训练出一个神经网络模型。

b3.根据数据集的大小,采用10-fold对每种功能类别训练出的神经网络模型进行交叉验证。

b4.根据交叉验证的结果,对神经网络模型的参数进行优化,得到一个效果较好的神经网络模型。

c.获得训练好的神经网络模型后,对一个给定的第三方库进行分析,执行如下操作:

c1.根据a中的方法,对给定的第三方库进行反编译,统计api调用次数,生成此第三方库对应的向量。

c2.利用b中训练好的神经网络模型,将生成的第三方库对应的向量输入该神经网络模型,对于每个分类,输出该第三方库属于各个分类的评分(或概率)。获得评分(或概率)后,分析第三方库功能冗余,判定第三方库的功能类别。提供开发者关于第三方库功能冗余的报告,提示某些功能不同的第三方库都有提供,便于开发者精简第三方库的使用。

下面通过实例对本发明做进一步说明。

a.特征提取过程

下载一些安卓应用的安装程序,如365日历。使用apktools对365日历.apk进行反编译,将它反编译为smali字节码。在字节码目录下可以找到了若干个库的目录,包括com/tencent/open,com/umeng/analytics,org/kxml2等。在这些目录中找到所有的安卓api调用。统计每个库api的调用情况,提取每个api调用的次数。对每个库生成一个向量,然后以此来训练神经网络模型。

b.数据标注与机器学习

首先,对第三方库的功能进行标注,譬如把com/tencent/open标注为社交库,把com/umeng/analytics标注为分析库,把org/kxml2标注为开发工具库。把数据分为训练集和测试集两个部分。利用训练集的数据,对每个不同的种类都训练出一个神经网络模型。根据数据集的大小,对训练出来的模型进行交叉验证。根据交叉验证的结果,对参数进行优化,得到更好效果的神经网络模型。

c.数据分析

获得训练好的神经网络模型后,就可以进行分析了。假设我们拿到了一个新的apk,使用apktools将它反编译为smali字节码。假设在其反编译后的目录下发现com/fasterxml目录,假设很难确定com/fasterxml的类别。于是可以使用同样的方式统计com/fasterxml目录下的api调用情况,提取每个api的调用次数,生成com/fasterxml对应的向量特征。利用训练好的神经网络模型,对于每个分类,都计算属于该分类的概率。经过计算后,发现com/fasterxml隶属于开发工具库的概率最高,因此把com/fasterxml归为开发工具库。

以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的精神和范围,本发明的保护范围应以权利要求书所述为准。



技术特征:

技术总结
本发明涉及一种检测移动应用第三方库功能的方法。该方法包括以下步骤:1)收集若干第三方库,统计每个第三方库的API调用情况,根据各API调用的次数对每个第三方库生成一个向量;2)对各第三方库的功能类别进行标注,使用步骤1)生成的向量对不同功能类别的第三方库训练神经网络模型;3)对于待检测的第三方库,使用步骤1)的方法生成对应的向量,然后将该向量输入步骤2)得到的神经网络模型,从而判定该待检测的第三方库的功能类别。本发明的目的是提供一个新的方法,能够分析出给定安卓系统第三方库的功能集合,快速自动判定安卓应用第三方库的功能类别。

技术研发人员:郭耀;宗毅;马子昂;陈向群
受保护的技术使用者:北京大学(天津滨海)新一代信息技术研究院
技术研发日:2016.11.21
技术公布日:2018.08.07
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1