CN103914657A - 一种基于函数特征的恶意程序检测方法 - Google Patents
一种基于函数特征的恶意程序检测方法 Download PDFInfo
- Publication number
- CN103914657A CN103914657A CN201410153802.6A CN201410153802A CN103914657A CN 103914657 A CN103914657 A CN 103914657A CN 201410153802 A CN201410153802 A CN 201410153802A CN 103914657 A CN103914657 A CN 103914657A
- Authority
- CN
- China
- Prior art keywords
- function
- instruction
- code
- feature
- rogue program
- 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
- 230000006870 function Effects 0.000 claims abstract description 191
- 238000012545 processing Methods 0.000 claims abstract description 18
- 238000001514 detection method Methods 0.000 claims abstract description 16
- 238000000605 extraction Methods 0.000 claims abstract description 8
- 238000000034 method Methods 0.000 claims description 51
- 230000008569 process Effects 0.000 claims description 42
- 238000006467 substitution reaction Methods 0.000 claims description 15
- 239000000284 extract Substances 0.000 claims description 11
- 230000009471 action Effects 0.000 claims description 6
- 239000013589 supplement Substances 0.000 claims description 4
- 230000006835 compression Effects 0.000 claims description 2
- 238000007906 compression Methods 0.000 claims description 2
- 238000005314 correlation function Methods 0.000 claims description 2
- 230000003864 performance function Effects 0.000 abstract 3
- 230000006399 behavior Effects 0.000 abstract 2
- 238000010586 diagram Methods 0.000 description 9
- 230000000694 effects Effects 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 238000012549 training Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 239000012141 concentrate Substances 0.000 description 1
- 238000002386 leaching Methods 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
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
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)
- Debugging And Monitoring (AREA)
Abstract
一种基于函数特征的恶意程序检测方法,步骤如下:(1)恶意程序的功能函数选择:通过对恶意程序样本的选取,经反汇编和人工分析,指定与恶意行为紧密关联的函数为功能函数;(2)函数特征的提取:对与恶意行为紧密关联函数的函数体代码进行处理,去除干扰指令,识别条件判断语句、循环语句,转换为其等价的表示形式,作为函数特征;(3)恶意程序特征库的建立:利用恶意程序样本库,将提取到的各恶意程序样本的功能函数的函数特征,建立一个作为恶意程序模型的恶意程序特征库;(4)恶意程序检测:依据恶意程序特征库,对待测程序分析其所有函数的函数特征集合,判断是否与恶意程序特征库中特征模型相一致,以识别待测程序是否恶意程序。
Description
技术领域
本发明涉及恶意程序的识别和检测,特别涉及一种基于函数语义特征的恶意程序检测方法。
背景技术
目前恶意程序检测大多采用了基于行为的检测方法,利用API相关的数据流和控制流关系识别恶意行为。然而Windows的DLL加载机制使得动态库可以被轻易替代。DLL文件的完整性验证不够充分和Hooking技术的出现,更使得对DLL的篡改变得异常简单。并且,当恶意程序运行于操作系统内核中时,可以随意篡改函数内容,甚至是系统调用的实现。即使不改变调用规则,程序实际执行的代码已经改变。因此,基于API的检测机制不再有效,导致检测结果错误,造成漏报。
发明内容
本发明目的是:提出一种基于函数特征的恶意程序检测方法,在函数二进制代码的基础上,抽取与功能相关的指令,构建具有鲁棒性的函数语义特征。由于函数特征从语义层面产生,具有一定的抽象性,抗混淆和稳定性比较好。函数语义的提取来自于程序实际执行的代码,为字节粒度的特征表示,是较为可靠的程序特征。特征的提取与系统无关,解脱了对应用程序接口甚至是系统调用的依赖,不会受到篡改系统调用或API的干扰。因此,本方法有利于更为准确地检测和识别恶意程序,减少检测漏报,以提高系统安全性。
本发明提供一种基于函数特征的恶意程序检测方法,其特征是步骤如下:
(1)恶意程序的功能函数选择:通过对恶意程序样本的选取,经反汇编和人工分析,指定与恶意行为紧密关联的函数为功能函数;
(2)函数特征的提取:对与恶意行为紧密关联函数的函数体代码进行处理,去除干扰指令,识别条件判断语句、循环语句,转换为其等价的表示形式,作为函数特征;
(3)恶意程序特征库的建立:利用恶意程序样本库,将提取到的各恶意程序样本的功能函数的函数特征,建立一个作为恶意程序模型的恶意程序特征库;
(4)恶意程序检测:依据恶意程序特征库,对待测程序分析其所有函数的函数特征集合,判断是否与恶意程序特征库中特征模型相一致,以识别待测程序是否恶意程序。
本发明的有益效果,通过提取恶意程序具有鲁棒性的的函数特征,将恶意程序的功能具体化表示,进而建立恶意程序特征库。对于待检测程序,提取其函数特征,通过与恶意程序特征库中恶意程序特征的比对,判断是否为恶意程序。从而实现本发明所述目的。
附图说明
图1表示基于函数特征的恶意程序检测系统结构示意图;
图2表示恶意程序特征库建立流程图;
图3恶意程序功能函数选择流程图;
图4表示函数的特征提取流程图;
图5表示函数代码预处理流程图;
图6表示函数代码去混淆处理流程图;
图7表示函数代码条件语句处理流程图;
图8表示循环语句处理流程图;
图9表示提取嵌套调用的函数特征流程图;
图10表示恶意程序检测过程流程图。
具体实施方式
下面结合附图对本发明进行详细说明。
图1所示为本方法实施的整体流程和工作原理。恶意程序样本是已收集的用于训练的恶意程序样本集合,并经过了规范命名和区分种类。待检程序是待判定的未知应用程序。从恶意程序样本集中选取恶意程序样本,通过人工选取功能函数、对功能函数提取函数特征,并加入特征库。在训练过程结束后,建立恶意程序特征库。对于待检程序,提取所有函数。这些函数经过预处理、去混淆、条件语句和循环语句处理、嵌套调用处理后,获取其函数特征集合。将各函数的函数特征与恶意程序特征库比对,判定待检程序是否是恶意程序。在本方法中,利用了反汇编软件objdump和IDA(实现语言为IDC和IDA python)对恶意程序样本的选取。恶意程序特征库中的内容是特征经过SHA-1计算后的结果,即每个特征互不相同,都表示为40位长度的字符串。
图2表示建立恶意程序特征库过程的流程。具体流程如下。步骤20是开始状态。步骤21从恶意程序样本集合中取恶意程序样本,步骤22判断恶意程序样本是否取到,若取到转步骤23,否则转步骤26。步骤23选择恶意程序的功能函数,具体处理流程如图3所示。通过人工选取功能函数、对功能函数提取函数特征;步骤24判断是否取到功能函数,若取到,转步骤25,否则返回步骤21。步骤25功能函数的函数特征提取,具体处理流程如图4所示。步骤26将生成的函数特征计算SHA-1哈希值,存入恶意程序特征库中。步骤27是结束状态。
图3表示获取一个恶意程序样本的功能函数流程。功能函数指对恶意行为起主要作用的函数,由分析人员指定。从恶意程序样本库中取一个恶意程序样本,经过反汇编得到恶意程序样本的汇编程序。为保证反汇编结果的质量,选用2个反汇编工具分别处理,当结果一致时,该样本为有效样本。选取其中的功能函数提取程序特征,进入恶意程序特征库。具体流程如下。步骤30是初始动作。步骤31使用objdump对取得的恶意程序样本反汇编。执行命令“objdump-M intel-d恶意程序样本名>obj.out.txt”,所得反汇编结果保存obj.out.txt文件中。步骤32,打开IDA pro工具,将恶意程序样本拖拽入工程区,选取默认的二进制形式,等待IDA自动处理完成后,将显示的反汇编保存到ida.out.txt中。步骤33,以两个工具生成的代码体为字符串,比较这两个字符串是否相同,是则转步骤35,否则转步骤34。步骤34设置返回值为Nofunc(取值为0,表示没取到功能函数),转步骤37。步骤35,指定选好的功能函数的函数体代码。步骤36,设置返回值为Okfunc(取值为1,表示取到功能函数)。步骤37是结束状态。
图4为函数特征提取过程的流程图。对于需提取特征的函数,经过预处理、去混淆、条件语句和循环语句处理、嵌套调用的函数处理等,获取函数特征。具体流程如下。步骤40开始动作。步骤41对待提取特征的函数进行预处理,生成预处理后的函数代码。具体处理流程如图5所示。步骤42对预处理后的函数代码去混淆处理,生成去混淆的精简代码。具体处理流程如图6所示。步骤43对去混淆的精简处理条件语句,生成去条件语句的精简代码。具体处理流程如图7所示。步骤44对去条件语句的函数代码处理其中的循环语句,生成去循环语句的精简代码。具体处理流程如图8所示。步骤45处理函数之间的调用,具体处理流程如图9所示。步骤46为结束状态。
图5表示函数代码预处理的流程。目的是对于所选取的函数,进行初始化和去干扰。本过程中,有效指令指对函数特征有影响的指令集合,有效指令集合的取值为{“add”,“call”,“cmp”,“int”,“jmp”,“lea”,“mov”,“inc”}。具体流程如下。步骤50是初始动作。步骤51在功能函数的函数体中取一条指令。步骤52判断是否取到指令,是则转步骤53,否则转步骤57。步骤53判断取得的指令是否在有效指令集合中,是则转步骤55,否则转步骤54。步骤54是将该指令以NOP代替。步骤55对指令执行去混淆操作,具体处理流程如图6所示。步骤56执行指令压缩,去掉所有的NOP指令。步骤57为结束状态,执行至此,初始化过程结束,生成精简代码。
图6表示函数代码去混淆处理(或指令执行去混淆操作)的流程图。目的在于处理样本代码中简单的混淆技术,将可能出现的等价指令经过替换处理实现统一表示,从而消除混淆造成的代码差异。替换处理基于替换表进行,处理两类替换:1)指令若在去混淆替换表(表1所示)中,则按照去混淆替换表进行替换。2)xor指令后紧跟一条je指令,将两条指令用“JMP”符号替换。处理过程通过遍历精简代码,按照规则执行替换,生成去混淆的精简代码。具体流程如下。步骤60是初始动作。步骤61从精简代码中取一条指令代码。步骤62判断指令是否取到,是则转步骤63,否则转步骤64。步骤63判断取得的指令是否在替换表中,是则转步骤65,否则转步骤66。步骤65查替换表按替换值进行替换。步骤66判断取到的指令是否xor,是则转步骤67,否则转步骤61。步骤67取得下一条精简代码。步骤68判断取得的指令是否je。是则转步骤69,否则转步骤61。步骤69删除上一条代码。步骤6a将当前代码用JMP符号代替。步骤64是结束状态,执行至此,生成去混淆的精简代码。
原值 | 替换值 |
“add” | “MOV” |
“lea” | “MOV” |
“sub” | “MOV” |
“inc” | “MOV” |
“call” | “CALL” |
“int” | “CALL” |
“jmp” | “JMP” |
表1去混淆替换表
图7表示函数代码条件语句处理流程图。将去混淆的精简代码中的条件语句以“COMP”符号表示,[]符号的内容为跳转地址,最后生成去条件语句的精简代码。本过程用到的数据结构是比较指令集合。比较指令集合的取值为{“je”,“jne”,“jle”,“jbe”}。具体流程如下。步骤70是开始动作。步骤71读入比较指令集合。步骤72从待处理中取一条代码,标记为A。步骤73判断是否取到指令,若取到则转步骤74,否则转步骤79。步骤74判断A是否在替换表中,若在转步骤75,否则返回步骤72。步骤75从待处理中取下一条代码B。步骤76判断B已取到并且不为空,若满足条件转步骤77,否则转步骤72。步骤77用符号“COMP[”代替A指令。步骤78在A指令的末尾加入“]”符号,与步骤77结果共同构成跳转目标。步骤79是结束状态。
图8表示函数代码循环语句识别与表示流程图。对于去条件语句的精简代码(为带标签的指令文本),识别出指令中的循环语义。对于do-while、while、for三种循环语句,分别按照三种模式的规则对循环语句进行判定。最终识别出的循环以LOOP{}符号标记,其中{}内容为循环体指令。由于使用的是IDA反汇编结果,每个跳转指令前都自带标签,标签也是字符串。具体流程如下。步骤80为起始状态。步骤81从(步骤43)图7结果中取一条代码,记为A。步骤82判断A是否取到。若是转步骤84。否则转步骤83。步骤84判断A是否带标签。若是转步骤85,否则转步骤8f。步骤85是找到下一条MOV指令B。期间遇到不是MOV的指令,直接跳过。步骤86判断B是否找到。若找到转步骤87,否则返回步骤81。步骤87取得B的下一条代码C。步骤88判断C是否取到并且C是COMP指令,若条件满足,转步骤89。否则转步骤8b。步骤89将A用“LOOP{”表示。步骤8a在指令B后添加闭括号符号“}”,此时{}内部表示的指令为A,B之间的指令段,是do-while模式的循环体。步骤8b取得C的下一条指令D。步骤8c判断D是否取得并且D是一条COMP指令。若是转步骤8d,否则返回步骤81。步骤8d将A指令标记为“LOOP{”,{}内容为A、D指令之间的内容。步骤8e在D指令后补充闭括号“}”符号,完成while循环体的标示。步骤8f判断指令A是否是MOV指令。若是转步骤8g。否则转步骤81。步骤8g取得A的下一条代码B。步骤8h判断B存在并且B是JMP指令。若条件满足转步骤8i,否则返回81执行。步骤8i取得B的下一条代码C。步骤8j判断已经取得C并且C带标签。条件满足转步骤8k。否知返回81继续执行。步骤8k取得下一条是MOV的指令D。步骤8l判断D是否取到。取到转步骤8m否则返回步骤81。步骤8m取得D下一条指令E,步骤8n判断取到E并且E是COMP指令,且E的标签与C指令的标签相同。若满足条件执行8o,否知返回81步骤。8o步骤将A用“LOOP{”表示,{}内容为A、E指令之间的内容。步骤8p在E指令后补充符号“}”,完成for循环体的识别。步骤83为结束状态。
图9表示提取嵌套调用的函数特征流程图。当待分析函数中存在嵌套调用时,通过对嵌套函数进行深度优先的次序分别遍历,最终形成功能函数的特征。本过程中使用到两种数据结构。(1)待处理函数栈。初始化时,将待处理函数逆序入栈。在执行栈弹出操作时,保证指令正确的执行顺序。待处理栈的作用是在对函数嵌套调用分析时,能够按照深度优先的顺序记录待处理的函数体代码。(2)指令队列。初始化为空。作用是保存不含嵌套调用的指令序列,在队列中执行函数特征提取,获得非嵌套的函数特征。具体流程如下。步骤90为初始动作。步骤91初始化指令队列为空。步骤92初始化待处理函数栈,将待处理函数体逆序压栈。步骤93从待处理栈顶取指令。步骤94判断是否取得指令,若是转步骤98,否则转步骤95。步骤95判断当前队列是否空,若是转步骤9c。否转步骤96。步骤96计算当前队列中的指令的特征,具体处理流程如图4所示。步骤97将计算的特征输出。步骤98判断取得的指令是否是CALL指令,若是转步骤99,否则转步骤9b。步骤99取得嵌套函数体的代码。步骤9a将取得的函数体代码逆序压入待处理函数栈。步骤9b将当前指令加入队列。步骤9c为结束动作。至此输出的特征为嵌套函数的功能特征。
图10表示恶意程序检测过程的流程图。恶意程序检测过程要参考恶意程序特征库,恶意程序特征库已在恶意程序特征库建立阶段建立完成。本过程中对待检程序,提取其所有函数的特征,并逐一与恶意程序特征库中的特征做比较,判断是否与恶意样本的特征一致。在IDA中,利用Functions()遍历函数,并返回函数的起始地址。在遍历每个函数时,从函数起始地址开始,使用NextAddr()遍历函数体线性地址,每次线性地址遍历都通过GetDisasm()得到指令的反汇编,从而得到整个函数体的反汇编代码。将函数的开始地址和对应的函数体放入哈希表中。待处理集合中的每一项都是一个函数地址,函数体内容通过查找哈希表获得。具体流程如下。步骤100为开始动作。步骤101遍历程序提取函数。步骤102将取得函数的起始地址和函数体内容放入哈希表。步骤103将所得函数开始地址加入待处理集合。步骤104从待处理集合中取一个函数地址。步骤105判断是否取到函数开始地址。若取到转步骤106,否则转步骤109。步骤106从哈希表中,利用入口地址取得函数体代码。步骤107计算函数特征,具体处理流程如图4所示。步骤108在特征库查找该特征,找到转步骤10a,否则转步骤104。步骤109输出目标不含恶意程序,转步骤10b。步骤10a输出目标包含恶意程序,转步骤10b。步骤10b是结束状态。
Claims (8)
1.一种基于函数特征的恶意程序检测方法,其特征是步骤如下:
(1)恶意程序的功能函数选择:通过对恶意程序样本的选取,经反汇编和人工分析,指定与恶意行为紧密关联的函数为功能函数;
(2)函数特征的提取:对与恶意行为紧密关联函数的函数体代码进行处理,去除干扰指令,识别条件判断语句、循环语句,转换为其等价的表示形式,作为函数特征;
(3)恶意程序特征库的建立:利用恶意程序样本库,将提取到的各恶意程序样本的功能函数的函数特征,建立一个作为恶意程序模型的恶意程序特征库;
(4)恶意程序检测:依据恶意程序特征库,对待测程序分析其所有函数的函数特征集合,判断是否与恶意程序特征库中特征模型相一致,以识别待测程序是否恶意程序。
2.根据权利要求1所述的基于函数特征的恶意程序检测方法,其特征是恶意程序特征库的建立的程序是:步骤20是开始状态,步骤21从恶意程序样本集合中取恶意程序样本,步骤22判断恶意程序样本是否取到,若取到转步骤23,否则转步骤26;
步骤23选择恶意程序的功能函数,通过人工选取功能函数、对功能函数提取函数特征;具体处理流程如下:功能函数指对恶意行为起主要作用的函数,由分析人员指定;从恶意程序样本库中取一个恶意程序样本,经过反汇编得到恶意程序样本的汇编程序;为保证反汇编结果的质量,选用2个反汇编工具分别处理,当结果一致时,该样本为有效样本;选取其中的功能函数提取程序特征,进入恶意程序特征库;具体流程如下:步骤30是初始动作,步骤31使用objdump对取得的恶意程序样本反汇编;执行命令“objdump-M intel-d恶意程序样本名>obj.out.txt”,所得反汇编结果保存obj.out.txt文件中;步骤32,打开IDA pro工具,将恶意程序样本拖拽入工程区,选取默认的二进制形式,等待IDA自动处理完成后,将显示的反汇编保存到ida.out.txt中;步骤33,以上述两个工具生成的代码体为字符串,比较这两个字符串是否相同,是则转步骤35,否则转步骤34;步骤34设置返回值为Nofunc,取值为0、表示没取到功能函数,转步骤37;步骤35,指定选好的功能函数的函数体代码;步骤36,设置返回值为Okfunc,取值为1,表示取到功能函数;步骤37是结束状态;
步骤24判断是否取到恶意程序的功能函数,若取到,转步骤25,否则返回步骤21;
步骤25功能函数的函数特征提取,具体处理流程如下,对于需提取特征的函数,经过预处理、去混淆、条件语句和循环语句处理、嵌套调用的函数处理等,获取函数特征;步骤40开始动作;步骤41对待提取特征的函数进行预处理,生成预处理后的函数代码;步骤42对预处理后的函数代码去混淆处理,生成去混淆的精简代码;步骤43对去混淆的精简处理条件语句,生成去条件语句的精简代码;步骤44对去条件语句的函数代码处理其中的循环语句,生成去循环语句的精简代码;步骤45处理函数之间的调用;步骤46为结束状态;
步骤26将生成的函数特征计算SHA-1哈希值,存入恶意程序特征库中;步骤27是结束状态。
3.根据权利要求2所述的基于函数特征的恶意程序检测方法,其特征是步骤41对待提取特征的函数进行预处理,生成预处理后的函数代码:步骤50是初始动作;步骤51在功能函数的函数体中取一条指令;步骤52判断是否取到指令,是则转步骤53,否则转步骤57;步骤53判断取得的指令是否在有效指令集合中,是则转步骤55,否则转步骤54;步骤54是将该指令以NOP代替;步骤55对指令执行去混淆操作;步骤56执行指令压缩,去掉所有的NOP指令;步骤57为结束状态,执行至此,初始化过程结束,生成精简代码。
4.根据权利要求2所述的基于函数特征的恶意程序检测方法,其特征是步骤42中对预处理后的函数代码去混淆处理或对指令执行去混淆操作,生成去混淆的精简代码:处理恶意程序样本代码中混淆技术,将可能出现的等价指令经过替换处理实现统一表示,从而消除混淆造成的代码差异;替换处理基于替换表进行,处理两类替换:1)指令若在下述去混淆替换表中,则按照去混淆替换表进行替换;2)xor指令后紧跟一条je指令,将两条指令用“JMP”符号替换;处理过程通过遍历精简代码,按照规则执行替换,生成去混淆的精简代码;
步骤60是初始动作;步骤61从精简代码中取一条指令代码;步骤62判断指令代码是否取到,是则转步骤63,否则转步骤64;步骤63判断取得的指令是否在去混淆替换表中,是则转步骤65,否则转步骤66;步骤65查去混淆替换表按替换值进行替换;步骤66判断取到的指令是否xor,是则转步骤67,否则转步骤61;步骤67取得下一条精简代码;步骤68判断取得的指令是否je;是则转步骤69,否则转步骤61;步骤69删除上一条代码;步骤6a将当前代码用JMP符号代替;步骤64是结束状态,执行至此,生成去混淆的精简代码。
5.根据权利要求2所述的基于函数特征的恶意程序检测方法,其特征是步骤43对去混淆的精简处理条件语句,生成去条件语句的精简代码处理流程;将去混淆的精简代码中的条件语句以“COMP”符号表示,[]符号的内容为跳转地址,最后生成去条件语句的精简代码;本过程用到的数据结构是比较指令集合;比较指令集合的取值为{“je”,“jne”,“jle”,“jbe”};具体流程如下:
步骤70是开始动作;步骤71读入比较指令集合;步骤72从待处理中取一条代码,标记为A;步骤73判断是否取到指令,若取到则转步骤74,否则转步骤79;步骤74判断A是否在替换表中,若在转步骤75,否则返回步骤72;步骤75从待处理中取下一条代码B;步骤76判断B已取到并且不为空,若满足条件转步骤77,否则转步骤72;步骤77用符号“COMP[”代替A指令;步骤78在A指令的末尾加入“]”符号,与步骤77结果共同构成跳转目标;步骤79是结束状态。
6.根据权利要求2所述的基于函数特征的恶意程序检测方法,其特征是步骤44对去条件语句的函数代码处理其中的循环语句,生成去循环语句的精简代码;对于去条件语句的精简代码、为带标签的指令文本,识别出指令中的循环语义;对于do-while、while、for三种循环语句,分别按照三种模式的规则对循环语句进行判定;最终识别出的循环以LOOP{}符号标记,其中{}内容为循环体指令;由于使用的是IDA反汇编结果,每个跳转指令前都自带标签,标签也是字符串;具体流程如下:
步骤80为起始状态;步骤81从步骤43对去混淆的精简处理条件语句,生成去条件语句的精简代码处理流程结果中取一条代码,记为A;步骤82判断A是否取到,若是转步骤84,否则转步骤83;步骤84判断A是否带标签,若是转步骤85,否则转步骤8f;步骤85是找到下一条MOV指令B,期间遇到不是MOV的指令,直接跳过;步骤86判断B是否找到,若找到转步骤87,否则返回步骤81;步骤87取得B的下一条代码C;步骤88判断C是否取到并且C是COMP指令,若条件满足,转步骤89,否则转步骤8b;步骤89将A用“LOOP{”表示;步骤8a在指令B后添加闭括号符号“}”,此时{}内部表示的指令为A,B之间的指令段,是do-while模式的循环体;步骤8b取得C的下一条指令D;步骤8c判断D是否取得并且D是一条COMP指令,若是转步骤8d,否则返回步骤81;步骤8d将A指令标记为“LOOP{”,{}内容为A、D指令之间的内容;步骤8e在D指令后补充闭括号“}”符号,完成while循环体的标示;步骤8f判断指令A是否是MOV指令,若是转步骤8g,否则转步骤81;步骤8g取得A的下一条代码B;步骤8h判断B存在并且B是JMP指令,若条件满足转步骤8i,否则返回81执行;步骤8i取得B的下一条代码C;步骤8j判断已经取得C并且C带标签,条件满足转步骤8k,否知返回81继续执行;步骤8k取得下一条是MOV的指令D;步骤8l判断D是否取到,取到转步骤8m否则返回步骤81;步骤8m取得D下一条指令E,步骤8n判断取到E并且E是COMP指令,且E的标签与C指令的标签相同,若满足条件执行8o,否知返回81步骤;8o步骤将A用“LOOP{”表示,{}内容为A、E指令之间的内容;步骤8p在E指令后补充符号“}”,完成for循环体的识别;步骤83为结束状态。
7.根据权利要求2所述的基于函数特征的恶意程序检测方法,其特征是步骤45处理函数之间的调用,步骤90为初始动作;步骤91初始化指令队列为空;步骤92初始化待处理函数栈,将待处理函数体逆序压栈;步骤93从待处理栈顶取指令;步骤94判断是否取得指令,若是转步骤98,否则转步骤95;步骤95判断当前队列是否空,若是转步骤9c;否转步骤96;步骤96计算当前队列中的指令的特征;步骤97将计算的特征输出;步骤98判断取得的指令是否是CALL指令,若是转步骤99,否则转步骤9b;步骤99取得嵌套函数体的代码;步骤9a将取得的函数体代码逆序压入待处理函数栈;步骤9b将当前指令加入队列;步骤9c为结束动作;至此输出的特征为嵌套函数的功能特征。
8.根据权利要求1所述的基于函数特征的恶意程序检测方法,其特征是恶意程序检测过程要参考恶意程序特征库,恶意程序特征库已在恶意程序特征库建立阶段建立完成;本过程中对待检程序,提取其所有函数的特征,并逐一与恶意程序特征库中的特征做比较,判断是否与恶意样本的特征一致;在IDA中,利用Functions()遍历函数,并返回函数的起始地址;在遍历每个函数时,从函数起始地址开始,使用NextAddr()遍历函数体线性地址,每次线性地址遍历都通过GetDisasm()得到指令的反汇编,从而得到整个函数体的反汇编代码;将函数的开始地址和对应的函数体放入哈希表中;待处理集合中的每一项都是一个函数地址,函数体内容通过查找哈希表获得;具体流程如下:步骤100为开始动作;步骤101遍历程序提取函数;步骤102将取得函数的起始地址和函数体内容放入哈希表;步骤103将所得函数开始地址加入待处理集合;步骤104从待处理集合中取一个函数地址;步骤105判断是否取到函数开始地址,若取到转步骤106,否则转步骤109;步骤106从哈希表中,利用入口地址取得函数体代码;步骤107计算函数特征;步骤108在特征库查找该特征,找到转步骤10a,否则转步骤104;步骤109输出目标不含恶意程序,转步骤10b;步骤10a输出目标包含恶意程序,转步骤10b;步骤10b是结束状态。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410153802.6A CN103914657B (zh) | 2014-04-16 | 2014-04-16 | 一种基于函数特征的恶意程序检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410153802.6A CN103914657B (zh) | 2014-04-16 | 2014-04-16 | 一种基于函数特征的恶意程序检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103914657A true CN103914657A (zh) | 2014-07-09 |
CN103914657B CN103914657B (zh) | 2016-10-19 |
Family
ID=51040330
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410153802.6A Expired - Fee Related CN103914657B (zh) | 2014-04-16 | 2014-04-16 | 一种基于函数特征的恶意程序检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103914657B (zh) |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106326746A (zh) * | 2016-08-26 | 2017-01-11 | 成都科来软件有限公司 | 一种恶意程序行为特征库构建方法及装置 |
CN106446676A (zh) * | 2016-08-30 | 2017-02-22 | 北京奇虎科技有限公司 | Pe文件的处理方法及装置 |
CN106664201A (zh) * | 2014-08-28 | 2017-05-10 | 三菱电机株式会社 | 进程解析装置、进程解析方法和进程解析程序 |
CN106845226A (zh) * | 2016-12-26 | 2017-06-13 | 中国电子科技集团公司第三十研究所 | 一种恶意程序分析方法 |
CN108062474A (zh) * | 2016-11-08 | 2018-05-22 | 阿里巴巴集团控股有限公司 | 文件的检测方法及装置 |
CN108153530A (zh) * | 2017-12-26 | 2018-06-12 | 网易(杭州)网络有限公司 | 字节码的优化方法、装置、存储介质、处理器及终端 |
CN108710492A (zh) * | 2018-04-20 | 2018-10-26 | 四川普思科创信息技术有限公司 | 一种识别app程序中第三方库的方法 |
US10284577B2 (en) | 2015-06-15 | 2019-05-07 | Iyuntian Co., Ltd. | Method and apparatus for file identification |
CN111651768A (zh) * | 2020-08-05 | 2020-09-11 | 中国人民解放军国防科技大学 | 计算机二进制程序的链接库函数名识别方法及装置 |
CN116506222A (zh) * | 2023-06-26 | 2023-07-28 | 北京安天网络安全技术有限公司 | 一种安全防护系统 |
WO2023223023A1 (en) * | 2022-05-17 | 2023-11-23 | Sophos Limited | Methods and apparatus for machine learning to generate a decision tree database to identify commands similar to a command of interest |
US12130923B2 (en) | 2022-03-31 | 2024-10-29 | Sophos Limited | Methods and apparatus for augmenting training data using large language models |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101154258A (zh) * | 2007-08-14 | 2008-04-02 | 电子科技大学 | 恶意程序动态行为自动化分析系统与方法 |
CN100504903C (zh) * | 2007-09-18 | 2009-06-24 | 北京大学 | 一种恶意代码自动识别方法 |
CN102054149B (zh) * | 2009-11-06 | 2013-02-13 | 中国科学院研究生院 | 一种恶意代码行为特征提取方法 |
CN103559125B (zh) * | 2013-10-25 | 2015-12-09 | 北京广利核系统工程有限公司 | 一种利用图同构验证编译器的方法 |
-
2014
- 2014-04-16 CN CN201410153802.6A patent/CN103914657B/zh not_active Expired - Fee Related
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106664201A (zh) * | 2014-08-28 | 2017-05-10 | 三菱电机株式会社 | 进程解析装置、进程解析方法和进程解析程序 |
US10284577B2 (en) | 2015-06-15 | 2019-05-07 | Iyuntian Co., Ltd. | Method and apparatus for file identification |
CN106326746B (zh) * | 2016-08-26 | 2019-02-19 | 成都科来软件有限公司 | 一种恶意程序行为特征库构建方法及装置 |
CN106326746A (zh) * | 2016-08-26 | 2017-01-11 | 成都科来软件有限公司 | 一种恶意程序行为特征库构建方法及装置 |
CN106446676A (zh) * | 2016-08-30 | 2017-02-22 | 北京奇虎科技有限公司 | Pe文件的处理方法及装置 |
CN106446676B (zh) * | 2016-08-30 | 2019-05-31 | 北京奇虎科技有限公司 | Pe文件的处理方法及装置 |
CN108062474A (zh) * | 2016-11-08 | 2018-05-22 | 阿里巴巴集团控股有限公司 | 文件的检测方法及装置 |
CN108062474B (zh) * | 2016-11-08 | 2022-01-11 | 阿里巴巴集团控股有限公司 | 文件的检测方法及装置 |
CN106845226A (zh) * | 2016-12-26 | 2017-06-13 | 中国电子科技集团公司第三十研究所 | 一种恶意程序分析方法 |
CN108153530A (zh) * | 2017-12-26 | 2018-06-12 | 网易(杭州)网络有限公司 | 字节码的优化方法、装置、存储介质、处理器及终端 |
CN108710492A (zh) * | 2018-04-20 | 2018-10-26 | 四川普思科创信息技术有限公司 | 一种识别app程序中第三方库的方法 |
CN111651768A (zh) * | 2020-08-05 | 2020-09-11 | 中国人民解放军国防科技大学 | 计算机二进制程序的链接库函数名识别方法及装置 |
US12130923B2 (en) | 2022-03-31 | 2024-10-29 | Sophos Limited | Methods and apparatus for augmenting training data using large language models |
WO2023223023A1 (en) * | 2022-05-17 | 2023-11-23 | Sophos Limited | Methods and apparatus for machine learning to generate a decision tree database to identify commands similar to a command of interest |
CN116506222A (zh) * | 2023-06-26 | 2023-07-28 | 北京安天网络安全技术有限公司 | 一种安全防护系统 |
CN116506222B (zh) * | 2023-06-26 | 2023-09-08 | 北京安天网络安全技术有限公司 | 一种安全防护系统 |
Also Published As
Publication number | Publication date |
---|---|
CN103914657B (zh) | 2016-10-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103914657A (zh) | 一种基于函数特征的恶意程序检测方法 | |
CN110737899B (zh) | 一种基于机器学习的智能合约安全漏洞检测方法 | |
CN111125716B (zh) | 一种以太坊智能合约漏洞检测方法及装置 | |
CN111639337B (zh) | 一种面向海量Windows软件的未知恶意代码检测方法及系统 | |
CN110750297B (zh) | 一种基于程序分析和文本分析的Python代码参考信息生成方法 | |
Liu et al. | Vfdetect: A vulnerable code clone detection system based on vulnerability fingerprint | |
CN113961768B (zh) | 敏感词检测方法、装置、计算机设备和存储介质 | |
CN104751053A (zh) | 移动智能终端软件的静态行为分析方法 | |
KR101520671B1 (ko) | 실행코드 유사도 분석 시스템 및 방법 | |
CN109902487B (zh) | 基于应用行为的Android应用恶意性检测方法 | |
CN115146282A (zh) | 基于ast的源代码异常检测方法及其装置 | |
CN108399321B (zh) | 基于动态指令依赖图胎记的软件局部抄袭检测方法 | |
KR101749210B1 (ko) | 다중 서열 정렬 기법을 이용한 악성코드 패밀리 시그니쳐 생성 장치 및 방법 | |
CN106650450A (zh) | 基于代码指纹识别的恶意脚本启发式检测方法及系统 | |
CN102799528B (zh) | 一种用于电路板级测试的脚本调试方法、装置及其系统 | |
CN112257757A (zh) | 一种基于深度学习的恶意样本检测方法及系统 | |
CN109101355B (zh) | 一种提取错误现场特征测试激励的处理器调试方法 | |
CN114995880B (zh) | 一种基于SimHash的二进制代码相似性比对方法 | |
CN112163217B (zh) | 恶意软件变种识别方法、装置、设备及计算机存储介质 | |
CN114065202A (zh) | 一种恶意代码检测方法、装置、电子设备及存储介质 | |
CN114035794A (zh) | 一种二进制代码复用的开源组件版本识别方法及装置 | |
Kim et al. | A static birthmark of windows binary executables based on strings | |
CN117668237B (zh) | 用于智能模型训练的样本数据处理方法、系统及智能模型 | |
KR102286451B1 (ko) | 자연어 처리 기반 난독화된 식별자 인식 방법, 이를 수행하기 위한 기록 매체 및 장치 | |
CN116383834B (zh) | 针对源码漏洞检测工具异常的检测方法以及相关设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20161019 Termination date: 20180416 |
|
CF01 | Termination of patent right due to non-payment of annual fee |