CN104091121B - 对Android重打包恶意软件的恶意代码的检测、切除和恢复的方法 - Google Patents
对Android重打包恶意软件的恶意代码的检测、切除和恢复的方法 Download PDFInfo
- Publication number
- CN104091121B CN104091121B CN201410261034.6A CN201410261034A CN104091121B CN 104091121 B CN104091121 B CN 104091121B CN 201410261034 A CN201410261034 A CN 201410261034A CN 104091121 B CN104091121 B CN 104091121B
- Authority
- CN
- China
- Prior art keywords
- class
- code
- program
- malicious
- entrance
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
- G06F21/563—Static detection by source code analysis
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Virology (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
一种对Android重打包恶意软件的恶意代码的检测、切除和恢复的方法,通过对已知恶意程序的恶意入口点类建立由模糊哈希值构成的特征库,用于与反汇编后的待检测程序的入口点类进行匹配;然后依次切除被重打包加入的完整的恶意代码片段以及恶意代码的资源文件,最后找出重打包过程中对原程序实施修改的代码片段,恢复其原有功能。本发明针对当前Android平台日益严重的恶意程序使用的重打包植入恶意代码这一最主要传播特征,检测和切除那些正常程序中植入的恶意代码部分。
Description
技术领域
本发明涉及的是一种移动通信设备领域的方法,具体是一种对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)对正常代码片段修复:当删除的类中有主入口点类,则通过搜索该被删除的主入口点类,将程序主入口点修改为该类调用的第一个非恶意类中的入口点实现主入口点类恢复;当被删除的恶意类是现有剩余类的父类,则从该剩余类开始沿继承关系向上搜索父类,将第一个非恶意类恢复成该类的父类;当删除恶意类后剩余的类中搜索到对被删除类的方法调用或成员引用,则从搜索到的指令开始向下寻找与该指令涉及的数据有依赖关系的指令并删除,否则视为恶意代码并未修改原程序无需切除。
本实施例通过以下方式验证恶意代码检测和切除的有效性:从两方面验证,切除后的应用可运行,以及无恶意行为。重新打包安装应用使其运行并观察系统日志里对该应用是否有崩溃信息输出。把该切除后的应用程序使用杀毒软件检测,来判断拥有恶意行为的代码是否被切除成功。
Claims (1)
1.一种对Android重打包恶意软件的恶意代码的检测、切除和恢复的方法,其特征在于,通过对已知恶意程序的恶意入口点类建立由模糊哈希值构成的特征库,用于与反汇编后的待检测程序的入口点类进行匹配;然后依次切除被重打包加入的完整的恶意代码片段以及恶意代码的资源文件,最后找出重打包过程中对原程序实施修改的代码片段,恢复其原有功能;
所述的入口点类是指:Android应用程序的数据类型的入口点,包括:Activity、Receiver、Service、Provider以及Application;继承自这五种类型的对象即为入口点类;
所述的切除被重打包加入的完整的恶意代码片段以及恶意代码的资源文件是指:
1)将匹配后的恶意入口点类列入恶意代码类集合,通过迭代方法检测该恶意代码类调用的其他类实现的方法并进一步归为恶意代码类,直至恶意代码类集合不再扩大完成迭代;删除程序中出现在该恶意代码类的集合中的类;
2)搜索对资源文件在代码中的引用,当对该资源文件的引用仅出现在被删除的类中时,将该资源文件判定属于被重打包注入的恶意代码整体并删除,否则保留该资源文件;
所述的恢复是指:1)当删除的类中有主入口点类,则通过搜索该被删除的主入口点类,将程序主入口点修改为该类调用的第一个非恶意类中的入口点实现主入口点类恢复;2)当被删除的恶意类是现有剩余类的父类,则从该剩余类开始沿继承关系向上搜索父类,将第一个非恶意类恢复成该类的父类; 3)当删除恶意类后剩余的类中搜索到对被删除类的方法调用或成员引用,则从搜索到的指令开始向下寻找与该指令涉及的数据有依赖关系的指令并删除,否则视为恶意代码并未修改原程序无需切除;
所述的模糊哈希是指:根据程序的控制流图,对控制流图中每个程序基本块的指令操作码部分而非整条指令做哈希,所以一个入口点类的每个基本块都对应于一个模糊哈希值;
所述的匹配是指:根据模糊哈希的方法,对入口点类的每个程序块做操作码哈希,当该入口点类与特征库中的某个恶意入口点类相等的操作码哈希比例超过预设阈值,则认为两者匹配成功,该入口点类认为是恶意入口点类。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410261034.6A CN104091121B (zh) | 2014-06-12 | 2014-06-12 | 对Android重打包恶意软件的恶意代码的检测、切除和恢复的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410261034.6A CN104091121B (zh) | 2014-06-12 | 2014-06-12 | 对Android重打包恶意软件的恶意代码的检测、切除和恢复的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104091121A CN104091121A (zh) | 2014-10-08 |
CN104091121B true CN104091121B (zh) | 2017-07-18 |
Family
ID=51638836
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410261034.6A Active CN104091121B (zh) | 2014-06-12 | 2014-06-12 | 对Android重打包恶意软件的恶意代码的检测、切除和恢复的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104091121B (zh) |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104504333B (zh) * | 2014-11-25 | 2018-03-06 | 武汉安天信息技术有限责任公司 | Elf文件中的恶意代码检测方法及装置 |
CN105488394B (zh) * | 2014-12-27 | 2018-06-12 | 哈尔滨安天科技股份有限公司 | 一种面向蜜罐系统进行入侵行为识别和分类的方法及系统 |
CN104778409B (zh) * | 2015-04-16 | 2018-01-12 | 电子科技大学 | 一种Android应用软件相似性的检测方法及装置 |
CN104837159B (zh) * | 2015-05-11 | 2018-01-30 | 上海交通大学 | Android平台OAuth协议误用安全检测方法 |
CN105975814B (zh) * | 2015-08-28 | 2019-06-07 | 武汉安天信息技术有限责任公司 | 一种检测重打包的方法及系统 |
CN107315951B (zh) * | 2016-04-26 | 2021-04-30 | 腾讯科技(深圳)有限公司 | 一种程序安装包反拦截方法及装置 |
CN108108615A (zh) * | 2016-11-24 | 2018-06-01 | 阿里巴巴集团控股有限公司 | 应用检测方法、装置及检测设备 |
CN106709350B (zh) * | 2016-12-30 | 2020-01-14 | 腾讯科技(深圳)有限公司 | 一种病毒检测方法及装置 |
CN106951780B (zh) * | 2017-02-08 | 2019-09-10 | 中国科学院信息工程研究所 | 重打包恶意应用的静态检测方法和装置 |
CN107122663B (zh) * | 2017-04-28 | 2021-04-02 | 北京梆梆安全科技有限公司 | 一种注入攻击检测方法及装置 |
CN109977668B (zh) * | 2017-12-27 | 2021-05-04 | 哈尔滨安天科技集团股份有限公司 | 恶意代码的查询方法及系统 |
CN108280348B (zh) * | 2018-01-09 | 2021-06-22 | 上海大学 | 基于rgb图像映射的安卓恶意软件识别方法 |
CN109858249B (zh) * | 2019-02-18 | 2020-08-07 | 暨南大学 | 移动恶意软件大数据的快速智能比对和安全检测方法 |
CN110175045A (zh) * | 2019-05-20 | 2019-08-27 | 北京邮电大学 | 安卓应用程序重打包数据处理方法及装置 |
CN110377499B (zh) * | 2019-06-06 | 2023-05-23 | 奇安信科技集团股份有限公司 | 一种对应用程序进行测试的方法及装置 |
CN114329468B (zh) * | 2021-12-24 | 2024-03-29 | 浙江工业大学 | 一种基于映射关系的对抗性Android恶意软件检测方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102819697A (zh) * | 2011-12-26 | 2012-12-12 | 哈尔滨安天科技股份有限公司 | 一种基于线程反编译的多平台恶意代码检测方法和系统 |
CN103440459A (zh) * | 2013-09-25 | 2013-12-11 | 西安交通大学 | 一种基于函数调用的Android恶意代码检测方法 |
CN103679013A (zh) * | 2012-09-03 | 2014-03-26 | 腾讯科技(深圳)有限公司 | 系统恶意程序检测方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5458184B2 (ja) * | 2009-10-08 | 2014-04-02 | イルデト カナダ コーポレーション | 動的ファンクションコールシステムにおけるアグレッシブな自動修正のためのシステムおよび方法 |
-
2014
- 2014-06-12 CN CN201410261034.6A patent/CN104091121B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102819697A (zh) * | 2011-12-26 | 2012-12-12 | 哈尔滨安天科技股份有限公司 | 一种基于线程反编译的多平台恶意代码检测方法和系统 |
CN103679013A (zh) * | 2012-09-03 | 2014-03-26 | 腾讯科技(深圳)有限公司 | 系统恶意程序检测方法及装置 |
CN103440459A (zh) * | 2013-09-25 | 2013-12-11 | 西安交通大学 | 一种基于函数调用的Android恶意代码检测方法 |
Also Published As
Publication number | Publication date |
---|---|
CN104091121A (zh) | 2014-10-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104091121B (zh) | 对Android重打包恶意软件的恶意代码的检测、切除和恢复的方法 | |
Zhang et al. | Semantics-aware android malware classification using weighted contextual api dependency graphs | |
Corina et al. | Difuze: Interface aware fuzzing for kernel drivers | |
CN105989283B (zh) | 一种识别病毒变种的方法及装置 | |
Wang et al. | Rmvdroid: towards a reliable android malware dataset with app metadata | |
CN101924761B (zh) | 一种依据白名单进行恶意程序检测的方法 | |
CN104598824B (zh) | 一种恶意程序检测方法及其装置 | |
CN101924762B (zh) | 一种基于云安全的主动防御方法 | |
Devesa et al. | Automatic behaviour-based analysis and classification system for malware detection | |
Singhal et al. | Malware detection module using machine learning algorithms to assist in centralized security in enterprise networks | |
CN105138916B (zh) | 基于数据挖掘的多轨迹恶意程序特征检测方法 | |
Shabtai et al. | F-sign: Automatic, function-based signature generation for malware | |
Berthome et al. | Repackaging android applications for auditing access to private data | |
CN109992968A (zh) | 基于二进制动态插桩的Android恶意行为动态检测方法 | |
CN101685483B (zh) | 一种病毒特征码提取的方法和装置 | |
CN107122659A (zh) | 一种快速定位Android应用软件中恶意代码或漏洞的方法 | |
Prakash et al. | On the trustworthiness of memory analysis—an empirical study from the perspective of binary execution | |
CN105205398A (zh) | 一种基于apk加壳软件动态行为的查壳方法 | |
KR101431192B1 (ko) | 모바일 단말의 루팅 공격 이벤트 검출 방법 | |
CN106034132B (zh) | 保护方法与计算机系统 | |
Zhang et al. | Android malware detection combined with static and dynamic analysis | |
CN103914652B (zh) | 恶意程序控制指令识别方法及装置 | |
CN108171057A (zh) | 基于特征匹配的Android平台恶意软件检测方法 | |
Xu et al. | Security analysis and protection based on smali injection for android applications | |
Cuixia et al. | Ui ripping in android: Reverse engineering of graphical user interfaces and its application |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |