一种安卓市场中重包装应用的检测方法

文档序号:6371793阅读:351来源:国知局
专利名称:一种安卓市场中重包装应用的检测方法
技术领域
本发明涉及智能手机中的恶意软件检测技术,更具体的说,是在安卓(Android)智能手机应用市场中检测重包装应用的方法。
背景技术
以安卓为平台的智能手机安全性令人担忧。自从2008年谷歌正式对外发布第一 款安卓手机一HTC Gl以来,短短4年的时间,安卓手机已经经历了多次的更新换代。安卓手机应用市场正以惊人的速度发展着。据科技网站Engadget于2012年2月报道,Android市场的应用程序数量已经达到45万。随着安卓手机的市场份额越来越大,安卓手机安全性却越来越引人担忧。很多恶意软件制造者瞄准了这一规模庞大的市场,发布各种各样具有破坏性的软件。据著名安全厂商McAfee于2012年5月24日发布的《迈克菲2012年第一季度威胁报告》显示,在今年的第一季度,McAfee收集到了近7000个Android恶意软件。由于有利可图,所以Android平台吸引了大量不法分子编写针对Android平台的恶意软件。与2011年第4季度的600个安卓威胁样本相比,环比增长超过1200%。这些恶意软件一般通过第三方市场传播,通常不会在官方市场出现。研发智能手机上的恶意软件检测迫在眉睫。手机恶意软件虽然不会对手机系统造成毁灭性的破坏,但从某种程度上来说,危害比电脑病毒还要厉害。手机恶意软件主要有如下几种恶意行为
I.在后台自动给扣费号码发送短信,赚取经济利润。2.拦截短信,不让用户觉察到异常。3.后台自动联网,并下载应用软件,耗费大量流量。4.读取手机联系人等用户隐私信息,并上传到服务器。5.开机自行启动,并不断在通知栏弹出广告,影响用户的正常使用。可见手机恶意软件的破坏行为直接和经济挂钩。用户如果不提高防范意识,就会被“吸”走很多话费和流量。根据“警视”公司的调查报告。在2011年年底,有4%的安卓用户很可能在本年中遭遇了恶意软件,而一年前这一数字为1%,恶意软件的破坏性以及传播性已经不容小视。因此研发以Android为首的智能手机恶意软件检测的任务迫在眉睫。安卓应用软件市场上的重包装应用很大程度上是恶意软件。安卓操作系统的开源性大大激发了开发者的积极性,给了开发者足够的空间。同时,开源的编程环境也造成了恶意软件的滋生。开发商发布软件的平台有谷歌的官方平台和形形色色的第三方平台。国内比较著名的第三方市场有优亿市场、安智市场、木蚂蚁市场、360安卓市场、安卓飞鹏网、91手机助手等等。由于官方市场的管理比较严格,理论上存在恶意软件的可能性很低。大多数的恶意软件存在于第三方市场上。其中很大一部分是官方市场软件的重包装应用。重包装是指将官方安卓市场上的应用重新打包后发布在第三方市场。它们基于一个合法的安全版本,但是因为某种原因,又附加了一些特殊的功能或修改。由于安卓应用程序使用的是Linux内核,一般采用Java语言编写。目前java语言的反编译功能比较成熟。运用现有的工具,可以实现源代码几乎100%的还原。这使得修改别人的应用程序并添加自己的代码成为可能。重包装应用发布一般发布在第三方应用平台,利用这些平台监管的不严格,而将带有恶意代码的应用发布上去,给手机用户和原始开发者造成了不应用的损失,严重破坏了智能手机应用生态系统。具体来说,重包装应用可能会带来以下问题
(I)在官方应用中加入恶意代码,例如自动联网,自动发送短信,拦截短信等。这些行为大大损害了用户的利益。重包装应用一般选用的是比较热门的手机应用,比如手机QQ,愤怒的小鸟等下载量达到几百万的应用。(2)通过替换官方应用中的广告侵害开发者利益。官方应用的开发者可以通过广告获取收入。攻击者往往利用这一点,替换掉原始的广告,换上自己的广告,侵害了开发者的权益。 目前主流的杀毒软件还没有涉及智能手机重包装应用的检测。目前的杀毒软件主要分为静态检测和动态行为检测两种。其中,静态检测的产品数量更多。所谓静态检测,就是将恶意软件的特征码提取出来,存放到数据库中。检测新的应用程序的时候,再通过提取特征码,并与数据库中的特征码相比较的方式来判断。这种方法可以检测已知的恶意软件。对于未知的恶意软件,目前主流的方法是启发式的行为分析法。通过已知恶意软件的特征推导未知。但是这些产品主要是针对智能手机上已经安装的应用,无法检测安卓软件市场上的重包装应用。

