一种基于线程反编译的多平台恶意代码检测方法和系统的制作方法

文档序号:871589阅读:376来源:国知局
专利名称:一种基于线程反编译的多平台恶意代码检测方法和系统的制作方法
技术领域
本发明涉及本计算机反病毒技术领域,尤其涉及一种基于线程反编译的多平台恶意代码检测方法和系统。
背景技术
目前的恶意代码检测技术主要是针对文件为检测对象,常规的特征码检测都是基于文件的,文件特征码扫描是最早出现的恶意代码检测技术。目前依旧是反病毒的主要技术。它仅仅将文件中的数据和已知的特征串做比较来检测。该种方法配合脱壳在一定程度上达到更好的识别率,但是这种方法的检测对象是文件,加密的壳变化导致脱壳失败,就无法检测,同时其只能检测处置文件对象。模拟技术(CN201110025547. 3基于虚拟机的“In_VM”恶意代码检测系统 2011-07-13)从程度上来说处于把程序视为字节序列的技术和把程序视为行为序列的技术之间。虚拟机将程序字节代码划分为指令,并在虚拟的计算机环境中执行每一条指令。这样就可以监视程序的行为,能够分析一部分病毒事件。这种方法的需要在系统底层装置一层系统,而不是在系统上层就可以完成,多数依赖系统,而不能跨平台。

发明内容
本发明的目的在于针对现有移动平台以及PC的发展,恶意代码加密变形技术和多平台发展。针对恶意代码存在实体是线程,提出一种可多平台、抗变形的特征提取方法和检测方法。该方法可以检测多种平台的恶意代码。同时可以检测恶意代码的线程并对线程进行处置。为解决上述问题,本发明实现方法主要包括以下步骤
A、通过特征提取获取恶意指令序列;
所述特征提取包括静态提取或者动态提取;所述静态特征提取是指通过对恶意代码样本文件进行反编译,获取恶意程序的入口点和线程函数的起始地址的数据进行反编译得到恶意指令序列;所述动态特征提取是指在虚拟环境中执行恶意代码样本,监视创建线程,提取创建线程起始位置的数据进行反编译得到恶意指令序列。B、依次检测系统中的线程信息,识别线程起始数据的指令集,并根据不同指令集对每个线程起始数据进行反编译得到线程的执行指令序列;
检测系统环境中线程信息,通过各平台的系统API获取系统的线程信息,包括线程所在内存起始位置,线程内存数据范围。识别线程起始数据的指令集,包括X86、X64、AM。根据不同指令集对数据进行反编译得到线程的执行指令序列。C、将所述线程的执行指令序列与所述恶意指令序列进行完全匹配,如果匹配成功则该所述线程为恶意线程。如果将所述线程的执行指令序列与所述恶意指令序列进行完全匹配不成功,则将所述线程的执行指令序列前十个操作序列内的第一个跳转后的指令序列与所述恶意指令序列进行完全匹配,如果匹配成功则该所述线程为恶意线程。如果所述线程所在的内存加载模块属于DLL文件或属于SO文件,则该所述线程为恶意线程。关联线程所在的内存加载模块,发现该线程所在区域是属于某个DLL或SO文件,还是属于进程空间。进而判定一个文件是否是恶意的。所述方法还包括对所述恶意线程进行处置,所述处置包括挂起或终止所述恶意线程。相应的,本发明还提供了一种基于线程反编译的多平台恶意代码检测系统,包括恶意指令序列模块,用于通过特征提取获取恶意指令序列;
提取指令序列模块,用于依次检测系统中的线程信息,识别线程起始数据的指令集,并根据不同指令集对每个线程起始数据进行反编译得到线程的执行指令序列;
指令序列匹配模块,用于将所述线程的执行指令序列与所述恶意指令序列进行完全匹配,如果匹配成功则该所述线程为恶意线程。所述特征提取包括静态提取或者动态提取;所述静态特征提取是指通过对恶意代码样本文件进行反编译,获取恶意程序的入口点和线程函数的起始地址的数据进行反编译得到恶意指令序列;所述动态特征提取是指在虚拟环境中执行恶意代码样本,监视创建线程,提取创建线程起始位置的数据进行反编译得到恶意指令序列。所述指令集包括X86、X64、ARM。所述指令序列匹配模块具体还用于如果将所述线程的执行指令序列与所述恶意指令序列进行完全匹配不成功,则将所述线程的执行指令序列前十个操作序列内的第一个跳转后的指令序列与所述恶意指令序列进行完全匹配,如果匹配成功则该所述线程为恶意线程。所述系统还包括关联检查模块,用于如果所述线程所在的内存加载模块属于DLL文件或属于so文件,则该所述线程为恶意线程。所述系统还包括处置模块,用于对所述恶意线程进行处置,所述处置包括挂起或终止所述恶意线程。本发明的有益效果是
当前的主要恶意代码查杀是通过文件进行检测,而针对线程对象检测查杀的好处是首先木马的活动是以线程为单位,对线程的检测可以及时,有效地发现木马,对其进行处置。其次线程起始位置的代码是运行后的代码,对于加密变形的恶意代码,运行后线程的起始位置就还原为加密变形前的数据,再通过反编译就可以达到跨平台的统一的检测方法,可以以更少的特征检测更多的变种恶意代码,具有更好的检出效果。


