一种基于应用程序编程接口的安卓重打包应用检测方法

文档序号:6512916阅读:733来源:国知局
一种基于应用程序编程接口的安卓重打包应用检测方法
【专利摘要】一种基于应用程序编程接口的安卓重打包应用检测方法。首先对应用程序文件进行处理,得到smali代码文件;对于每一个文件夹,从smali代码中提取出安卓应用程序编程接口的使用情况,统计频率信息;然后通过文件夹之间的相互比较来进行聚类,将相似度高、重复数量多的文件夹视为第三方库;去除第三方库干扰之后,再以应用程序文件为单位,对相似度高的程序文件进行聚类;最后结合作者签名信息,判断应用程序之间是否具有重打包关系。利用本发明提供的技术方案,可以在大规模应用市场级别的应用中,对重打包应用进行自动的检测,有很高的效率以及准确性。
【专利说明】一种基于应用程序编程接口的安卓重打包应用检测方法
【技术领域】
[0001]本发明涉及一种基于应用程序编程接口的重打包应用检测方法,具体涉及一种在安卓平台下,利用应用程序代码中关键应用程序编程接口的使用频率,过滤第三方库以及检测重打包应用的方法。
【背景技术】
[0002]近年来,移动设备(例如智能手机和平板)的发展十分迅速。Android平台占据了智能移动市场的主要份额,据统计每天有超过130万部搭载Android系统的移动设备被激活使用。随着移动设备的流行和普及,涌现出大量的移动应用。截止至2013年2月,谷歌官方市场中已经有超过80万个Android移动应用。这些移动应用不仅增强了移动设备的功能,还大大丰富了用户体验。用户逐渐习惯于使用多样的应用来娱乐和办公,智能移动设备和移动应用已经成为人们生活中不可或缺的一部分。
[0003]由于Android系统的开放性,用户不仅能从谷歌官方市场下载和安装应用,也可以从任意的第三方市场甚至网站和论坛下载和安装应用。同时,应用的开发者可以将应用提交到任意的第三方市场来供用户下载。因此对于应用市场的管理者来说,只有管理好市场中应用的质量和提供一个良好的市场环境,才能吸引更多的用户和开发者。
[0004]然而,Android应用很容易被破解,目前有很多开源的反编译工具可以使用。因此,一些恶意的开发者可以很容易破解应用市场中的合法应用,修改代码后重新打包并在市场中发布。付费的应用可以被破解然后免费发布出去,恶意的开发者也可以将原应用中的广告库替换掉来谋取利益。更为严重的是,恶意的开发者可以将恶意的代码植入到合法的应用中然后发布出去,以此来感染更多的用户。应用重打包的行为不仅侵犯了开发者的利益,也严重威胁到了用户的安全和隐私。
[0005]应用市场的管理者需要控制市场中应用的质量,检测和移除这些潜在的威胁。然而,在应用市场中检测重打包应用是很困难的。一方面,管理者大多数时候只能通过手动比较来判断应用是否是重打包应用,并且很多时候手动比较也很难得到正确的结果。例如,重打包的应用可以在功能上包含了几个不同的应用,或者重打包的应用包含了恶意软件等等。另一方面,考虑到应用市场中海量数目的应用,手动进行重打包检测不可靠且没有可扩展性。因此,在应用市场级别的应用重打包检测需要一个自动化的系统来完成。
[0006]Wu Zhou等提出在Dalvik字节码层次上进行应用重打包检测(“DroidMOSS:Detecting Repackaged Smartphone Applications in Third-PartyAndroid Marketplaces”, C0DASPY’ 12)。DroidMOSS 提取 Dalvik 字节码中的操作码序列,使用模糊散列的方法对应用程序产生一个指纹签名并作为特征,通过比较应用程序指纹之间的编辑距离得到应用程序的相似度。类似的,Steve Hanna等提出了 Juxtapp (“ Juxtapp: AScalable System for Detecting Code Reuse Among Android Applications”,DIMVA'12),使用了特征散列的方法对应用程序产生指纹签名并且以它们之间的Jaccard距离作为重打包的判断依据。DroidMOSS和Juxtapp都是从Dalvik字节码中提取静态的特征信息,并且使用不同的散列技术来将这些静态信息表示成向量从而进行比较。这种比较方法的优点是简单快速,能够很容易扩展到大规模应用的比较。但是重打包应用很容易就能逃避这种检查技术,比如最简单的交换代码顺序或者增添删除操作码就会导致应用程序的指纹发生改变从而导致检测方法失效。
[0007]Jonathan Crussell 等提出 DNADroid (“Attack of the Clones !Detecting ClonedApplications on Android Markets”,ESORICS'12),通过比较应用的程序依赖图(PDG)来检测重打包应用。基于程序依赖图的检测技术是代码克隆检测中经常使用的方法。它使用了程序的语义信息,因此检测的准确率应该会比较高。但是基于程序依赖图的检测方法执行效率是个问题。在DNADroid中,作者使用Hadoop Mapreduce并行计算框架在四台机器上执行应用的重打包检测,但是平均每分钟只能比较0.71个应用对。因此,这种方法的扩展性不高,很难应用到应用市场级别数十万的应用检测。
[0008]综上,现有的应用重打包检测方法主要存在两个问题:
[0009]I)安卓应用程序中的第三方库代码的使用对重打包应用的检测干扰很大,现有的做法大部分都是通过建立第三方库的白名单来过滤掉第三方库的代码。但是由于现有的应用程序中大多数都经过了代码混淆,因此这种方法对于代码混淆过后的应用程序是无效的。
[0010]2)系统必须要保证准确性的同时具有很高的可扩展性,这就需要提出的检测方法有低误报率和高查全率,应该考虑到不同层面上的代码更改、添加和删除,并且能够快速地在海量应用中检测到重打包应用。但是现有的方法中没有做到这一点。

