CN104504333A - Elf文件中的恶意代码检测方法及装置 - Google Patents
Elf文件中的恶意代码检测方法及装置 Download PDFInfo
- Publication number
- CN104504333A CN104504333A CN201410687208.5A CN201410687208A CN104504333A CN 104504333 A CN104504333 A CN 104504333A CN 201410687208 A CN201410687208 A CN 201410687208A CN 104504333 A CN104504333 A CN 104504333A
- Authority
- CN
- China
- Prior art keywords
- code
- file
- elf
- symbol list
- malicious code
- 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.)
- Granted
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
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/03—Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
- G06F2221/033—Test or assess software
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Virology (AREA)
- Health & Medical Sciences (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Health & Medical Sciences (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Storage Device Security (AREA)
Abstract
本发明公开了一种ELF文件中的恶意代码检测方法,包括:获取ELF文件中的函数以及函数的代码指令偏移与代码指令长度;根据函数的代码指令偏移与代码指令长度获取对应的指令代码段;对指令代码段进行反汇编解析,并根据反汇编解析后的指令代码段生成特征码;检测特征码是否存在于预设的恶意代码特征库中;以及如果检测特征码存在于预设的恶意代码特征库中,则判断ELF文件具有恶意代码。本发明实施例的方法,取消了现有技术中主流检测手段中的“起始偏移与连续二进制片段”这两个限制,能够更加灵活地对ELF文件进行恶意代码检测,具有更高的启发性检测能力。本发明还公开了一种ELF文件中的恶意代码检测装置。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种ELF(Executable and Linkable Format,可执行与可链接格式)文件中的恶意代码检测装置。
背景技术
目前,ELF文件格式被广泛应用,同样也被越来越多的恶意代码广泛利用。但其检测手段并没有非常大的变化,主要检测手段依旧是“文件偏移地址+一定长度的连续二进制片段”。该方法是:在ELF文件中,找到文件的一个偏移地址,然后从该地址开始匹配一段连续的二进制片段,如果匹配到的二进制片段含有恶意代码即确定该ELF文件中含有恶意代码。
但是存在的问题是,由于被匹配的是一段连续的、未处理的二进制片段,因此与原始文件强相关,对新出现的恶意代码启发性不强,稍微改动即可绕过检测,从而导致检测结果不准确。
发明内容
本发明的目的旨在至少在一定程度上解决上述的技术问题之一。
为此,本发明的第一个目的在于提出一种ELF文件中的恶意代码检测方法。该方法能够更加灵活地对ELF文件进行恶意代码检测,具有更高的启发性检测能力。
本发明的第二个目的在于提出一种ELF文件中的恶意代码检测装置。
为了实现上述目的,本发明第一方面实施例的ELF文件中的恶意代码检测方法,包括:获取ELF文件中的函数以及所述函数的代码指令偏移与代码指令长度;根据所述函数的代码指令偏移与代码指令长度获取对应的指令代码段;对所述指令代码段进行反汇编解析,并根据反汇编解析后的指令代码段生成特征码;检测所述特征码是否存在于预设的恶意代码特征库中;以及如果检测所述特征码存在于所述预设的恶意代码特征库中,则判断所述ELF文件具有恶意代码。
根据本发明实施例的ELF文件中的恶意代码检测方法,可先获取ELF文件中的函数以及函数的代码指令偏移与代码指令长度,之后可根据函数的代码指令偏移与代码指令长度获取对应的指令代码段,然后对该指令代码段进行反汇编解析,并根据反汇编解析后的指令代码段生成特征码,之后检测该特征码是否存在于预设的恶意代码特征库中,若存在,则判断该ELF文件具有恶意代码,这样取消了现有技术中主流检测手段中的“起始偏移与连续二进制片段”这两个限制,能够更加灵活地对ELF文件进行恶意代码检测,具有更高的启发性检测能力。
为了实现上述目的,本发明第二方面实施例的ELF文件中的恶意代码检测装置,包括:第一获取模块,用于获取ELF文件中的函数以及所述函数的代码指令偏移与代码指令长度;第二获取模块,用于根据所述函数的代码指令偏移与代码指令长度获取对应的指令代码段;生成模块,用于对所述指令代码段进行反汇编解析,并根据反汇编解析后的指令代码段生成特征码;检测模块,用于检测所述特征码是否存在于预设的恶意代码特征库中;以及判断模块,用于在检测所述特征码存在于所述预设的恶意代码特征库中时,判断所述ELF文件具有恶意代码。
根据本发明实施例的ELF文件中的恶意代码检测装置,可通过第一获取模块获取ELF文件中的函数以及函数的代码指令偏移与代码指令长度,第二获取模块根据函数的代码指令偏移与代码指令长度获取对应的指令代码段,生成模块对指令代码段进行反汇编解析,并根据反汇编解析后的指令代码段生成特征码,检测模块检测特征码是否存在于预设的恶意代码特征库中,判断模块在检测特征码存在于预设的恶意代码特征库中时,判断ELF文件具有恶意代码,这样取消了现有技术中主流检测手段中的“起始偏移与连续二进制片段”这两个限制,能够更加灵活地对ELF文件进行恶意代码检测,具有更高的启发性检测能力。
本发明附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中,
图1是根据本发明一个实施例的ELF文件中的恶意代码检测方法的流程图;
图2是根据本发明一个实施例的获取函数代码指令偏移与代码指令长度的流程图;
图3是根据本发明一个实施例的获取函数代码指令偏移与代码指令长度的示例图;
图4是根据本发明一个实施例的ELF文件中的恶意代码检测装置的结构示意图;
图5是根据本发明一个实施例的第一获取模块的结构示意图;以及
图6是根据本发明一个实施例的生成模块的结构示意图。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本发明,而不能理解为对本发明的限制。
目前,ELF文件格式被广泛应用,同样也被越来越多的恶意代码广泛利用。但其检测手段并没有非常大的变化,主要检测手段依旧是“文件偏移地址+一定长度的连续二进制片段”。该方法是:在ELF文件中,找到文件的一个偏移地址,然后从该地址开始匹配一段连续的二进制片段,由于被匹配的是一段连续的、未处理的二进制片段,因此与原始文件强相关,对新出现的恶意代码启发性不强,稍微改动即可绕过检测,从而导致检测结果不准确。
为此,本发明提出了一种ELF文件中的恶意代码检测方法及装置,其取消了主流检测手段中的“起始偏移与连续二进制片段”这两个限制,能够更加灵活的对ELF文件进行恶意代码检测,具有更高的启发性检测能力。具体地,下面参考附图描述本发明实施例的ELF文件中的恶意代码检测方法及装置。
图1是根据本发明一个实施例的ELF文件中的恶意代码检测方法的流程图。如图1所示,该ELF文件中的恶意代码检测方法可以包括:
S101,获取ELF文件中的函数以及函数的代码指令偏移与代码指令长度。
具体而言,在本发明的实施例中,可对ELF文件进行解析以获取ELF文件中的多个结构数组,并遍历多个结构数组以获取ELF文件中的函数以及函数的代码指令偏移与代码指令长度。其中,在本发明的实施例中,多个结构数组可包括ELF头文件结构、段结构数组和符号表结构数组等。更具体地,可先对ELF文件进行解析,获取ELF文件中包含的各个函数以及每个函数对应的代码段偏移位置,根据该代码段偏移位置通过偏移以找到每个函数的代码指令偏移与代码指令长度。
更具体地,下面将结合附图图2和图3,对上述ELF文件中的函数以及函数的代码指令偏移与代码指令长度的获取过程作进一步详细说明。在本发明的实施例中,如图2和图3所示,上述对ELF文件进行解析以获取ELF文件中的多个结构数组,并遍历多个结构数组以获取ELF文件中的函数以及函数的代码指令偏移与代码指令长度具体可包括以下步骤:
S201,读取ELF文件,取得ELF文件头部的ELF头文件结构。
其中,如图3中的结构1所示即为ELF文件头部的ELF头文件结构的示例图。
S202,通过ELF头文件结构中的成员e_shoff获取段结构数组。
具体地,可通过ELF头文件结构中的e_shoff,找到段结构数组的地址,之后可根据段结构数组的地址即可找到段结构数组。
S203,遍历段结构数组以获取.dynsym段描述符结构,并根据.dynsym段描述符结构中的成员sh_offset获取符号表结构数组。
具体地,可遍历段结构数组先找到段描述符结构数组的偏移,通过该偏移找到段结构数组中的类型为SHT_DYNSYM的段结构,即.dynsym段描述符结构(如图3中的结构2),并根据.dynsym段描述符结构中的sh_offset,找到符号表结构数组的起始地址,之后可根据符号表结构数组的起始地址即可找到符号表结构数组。
需要说明的是,在本步骤中找的是.dynsym段描述符结构,这里可以对.symtab段描述符结构进行完全一样的解析与检测,两者结构完全相同,.dynsym段描述符结构是.symtab段描述符结构的子集。在本发明的实施例中,选用.dynsym段描述符结构的原因在于,在某些ELF文件中,.symtab段可能不存在,而.dynsym段描述符结构一定存在。由此,保证检测的可用性。
S204,获取符号表结构数组中的目标符号表结构,并判断目标符号表结构中的成员st_info是否为STT_FUNC,其中,目标符号表结构为符号表结构数组中的元素。
具体地,可取出符号表结构数组中的一个元素来作为目标符号表结构(如图3中的结构3),并判断目标符号表结构中的st_info是否为STT_FUNC。其中,在本发明的实施例中,STT_FUNC可表示该目标符号对应的是一函数。
需要说明的是,当符号表结构数组中的所有元素都被遍历过(即都被取出过来作为目标符号表结构)时,可退出整个检测过程,即结束检测。
S205,如果判断目标符号表结构中的成员st_info为STT_FUNC,则根据STT_FUNC获取对应的函数,并将目标符号表结构中的成员st_size所对应的值作为函数的代码指令长度。
具体地,当判断目标符号表结构中的st_info对应的是一函数时,可获取该函数的函数名,并可将目标符号表结构(即如图3中的结构3)中的st_size所对应的值作为该函数的代码指令长度(即该函数的代码指令在ELF文件中的长度)。
需要说明的是,在本发明的实施例中,当判断目标符号表结构中的st_info不为STT_FUNC时,可继续从符号表结构数组中取出下一个元素来作为目标符号表结构,并继续执行对该目标符号表结构中的st_info进行判断。
S206,根据目标符号表结构中的成员st_shndx获取目标段描述符结构,并根据目标符号表结构和目标段描述符结构获取函数的代码指令偏移。
具体地,可将目标符号表结构中的st_shndx指向的段描述符结构作为目标段描述符结构(如图3中的结构4),并根据上述目标符号表结构和目标段描述符结构获取函数的代码指令偏移(即函数的代码指令在ELF文件中的偏移)。
应当理解,由于函数的代码指令的起止位置的计算根据ELF文件的文件类型,有所不同,即不同的ELF文件的文件类型,该ELF文件中的函数的代码指令的起止位置的计算方式有所不同。下面将根据不同的文件类型分别介绍函数的代码指令的起止位置的计算方式:
在本发明的一个实施例中,当ELF文件的文件类型为可执行文件或共享目标文件时,根据目标符号表结构和目标段描述符结构获取函数的代码指令偏移具体包括:可根据目标符号表结构中的成员st_value、目标段描述符结构中的成员sh_addr和目标段描述符结构中的成员sh_offset获取函数的代码指令偏移。具体地,当ELF文件的文件类型为可执行文件或共享目标文件时,该ELF文件中的函数的代码指令的偏移=目标符号表结构(即如图3中的结构3)中的st_value-目标段描述符结构(如图3中的结构4)中的sh_addr+目标段描述符结构(如图3中的结构4)中的sh_offset。
在本发明的另一个实施例中,当ELF文件的文件类型为可重定向文件时,根据目标符号表结构和目标段描述符结构获取函数的代码指令偏移具体包括:根据目标符号表结构中的成员st_value和目标段描述符结构中的成员sh_offset获取函数的代码指令偏移。具体地,当ELF文件的文件类型为可重定向文件时,该ELF文件中的函数的代码指令的偏移=目标符号表结构(即如图3中的结构3)中的st_value+目标段描述符结构(如图3中的结构4)中的sh_offset。
由此,通过上述实施例可获取到ELF文件中包含的各个函数及各函数对应的代码指令偏移与代码指令长度。
S102,根据函数的代码指令偏移与代码指令长度获取对应的指令代码段。
S103,对指令代码段进行反汇编解析,并根据反汇编解析后的指令代码段生成特征码。
具体而言,在本发明的实施例中,可先提取反汇编解析后的指令代码段中的部分片段。之后,可对部分片段进行重新组合,并根据预设算法对重新组合后的部分片段进行计算以生成指令代码段对应的特征码。
更具体地,可对指令代码段进行反汇编解析,得到解析结果。之后可提取该解析结果中的部分片段进行重新组合,例如,解析结果中包含有op指令、数据片段等,可将解析结果中的op指令片段进行重新组合,或者将解析结果中的op指令片段与相关的数据片段进行重新组合等,当然还可以进行其他类型的片段组合。之后,可对上述重新组合后的部分片段利用预设算法进行计算以生成指令代码段对应的特征码。其中,在本发明的实施例中,预设算法可包括但不限于Hash算法(即哈希算法)、相似性Hash算法等。
S104,检测特征码是否存在于预设的恶意代码特征库中。
具体地,可将特征码与预设的恶意代码特征库中的特征码进行比对。其中,在本发明的实施例中,预设的恶意代码特征库可理解是预先保存了恶意代码特征,并可定期对该预设的恶意代码特征库进行更新以保证其能够全面覆盖市场上出现的恶意代码所对应的特征码。
S105,如果检测特征码存在于预设的恶意代码特征库中,则判断ELF文件具有恶意代码。
具体地,当检测特征码与预设的恶意代码特征库中的特征码比对一致时,可判断该ELF文件中具有恶意代码。
其中,在本发明的一个实施例中,预设的恶意代码特征库中可具有特征码与恶意代码名称的对应关系,在检测特征码存在于预设的恶意代码特征库中之后,该ELF文件中的恶意代码检测方法还可包括:根据特征码查找预设的恶意代码特征码库以获取与特征码对应的恶意代码名称。在本发明的实施例中,还可将获取到的恶意代码名称提供给用户,以使用户能够了解到ELF文件已感染哪个恶意代码。
根据本发明实施例的ELF文件中的恶意代码检测方法,可先获取ELF文件中的函数以及函数的代码指令偏移与代码指令长度,之后可根据函数的代码指令偏移与代码指令长度获取对应的指令代码段,然后对该指令代码段进行反汇编解析,并根据反汇编解析后的指令代码段生成特征码,之后检测该特征码是否存在于预设的恶意代码特征库中,若存在,则判断该ELF文件具有恶意代码,这样取消了现有技术中主流检测手段中的“起始偏移与连续二进制片段”这两个限制,能够更加灵活地对ELF文件进行恶意代码检测,具有更高的启发性检测能力。
与上述几种实施例提供的ELF文件中的恶意代码检测方法相对应,本发明的一种实施例还提供一种ELF文件中的恶意代码检测装置,由于本发明实施例提供的ELF文件中的恶意代码检测装置与上述几种实施例提供的ELF文件中的恶意代码检测方法相对应,因此在前述ELF文件中的恶意代码检测方法的实施方式也适用于本实施例提供的ELF文件中的恶意代码检测装置,在本实施例中不再详细描述。图4是根据本发明一个实施例的ELF文件中的恶意代码检测装置的结构示意图。如图4所示,该ELF文件中的恶意代码检测装置可以包括:第一获取模块10、第二获取模块20、生成模块30、检测模块40和判断模块50。
具体地,第一获取模块10可用于获取ELF文件中的函数以及函数的代码指令偏移与代码指令长度。具体而言,在本发明的实施例中,第一获取模块10可具体用于:对ELF文件进行解析以获取ELF文件中的多个结构数组,并遍历多个结构数组以获取ELF文件中的函数以及函数的代码指令偏移与代码指令长度。其中,在本发明的实施例中,多个结构数组可包括ELF头文件结构、段结构数组和符号表结构数组等。
在本发明的实施例中,如图5所示,该第一获取模块10可包括:第一获取单元11、第二获取单元12、第三获取单元13、第四获取单元14、判断单元15、第五获取单元16和第六获取单元17。
具体地,第一获取单元11可用于读取ELF文件,取得ELF文件头部的ELF头文件结构。
第二获取单元12可用于通过ELF头文件结构中的成员e_shoff获取段结构数组。
第三获取单元13可用于遍历段结构数组以获取.dynsym段描述符结构,并根据.dynsym段描述符结构中的成员sh_offset获取符号表结构数组。
第四获取单元14可用于获取符号表结构数组中的目标符号表结构,其中,目标符号表结构为符号表结构数组中的元素。
判断单元15可用于判断目标符号表结构中的成员st_info是否为STT_FUNC。
第五获取单元16可用于在判断目标符号表结构中的成员st_info为STT_FUNC时,根据STT_FUNC获取对应的函数,并将目标符号表结构中的成员st_size所对应的值作为函数的代码指令长度。
第六获取单元17可用于根据目标符号表结构中的成员st_shndx获取目标段描述符结构,并根据目标符号表结构和目标段描述符结构获取函数的代码指令偏移。
应当理解,由于函数的代码指令的起止位置的计算根据ELF文件的文件类型,有所不同,即不同的ELF文件的文件类型,该ELF文件中的函数的代码指令的起止位置的计算方式有所不同。下面将根据不同的文件类型分别介绍函数的代码指令的起止位置的计算方式:
在本发明的一个实施例中,当ELF文件的文件类型为可执行文件或共享目标文件时,第六获取单元17可具体用于:根据目标符号表结构中的成员st_value、目标段描述符结构中的成员sh_addr和目标段描述符结构中的成员sh_offset获取函数的代码指令偏移。
在本发明的另一个实施例中,当ELF文件的文件类型为可重定向文件时,第六获取单元17可具体用于:根据目标符号表结构中的成员st_value和目标段描述符结构中的成员sh_offset获取函数的代码指令偏移。
由此,通过上述实施例可获取到ELF文件中包含的各个函数及各函数对应的代码指令偏移与代码指令长度。
第二获取模块20可用于根据函数的代码指令偏移与代码指令长度获取对应的指令代码段。
生成模块30可用于对指令代码段进行反汇编解析,并根据反汇编解析后的指令代码段生成特征码。
具体而言,在本发明的实施例中,如图6所示,该生成模块30可包括提取单元31和生成单元32。具体地,提取单元31可用于提取反汇编解析后的指令代码段中的部分片段。生成单元32可用于对部分片段进行重新组合,并根据预设算法对重新组合后的部分片段进行计算以生成指令代码段对应的特征码。其中,在本发明的实施例中,预设算法可包括但不限于Hash算法(即哈希算法)、相似性Hash算法等。
检测模块40可用于检测特征码是否存在于预设的恶意代码特征库中。
判断模块50可用于在检测特征码存在于预设的恶意代码特征库中时,判断ELF文件具有恶意代码。
其中,在本发明的实施例中,预设的恶意代码特征库中具有特征码与恶意代码名称的对应关系,该ELF文件中的恶意代码检测装置还可以包括第三获取模块60。第三获取模块60可用于在检测特征码存在于预设的恶意代码特征库中之后,根据特征码查找预设的恶意代码特征码库以获取与特征码对应的恶意代码名称。在本发明的实施例中,还可将获取到的恶意代码名称提供给用户,以使用户能够了解到ELF文件已感染哪个恶意代码。
根据本发明实施例的ELF文件中的恶意代码检测装置,可通过第一获取模块获取ELF文件中的函数以及函数的代码指令偏移与代码指令长度,第二获取模块根据函数的代码指令偏移与代码指令长度获取对应的指令代码段,生成模块对指令代码段进行反汇编解析,并根据反汇编解析后的指令代码段生成特征码,检测模块检测特征码是否存在于预设的恶意代码特征库中,判断模块在检测特征码存在于预设的恶意代码特征库中时,判断ELF文件具有恶意代码,这样取消了现有技术中主流检测手段中的“起始偏移与连续二进制片段”这两个限制,能够更加灵活地对ELF文件进行恶意代码检测,具有更高的启发性检测能力。
在本发明的描述中,需要理解的是,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本发明的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所属技术领域的技术人员所理解。
在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,"计算机可读介质"可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式光盘只读存储器(CDROM)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
此外,在本发明各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。
上述提到的存储介质可以是只读存储器,磁盘或光盘等。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。
Claims (16)
1.一种ELF文件中的恶意代码检测方法,其特征在于,包括以下步骤:
获取ELF文件中的函数以及所述函数的代码指令偏移与代码指令长度;
根据所述函数的代码指令偏移与代码指令长度获取对应的指令代码段;
对所述指令代码段进行反汇编解析,并根据反汇编解析后的指令代码段生成特征码;
检测所述特征码是否存在于预设的恶意代码特征库中;以及
如果检测所述特征码存在于所述预设的恶意代码特征库中,则判断所述ELF文件具有恶意代码。
2.根据权利要求1所述的ELF文件中的恶意代码检测方法,其特征在于,其中,所述预设的恶意代码特征库中具有特征码与恶意代码名称的对应关系,在所述检测所述特征码存在于所述预设的恶意代码特征库中之后,所述方法还包括:
根据所述特征码查找所述预设的恶意代码特征码库以获取与所述特征码对应的恶意代码名称。
3.根据权利要求1所述的ELF文件中的恶意代码检测方法,其特征在于,所述获取ELF文件中的函数以及所述函数的代码指令偏移与代码指令长度具体包括:
对所述ELF文件进行解析以获取所述ELF文件中的多个结构数组,并遍历所述多个结构数组以获取所述ELF文件中的所述函数以及所述函数的代码指令偏移与代码指令长度。
4.根据权利要求3所述的ELF文件中的恶意代码检测方法,其特征在于,所述多个结构数组包括ELF头文件结构、段结构数组和符号表结构数组。
5.根据权利要求4所述的ELF文件中的恶意代码检测方法,其特征在于,所述对所述ELF文件进行解析以获取所述ELF文件中的多个结构数组,并遍历所述多个结构数组以获取所述ELF文件中的所述函数以及所述函数的代码指令偏移与代码指令长度,具体包括:
读取所述ELF文件,取得所述ELF文件头部的ELF头文件结构;
通过所述ELF头文件结构中的成员e_shoff获取段结构数组;
遍历所述段结构数组以获取.dynsym段描述符结构,并根据所述.dynsym段描述符结构中的成员sh_offset获取符号表结构数组;
获取所述符号表结构数组中的目标符号表结构,并判断所述目标符号表结构中的成员st_info是否为STT_FUNC,其中,所述目标符号表结构为所述符号表结构数组中的元素;
如果判断所述目标符号表结构中的成员st_info为STT_FUNC,则根据所述STT_FUNC获取对应的函数,并将所述目标符号表结构中的成员st_size所对应的值作为所述函数的代码指令长度;
根据所述目标符号表结构中的成员st_shndx获取目标段描述符结构,并根据所述目标符号表结构和所述目标段描述符结构获取所述函数的代码指令偏移。
6.根据权利要求5所述的ELF文件中的恶意代码检测方法,其特征在于,当所述ELF文件的文件类型为可执行文件或共享目标文件时,所述根据所述目标符号表结构和所述目标段描述符结构获取所述函数的代码指令偏移具体包括:
根据所述目标符号表结构中的成员st_value、所述目标段描述符结构中的成员sh_addr和所述目标段描述符结构中的成员sh_offset获取所述函数的代码指令偏移。
7.根据权利要求5所述的ELF文件中的恶意代码检测方法,其特征在于,当所述ELF文件的文件类型为可重定向文件时,所述根据所述目标符号表结构和所述目标段描述符结构获取所述函数的代码指令偏移具体包括:
根据所述目标符号表结构中的成员st_value和所述目标段描述符结构中的成员sh_offset获取所述函数的代码指令偏移。
8.根据权利要求1所述的ELF文件中的恶意代码检测方法,其特征在于,所述根据反汇编解析后的指令代码段生成特征码具体包括:
提取反汇编解析后的指令代码段中的部分片段;
对所述部分片段进行重新组合,并根据预设算法对重新组合后的部分片段进行计算以生成所述指令代码段对应的特征码。
9.一种ELF文件中的恶意代码检测装置,其特征在于,包括:
第一获取模块,用于获取ELF文件中的函数以及所述函数的代码指令偏移与代码指令长度;
第二获取模块,用于根据所述函数的代码指令偏移与代码指令长度获取对应的指令代码段;
生成模块,用于对所述指令代码段进行反汇编解析,并根据反汇编解析后的指令代码段生成特征码;
检测模块,用于检测所述特征码是否存在于预设的恶意代码特征库中;以及
判断模块,用于在检测所述特征码存在于所述预设的恶意代码特征库中时,判断所述ELF文件具有恶意代码。
10.根据权利要求9所述的ELF文件中的恶意代码检测装置,其特征在于,其中,所述预设的恶意代码特征库中具有特征码与恶意代码名称的对应关系,所述装置还包括:
第三获取模块,用于在检测所述特征码存在于所述预设的恶意代码特征库中之后,根据所述特征码查找所述预设的恶意代码特征码库以获取与所述特征码对应的恶意代码名称。
11.根据权利要求9所述的ELF文件中的恶意代码检测装置,其特征在于,所述第一获取模块具体用于:
对所述ELF文件进行解析以获取所述ELF文件中的多个结构数组,并遍历所述多个结构数组以获取所述ELF文件中的所述函数以及所述函数的代码指令偏移与代码指令长度。
12.根据权利要求11所述的ELF文件中的恶意代码检测装置,其特征在于,所述多个结构数组包括ELF头文件结构、段结构数组和符号表结构数组。
13.根据权利要求12所述的ELF文件中的恶意代码检测装置,其特征在于,所述第一获取模块包括:
第一获取单元,用于读取所述ELF文件,取得所述ELF文件头部的ELF头文件结构;
第二获取单元,用于通过所述ELF头文件结构中的成员e_shoff获取段结构数组;
第三获取单元,用于遍历所述段结构数组以获取.dynsym段描述符结构,并根据所述.dynsym段描述符结构中的成员sh_offset获取符号表结构数组;
第四获取单元,用于获取所述符号表结构数组中的目标符号表结构,其中,所述目标符号表结构为所述符号表结构数组中的元素;
判断单元,用于判断所述目标符号表结构中的成员st_info是否为STT_FUNC;
第五获取单元,用于在判断所述目标符号表结构中的成员st_info为STT_FUNC时,根据所述STT_FUNC获取对应的函数,并将所述目标符号表结构中的成员st_size所对应的值作为所述函数的代码指令长度;
第六获取单元,用于根据所述目标符号表结构中的成员st_shndx获取目标段描述符结构,并根据所述目标符号表结构和所述目标段描述符结构获取所述函数的代码指令偏移。
14.根据权利要求13所述的ELF文件中的恶意代码检测装置,其特征在于,当所述ELF文件的文件类型为可执行文件或共享目标文件时,所述第六获取单元具体用于:
根据所述目标符号表结构中的成员st_value、所述目标段描述符结构中的成员sh_addr和所述目标段描述符结构中的成员sh_offset获取所述函数的代码指令偏移。
15.根据权利要求13所述的ELF文件中的恶意代码检测装置,其特征在于,当所述ELF文件的文件类型为可重定向文件时,所述第六获取单元具体用于:
根据所述目标符号表结构中的成员st_value和所述目标段描述符结构中的成员sh_offset获取所述函数的代码指令偏移。
16.根据权利要求9所述的ELF文件中的恶意代码检测装置,其特征在于,所述生成模块包括:
提取单元,用于提取反汇编解析后的指令代码段中的部分片段;
生成单元,用于对所述部分片段进行重新组合,并根据预设算法对重新组合后的部分片段进行计算以生成所述指令代码段对应的特征码。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410687208.5A CN104504333B (zh) | 2014-11-25 | 2014-11-25 | Elf文件中的恶意代码检测方法及装置 |
PCT/CN2014/093184 WO2016082240A1 (zh) | 2014-11-25 | 2014-12-05 | Elf文件中的恶意代码检测方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410687208.5A CN104504333B (zh) | 2014-11-25 | 2014-11-25 | Elf文件中的恶意代码检测方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104504333A true CN104504333A (zh) | 2015-04-08 |
CN104504333B CN104504333B (zh) | 2018-03-06 |
Family
ID=52945729
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410687208.5A Active CN104504333B (zh) | 2014-11-25 | 2014-11-25 | Elf文件中的恶意代码检测方法及装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN104504333B (zh) |
WO (1) | WO2016082240A1 (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106126431A (zh) * | 2016-08-23 | 2016-11-16 | 腾讯科技(深圳)有限公司 | 性能测试方法及系统 |
CN109299609A (zh) * | 2018-08-08 | 2019-02-01 | 北京奇虎科技有限公司 | 一种elf文件检测方法及装置 |
CN109308183A (zh) * | 2018-07-30 | 2019-02-05 | 南阳理工学院 | 一种面向vliw芯片可执行代码的逆向工具方法 |
CN109558731A (zh) * | 2017-09-26 | 2019-04-02 | 腾讯科技(深圳)有限公司 | 特征码处理方法、装置及存储介质 |
CN110392081A (zh) * | 2018-04-20 | 2019-10-29 | 武汉安天信息技术有限责任公司 | 病毒库推送方法及装置、计算机设备和计算机存储介质 |
CN113360910A (zh) * | 2021-06-30 | 2021-09-07 | 中国农业银行股份有限公司 | 恶意应用的检测方法、装置、服务器和可读存储介质 |
CN114443174A (zh) * | 2022-02-17 | 2022-05-06 | Oppo广东移动通信有限公司 | 代码加载方法、代码加载装置、存储介质与电子设备 |
CN114647849A (zh) * | 2022-03-22 | 2022-06-21 | 安天科技集团股份有限公司 | 潜在危险文件的检测方法、装置、电子设备及存储介质 |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111368296A (zh) * | 2019-06-27 | 2020-07-03 | 北京关键科技股份有限公司 | 源码文件匹配率分析方法 |
CN113946346B (zh) * | 2021-09-30 | 2022-08-09 | 北京五八信息技术有限公司 | 一种数据处理方法、装置、电子设备及存储介质 |
CN113742730B (zh) * | 2021-11-04 | 2022-02-22 | 北京生泰尔科技股份有限公司 | 恶意代码检测方法、系统及计算机可读存储介质 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101697131A (zh) * | 2009-11-04 | 2010-04-21 | 中兴通讯股份有限公司 | 一种可重定位文件动态加载的方法及装置 |
KR20110057297A (ko) * | 2009-11-24 | 2011-06-01 | 한국인터넷진흥원 | 악성 봇 동적 분석 시스템 및 방법 |
CN102243699A (zh) * | 2011-06-09 | 2011-11-16 | 深圳市安之天信息技术有限公司 | 一种恶意代码检测方法及系统 |
CN102346710A (zh) * | 2011-10-13 | 2012-02-08 | 北京航空航天大学 | 一种基于动态插桩技术的数据包处理时延分析方法 |
CN102902918A (zh) * | 2012-08-06 | 2013-01-30 | 厦门市美亚柏科信息股份有限公司 | 一种基于复合特征码的恶意文件检测方法 |
CN103268445A (zh) * | 2012-12-27 | 2013-08-28 | 武汉安天信息技术有限责任公司 | 一种基于OpCode的android恶意代码检测方法及系统 |
CN103294953A (zh) * | 2012-12-27 | 2013-09-11 | 武汉安天信息技术有限责任公司 | 一种手机恶意代码检测方法及系统 |
CN103294457A (zh) * | 2012-02-27 | 2013-09-11 | 百度在线网络技术(北京)有限公司 | 动态替换主程序中c/c++函数的方法及装置 |
CN104091121A (zh) * | 2014-06-12 | 2014-10-08 | 上海交通大学 | 对Android重打包恶意软件的恶意代码的检测、切除和恢复的方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103914654A (zh) * | 2013-12-25 | 2014-07-09 | 武汉安天信息技术有限责任公司 | 一种对Android ART运行时代码进行恶意代码检测的方法及系统 |
CN103902909B (zh) * | 2013-12-25 | 2017-02-08 | 武汉安天信息技术有限责任公司 | 一种基于Opcode回溯的Android恶意代码检测系统及方法 |
-
2014
- 2014-11-25 CN CN201410687208.5A patent/CN104504333B/zh active Active
- 2014-12-05 WO PCT/CN2014/093184 patent/WO2016082240A1/zh active Application Filing
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101697131A (zh) * | 2009-11-04 | 2010-04-21 | 中兴通讯股份有限公司 | 一种可重定位文件动态加载的方法及装置 |
KR20110057297A (ko) * | 2009-11-24 | 2011-06-01 | 한국인터넷진흥원 | 악성 봇 동적 분석 시스템 및 방법 |
CN102243699A (zh) * | 2011-06-09 | 2011-11-16 | 深圳市安之天信息技术有限公司 | 一种恶意代码检测方法及系统 |
CN102346710A (zh) * | 2011-10-13 | 2012-02-08 | 北京航空航天大学 | 一种基于动态插桩技术的数据包处理时延分析方法 |
CN103294457A (zh) * | 2012-02-27 | 2013-09-11 | 百度在线网络技术(北京)有限公司 | 动态替换主程序中c/c++函数的方法及装置 |
CN102902918A (zh) * | 2012-08-06 | 2013-01-30 | 厦门市美亚柏科信息股份有限公司 | 一种基于复合特征码的恶意文件检测方法 |
CN103268445A (zh) * | 2012-12-27 | 2013-08-28 | 武汉安天信息技术有限责任公司 | 一种基于OpCode的android恶意代码检测方法及系统 |
CN103294953A (zh) * | 2012-12-27 | 2013-09-11 | 武汉安天信息技术有限责任公司 | 一种手机恶意代码检测方法及系统 |
CN104091121A (zh) * | 2014-06-12 | 2014-10-08 | 上海交通大学 | 对Android重打包恶意软件的恶意代码的检测、切除和恢复的方法 |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106126431A (zh) * | 2016-08-23 | 2016-11-16 | 腾讯科技(深圳)有限公司 | 性能测试方法及系统 |
CN109558731A (zh) * | 2017-09-26 | 2019-04-02 | 腾讯科技(深圳)有限公司 | 特征码处理方法、装置及存储介质 |
CN109558731B (zh) * | 2017-09-26 | 2022-04-08 | 腾讯科技(深圳)有限公司 | 特征码处理方法、装置及存储介质 |
CN110392081A (zh) * | 2018-04-20 | 2019-10-29 | 武汉安天信息技术有限责任公司 | 病毒库推送方法及装置、计算机设备和计算机存储介质 |
CN110392081B (zh) * | 2018-04-20 | 2022-08-30 | 武汉安天信息技术有限责任公司 | 病毒库推送方法及装置、计算机设备和计算机存储介质 |
CN109308183A (zh) * | 2018-07-30 | 2019-02-05 | 南阳理工学院 | 一种面向vliw芯片可执行代码的逆向工具方法 |
CN109299609A (zh) * | 2018-08-08 | 2019-02-01 | 北京奇虎科技有限公司 | 一种elf文件检测方法及装置 |
CN113360910A (zh) * | 2021-06-30 | 2021-09-07 | 中国农业银行股份有限公司 | 恶意应用的检测方法、装置、服务器和可读存储介质 |
CN114443174A (zh) * | 2022-02-17 | 2022-05-06 | Oppo广东移动通信有限公司 | 代码加载方法、代码加载装置、存储介质与电子设备 |
CN114647849A (zh) * | 2022-03-22 | 2022-06-21 | 安天科技集团股份有限公司 | 潜在危险文件的检测方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
WO2016082240A1 (zh) | 2016-06-02 |
CN104504333B (zh) | 2018-03-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104504333A (zh) | Elf文件中的恶意代码检测方法及装置 | |
CN105446723B (zh) | 用于标识源代码版本之间的语义区别的方法和装置 | |
US9262296B1 (en) | Static feature extraction from structured files | |
US9811446B2 (en) | Method and apparatus for providing test cases | |
US11048798B2 (en) | Method for detecting libraries in program binaries | |
Kawamitsu et al. | Identifying source code reuse across repositories using lcs-based source code similarity | |
CN103019707B (zh) | 调用栈的解析处理方法及装置 | |
CN104657661A (zh) | 移动终端中恶意代码的检测方法和装置 | |
CN101751530B (zh) | 检测漏洞攻击行为的方法及设备 | |
CN105760184A (zh) | 一种加载组件的方法和装置 | |
EP2553581A1 (en) | Detection of global metamorphic malware variants using control and data flow analysis | |
CN105468505A (zh) | 覆盖率测试方法及覆盖率测试装置 | |
CN112256635B (zh) | 一种识别文件类型的方法及装置 | |
CN103077062A (zh) | 一种代码改动的检测方法和装置 | |
US20140317452A1 (en) | Error detecting apparatus, program and method | |
US20140137088A1 (en) | Method for Enforcing Language Subsets | |
CN104021075A (zh) | 用于程序代码的评估方法和装置 | |
CN104077528A (zh) | 病毒检测方法、装置以及终端 | |
JP6289748B2 (ja) | 制御ロジック図解析装置および制御ロジック図解析方法 | |
CN109426702B (zh) | iOS平台文件读取保护方法、存储介质、电子设备及系统 | |
CN115310087A (zh) | 一种基于抽象语法树的网站后门检测方法和系统 | |
CN109558580A (zh) | 一种文本分析方法及装置 | |
CN110457046B (zh) | 混合指令集程序的反汇编方法、装置、存储介质及终端 | |
Fan et al. | Using histograms to find compressor deviations in bus fleet data | |
JP5516277B2 (ja) | テストケース関係抽出方法、テストケース関係抽出装置及びテストケース関係抽出プログラム |
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 |