为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图I为本发明基于线程反编译的多平台恶意代码检测方法的特征提取流程 图2为本发明基于线程反编译的多平台恶意代码检测方法流程 图3为本发明基于线程反编译的多平台恶意代码检测系统模块结构 图4为实施例样本反汇编线程函数起始地址;
图5为实施例样本线程函数起始位置数据;
图6为实施例指令序列所在地址。
具体实施方式

为了使本技术领域的人员更好地理解本发明实施例中的技术方案,并使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图对本发明中技术方案作进一步详细的说明。首先是本发明对恶意样本进行特征提取的流程,如图I所示,包括步骤
5101、判断样本文件是否为可执行文件格式,如果不是则结束,否则进行S102;
5102、判断样本文件的指令集;
5103、对样本进行反编译查找入口点;
5104、获取线程函数的起始位置;
5105、提取反编译指令序列保存。本发明基于线程反编译的多平台恶意代码检测方法,如图2所示,包括步骤
5201、检测系统环境中线程信息;
5202、通过各平台的系统API获取系统的线程信息,包括线程所在内存起始位置,线程内存数据范围;
5203、识别线程起始数据的指令集,包括X86、X64、ARM;
5204、根据不同指令集对数据进行反编译得到线程的执行指令序列;
5205、将得到线程指令序列与恶意指令序列进行完全匹配,如果匹配到已知恶意序列则该线程为恶意线程;
5206、如果步骤S204未匹配成功,则对线程指令序列前十个操作序列内的第一个跳转后的指令序列进行匹配。S207、关联线程所在的内存加载模块,发现该线程所在区域是属于某个DLL或so文件,还是属于进程空间。进而判定一个文件是否是恶意的;
S208、对线程进行处置。挂起或终止恶意线程。下面我们结合准备的样本文件来进行进一步说明
文件名狡猾.dll
MD5 013BC5CEE562BC51307BC34A61C13C47加壳=UPX
根据图1,对该样本进行特征提取,先进行格式识别发现该样本为PE、该样本的所属的指令集为x86,为可执行格式。对该样本进行脱壳反编译获得入口点位置和线程函数起始位置。如图4得到线程起始位置为0x3200AC8C,转换起始位置为文件位置,开始的数据如图5,下面提取这些数据0x55,0x8B, OxECj 0x81,OxECj 0x04,0x01,0x00,0x00,0x68,0x14,0x12,0x02,0x32,0x8Dj 0x85,OxFCj OxFEj OxFFj OxFFj 0x68,0x30,OxICj 0x02,0x32,0x50,OxFFj 0x15,0x84,0χΒ3,-0x01,0x32,0x83,0xC4, OxOCj 0x83,0x3D, 0x48,0x12,0x02,0x32,0x00,0x74,0x26,0x8D, Ox85,OxFCj OxFEj OxFFj OxFFj 0x68,0x20,0x85,0x02,0x32,0x50,0x68,0x02,0x00,0x00,0x80,0xE8, 0xD6, 0xF6, OxFFj OxFFj 0x83,0xC4, OxOCj 0x68,0xD8, 0x07,0x00,0x00,OxFFj 0x15,0x9C, 0xB2, 0x01,0x32,OxEBj OxDlj 0x33,OxCOj 0xC9, 0xC2, 0x04,0x00,0x55,0x8B, OxECj 0x83,OxECj 0x20,0x53,0x56,0x57,0x83,0x65,OxFCj OxOOj 0x68,OxFFj 0x01,OxOFj OxOOj OxFFj0x75,0x10,OxFFj 0x75,OxOCj OxFFj 0x15,0x84,OxBOj 0x01,0x32,0x8B, 0xF8, 0x85,OxFFj Ox75,0x36,OxFFj 0x15,0x34,0xB2,
对这些数据进行反编译得到指令序列
Push->move->sub->push->lea->push->push->call->add->cmp->jcc->lea->push->push->push->call->add->push->call->jmp->xor->lea->retn 指令序列部分实质是以二进制数据opcode方式保存,比如push实际上有0x55, 0x50, 0x68,所以实际的指令序列是以十六进制数据组成。对于无法脱壳的样本则需要动态提取,动态提取的方式与检测过程类似,在系统环境中运行样本,获得新创建线程的开始位置提取数据,获得指令序列。根据图2在系统遍历线程信息,获得线程起始位置,对数据进行指令集判断 反编译获得线程的指令序列。通过BM算法将恶意特征指令序列与线程指令序列进行匹配。如图3所示,为本发明基于线程反编译的多平台恶意代码检测系统模块结构图,包括
恶意指令序列模块301,用于通过特征提取获取恶意指令序列;
提取指令序列模块302,用于依次检测系统中的线程信息,识别线程起始数据的指令集,并根据不同指令集对每个线程起始数据进行反编译得到线程的执行指令序列;
指令序列匹配模块303,用于将所述线程的执行指令序列与所述恶意指令序列进行完全匹配,如果匹配成功则该所述线程为恶意线程。所述特征提取包括静态提取或者动态提取;所述静态特征提取是指通过对恶意代码样本文件进行反编译,获取恶意程序的入口点和线程函数的起始地址的数据进行反编译得到恶意指令序列;所述动态特征提取是指在虚拟环境中执行恶意代码样本,监视创建线程,提取创建线程起始位置的数据进行反编译得到恶意指令序列。所述指令集包括X86、X64、ARM。指令序列匹配模块303具体还用于如果将所述线程的执行指令序列与所述恶意指令序列进行完全匹配不成功,则将所述线程的执行指令序列前十个操作序列内的第一个跳转后的指令序列与所述恶意指令序列进行完全匹配,如果匹配成功则该所述线程为恶意线程。所述系统还包括关联检查模块304,用于如果所述线程所在的内存加载模块属于DLL文件或属于so文件,则该所述线程为恶意线程。所述系统还包括处置模块305,用于对所述恶意线程进行处置,所述处置包括挂起或终止所述恶意线程。
本说明书中方法的实施例采用递进的方式描述,对于系统的实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。虽然通过实施例描绘了本发明,本领域普通技术人员知道,本发明有许多变形和变化而不脱离本发明的精神,希望所附的权利要求包括这些变形和变化而不脱离本发明的精神。 ·
权利要求
1.一种基于线程反编译的多平台恶意代码检测方法,其特征在于,包括 通过特征提取获取恶意指令序列; 依次检测系统中的线程信息,识别线程起始数据的指令集,并根据不同指令集对每个线程起始数据进行反编译得到线程的执行指令序列; 将所述线程的执行指令序列与所述恶意指令序列进行完全匹配,如果匹配成功则该所述线程为恶意线程。
2.如权利要求I所述的基于线程反编译的多平台恶意代码检测方法,其特征在于,所述特征提取包括静态提取或者动态提取;所述静态特征提取是指通过对恶意代码样本文件进行反编译,获取恶意程序的入口点和线程函数的起始地址的数据进行反编译得到恶意指令序列;所述动态特征提取是指在虚拟环境中执行恶意代码样本,监视创建线程,提取创建线程起始位置的数据进行反编译得到恶意指令序列。
3.如权利要求I所述的基于线程反编译的多平台恶意代码检测方法,其特征在于,所述指令集包括X86、X64、ARM。
4.如权利要求I所述的基于线程反编译的多平台恶意代码检测方法,其特征在于,还包括如果将所述线程的执行指令序列与所述恶意指令序列进行完全匹配不成功,则将所述线程的执行指令序列前十个操作序列内的第一个跳转后的指令序列与所述恶意指令序列进行完全匹配,如果匹配成功则该所述线程为恶意线程。
5.如权利要求I所述的基于线程反编译的多平台恶意代码检测方法,其特征在于,还包括如果所述线程所在的内存加载模块属于DLL文件或属于so文件,则该所述线程为恶意线程。
6.如权利要求I至5所述的任一种基于线程反编译的多平台恶意代码检测方法,其特征在于,还包括对所述恶意线程进行处置,所述处置包括挂起或终止所述恶意线程。
7.一种基于线程反编译的多平台恶意代码检测系统,其特征在于,包括 恶意指令序列模块,用于通过特征提取获取恶意指令序列; 提取指令序列模块,用于依次检测系统中的线程信息,识别线程起始数据的指令集,并根据不同指令集对每个线程起始数据进行反编译得到线程的执行指令序列; 指令序列匹配模块,用于将所述线程的执行指令序列与所述恶意指令序列进行完全匹配,如果匹配成功则该所述线程为恶意线程。
8.如权利要求7所述的基于线程反编译的多平台恶意代码检测系统,其特征在于,所述特征提取包括静态提取或者动态提取;所述静态特征提取是指通过对恶意代码样本文件进行反编译,获取恶意程序的入口点和线程函数的起始地址的数据进行反编译得到恶意指令序列;所述动态特征提取是指在虚拟环境中执行恶意代码样本,监视创建线程,提取创建线程起始位置的数据进行反编译得到恶意指令序列。
9.如权利要求7所述的基于线程反编译的多平台恶意代码检测系统,其特征在于,所述指令集包括X86、X64、ARM。
10.如权利要求7所述的基于线程反编译的多平台恶意代码检测系统,其特征在于,指令序列匹配模块具体还用于如果将所述线程的执行指令序列与所述恶意指令序列进行完全匹配不成功,则将所述线程的执行指令序列前十个操作序列内的第一个跳转后的指令序列与所述恶意指令序列进行完全匹配,如果匹配成功则该所述线程为恶意线程。
11.如权利要求7所述的基于线程反编译的多平台恶意代码检测系统,其特征在于,还包括关联检查模块,用于如果所述线程所在的内存加载模块属于DLL文件或属于so文件,则该所述线程为恶意线程。
12.如权利要求7至11所述的任一种基于线程反编译的多平台恶意代码检测系统,其特征在于,还包括处置模块,用于对所述恶意线程进行处置,所述处置包括挂起或终止所述恶意线程。
全文摘要
本发明公开了一种基于线程反编译的多平台恶意代码检测方法包括通过特征提取获取恶意指令序列;依次检测系统中的线程信息,识别线程起始数据的指令集,并根据不同指令集对每个线程起始数据进行反编译得到线程的执行指令序列;将所述线程的执行指令序列与所述恶意指令序列进行完全匹配,如果匹配成功则该所述线程为恶意线程。还公开了一种基于线程反编译的多平台恶意代码检测系统。本发明技术方案可以检测多种平台的恶意代码。同时可以检测恶意代码的线程并对线程进行处置。
文档编号G06F21/00GK102819697SQ20111044063
公开日2012年12月12日 申请日期2011年12月26日 优先权日2011年12月26日
发明者康学斌, 贺磊钢 申请人:哈尔滨安天科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1