【发明内容】

[0011]本发明的目的是提供一种新的方法,使得在较小开销,较快时间内,对给出的若干安卓应用程序进行预处理,得到一些关于应用程序编程接口的特征向量,通过相似度计算,进行聚类,去除第三方库,并得 到这些安卓应用程序中哪些是重打包应用的信息。
[0012]本发明的原理是:首先对应用程序文件(apk文件)进行处理,得到smali代码文件,smali代码是原来应用程序二进制代码的一种中间表示。处理得到的smali文件是按照原始的文件夹层次组织的,对于每一个文件夹,从smali代码中提取出安卓应用程序编程接口的使用情况,统计频率信息。然后通过文件夹之间的相互比较来进行聚类,将相似度高、重复数量多的文件夹视为第三方库。去除第三方库干扰之后,再以应用程序文件为单位,对相似度高的程序文件进行聚类。最后结合作者签名信息,判断应用程序之间是否具有重打包关系。
[0013]本发明提供的技术方案如下:
[0014]一种基于应用程序编程接口的安卓重打包应用检测方法,适用于检测安卓平台的应用程序,其特征是,包括如下步骤(流程参照图1):
[0015]A.对应用程序文件进行预处理,将二进制代码转换为smali代码文件、提取应用程序的作者签名信息并构造应用程序编程接口;
[0016]B.对smali代码文件进行处理,以文件夹为单位,提取出安卓应用程序编程接口的调用情况以及对应的调用次数,组成特征向量;
[0017]C.计算不同文件夹之间的特征向量的相似度,并进行聚类,去除第三方库;[0018]D.再次根据应用程序编程接口,计算应用程序的特征向量,对比应用程序的特征向量的相似度,聚类并判断哪些应用程序为重打包应用。
[0019]所述的安卓重打包应用检测方法,其特征是,步骤A包括:
[0020]Al.提取安卓应用程序二进制代码文件以及ΜΕΤΑ-1NFO文件中的作者签名信息文件;
[0021]A2.使用现有工具,将二进制代码转换为smali代码文件;
[0022]A3.使用现有工具,从相应文件提取作者签名内容。
[0023]所述的安卓重打包应用检测方法,其特征是,步骤B包括:
[0024]B1.对步骤A中得到的smali代码文件进行处理,读取smali文件的内容,并用正则表达式进行匹配,将应用程序编程接口函数与其余信息剥离,并以文件夹为单位,统计汇总;
[0025]B2.把步骤BI中得到的应用程序编程接口数据转化为易于程序识别与操作的欧几里得空间的特征向量。
[0026]所述的安卓重打包应用检测方法,其特征是,步骤C包括:
[0027]Cl.对每两个文件夹之间求向量距离。假设需要比较文件夹a和文件夹b的相似度。首先通过步骤B取得a和b的特征向量,分别为α和β在欧几里德空间中,若α在某一维度上有值,而β在该维度上没有值,则β在该维度上补充为0,反之亦然。对α和β,采用以下公式来求取向量距离:
【权利要求】
1.一种基于应用程序编程接口的安卓重打包应用检测方法,适用于检测安卓平台的应用程序,其特征是,包括如下步骤: A.对应用程序文件进行预处理,将二进制代码转换为smali代码文件、提取应用程序的作者签名信息并构造应用程序编程接口; B.对smali代码文件进行处理,以文件夹为单位,提取出安卓应用程序编程接口的调用情况以及对应的调用次数,组成特征向量; C.计算不同文件夹之间的特征向量的相似度,并进行聚类,去除第三方库; D.再次根据应用程序编程接口,计算应用程序的特征向量,对比应用程序的特征向量的相似度,聚类并判断哪些应用程序为重打包应用。
2.如权利要求1所述的安卓重打包应用检测方法,其特征是,所述步骤A包括: Al.提取安卓应用程序二进制代码文件以及ΜΕΤΑ-1NFO文件中的作者签名信息文件; A2.使用现有工具,将二进制代码转换为smali代码文件; A3.使用现有工具,从相应文件提取作者签名内容。
3.如权利要求1所述的所述的安卓重打包应用检测方法,其特征是,所述步骤B包括: B1.对步骤A中得到的smali代码文件进行处理,读取smali文件的内容,并用正则表达式进行匹配,将应用程序编程接口函数与其余信息剥离,并以文件夹为单位,统计汇总;B2.把步骤BI中得到的应用程序编程接口数据转化为易于程序识别与操作的欧几里得空间的特征向量。
4.如权利要求1所述的安卓重打包应用检测方法,其特征是,所述步骤C包括: Cl.对每两个文件夹之间求向量距离,假设需要比较文件夹a和文件夹b的相似度,首先通过步骤B取得a和b的特征向量,分别为α和β在欧几里德空间中,若α在某一维度上有值,而β在该维度上没有值,则β在该维度上补充为0,反之亦然;对α和β,采用以下公式来求取向量距离:
5.如权利要求4所述的安卓重打包应用检测方法,其特征是,步骤D包括: Dl.根据每个文件夹的特征向量,把未经过第三方库过滤掉的文件夹的特征向量,使用加总的方法,整合为每个应用的特征向量; D2.使用Cl中出现的公式,计算两两之间的距离,并以此为基础采用聚类算法,把距离低于某个阈值的应用聚合到一个类; D3.对步骤D2中同一个类的应用,审查他们的作者信息,如果同一个类中的应用,其作者签名不同,则认定两个应用之间有重打包的关系。
6.如权利要求4所述的安卓重打包应用检测方法,其特征是,步骤C2中所述的阈值为0.05。
7.如权利要求5所述的安卓重打包应用检测方法,其特征是,步骤D2中所述的阈值为`0.1。
【文档编号】G06F17/30GK103473346SQ201310438647
【公开日】2013年12月25日 申请日期:2013年9月24日 优先权日:2013年9月24日
【发明者】郭耀, 马子昂, 王浩宇, 陈向群 申请人:北京大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1