CN105975854B - 一种恶意文件的检测方法和装置 - Google Patents

一种恶意文件的检测方法和装置 Download PDF

Info

Publication number
CN105975854B
CN105975854B CN201610443601.9A CN201610443601A CN105975854B CN 105975854 B CN105975854 B CN 105975854B CN 201610443601 A CN201610443601 A CN 201610443601A CN 105975854 B CN105975854 B CN 105975854B
Authority
CN
China
Prior art keywords
function
file
malicious
detected
data
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
Application number
CN201610443601.9A
Other languages
English (en)
Other versions
CN105975854A (zh
Inventor
程波
侯贺明
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Wuhan Greenet Information Service Co Ltd
Original Assignee
Wuhan Greenet Information Service Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Wuhan Greenet Information Service Co Ltd filed Critical Wuhan Greenet Information Service Co Ltd
Priority to CN201610443601.9A priority Critical patent/CN105975854B/zh
Publication of CN105975854A publication Critical patent/CN105975854A/zh
Application granted granted Critical
Publication of CN105975854B publication Critical patent/CN105975854B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/554Detecting local intrusion or implementing counter-measures involving event detection and direct action

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Storage Device Security (AREA)

Abstract

本发明属于信息安全领域,涉及一种恶意文件的检测方法,所述方法包括:文件反编译步骤,对被检测文件进行反编译,得到底层语言描述的函数数据;数据筛选步骤,对所述函数数据进行筛选,选出样本文件中与用户所写内容所对应的函数数据;数据清洗步骤,对所述与用户所写内容所对应的每个函数进行清洗,去除其中的不稳定字节,得到清洗后的函数数据;比较步骤,将所述被检测文件中的每个用户所写函数与已知的恶意函数和干净函数比较,获取被检测文件中的每个用户所写函数的恶意程度数值;判断步骤,根据被检测文件中的每个用户所写函数的恶意程度数值判断被检测文件的恶意程度。通过上述技术方案,实现把恶意文件的检测粒度降低到函数级别,有利于提高文件恶意性的判定。

Description

一种恶意文件的检测方法和装置
技术领域
本专利属于信息安全领域,具体而言涉及一种恶意文件的检测方法和装置。
背景技术
在信息安全领域,恶意文件检测是非常重要的一环。恶意文件的类型多种多样。例如,包括但不限于Windows***的PE文件、Linux***的ELF文件、MAC***的可执行文件、Android***上的APK文件;还有客户端脚本类文件,如Javascript脚本、VBscript脚本、shell脚本;还有服务端脚本文件,如PHP文件,Python文件,ASP文件等等。为了保证信息安全需要判定出预定文件是否是恶意文件,并采取相应的措施进行处理。
现有技术中对恶意文件的判定方法针对不同的文件类型也不尽然相同。但恶意文件的判定一般有两种方式,一是靠人工判定,需要借助安全人员的经验来对文件进行分析;二是自动化判定,自动化判定方式是使用计算机程序来固化人工的经验,达到机器自动化判定恶意文件的目的。自动化判定技术,本质上是根据已知文件与未知文件之间的关联,来推测出未知文件的属性。这种关联包含了文件内容的相似度比较、文件内容的差异性比较、文件的来源是否相同、以及是文件之间否有同样的签名信息,等等。其中最重要的就是文件内容的相似度比较,因为多数情况下,能够获得的只有文件的内容而没有文件的***关联信息。
随着恶意文件种类和技术的日益增长,现有技术中需要持续地丰富对恶意文件检测的手段,以便于提高信息安全能力。
发明内容
本专利即是基于现有技术中的上述需求而提出的,本专利要解决的技术问题是提供一种恶意文件的检测方法和装置,提高对于恶意文件检测的能力。
为了解决上述问题,本发明提供了如下技术方案:
一种恶意文件的检测方法,所述方法包括:文件反编译步骤,对被检测文件进行反编译,得到底层语言描述的函数数据;数据筛选步骤,对所述函数数据进行筛选,选出样本文件中与用户所写内容所对应的函数数据;数据清洗步骤,对所述与用户所写内容所对应的每个函数进行清洗,去除其中的不稳定字节,得到清洗后的函数数据;比较步骤,将所述被检测文件中的每个用户所写函数与已知的恶意函数和干净函数比较,获取被检测文件中的每个用户所写函数的恶意程度数值;判断步骤,根据被检测文件中的每个用户所写函数的恶意程度数值判断被检测文件的恶意程度。
优选地,所述方法还包括:函数内容摘要计算步骤,针对每个被检测文件中用户所写函数,取所述清洗后的函数数据中预定长度的编码,根据该编码计算得到该函数内容摘要值。
优选地,获取已知的恶意函数和干净函数的方法包括:文件采集步骤,采集样本文件,所述样本文件包含已知的干净文件和恶意文件;文件反编译步骤,分别对每个干净文件和恶意文件进行反编译,得到底层语言描述的函数数据;数据筛选步骤,对所述函数数据进行筛选,选出样本文件中与用户所写内容所对应的函数数据;数据清洗步骤,对所述与用户所写内容所对应的每个函数进行清洗,去除其中的不稳定字节,得到清洗后的函数数据;统计步骤,根据所述清洗后的函数数据统计每个函数在恶意文件和干净文件中出现的次数,根据所述次数得到每个函数的恶意程度数值。
优选地,所述底层语言描述的函数数据为操作码或字节码。
优选地,所述去除其中的不稳定字节包括:对所述不稳定的字节赋予预定的数值,或者将所述不稳定的字节完全删除。
根据本专利的另外一个方面,提供了一种函数恶意程度的检测装置,所述装置包括:文件采集模块,采集样本文件,所述样本文件包含已知的干净文件和恶意文件;文件反编译模块,分别对每个干净文件和恶意文件进行反编译,得到底层语言描述的函数数据;数据筛选模块,对所述函数数据进行筛选,选出样本文件中与用户所写内容所对应的函数数据;数据清洗模块,对所述与用户所写内容所对应的每个函数进行清洗,去除其中的不稳定字节,得到清洗后的函数数据;统计模块,根据所述清洗后的函数数据统计每个函数在恶意文件和干净文件中出现的次数,根据所述次数得到每个函数的恶意程度数值。
优选地,所述装置还包括:函数内容摘要计算模块,针对每个函数,取所述清洗后的函数数据中预定长度的编码,根据该编码计算得到该函数内容摘要值;
优选地,所述装置还包括已知恶意函数和干净函数恶意程度判断模块,所述已知恶意函数和干净函数恶意程度判断模块包括:文件采集子模块,采集样本文件,所述样本文件包含已知的干净文件和恶意文件;文件反编译子模块,分别对每个干净文件和恶意文件进行反编译,得到底层语言描述的函数数据;数据筛选子模块,对所述函数数据进行筛选,选出样本文件中与用户所写内容所对应的函数数据;数据清洗子模块,对所述与用户所写内容所对应的每个函数进行清洗,去除其中的不稳定字节,得到清洗后的函数数据;统计子模块,根据所述清洗后的函数数据统计每个函数在恶意文件和干净文件中出现的次数,根据所述次数得到每个函数的恶意程度数值。
优选地,所述底层语言描述的函数数据为操作码或字节码。
优选地,所述去除其中的不稳定字节包括:对所述不稳定的字节赋予预定的数值,或者将所述不稳定的字节完全删除。
本专利通过上述技术方案,实现了对文件中对于单个函数恶意程度的判断从而判断整个文件的恶意程度。把文件的检测粒度降低到用户所写的函数的级别,丰富了对于恶意文件判断的手段,从而有利于提高文件恶意性的判定能力。
附图说明
图1是本专利具体实施方式中提供的一种恶意文件的检测方法的流程图。
图2是本专利具体实施方式中提供的一种已知函数恶意程度判断的方法流程图。
图3是本专利具体实施方式中提供的一种恶意文件的检测装置的结构图。
图4是本专利具体实施方式中提供的一种已知函数恶意程度判断的装置的结构图。
具体实施方式
下面结合附图对本专利的具体实施方式进行说明。需要指出的是,本具体实施方式仅仅是对本专利优选技术方案的举例,并不能理解为对本专利保护范围的限制。
实施例一
本实施例一提供了一种恶意文件的检测方法。通过该方法检测计算机文件的恶意性。
本实施例一中所指的恶意文件是指能够在计算机***或者其他智能***运行并进行恶意操作的文件。其中所述计算机***并不仅限于个人电脑或者是服务器,还包括其他利用计算机工作的***;其他智能***包括但不限于手机操作***、可穿戴设备操作***以及智能机器人操作***等。
图1示出了本实施例中恶意文件检测方法的流程。在该方法中包括如下步骤:
步骤001文件反编译,对被检测文件进行反编译,得到底层语言描述的函数数据。
对于被检测文件是否是恶意文件的检测技术,在现有技术中有广泛的记载,例如采用分析代码的方法,或者是采用黑名单、白名单的方法等等。
在本实施例中,提供了一种基于被检测文件中的函数进行分析的方法。在本实施例的方法中,首先需要分析出被检测文件中的函数,因而在本实施例中首先对于被检测文件进行反编译,以获取所述被检测文件中的函数的信息。
在步骤001中对预定的被检测文件进行反编译,以获得采用底层语言描述的所述被检测文件的函数数据。将每个被检测文件所得到的反编译结果单独存储。
反编译可以采用现有技术中的反编译工具来实现,例如采用现有技术中的编译工具IDA来实现,当然也可以采用现有技术中的其它反编译方法来实现,以将每个被检测文件编译得到各自的底层语言描述的函数数据。
所述底层语言例如是一种使用十六进制字符描述的序列。例如样本文件是EXE文件,则将其反编译成汇编语言描述的函数数据包,如果样本是APK文件,则将其反编译成Smali语言描述的函数数据包。所述汇编语言和所述Samli语言都是使用十六进制的字节来描述的序列。所述汇编语言描述的函数数据也可以叫做操作码,其它的底层语言描述的函数数据通常称为字节码。
将所述被检测文件反编译成上述底层语言描述的内容,是因为绝大部分的计算机文件都可以反编译成上述底层语言,并且反编译成上述底层语言能够更加真实地反应所述文件的内容。从而提高了对文件分析的适用范围和准确性。
步骤002,对所述函数数据进行筛选,得到与样本软件中由用户所写内容所对应的函数数据。
在步骤002中的所述筛选包括对步骤001得到的底层语言所描述的函数进行筛选。
所述筛选可以包括去除汇编语言级别的库函数、以及在反编译过程中由编译器自动生成的函数。因为,通常恶意的指令都是由特定的用户所施加的,库函数和编译工具生成的函数通常都不会带来恶意指令,也就是说通常文件中的恶意指令的特征信息都是基于用户自行编写完成的,因而仅仅保留与用户所写内容对应的函数就足以保留与文件是否恶意相关的特征,去掉其他函数可以避免带来噪音影响判断。
识别用户所写的内容以及库函数和编译工具生成的函数,可以通过现有技术来实现,通常现有技术中对于库函数和编译器自动生成的函数都有明确的记录,因而将这些函数直接去掉即可。例如,当采用IDA反编译工具反编译时,可以调用IDA反编译工具提供的API来实现这些筛选,当然依据与之类似的规则,也可以在反编译库中实现上述筛选。
筛选过库函数和编译器生成的函数的数据,后通常仅剩下与用户所写内容对应的函数。当然如果在反编译得到的函数数据中存在其它与用户所写内容无关的函数也可以去除。
步骤003,对每个与用户所写内容所对应的函数进行清洗,去除其中不稳定字节,得到清洗后的函数数据。
如上所述,每一个函数在反编译完成后的数据内容是一段16进制的字节序列。在该字节序列中的某些字节是在每次编译之后有可能是不一样的,例如,其中有些字节的值是某个字符串的偏移地址,由于字符串的位置在每次编译后有可能是不一样的,这样就导致了所述偏移地址也不一样,从而相应的字节内容也会产生变化,这些易于产生变化的字节即为不稳定字节,或者称之为易变字节。
通常不稳定字节包括在如下类型的字节中:例如,在采用汇编语言进行反编译中,包括但不限于,字符串引用的字节68 XX XX XX XX,调用API函数FF 15XX XX XX XX,调用内部函数E8 XX XX XX XX等类型。其中的XX XX XX XX即为易变字节。
由此可见,函数中如果引用了某些字符串或者其它资源,在进行反编译后,操作码中会含有相对地址,这种相对地址,在重新编译后有可能是变化的,所以导致函数的内容也发生了变化。因而对于不稳定字节的清洗,可以去除这种易变字节带来的影响。
对于这些字节进行清洗,可以采取把这些字节重置为预定的数值、包括但不限于0;或者完全去掉等方法。
例如,一个函数经过反编译后可以得到如下操作内容:
text:00401828 55
text:00401829 8B EC
text:0040182B 83 EC 20
text:0040182E 6A 64
text:00401830 68 80 E1 40 00
text:00401835 6A 67F
text:00401837 FF 75 08
text:0040183A FF 15 50 91 40 00
text:00401840 6A 64
text:00401842 68 E8 E1 40 00
text:00401847 6A 6D
text:00401849 FF 75 08
text:0040184C FF 15 50 91 40 40
text:00401852 FF 75 08
text:00401855 E8 53 F9 FF FF
text:0040185A 59
text:0040185B 8B 45 08
text:0040185E A3 A3 D1 40 00
text:00401863 FF 75 14
text:00401866 FF 75 08
text:00401869 E8 E9 0F 00 00
text:0040186E 59
text:0040186F 59
text:00401870 85 C0
其中,
558B EC 83 EC 20 6A 64 68 80 E1 40 00 6A 67 FF
75 08 FF 15 50 91 40 00 6A 64 68 E8 E1 40 00 6A
6D FF 75 08 FF 15 50 91 40 00 FF 75 08 E8 53 F9
FF FF 59 8B 45 08 A3 A3 D1 40 00 FF 75 14 FF 75
08 E8 E9 0F 00 00 59 59 85 C0
即为得到的操作码。然后进行清洗操作,例如,对其中前64个字节进行清洗操作,其结果为:
55 8B EC 83 EC 20 6A 64 68 00 00 00 00 6A 67 FF
75 08 FF 15 00 00 00 00 6A 64 68 00 00 00 00 6A
6D FF 75 08 FF 15 00 00 00 00 FF 75 08 E8 00 00
00 00 59 8B 45 08 A3 A3 D1 40 00 FF 75 14 FF 75
其中依照前述的规则判断的不稳定字节80 E1 40 00、50 91 40 00、E8 E1 4000、50 91 40 00、53 F9 FF FF、均进行归零操作,从而实现清洗。
步骤004,取每个函数的清洗后的函数数据中预定长度的编码,计算得到该函数内容摘要值。
经过清洗后的函数即表示为一个特定内容和顺序的编码,这个编码可以通过计算其预定长度数值所得到的内容摘要来表示。所述内容摘要即成为该函数的“指纹”,可以用于识别该函数。
所述预定长度可以是该函数编码的前N字节(例如64字节或者128字节),也可以是全部字节或者是在所述编码中节选的部分字节。计算所述内容摘要的算法可以是哈希算法,所述内容摘要即为计算出来的哈希值。计算得到函数数据包中每个函数预定长度的汇编码的哈希值,以表示被检测文件中用户所写的函数。
例如,在如上所举的例子中,采用SHA256算法计算前64字节的哈希值:
SHA256
(558BEC83EC206A6468000000006A67FF7508FF15000000006A6468000000006A6DFF7508FF1500000000FF7508E800000000598B4508A3A3D14000FF7514FF75)=324b5e91805e6fe493919f8b3e971972942e14835470a02ae8f0fb5b97cd393b
最终的SHA256的值:324b5e91805e6fe493919f8b3e971972942e14835470a02ae8f0fb5b97cd393b就用来表示这个函数。
步骤005比较步骤,将所述被检测文件中的每个用户所写函数与已知的恶意函数和干净函数比较,获取被检测文件中的每个用户所写函数的恶意程度数值。
在本步骤中,所述被检测文件中的每个用户所写的函数经过清洗和计算内容摘要之后与预先存储的干净/恶意函数数据库中的恶意函数和干净函数进行查找比较。所述干净/恶意函数数据库中不仅存储有干净函数或者恶意函数的内容,还存储有每一个干净函数和恶意函数的恶意程度数值,优选地还可以包括该函数恶意程度数值的权重。例如,已经确认安全的可信赖厂商的操作***文件中的用户编写的干净函数可以定义为恶意程度数值为0,而已经确认的恶意文件中的用户编写的恶意函数可以定义为恶意程度为100。而如果某一用户编写的函数即在已知的干净文件中出现过,又在已知的恶意文件中出现过则可以将其恶意程度依据在相关恶意文件和干净文件中出现的频率定义为大于0小于100的数值。当然上述举例仅仅是给出了其中一种赋值的方法,在本实施例中,采用不同的数值例如-100~100,或者是采用小数的表示方法,或者是基于恶意函数和干净函数的其它属性来定义相关数值都是本领域技术人员容易想到和替代的方法。
所述干净/恶意函数数据库可以通过如下举例的方式来建立。需要指出的是,虽然下述方法是一个优选的技术方案,但是本领域技术人员采用其它方法只要能够建立一个关于函数恶意程度判断的查找表,即能够在一定程度上实现本实施例中的技术方案。而下述的举例,仅仅是一个优选的技术方案而已。
如图2所示,建立所述干净/恶意函数数据库的方法包括:
S501,采集已知的干净文件和恶意文件。
在S501中,可以采集大量的干净文件和恶意文件;这种采集可以是一次性的,但是更为优选的是不断地运行本方法中的S501-S506,从而持续不断地采集各种已知的干净文件和恶意文件。所述干净文件和恶意文件样本是已经确认过的文件,即根据已有信息就能够准确判断该文件是安全还是恶意的文件。在本实施例中的所述恶意文件是指所有会产生危害的软件,包括但不限于“病毒”、“蠕虫病毒”、木马程序、恶意间谍软件、非允许的广告软件和勒索软件等。所述干净文件与恶意文件相对,是指不会对***安全或信息安全产生危害的软件。例如,所述干净文件样本可以选取具有安全信誉的公司签名的文件,例如经过微软签名的文件等,也可以是基于各种渠道获取的确认安全的文件。恶意文件样本可以选取各种已经确认的恶意文件,例如包括但不限于经过杀毒软件公司核实过的恶意文件样本。
在本步骤中,采集的软件样本数量可以是多个,甚至是数量巨大的。比如采集尽可能多的能获取到的干净文件和恶意文件。当采集软件的数量越多,则基于统计的分析越准确。
S502,分别对每个干净文件和恶意文件,进行反编译,得到底层语言描述汇编语言的函数数据。
在S502中对获取的文件进行反编译,既包括对所述干净文件进行反编译也包括对所述恶意文件进行反编译。每个文件得到的反编译结果单独存储。其反编译过程可以参考实施例一中的步骤001来实现,可以采用和步骤001类似的方法,因而在本部分不再详细描述。
S503,对所述函数数据进行筛选,得到与样本软件中由用户所写内容所对应的函数数据。
在S503中对每个采集文件中所述函数数据进行筛选,筛选过库函数和编译器生成的函数的数据后,通常仅剩下与用户所写内容对应的函数。当然如果在反编译得到的函数数据中存在其它与用户所写内容无关的函数也可以去除。其过程可以参考实施例一中的步骤002来实现,可以采用和步骤002类似的方法,因而在本部分不再详细描述。
S504,对每个与用户所写内容所对应的函数进行清洗,去除其中不稳定字节,得到清洗后的函数数据。
所述清洗过程可以参考实施例一中的步骤003来实现,可以采用和步骤003类似的方法,因而在本部分不再详细描述。
S505,计算取每个函数的清洗后的函数数据中预定长度的编码,计算得到该函数内容摘要值。
经过清洗后的函数即表示为一个特定内容和顺序的编码,这个编码可以通过计算其预定长度数值的所得到的内容摘要来表示。所述内容摘要即成为该函数的“指纹”,可以用于识别该函数。其过程可以参考实施例一中的步骤004来实现,可以采用和步骤004类似的方法,因而在本部分不再详细描述。
S506统计每个函数在恶意文件和干净文件中出现的次数,由此得到每个函数的恶意程度数值。
对大量的恶意和干净样本文件反编译,并且提取函数,并对每一个函数出现在恶意文件和干净文件中的次数进行统计。如果该函数出现在恶意文件中,则相应的恶意统计次数递增;反之,如果出现在干净文件中,则相应的干净统计次数递增。根据统计数据,就可以计算得到此函数的恶意程度值。
步骤006判断步骤,根据被检测文件中的每个用户所写函数的恶意程度数值判断被检测文件的恶意程度。
当获取了每个函数的恶意程度数值之后,一种方式是将每个函数的恶意程度数值进行叠加,从而得到整个被检测文件的恶意程度数值。或者是采用其它累积的方式,例如通过对不同类型的函数施加不同的权重再进行累积的方式来得到整个被检测文件的恶意程度数值。
当得到被检测文件的恶意程度数值时,即可根据所述恶意程度数值来判断该函数的恶意程度。
更进一步地,还可以采用阈值的方式对于所述被检测文件的恶意程度进行过滤,例如当被检测文件的恶意程度大于某个数值时则认定该被检测文件为恶意文件,当被检测文件的恶意程度小于某个数值时则认定该被检测文件为安全文件。或者当被检测文件的恶意程度位于某个区间之内时,进行其它方式的恶意程度检测。
实施例二
本实施例二提供了一种函数恶意程度的检测装置。通过该装置检测计算机文件中单个函数的恶意程度和干净程度。
图3示出了本实施例中一种函数恶意程度的检测装置。在装置包括如下模块:
文件反编译模块,对被检测文件进行反编译,得到底层语言描述的函数数据。
对于被检测文件是否是恶意文件的检测技术,在现有技术中有广泛的记载,例如采用分析代码的方法,或者是采用黑名单、白名单的方法等等。
在本实施例中,提供了一种基于被检测文件中的函数进行分析的方法。在本实施例的方法中,首先需要分析出被检测文件中的函数,因而在本实施例中首先对于被检测文件进行反编译,以获取所述被检测文件中的函数的信息。
在本模块中对预定的被检测文件进行反编译,以获得采用底层语言描述的所述被检测文件的函数数据。将每个被检测文件所得到的反编译结果单独存储。
反编译可以采用现有技术中的反编译工具来实现,例如采用现有技术中的编译工具IDA来实现,当然也可以采用现有技术中的其它反编译方法来实现,以将每个被检测文件编译得到各自的底层语言描述的函数数据。
所述底层语言例如是一种使用十六进制字符描述的序列。例如样本文件是EXE文件,则将其反编译成汇编语言描述的函数数据包,如果样本是APK文件,则将其反编译成Smali语言描述的函数数据包。所述汇编语言和所述Samli语言都是使用十六进制的字节来描述的序列。所述汇编语言描述的函数数据也可以叫做操作码,其它的底层语言描述的函数数据通常称为字节码。
将所述被检测文件反编译成上述底层语言描述的内容,是因为绝大部分的计算机文件都可以反编译成上述底层语言,并且反编译成上述底层语言能够更加真实地反应所述文件的内容。从而提高了对文件分析的适用范围和准确性。
数据筛选模块,对所述函数数据进行筛选,得到与样本软件中由用户所写内容所对应的函数数据。
在本模块中的所述筛选包括对反编译模块中得到的底层语言所描述的函数进行筛选。
所述筛选可以包括去除汇编语言级别的库函数、以及在反编译过程中由编译器自动生成的函数。因为,通常恶意的指令都是由特定的用户所施加的,库函数和编译工具生成的函数通常都不会带来恶意指令,也就是说通常文件中的恶意指令的特征信息都是基于用户自行编写完成的,因而仅仅保留与用户所写内容对应的函数就足以保留与文件是否恶意相关的特征,去掉其他函数可以避免带来噪音影响判断。
识别用户所写的内容以及库函数和编译工具生成的函数,可以通过现有技术来实现,通常现有技术中对于库函数和编译器自动生成的函数都有明确的记录,因而将这些函数直接去掉即可。例如,当采用IDA反编译工具反编译时,可以调用IDA反编译工具提供的API来实现这些筛选,当然依据与之类似的规则,也可以在反编译库中实现上述筛选。
筛选过库函数和编译器生成的函数的数据,后通常仅剩下与用户所写内容对应的函数。当然如果在反编译得到的函数数据中存在其它与用户所写内容无关的函数也可以去除。
数据清洗模块,对每个与用户所写内容所对应的函数进行清洗,去除其中不稳定字节,得到清洗后的函数数据。
如上所述,每一个函数在反编译完成后的数据内容是一段16进制的字节序列。在该字节序列中的某些字节是在每次编译之后有可能是不一样的,例如,其中有些字节的值是某个字符串的偏移地址,由于字符串的位置在每次编译后有可能是不一样的,这样就导致了所述偏移地址也不一样,从而相应的字节内容也会产生变化,这些易于产生变化的字节即为不稳定字节,或者称之为易变字节。
通常不稳定字节包括在如下类型的字节中:例如,在采用汇编语言进行反编译中,包括但不限于,字符串引用的字节68 XX XX XX XX,调用API函数FF 15XX XX XX XX,调用内部函数E8 XX XX XX XX等类型。其中的XX XX XX XX即为易变字节。
由此可见,函数中如果引用了某些字符串或者其它资源,在进行反编译后,操作码中会含有相对地址,这种相对地址,在重新编译后有可能是变化的,所以导致函数的内容也发生了变化。因而对于不稳定字节的清洗,可以去除这种易变字节带来的影响。
对于这些字节进行清洗,可以采取把这些字节重置为预定的数值、包括但不限于0;或者完全去掉等方法。
例如,一个函数经过反编译后可以得到如下操作内容:
text:00401828 55
text:00401829 8B EC
text:0040182B 83 EC 20
text:0040182E 6A 64
text:00401830 68 80 E1 40 00
text:00401835 6A 67F
text:00401837 FF 75 08
text:0040183A FF 15 50 91 40 00
text:00401840 6A 64
text:00401842 68 E8 E1 40 00
text:00401847 6A 6D
text:00401849 FF 75 08
text:0040184C FF 15 50 91 40 40
text:00401852 FF 75 08
text:00401855 E8 53 F9 FF FF
text:0040185A 59
text:0040185B 8B 45 08
text:0040185E A3 A3 D1 40 00
text:00401863 FF 75 14
text:00401866 FF 75 08
text:00401869 E8 E9 0F 00 00
text:0040186E 59
text:0040186F 59
text:00401870 85 C0
其中,
55 8B EC 83 EC 20 6A 64 68 80 E1 40 00 6A 67 FF
75 08 FF 15 50 91 40 00 6A 64 68 E8 E1 40 00 6A
6D FF 75 08 FF 15 50 91 40 00 FF 75 08 E8 53 F9
FF FF 59 8B 45 08 A3 A3 D1 40 00 FF 75 14 FF 75
08 E8 E9 0F 00 00 59 59 85 C0
即为得到的操作码。然后进行清洗操作,例如,对其中前64个字节进行清洗操作,其结果为:
55 8B EC 83 EC 20 6A 64 68 00 00 00 00 6A 67 FF
75 08 FF 15 00 00 00 00 6A 64 68 00 00 00 00 6A
6D FF 75 08 FF 15 00 00 00 00 FF 75 08 E8 00 00
00 00 59 8B 45 08 A3 A3 D1 40 00 FF 75 14 FF 75
其中依照前述的规则判断的不稳定字节80 E1 40 00、50 91 40 00、E8 E140 00、50 91 40 00、53 F9 FF FF、均进行归零操作,从而实现清洗。
函数内容摘要计算模块,取每个函数的清洗后的函数数据中预定长度的编码,计算得到该函数内容摘要值。
经过清洗后的函数即表示为一个特定内容和顺序的编码,这个编码可以通过计算其预定长度数值所得到的内容摘要来表示。所述内容摘要即成为该函数的“指纹”,可以用于识别该函数。
所述预定长度可以是该函数编码的前N字节(例如64字节或者128字节),也可以是全部字节或者是在所述编码中节选的部分字节。计算所述内容摘要的算法可以是哈希算法,所述内容摘要即为计算出来的哈希值。计算得到函数数据包中每个函数预定长度的汇编码的哈希值,以表示被检测文件中用户所写的函数。
例如,在如上所举的例子中,采用SHA256算法计算前64字节的哈希值:
SHA256
(558BEC83EC206A6468000000006A67FF7508FF15000000006A6468000000006A6DFF7508FF1500000000FF7508E800000000598B4508A3A3D14000FF7514FF75)=324b5e91805e6fe493919f8b3e971972942e14835470a02ae8f0fb5b97cd393b
最终的SHA256的值:324b5e91805e6fe493919f8b3e971972942e14835470a02ae8f0fb5b97cd393b就用来表示这个函数。
比较模块,将所述被检测文件中的每个用户所写函数与已知的恶意函数和干净函数比较,获取被检测文件中的每个用户所写函数的恶意程度数值。
在本模块中,所述被检测文件中的每个用户所写的函数经过清洗和计算内容摘要之后与预先存储的干净/恶意函数数据库中的恶意函数和干净函数进行查找比较。所述干净/恶意函数数据库中不仅存储有干净函数或者恶意函数的内容,还存储有每一个干净函数和恶意函数的恶意程度数值,优选地还可以包括该函数恶意程度数值的权重。例如,已经确认安全的可信赖厂商的操作***文件中的用户编写的干净函数可以定义为恶意程度数值为0,而已经确认的恶意文件中的用户编写的恶意函数可以定义为恶意程度为100。而如果某一用户编写的函数即在已知的干净文件中出现过,又在已知的恶意文件中出现过则可以将其恶意程度依据在相关恶意文件和干净文件中出现的频率定义为大于0小于100的数值。当然上述举例仅仅是给出了其中一种赋值的方法,在本实施例中,采用不同的数值例如-100~100,或者是采用小数的表示方法,或者是基于恶意函数和干净函数的其它属性来定义相关数值都是本领域技术人员容易想到和替代的方法。
所述干净/恶意函数数据库可以通过如下举例的方式来建立。需要指出的是,虽然下述方法是一个优选的技术方案,但是本领域技术人员采用其它方法只要能够建立一个关于函数恶意程度判断的查找表,即能够在一定程度上实现本实施例中的技术方案。而下述的举例,仅仅是一个优选的技术方案而已。
建立所述干净/恶意函数数据库的方法可以采用实施例一中的S501-S506中记载的方法来建立,当然该数据库也可以包括与所述步骤S501-S506相对应的相关模块,其结构如图4所示。
判断模块,根据被检测文件中的每个用户所写函数的恶意程度数值判断被检测文件的恶意程度。
当获取了每个函数的恶意程度数值之后,一种方式是将每个函数的恶意程度数值进行叠加,从而得到整个被检测文件的恶意程度数值。或者是采用其它累积的方式,例如通过对不同类型的函数施加不同的权重再进行累积的方式来得到整个被检测文件的恶意程度数值。
当得到被检测文件的恶意程度数值时,即可根据所述恶意程度数值来判断该函数的恶意程度。
更进一步地,还可以采用阈值的方式对于所述被检测文件的恶意程度进行过滤,例如当被检测文件的恶意程度大于某个数值时则认定该被检测文件为恶意文件,当被检测文件的恶意程度小于某个数值时则认定该被检测文件为安全文件。或者当被检测文件的恶意程度位于某个区间之内时,进行其它方式的恶意程度检测。
本领域内的技术人员应明白,本发明的实施例可提供为方法、装置、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(装置)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

Claims (6)

1.一种恶意文件的检测方法,其特征在于,所述方法包括:
文件反编译步骤,对被检测文件进行反编译,得到底层语言描述的函数数据;
数据筛选步骤,对所述函数数据进行筛选,选出样本文件中与用户所写内容所对应的函数数据;
数据清洗步骤,对所述与用户所写内容所对应的每个函数进行清洗,去除其中的不稳定字节,得到清洗后的函数数据;
比较步骤,将所述被检测文件中的每个用户所写函数与已知的恶意函数和干净函数比较,获取被检测文件中的每个用户所写函数的恶意程度数值;获取已知的恶意函数和干净函数的方法包括:文件采集步骤,采集样本文件,所述样本文件包含已知的干净文件和恶意文件;文件反编译步骤,分别对每个干净文件和恶意文件进行反编译,得到底层语言描述的函数数据;统计步骤,根据所述清洗后的函数数据统计每个函数在恶意文件和干净文件中出现的次数,由所述次数得到每个函数的恶意程度数值;
判断步骤,根据被检测文件中的每个用户所写函数的恶意程度数值判断被检测文件的恶意程度;当获取了每个函数的恶意程度数值之后,将每个函数的恶意程度数值进行叠加,从而得到整个被检测文件的恶意程度数值;然后采用阈值的方式对于所述被检测文件的恶意程度进行过滤,当被检测文件的恶意程度数值大于阈值时则认定该被检测文件为恶意文件,当被检测文件的恶意程度小于阈值时则认定该被检测文件为安全文件;或者当被检测文件的恶意程度位于阈值区间之内时,进行其它方式的恶意程度检测。
2.根据权利要求1所述的一种恶意文件的检测方法,其特征在于,所述方法还包括:
函数内容摘要计算步骤,针对每个被检测文件中用户所写函数,取所述清洗后的函数数据中预定长度的编码,根据该编码计算得到该函数内容摘要值。
3.根据权利要求2所述的恶意文件的检测方法,其特征在于,
所述底层语言描述的函数数据为操作码或字节码。
4.根据权利要求3所述的恶意文件的检测方法,其特征在于,
所述去除其中的不稳定字节包括:对所述不稳定字节赋予预定的数值,或者将所述不稳定字节完全删除。
5.一种恶意文件的检测装置,其特征在于,所述装置包括:
文件反编译模块,对被检测文件进行反编译,得到底层语言描述的函数数据;
数据筛选模块,对所述函数数据进行筛选,选出样本文件中与用户所写内容所对应的函数数据;
数据清洗模块,对所述与用户所写内容所对应的每个函数进行清洗,去除其中的不稳定字节,得到清洗后的函数数据;
比较模块,将所述被检测文件中的每个用户所写函数与已知的恶意函数和干净函数模块比较,获取被检测文件中的每个用户所写函数的恶意程度数值;所述已知恶意函数和干净函数恶意程度判断模块包括:文件采集子模块,采集样本文件,所述样本文件包含已知的干净文件和恶意文件;文件反编译子模块,分别对每个干净文件和恶意文件进行反编译,得到底层语言描述的函数数据;数据筛选子模块,对所述函数数据进行筛选,选出样本文件中与用户所写内容所对应的函数数据;数据清洗子模块,对所述与用户所写内容所对应的每个函数进行清洗,去除其中的不稳定字节,得到清洗后的函数数据;
统计子模块,根据所述清洗后的函数数据统计每个函数在恶意文件和干净文件中出现的次数,由所述次数得到每个函数的恶意程度数值;
判断模块,根据被检测文件中的每个用户所写函数的恶意程度数值判断被检测文件的恶意程度;当获取了每个函数的恶意程度数值之后,将每个函数的恶意程度数值进行叠加,从而得到整个被检测文件的恶意程度数值;然后采用阈值的方式对于所述被检测文件的恶意程度进行过滤,当被检测文件的恶意程度大于阈值时则认定该被检测文件为恶意文件,当被检测文件的恶意程度小于阈值时则认定该被检测文件为安全文件;或者当被检测文件的恶意程度位于阈值区间之内时,进行其它方式的恶意程度检测。
6.根据权利要求5所述的一种恶意文件的检测装置,其特征在于,所述装置还包括:
函数内容摘要计算模块,针对每个函数,取所述清洗后的函数数据中预定长度的编码,根据该编码计算得到该函数内容摘要值。
CN201610443601.9A 2016-06-20 2016-06-20 一种恶意文件的检测方法和装置 Active CN105975854B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610443601.9A CN105975854B (zh) 2016-06-20 2016-06-20 一种恶意文件的检测方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610443601.9A CN105975854B (zh) 2016-06-20 2016-06-20 一种恶意文件的检测方法和装置

Publications (2)

Publication Number Publication Date
CN105975854A CN105975854A (zh) 2016-09-28
CN105975854B true CN105975854B (zh) 2019-06-28

Family

ID=57022708

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610443601.9A Active CN105975854B (zh) 2016-06-20 2016-06-20 一种恶意文件的检测方法和装置

Country Status (1)

Country Link
CN (1) CN105975854B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106650453B (zh) * 2016-12-30 2019-11-05 北京启明星辰信息安全技术有限公司 一种检测方法和装置
CN110515652B (zh) * 2019-08-30 2021-10-15 腾讯科技(深圳)有限公司 代码摘要的生成方法、装置和存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101604364A (zh) * 2009-07-10 2009-12-16 珠海金山软件股份有限公司 基于文件指令序列的计算机恶意程序分类***和分类方法
CN102982043A (zh) * 2011-09-07 2013-03-20 腾讯科技(深圳)有限公司 Pe文件的处理方法和装置
CN103761476A (zh) * 2013-12-30 2014-04-30 北京奇虎科技有限公司 特征提取的方法及装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9003529B2 (en) * 2012-08-29 2015-04-07 The Johns Hopkins University Apparatus and method for identifying related code variants in binaries

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101604364A (zh) * 2009-07-10 2009-12-16 珠海金山软件股份有限公司 基于文件指令序列的计算机恶意程序分类***和分类方法
CN102982043A (zh) * 2011-09-07 2013-03-20 腾讯科技(深圳)有限公司 Pe文件的处理方法和装置
CN103761476A (zh) * 2013-12-30 2014-04-30 北京奇虎科技有限公司 特征提取的方法及装置

Also Published As

Publication number Publication date
CN105975854A (zh) 2016-09-28

Similar Documents

Publication Publication Date Title
Shijo et al. Integrated static and dynamic analysis for malware detection
CN103761476B (zh) 特征提取的方法及装置
US9348998B2 (en) System and methods for detecting harmful files of different formats in virtual environments
Cesare et al. Malware variant detection using similarity search over sets of control flow graphs
JP6126672B2 (ja) 悪性コード検出方法及びシステム
Karbalaie et al. Semantic malware detection by deploying graph mining
CN110414236B (zh) 一种恶意进程的检测方法及装置
CN108734012A (zh) 恶意软件识别方法、装置及电子设备
KR101851233B1 (ko) 파일 내 포함된 악성 위협 탐지 장치 및 방법, 그 기록매체
Zhong et al. A malware classification method based on similarity of function structure
Han et al. Malware classification methods using API sequence characteristics
KR20040080843A (ko) 악성 암호화 스크립트에 대한 분석 및 해독 방법
CN111651591A (zh) 一种网络安全分析方法和装置
JP6674036B2 (ja) 分類装置、分類方法及び分類プログラム
Pandey et al. Performance of malware detection tools: A comparison
KR101816045B1 (ko) 악성코드 룰셋을 이용한 악성코드 탐지 시스템 및 방법
CN105975854B (zh) 一种恶意文件的检测方法和装置
CN106709350B (zh) 一种病毒检测方法及装置
CN106650439A (zh) 检测可疑应用程序的方法及装置
Cheers et al. A novel approach for detecting logic similarity in plagiarised source code
CN109214179B (zh) 一种程序模块安全检测方法及装置
CN106850632B (zh) 一种异常组合数据的检测方法及装置
Gonzalez et al. Measuring code reuse in Android apps
JP6258189B2 (ja) 特定装置、特定方法および特定プログラム
KR101550820B1 (ko) 유사도에 기초하여 악성코드를 분석하는 장치

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