发明内容
本发明的目的是提供一种安卓平台下应用市场中的重包装应用检测技术,通过有效地提取特征码,以及计算特征码之间的编辑距离所得到的相似性来识别重包装应用。本发明不仅可以检测到恶意代码的变形攻击,还可以作为检测重包装应用的引擎。由于很多恶意软件是通过在官方下载的正常应用程序中植入恶意代码,因此检测出官方应用的重包装应用可以作为查杀病毒的一种有效辅助手段。本发明采用的技术方案一种安卓市场中重包装应用的检测方法,包括以下步骤
(I)从各个安卓应用的dex文件中提取特征码。在安卓平台上,用户下载的可安装文件一般是以apk文件,类似于Windows操作系统中的exe文件,apk文件为手机上的可执行文件。而实际上,apk文件的本质是一个压缩文件。把apk文件的后缀名改为zip然后进行解压缩操作。apk文件解压缩之后可以生成多个文件,这些文件或多或少都保留了一定的代码特征,然而只有dex文件保留了几乎全部的代码特征。因此,特征码的提取选用dex文件比较合适。dex文件有着固定的文件格式,通过这些格式可以对每一个安卓应用的dex文件进行详细的分析,包括文件大小,文件散列值,文件字符串和类的个数以及具体的内容。对这些内容进行一定的筛选即可得到文件的特征码。作为优选,所述特征码为dex文件中的字符串长度。dex文件包含了文件的几乎全部特征,而为了提高效率。只需要节选文件中的一部分作为特征码。可以用class来作为特征码,也可以用method来作为特征码,本发明采用的是将字符串的信息作为特征码。用字符串作为特征码的好处很多。首先,这种方法可以有效抵御类名的混淆替换攻击。基于很多杀毒软件以class名作为特征码。恶意代码的设计人员往往对文件进行伪装,通过代换和置换的方式改变类名,从而逃避杀毒软件的检索。而用字符串的方式,如果改变了类名也只能改变部分字符串。调用匹配函数检索的时候,仍然可以有很高的匹配率。对于大型的文件来说,以所有的字符串作为特征码,虽然可以很好的区分不同的文件,但对于特征码检测来说,工作量过于庞大,程序运行效率很低。因此,本发明采取了一种变通的方式,以所有字符串的长度按顺序组成特征码。字符串的长度可以用相邻两个字符串的首地址相减得到,这样大大减少了特征码的长度,提高了重包装应用的检测效率。(2)计算各个安卓应用的特征码之间的编辑距离。特征匹配是恶意代码检测的一个重要环节。匹配的度量方法有多种,通常把两段文本之间的差异称作距离,也就是将两段文本变成一致所需要的最少操作次数。常见的 度量方法有汉明距离(Hamming Distance),插入距离(Insertion Distance)和编辑距离(Edit Distance)。汉明距离仅允许替换操作,插入距离仅允许插入操作,而编辑距离将插入,替换,删除均视为一次操作。本发明采用字符串之间的编辑距离,并在此基础上提出了安卓应用之间相似度的计算方法。编辑距离的计算采用如下的动态规划算法。设字符串为A和B,用一个矩阵M来表示A与B的编辑距离,其中Mu表示的是字符串A的前i个字符变成字符串B的前j个字符所需的最少编辑操作次数。算法如下
I)分别计算字符串A和字符串B的长度,记为Iengthl和length2。2)判断Iengthl和length2是否为0,若有一个为0,则返回另一个字符串的长度。若两个长度都为0,则返回0.若两者都不为0,则构建一个大小为 (lengthl+l)*(length2+l)的矩阵M。M的行和列的编号均从0开始。3)将矩阵M的第一行和第一列,分别进行初值为0步长为I的递增编号。4)从M[l,I]开始,按照从左到右从上到下的顺序遍历整个矩阵,遍历过程中用变量i和j分别控制行和列的下标,同时A[i]和B[j]分别表示字符串A和字符串B的对应字符。5)计算 edit 变量值,如果 A[i]=B[j],贝丨J edit=0,否贝丨J edit=l。6)计算 M[i, j] =min (M[i_l, j] +1, M[i, j-1] +1, M[i~l, j-1] +edit)。7)重复5)和6)的操作,直到遍历到矩阵末尾,M[lengthl,length2]即为两字符串之间的编辑距离。(3)根据所述编辑距离计算各个安卓应用之间的相似度,并与给定阈值进行比较,从而确定是否为重包装应用。得到编辑距离后,还要计算特征码相似度,相似度的计算公式如下
, distanced,5)
n = ............................⑴
MAX QmgtM,length 2)
公式(I)中distance(A,B)为字符串A和字符串B的编辑距离,Iengthl和length2为字符串A和字符串B的长度。在公式(I)中之所以用长字符串作为分母,是由于如果用短字符串作为分母,会有结果为负数的可能性。确定公式之后,应该设定阈值,即相似度大于一定程度,可判断为某一应用为重包装应用,否则为不同应用。如果相似度为1,则两应用为相同应用。经过我们的试验,将判断是否为重包装应用的阈值设为0. 85。即两段特征码不同的部分在15%以内,即可认为两者为重包装的应用软件。


