首页> 中国专利> 对Android重打包恶意软件的恶意代码的检测、切除和恢复的方法

对Android重打包恶意软件的恶意代码的检测、切除和恢复的方法

摘要

一种对Android重打包恶意软件的恶意代码的检测、切除和恢复的方法,通过对已知恶意程序的恶意入口点类建立由模糊哈希值构成的特征库,用于与反汇编后的待检测程序的入口点类进行匹配;然后依次切除被重打包加入的完整的恶意代码片段以及恶意代码的资源文件,最后找出重打包过程中对原程序实施修改的代码片段,恢复其原有功能。本发明针对当前Android平台日益严重的恶意程序使用的重打包植入恶意代码这一最主要传播特征,检测和切除那些正常程序中植入的恶意代码部分。

著录项

  • 公开/公告号CN104091121A

    专利类型发明专利

  • 公开/公告日2014-10-08

    原文格式PDF

  • 申请/专利权人 上海交通大学;

    申请/专利号CN201410261034.6

  • 申请日2014-06-12

  • 分类号G06F21/56(20130101);

  • 代理机构31201 上海交达专利事务所;

  • 代理人王毓理;王锡麟

  • 地址 200240 上海市闵行区东川路800号

  • 入库时间 2023-12-17 01:54:18

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2017-07-18

    授权

    授权

  • 2014-10-29

    实质审查的生效 IPC(主分类):G06F21/56 申请日:20140612

    实质审查的生效

  • 2014-10-08

    公开

    公开

说明书

技术领域

本发明涉及的是一种移动通信设备领域的方法,具体是一种对Android重打包恶意软件的恶意代码的检测、切除和恢复的方法,针对的是Android平台通过对正常程序重打包,注入恶意代码的恶意软件。 

背景技术

在Android平台上,应用程序使用java语言编写,使得应用程序的逆向和破解变得简单。有许多工具例如apktool等可以用来帮助反汇编Android应用程序的可执行代码,解码资源文件。由于Android允许自签发的证书签名应用程序并允许安装非官方市场的应用,因此一旦Android应用程序被反汇编和解码后,就可以修改或加入代码以及资源文件,重新签名打包成新的应用程序被用户安装执行。而恶意程序为了更加广泛的传播以及欺骗用户安装,通常使用批量重打包正常的应用程序,并植入拥有恶意行为的代码片段,放入各类市场诱使用户下载。目前绝大多数的Android恶意程序都通过这种方式传播。目前已经有针对Android恶意程序的检测技术,主要是通过应用程序的特征值进行检测,如代码特征,字符串特征,API调用等。另外还有通过特征值匹配和相似性检测进行对恶意程序家族的分类。由于恶意代码片段是被重打包植入的,本身是个相对独立的模块,为了保证原来程序功能的完整,重打包过程通常不会对原程序做大规模的修改,这些都使得对被植入的恶意代码的检测切除和恢复原程序成为可能。但是目前在Android领域,针对重打包植入恶意代码的恶意程序,尚没有一种能准确检测出被植入的恶意代码完整部分,并切除的方案和技术。 

经过对现有技术的检索发现,中国专利文献号CN103440459A公开(公告)日2013.12.11,公开了一种Android恶意软件检测方法,旨在解决现有Android恶意代码检测技术无法细粒度构建Android程序行为特征的问题。首先对现有Android恶意代码进行基于权限的统计分析,提取使用率较高的权限作为敏感权限,继而以使用这些权限的API作为入口点,构建调用这些API的函数链,进行基于函数调用的Android恶意代码检测。但该技术仅能够判断被检测程序中是否含有恶意代码的函数调用特征,但无法准确检测出整个程序中具有恶意行为功能的完整恶意代码模块。另外在使用敏感权限对应API的函数调用链作为特征,对于不依赖于权限和函数,只有指令特征的恶意行为,例如恶意程序自己实现的加解密功能等行为,无法构建有效的特征进行检测。 

中国专利文献号CN102819697A公开(公告)日2012.12.12,公开了一种基于线程反编 译的多平台恶意代码检测方法包括:通过特征提取获取恶意指令序列;依次检测系统中的线程信息,识别线程起始数据的指令集,并根据不同指令集对每个线程起始数据进行反编译得到线程的执行指令序列;将所述线程的执行指令序列与所述恶意指令序列进行完全匹配,当匹配成功则该所述线程为恶意线程。但该技术需要对指令序列进行完全匹配,因此如果恶意程序在不影响功能的情况下对指令进行微小变换则很容易逃避检测,Android平台上同一家族的恶意程序通常有很多变种,该方案很难检测出变种的恶意程序。另外,该技术仅能检测以线程为单位的恶意线程,无法根据功能性完整检测程序中执行恶意行为的代码片段和模块。 

综上所述,现阶段尚缺少一种能够检测Android平台的重打包恶意程序,一般如:利用Android程序易于反编译的特点,对正常和流行的程序解包后,加入后台执行,用户不可见的窃取用户隐私、执行恶意扣费、或进行欺诈和欺骗行为的恶意代码功能模块,再重新打包放入市场诱使用户下载的恶意程序。此类恶意程序的特点是通常具有两个相对独立的功能模块:具有原程序的正常功能模块,以及后台执行恶意行为的功能模块。 

发明内容

本发明针对现有技术存在的上述不足,提出一种对Android重打包恶意软件的恶意代码的检测、切除和恢复的方法,主要针对当前Android平台日益严重的恶意程序使用的重打包植入恶意代码这一最主要传播特征,检测和切除那些正常程序中植入的恶意代码部分。 

