CN103914657A - 一种基于函数特征的恶意程序检测方法 - Google Patents

一种基于函数特征的恶意程序检测方法 Download PDF

Info

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
Application number
CN201410153802.6A
Other languages
English (en)
Other versions
CN103914657B (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.)
Nanjing University
Original Assignee
Nanjing University
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 Nanjing University filed Critical Nanjing University
Priority to CN201410153802.6A priority Critical patent/CN103914657B/zh
Publication of CN103914657A publication Critical patent/CN103914657A/zh
Application granted granted Critical
Publication of CN103914657B publication Critical patent/CN103914657B/zh
Expired - Fee Related 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/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/562Static 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是结束状态,执行至此,生成去混淆的精简代码。
原值 替换值 “add” “MOV” “lea” “MOV” “sub” “MOV” “inc” “MOV” “call” “CALL” “int” “CALL” “jmp” “JMP”
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是结束状态。
CN201410153802.6A 2014-04-16 2014-04-16 一种基于函数特征的恶意程序检测方法 Expired - Fee Related CN103914657B (zh)

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 (11)

* Cited by examiner, † Cited by third party
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

Family Cites Families (4)

* Cited by examiner, † Cited by third party
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 北京广利核系统工程有限公司 一种利用图同构验证编译器的方法

Cited By (15)

* Cited by examiner, † Cited by third party
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
CN106326746A (zh) * 2016-08-26 2017-01-11 成都科来软件有限公司 一种恶意程序行为特征库构建方法及装置
CN106326746B (zh) * 2016-08-26 2019-02-19 成都科来软件有限公司 一种恶意程序行为特征库构建方法及装置
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 中国人民解放军国防科技大学 计算机二进制程序的链接库函数名识别方法及装置
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应用恶意性检测方法
CN108399321B (zh) 基于动态指令依赖图胎记的软件局部抄袭检测方法
KR101749210B1 (ko) 다중 서열 정렬 기법을 이용한 악성코드 패밀리 시그니쳐 생성 장치 및 방법
CN106650450A (zh) 基于代码指纹识别的恶意脚本启发式检测方法及系统
CN102799528B (zh) 一种用于电路板级测试的脚本调试方法、装置及其系统
CN109472145A (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