图I是本发明安卓应用的特征码提取流程 图2是本发明不同应用的特征码之间编辑距离计算流程图。
具体实施方式

下面结合附图和具体实施方式
对本发明作进一步说明
一种安卓市场中重包装应用的检测方法,包括以下步骤
(1)从各个安卓应用的dex文件中提取特征码;
(2)计算各个安卓应用的特征码之间的编辑距离;
(3)根据所述编辑距离计算各个安卓应用之间的相似度,并与给定阈值进行比较,从而确定是否为重包装应用。具体步骤详细介绍如下
(I)、从各个安卓应用的dex文件中提取特征码
前面已经提及,本发明采取的是以每个字符串的长度按顺序组成的特征码。这些信息可以从dex文件中获得。dex文件有着固定的文件格式,通过这些格式可以对每一个安卓应用的dex文件进行详细的分析,包括文件大小,文件散列值,文件字符串和类的个数以及具体的内容。对这些内容进行一定的筛选即可得到文件的特征码。dex文件的头文件格式如表I所示。其中的字符串列表信息是本发明所使用的。dex头文件详细的标示出了字符串的个数以及每一组字符串的首地址。按照首地址去搜索对应的位置可以得到相应的字符串。表I dex文件的头文件格式
权利要求
1.一种安卓市场中重包装应用的检测方法,其特征在于包括以下步骤 (1)从各个安卓应用的dex文件中提取特征码; (2)计算各个安卓应用的特征码之间的编辑距离; (3)根据所述编辑距离计算各个安卓应用之间的相似度,并与给定阈值进行比较,从而确定是否为重包装应用。
2.根据权利要求I所述的一种安卓市场中重包装应用的检测方法,其特征在于所述特征码为dex文件中的字符串长度。
3.根据权利要求2所述的一种安卓市场中重包装应用的检测方法,其特征在于所述dex文件中的字符串长度的计算方法为在dex文件中找到字符串的起始偏移地址,然后读取不同字符串的地址,将两字符串的地址相减从而计算出字符串的长度。
4.根据权利要求I所述的一种安卓市场中重包装应用的检测方法,其特征在于所述编辑距离的计算采用如下的动态规划算法设字符串为A和B,用一个矩阵M来表示A与B的编辑距离,其中Mu表示的是字符串A的前i个字符变成字符串B的前j个字符所需的最少编辑操作次数,算法如下 分别计算字符串A和字符串B的长度,记为Iengthl和length2 ; 判断Iengthl和length2是否为O,若有一个为O,则返回另一个字符串的长度;若两个长度都为O,则返回O ;若两者都不为O,则构建一个大小为(lengthl+l)*(length2+l)的矩阵M ;M的行和列的编号均从O开始; 将矩阵M的第一行和第一列,分别进行初值为O步长为I的递增编号; 从M[l,I]开始,按照从左到右从上到下的顺序遍历整个矩阵,遍历过程中用变量i和j分别控制行和列的下标,同时A[i]和B[j]分别表示字符串A和字符串B的对应字符; 计算edit变量值,如果A[i]=B[j],则edit=0,否则edit=l ;计算 M[i, j]=min(M[i-l, j]+l, M[i, j_l]+1,j_l]+edit); 7)重复5)和6)的操作,直到遍历到矩阵末尾,M[lengthl,length2]即为两字符串之间的编辑距离。
5.根据权利要求I所述的一种安卓市场中重包装应用的检测方法,其特征在于所述相似度的计算公式如下 . dtstance(j4,5) = l--——(I) MAX{kngth\,iengA2) 公式(I)中distance(A,B)为字符串A和字符串B的编辑距离,Iengthl和length2为字符串A和字符串B的长度。
6.根据权利要求I所述的一种安卓市场中重包装应用的检测方法,其特征在于所述给定阈值设为0.85。
全文摘要
本发明公开了一种安卓市场中重包装应用的检测方法,该方法根据各个安卓应用的dex文件计算出所使用字符串的长度,将此作为区分不同应用的特征码,通过计算不同应用的特征码之间的编辑距离得到不同安卓应用之间的相似度,并与给定阈值进行比较,从而确定是否为重包装应用。本发明可以作为检测安卓恶意软件的一种有效辅助手段。
文档编号G06F21/00GK102750482SQ20121020424
公开日2012年10月24日 申请日期2012年6月20日 优先权日2012年6月20日
发明者孙雄, 秦中元, 胡爱群 申请人:东南大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1