本发明是通过以下技术方案实现的,本发明通过对已知恶意程序的恶意入口点类建立由模糊哈希值构成的特征库,用于与反汇编后的待检测程序的入口点类进行匹配;然后依次切除被重打包加入的完整的恶意代码片段以及恶意代码的资源文件,最后找出重打包过程中对原程序实施修改的代码片段,恢复其原有功能。 

所述的入口点类是指:Android应用程序有五种数据类型的入口点,分别是Activity(活动界面)、Receiver(广播接收者)、Service(服务)、Provider(内容提供者)以及Application(应用程序);所有继承自这五种类型的对象即为入口点类。每个程序都有至少一个或数个入口点类,其中只有一个为主入口点。 

所述的模糊哈希是指:根据程序的控制流图,对控制流图中每个程序基本块的指令操作码(opcode)部分而非整条指令做哈希,所以一个入口点类的每个基本块都对应于一个模糊哈希值。 

所述的匹配是指:根据模糊哈希的方法,对入口点类的每个程序块做操作码哈希,当该入口点类与特征库中的某个恶意入口点类相等的操作码哈希比例超过预设阈值,则认为两者匹配成功,该入口点类认为是恶意入口点类。 

所述的切除是指: 

1)将匹配后的恶意入口点类列入恶意代码类集合,通过迭代方法检测该恶意代码类调用的其他类实现的方法并进一步归为恶意代码类,直至恶意代码类集合不再扩大完成迭代;删除程序中出现在该恶意代码类的集合中的类。 

2)搜索对资源文件在代码中的引用,当对该资源文件的引用仅出现在被删除的类中时,将该资源文件判定属于被重打包注入的恶意代码整体并删除,否则保留该资源文件。 

所述的恢复是指:1)当删除的类中有主入口点类,则通过搜索该被删除的主入口点类,将程序主入口点修改为该类调用的第一个非恶意类中的入口点实现主入口点类恢复;2)当被删除的恶意类是现有剩余类的父类,则从该剩余类开始沿继承关系向上搜索父类,将第一个非恶意类恢复成该类的父类。3)当删除恶意类后剩余的类中搜索到对被删除类的方法调用或成员引用,则从搜索到的指令开始向下寻找与该指令涉及的数据有依赖关系的指令并删除,否则视为恶意代码并未修改原程序无需切除。 

技术效果 

与现有技术相比,本发明是首个针对Android平台重打包恶意程序的代码检测和切除方案。基于Android程序入口点类的模糊哈希利用了恶意代码植入需要保证自身行为触发需要修改或替换原程序的入口点类的特点,且模糊哈希用来检测相似性可以在相对较小的特征库的基础上,更大范围地检测已知恶意家族的不同恶意程序,同时能在一定程度上抵抗已知恶意家族的变种和变化。以类为单位构造的方法调用图和以指令为单位的程序依赖关系图进行切除和检测,是使用了相对保守的切除策略以最大程序保证切除后的程序能够正常运行。 

具体实施方式

下面对本发明的实施例作详细说明,本实施例在以本发明技术方案为前提下进行实施,给出了详细的实施方式和具体的操作过程,但本发明的保护范围不限于下述的实施例。 

实施例1 

本实施例具体步骤如下: 

1)对已知的恶意程序的恶意入口点类建立由模糊哈希值构成的特征库,具体是指:利用反汇编技术,提取底层指令形式的恶意代码片段。对于Android应用程序,可以通过对可执行文件dex的反汇编得到Dalvik虚拟机的指令,当一个入口点类被认为是恶意程序重打包加的,则这个类的指令模糊哈希作为特征。 

所述的特征库使用指令的模糊哈希,将该类的指令根据程序控制流图分成单独的基本块,对每一块中指令的操作码部分的序列做一个哈希值,只对指令操作码的哈希能够一定程度上防 止基于操作数变化的指令混淆或字符串混淆。 

2)对待检测程序同样反汇编,提取其入口点类,构建模糊哈希,与恶意入口点特征库比较,当匹配成功,则将该入口点类判定为恶意入口点类并执行步骤3,否则跳过。 

3)将匹配后的恶意入口点类列入恶意代码类集合,当恶意代码类调用了其他类实现的方法,则该类也被归为恶意代码类中,使用该方法直到恶意代码类集合不再扩大。该恶意代码类的集合被认为是重打包植入的恶意代码,因此删除程序中出现在该集合中的类。 

4)搜索对资源文件在代码中的引用,当对该资源文件的引用仅出现在被删除的类中时,则能证明该资源文件属于被重打包植入的恶意代码整体的一部分,一并删除,否则,保留之。 

5)对正常代码片段修复:当删除的类中有主入口点类,则通过搜索该被删除的主入口点类,将程序主入口点修改为该类调用的第一个非恶意类中的入口点实现主入口点类恢复;当被删除的恶意类是现有剩余类的父类,则从该剩余类开始沿继承关系向上搜索父类,将第一个非恶意类恢复成该类的父类;当删除恶意类后剩余的类中搜索到对被删除类的方法调用或成员引用,则从搜索到的指令开始向下寻找与该指令涉及的数据有依赖关系的指令并删除,否则视为恶意代码并未修改原程序无需切除。 

本实施例通过以下方式验证恶意代码检测和切除的有效性:从两方面验证,切除后的应用可运行,以及无恶意行为。重新打包安装应用使其运行并观察系统日志里对该应用是否有崩溃信息输出。把该切除后的应用程序使用杀毒软件检测,来判断拥有恶意行为的代码是否被切除成功。 

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号