《一种可执行文件处理方法和装置.pdf》由会员分享,可在线阅读,更多相关《一种可执行文件处理方法和装置.pdf(17页珍藏版)》请在专利查询网上搜索。
1、(10)申请公布号 CN 102855119 A (43)申请公布日 2013.01.02 C N 1 0 2 8 5 5 1 1 9 A *CN102855119A* (21)申请号 201210262975.2 (22)申请日 2012.07.26 G06F 9/30(2006.01) G06F 17/30(2006.01) G06F 21/00(2013.01) (71)申请人北京奇虎科技有限公司 地址 100088 北京市西城区新街口外大街 28号D座112室(德胜园区) 申请人奇智软件(北京)有限公司 (72)发明人周辉 徐传宇 李智鹏 (74)专利代理机构工业和信息化部电子专利中 。
2、心 11010 代理人梁军 (54) 发明名称 一种可执行文件处理方法和装置 (57) 摘要 本发明公开了一种可执行文件处理方法和装 置,所述方法包括:基于可执行文件入口点文件 偏移,查找文件入口点,并创建指令流栈;以预先 设定的分析步数X为基准,依次对所述入口点后 的各指令进行分析,获取可执行文件入口点后X 条指令的操作码opcode,得到opcode组;以所述 opcode组为分类条件,对各所述可执行文件进行 分类处理。所述装置包括:入口点查找模块、指令 分析模块和分类处理模块。本发明所述方法和装 置,采用可执行文件内部特征的分类技术,具有强 抗干扰性,且不会出现文件无法分类的情况。另 外。
3、,所述分类技术还具有分类速度快、分类效果好 等优点,可以实现对海量可执行文件的分类。 (51)Int.Cl. 权利要求书3页 说明书11页 附图2页 (19)中华人民共和国国家知识产权局 (12)发明专利申请 权利要求书 3 页 说明书 11 页 附图 2 页 1/3页 2 1.一种可执行文件处理方法,其特征在于,包括: 基于可执行文件入口点文件偏移,查找可执行文件入口点; 以预先设定的分析步数X为基准,依次对所述入口点后的各指令进行分析,获取可执 行文件入口点后X条指令的操作码opcode,得到opcode组; 以所述opcode组为分类条件,对各所述可执行文件进行分类处理。 2.如权利要求。
4、1所述的方法,其特征在于,所述预先设定的分析步数X=2n,其中,n为 正整数。 3.如权利要求1所述的方法,其特征在于,所述opcode组由X条指令对应的各opcode 的第一个字节组成。 4.如权利要求1所述的方法,其特征在于,所述方法还包括: 将各所述可执行文件的opcode组与杀毒引擎的病毒记录相关联; 所述杀毒引擎进行查毒时,获取待检查可执行文件的opcode组,判断该opocde组是否 与某一条或几条病毒记录相关联,若是,利用当前关联的病毒记录文件对所述待检查可执 行文件进行检查。 5.如权利要求1所述的方法,其特征在于,所述方法中,当无法获取满足所述分析步数 X的opcode时,在。
5、组成opcode组时,将剩余位设置为空;或者,直接将当前获取的opcode组 成opcode组。 6.如权利要求1所述的方法,其特征在于,所述方法中,利用反汇编引擎顺序解析所述 入口点指令,并从反汇编引擎中获得入口点指令的指令长度、指令opcode和指令类型。 7.如权利要求1至6任一项所述的方法,其特征在于,所述依次对入口点后的各指令进 行分析,获取可执行文件入口点后X条指令的操作码opcode,具体包括: 步骤71,创建指令流栈; 步骤72,判断当前分析的指令是否为Transfer指令,若是,执行步骤73;否则,执行步 骤74; 步骤73,获取指令的跳转目标地址后压入所述指令流栈,并分析所。
6、述指令以及所述指 令流栈内目标地址对应的指令流,获取各指令的opcode; 步骤74,获取指令的opcode后,按着指令长度定位下一指令的方式,分析下一指令。 8.如权利要求7所述的方法,其特征在于,所述分析所述指令以及指令的目标地址对 应的指令流,获取各指令的opcode,具体包括: 当所述Transfer指令类型为函数调用CALL指令或者无条件跳转JMP指令时,获取该 指令的opcode,并将指令流转到指令流栈内的所述CALL或者JMP指令的跳转目标地址对应 的指令流继续进行分析,获取指令opcode; 当所述Transfer指令类型为条件跳转JCC指令或循环LOOP指令时,获取该指令的 。
7、opcode,并按着指令长度定位下一指令的方式,分析下一指令,并在当前指令流指令数无法 满足分析步数时,将指令流转到指令流栈内所述JCC或LOOP指令的跳转目标地址对应的指 令流继续进行分析,获取指令opcode。 9.如权利要求8所述的方法,其特征在于,当所述Transfer指令为函数调用CALL指 令,且所述CALL指令为间接调用时,或者,当所述Transfer指令为条件跳转JCC指令,且所 述JCC指令为间接跳转时,若无法获得指令的跳转目标地址,则记录该指令的opcode后,按 权 利 要 求 书CN 102855119 A 2/3页 3 着指令长度定位下一指令的方式,继续下一指令的分析。
8、。 10.如权利要求8所述的方法,其特征在于,当所述Transfer指令为无条件跳转JMP指 令,且所述JMP指令为间接跳转时,若无法获取间接跳转目标地址,则记录该指令的opcode 后,停止本指令流分析,并查找指令流栈是否为空,如果不为空则弹栈得到新指令流地址, 转到该地址对应的指令流继续分析,获取指令opcode;如果指令流栈为空,则停止分析。 11.如权利要求8所述的方法,其特征在于,当所述Transfer指令类型为函数调用 CALL指令,且所述CALL指令的调用方式为跳转表时,或者,当所述Transfer指令类型为无 条件跳转JMP指令,且所述JMP指令的跳转方式为跳转表时,所述分析指。
9、令流栈内目标地址 对应的指令流,具体包括: 将跳转表中所有跳转目标地址压入指令流栈,再将指令流转到指令流栈栈顶目标地 址,在分析栈顶目标地址对应的指令流后,若当前指令流的指令数无法满足所述分析步数, 则将分析栈顶目标地址得到的opcode丢弃,并将所述栈顶目标地址弹栈,继续转到栈顶目 标地址进行指令流分析,直到得到满足分析步数的opcode;或者,未得到满足分析步数的 opcode,记录分析栈内最后一个目的地址得到的opcode。 12.如权利要求8所述的方法,其特征在于,当所述Transfer指令类型为函数调用 CALL指令,且所述CALL指令的调用方式为直接调用时,将返回地址压入所述指令流。
10、栈,当 分析CALL指令的跳转目标地址对应的指令流时,若遇到RET返回指令,则将指令流转到所 述返回地址对应的指令流继续分析;其中,所述返回地址为CALL指令的后一条指令对应的 地址。 13.一种可执行文件处理装置,其特征在于,包括: 入口点查找模块,用于基于可执行文件入口点文件偏移,查找文件入口点; 指令分析模块,用于以预先设定的分析步数X为基准,依次对所述入口点后的各指令 进行分析,获取可执行文件入口点后X条指令的操作码opcode,得到opcode组; 分类处理模块,用于以所述opcode组为分类条件,对各所述可执行文件进行分类处 理。 14.如权利要求13所述的装置,其特征在于,所述指。
11、令分析模块中预先设定的分析步 数X=2n,其中,n为正整数。 15.如权利要求13所述的装置,其特征在于,所述指令分析模块获取的opcode组由X 条指令对应的各opcode的第一个字节组成。 16.如权利要求13所述的装置,其特征在于,所述装置还包括: 关联模块,用于将各所述可执行文件的opcode组与杀毒引擎的病毒记录相关联。 17.如权利要求13所述的装置,其特征在于,所述指令分析模块在无法获取满足所述 分析步数X的opcode时,在组成opcode组时,将剩余位设置为空;或者,直接将当前获取的 opcode组成opcode组。 18.如权利要求13所述的装置,其特征在于,所述入口点查找。
12、模块,还用于在查找到文 件入口点后,利用反汇编引擎顺序解析所述入口点指令,并从反汇编引擎中获得入口点指 令的指令长度、指令opcode和指令类型。 19.如权利要求13至18任一项所述的装置,其特征在于,所述指令分析模块,具体包 括: 权 利 要 求 书CN 102855119 A 3/3页 4 指令流栈创建子模块,用于创建指令流栈; 类型判断子模块,用于判断当前分析的指令是否为Transfer指令,若是,触发第一分 析子模块,否则,触发第二分析子模块; 第一分析子模块,用于获取指令的跳转目标地址后压入所述指令流栈,并分析所述指 令以及所述指令流栈内目标地址对应的指令流,获取各指令的opcod。
13、e; 第二分析子模块,用于获取指令的opcode后,按着指令长度定位下一指令的方式,分 析下一指令。 20.如权利要求19所述的装置,其特征在于,所述第一分析子模块,具体用于当所 述Transfer指令类型为函数调用CALL指令或者无条件跳转JMP指令时,获取该指令的 opcode,并将指令流转到指令流栈内的所述CALL或者JMP指令的跳转目标地址对应的指令 流继续进行分析,获取指令opcode;当所述Transfer指令类型为条件跳转JCC指令或循环 LOOP指令时,获取该指令的opcode,并按着指令长度定位下一指令的方式,分析下一指令, 并在当前指令流指令数无法满足分析步数时,将指令流转。
14、到指令流栈内所述JCC或LOOP指 令的跳转目标地址对应的指令流继续进行分析,获取指令opcode。 21.如权利要求20所述的装置,其特征在于,所述第一分析子模块,还用于当所 述Transfer指令为函数调用CALL指令,且所述CALL指令为间接调用时,或者当所述 Transfer指令为条件跳转JCC指令,且所述JCC指令为间接跳转时,若无法获得指令的跳转 目标地址,则记录该指令的opcode后,按着指令长度定位下一指令的方式,继续下一指令 的分析。 22.如权利要求20所述的装置,其特征在于,所述第一分析子模块,还用于当所述 Transfer指令为无条件跳转JMP指令,且所述JMP指令为间。
15、接跳转时,若无法获取间接跳转 地址,则记录该指令的opcode后,停止本指令流分析,并查找指令流栈是否为空,如果不为 空则弹栈得到新指令流地址,转到该地址对应的指令流继续分析,获取指令opcode;如果 指令流栈为空,则停止分析。 23.如权利要求20所述的装置,其特征在于,所述第一分析子模块,还用于当所述 Transfer指令类型为函数调用CALL指令,且所述CALL指令的调用方式为跳转表时,或者, 当所述Transfer指令类型为无条件跳转JMP指令,且所述JMP指令的跳转方式为跳转表 时,将跳转表中所有跳转目标地址压入指令流栈,再将指令流转到指令流栈栈顶目标地址, 在分析栈顶目标地址对应。
16、的指令流后,若当前指令流的指令数无法满足所述分析步数,则 将分析栈顶目标地址得到的opcode丢弃,并将所述栈顶目标地址弹栈,继续转到栈顶目 标地址进行指令流分析,直到得到满足分析步数的opcode;或者,未得到满足分析步数的 opcode,记录分析栈内最后一个目的地址得到的opcode。 24.如权利要求20所述的装置,其特征在于,所述第一分析子模块,还用于当所述 Transfer指令类型为函数调用CALL指令,且所述CALL指令的调用方式为直接调用时,将返 回地址压入所述指令流栈,当分析CALL指令的跳转目标地址对应的指令流时,若遇到RET 返回指令,则将指令流转到所述返回地址对应的指令流。
17、继续分析;其中,所述返回地址为 CALL指令的后一条指令对应的地址。 权 利 要 求 书CN 102855119 A 1/11页 5 一种可执行文件处理方法和装置 技术领域 0001 本发明涉及互联网技术领域,尤其涉及一种可执行文件处理方法和装置。 背景技术 0002 随着互联网的发展,互联网用户的极具增加,互联网安全的形势也越来越严峻。互 联网安全的主要威胁之一来自木马病毒地传播。木马病毒主要以可执行文件为载体,所以 对于海量可执行文件的分类对于木马病毒的识别非常有意义。 0003 对于海量的可执行文件,由其对于病毒分析员来说,需要有效的方法对其进行分 类,分析一个可执行文件可以代表同一类的。
18、文件,如此才能够完成对海量可执行文件的分 析工作。 0004 目前对可执行文件分类的方法包括: 0005 一,可执行文件外部特征分类技术; 0006 此技术可以看作是一类方法的综合应用。对于可执行文件有许多外部特征,比如 可执行文件的大小,可执行文件的图标等。文件大小与图标也是目前最为常见的分类方法。 0007 其中,按照可执行文件大小分类时,文件大小相差不超过512个字节,都可以分为 同一个类型;按照可执行文件图标分类时,拥有相同图标的可执行文件可以分为同一类。 0008 上述可执行文件外部特征分类技术虽然简单易行,但缺点也显而易见,主要表现 为:外部特征有限,并且容易变化。对于可执行文件大。
19、小,只需要增加附加数据,就可以任意 修改文件大小,而并不影响可执行文件功能。对于文件 图标,并不是所有的可执行文件都 拥有图标,比如动态链接库就不需要图标,而目前许多木马病毒都是以动态链接库的面貌 出现,所以对于这部分文件无法使用此方法。 0009 二、二进制分类技术; 0010 所述二进制分类技术是通过识别可执行文件的二进制特征对文件进行分类的。例 如著名的编译器识别工具PEID就是使用二进制特征对文件进行编译器归类。通过比对可 执行文件入口点的二进制串,以及由此二进制串中提供的可执行文件中另外一处特征点, 进行编译器归类。 0011 PEID针对二进制特征也作了优化,比如特征取到代码段,这。
20、样无法随意修改二进 制特征,否则就可能使得程序执行不正常;另外二进制特征支持通匹符,这样可以具有一定 的通用性。 0012 然而,上述二进制分类技术,非常容易被干扰;对于二进制特征,只需要修改其中 特定的字节就可以干扰分类的结果;并且二进制特征的选择需要避开可执行文件中地址相 关的指令或代码,以保证二进制特征的正确性。另外,二进制数据库毕竟是有限的,会出现 无法分类的情况。 发明内容 0013 本发明提供一种可执行文件处理方法和装置,用以解决现有技术采用的分类方法 说 明 书CN 102855119 A 2/11页 6 不能对可执行文件进行有效分类的问题。 0014 为了解决上述问题,本发明采。
21、用的技术方案如下: 0015 一方面,本发明提供一种可执行文件处理方法,包括: 0016 基于可执行文件入口点文件偏移,查找可执行文件入口点; 0017 以预先设定的分析步数X为基准,依次对所述入口点后的各指令进行分析,获取 可执行文件入口点后X条指令的操作码opcode,得到opcode组; 0018 以所述opcode组为分类条件,对各所述可执行文件进行分类处理。 0019 进一步地,本发明所述方法中,所述预先设定的分析步数X=2 n ,其中,n为 正整数。 0020 进一步地,本发明所述方法中,所述opcode组由X条指令对应的各opcode的第一 个字节组成。 0021 进一步地,本发。
22、明所述方法中,还包括: 0022 将各所述可执行文件的opcode组与杀毒引擎的病毒记录相关联; 0023 所述杀毒引擎进行查毒时,获取待检查可执行文件的opcode组,判断该opocde组 是否与某一条或几条病毒记录相关联,若是,利用当前关联的病毒记录文件对所述待检查 可执行文件进行检查。 0024 进一步地,本发明所述方法中,当无法获取满足所述分析步数X的opcode时,在组 成opcode组时,将剩余位设置为空;或者,直接将当前获取的opcode组成opcode组。 0025 进一步地,本发明所述方法中,利用反汇编引擎顺序解析所述入口点指令,并从反 汇编引擎中获得入口点指令的指令长度、指。
23、令opcode和指令类型。 0026 进一步地,本发明所述方法中,所述依次对入口点后的各指令进行分析,获取可执 行文件入口点后X条指令的操作码opcode,具体包括: 0027 步骤1,创建指令流栈; 0028 步骤2,判断当前分析的指令是否为Transfer指令,若是,执行步骤3;否则,执行 步骤4; 0029 步骤3,获取指令的跳转目标地址后压入所述指令流栈,并分析所述指令以及所述 指令流栈内目标地址对应的指令流,获取各指令的opcode; 0030 步骤4,获取指令的opcode后,按着指令长度定位下一指令的方式,分析下一指 令。 0031 进一步地,本发明所述方法中,所述分析所述指令以。
24、及指令的目标地址对应的指 令流,获取各指令的opcode,具体包括: 0032 当所述Transfer指令类型为函数调用CALL指令或者无条件跳转JMP指令时,获 取该指令的opcode,并将指令流转到指令流栈内的所述CALL或者JMP 指令的跳转目标地 址对应的指令流继续进行分析,获取指令opcode; 0033 当所述Transfer指令类型为条件跳转JCC指令或循环LOOP指令时,获取该指令 的opcode,并按着指令长度定位下一指令的方式,分析下一指令,并在当前指令流指令数无 法满足分析步数时,将指令流转到指令流栈内所述JCC或LOOP指令的跳转目标地址对应的 指令流继续进行分析,获取。
25、指令opcode。 0034 进一步地,本发明所述方法中,当所述Transfer指令为函数调用CALL指令,且所 述CALL指令为间接调用时,或者,当所述Transfer指令为条件跳转JCC指令,且所述JCC 说 明 书CN 102855119 A 3/11页 7 指令为间接跳转时,若无法获得指令的跳转目标地址,则记录该指令的opcode后,按着指 令长度定位下一指令的方式,继续下一指令的分析。 0035 进一步地,本发明所述方法中,当所述Transfer指令为无条件跳转JMP指令,且所 述JMP指令为间接跳转时,若无法获取间接跳转目标地址,则记录该指令的opcode后,停止 本指令流分析,并。
26、查找指令流栈是否为空,如果不为空则弹栈得到新指令流地址,转到该地 址对应的指令流继续分析,获取指令opcode;如果指令流栈为空,则停止分析。 0036 进一步地,本发明所述方法中,当所述Transfer指令类型为函数调用CALL指令, 且所述CALL指令的调用方式为跳转表时,或者,当所述Transfer指令类型为无条件跳转 JMP指令,且所述JMP指令的跳转方式为跳转表时,所述分析指令流栈内目标地址对应的指 令流,具体包括: 0037 将跳转表中所有跳转目标地址压入指令流栈,再将指令流转到指令流栈栈顶目标 地址,在分析栈顶目标地址对应的指令流后,若当前指令流的指令数无法满足所述分析步 数,则。
27、将分析栈顶目标地址得到的opcode丢弃,并将所述栈顶目标地址弹栈,继续转到栈 顶目标地址进行指令流分析,直到得到满足分析步数的opcode;或者,未得到满足分析步 数的opcode,记录分析栈内最后一个目的地址得到的opcode。 0038 进一步地,本发明所述方法中,当所述Transfer指令类型为函数调用CALL 指令, 且所述CALL指令的调用方式为直接调用时,将返回地址压入所述指令流栈,当分析CALL指 令的跳转目标地址对应的指令流时,若遇到RET返回指令,则将指令流转到所述返回地址 对应的指令流继续分析;其中,所述返回地址为CALL指令的后一条指令对应的地址。 0039 另一方面,。
28、本发明还提供一种可执行文件处理装置,包括: 0040 入口点查找模块,用于基于可执行文件入口点文件偏移,查找文件入口点; 0041 指令分析模块,用于以预先设定的分析步数X为基准,依次对所述入口点后的各 指令进行分析,获取可执行文件入口点后X条指令的操作码opcode,得到opcode组; 0042 分类处理模块,用于以所述opcode组为分类条件,对各所述可执行文件进行分类 处理。 0043 进一步地,本发明所述装置中,所述指令分析模块中预先设定的分析步数X=2 n ,其 中,n为正整数。 0044 进一步地,本发明所述装置中,所述指令分析模块获取的opcode组由X条指令对 应的各opco。
29、de的第一个字节组成。 0045 进一步地,本发明所述装置中,其特征在于,所述装置还包括: 0046 关联模块,用于将各所述可执行文件的opcode组与杀毒引擎的病毒记录相关联, 使得杀毒引擎进行查毒时,先获取待检查可执行文件的opcode组,判断该opocde组是否与 某一条或几条病毒记录相关联,若是,利用当前关联的病毒记录文件对所述待检查可执行 文件进行检查。 0047 进一步地,本发明所述装置中,所述指令分析模块在无法获取满足所述分析步数X 的opcode时,在组成opcode组时,将剩余位设置为空;或者,直接将当前获取的opcode组 成opcode组。 0048 进一步地,本发明所述。
30、装置中,所述入口点查找模块,还用于在查找到文件入口点 后,利用反汇编引擎顺序解析所述入口点指令,并从反汇编引擎中获 得入口点指令的指令 说 明 书CN 102855119 A 4/11页 8 长度、指令opcode和指令类型。 0049 进一步地,本发明所述装置中,所述指令分析模块,具体包括: 0050 指令流栈创建子模块,用于创建指令流栈; 0051 类型判断子模块,用于判断当前分析的指令是否为Transfer指令,若是,触发第 一分析子模块,否则,触发第二分析子模块; 0052 第一分析子模块,用于获取指令的跳转目标地址后压入所述指令流栈,并分析所 述指令以及所述指令流栈内目标地址对应的指。
31、令流,获取各指令的opcode; 0053 第二分析子模块,用于获取指令的opcode后,按着指令长度定位下一指令的方 式,分析下一指令。 0054 进一步地,本发明所述装置中,第一分析子模块,具体用于当所述Transfer指令 类型为函数调用CALL指令或者无条件跳转JMP指令时,获取该指令的opcode,并将指令流 转到指令流栈内的所述CALL或者JMP指令的跳转目标地址对应的指令流继续进行分析,获 取指令opcode;当所述Transfer指令类型为条件跳转JCC指令或循环LOOP指令时,获取 该指令的opcode,并按着指令长度定位下一指令的方式,分析下一指令,并在当前指令流指 令数无。
32、法满足分析步数时,将指令流转到指令流栈内所述JCC或LOOP指令的跳转目标地址 对应的指令流继续进行分析,获取指令opcode。 0055 进一步地,本发明所述装置中,第一分析子模块,还用于当所述Transfer指令为 函数调用CALL指令,且所述CALL指令为间接调用时,或者当所述Transfer指令为条件跳 转JCC指令,且所述JCC指令为间接跳转时,若无法获得指令的跳转目标地址,则记录该指 令的opcode后,按着指令长度定位下一指令的方式,继续下一指令的分析。 0056 进一步地,本发明所述装置中,第一分析子模块,还用于当所述Transfer指令为 无条件跳转JMP指令,且所述JMP指。
33、令为间接跳转时,若无法获取间接跳转地址,则记录该 指令的opcode后,停止本指令流分析,并查找指令流栈是 否为空,如果不为空则弹栈得到 新指令流地址,转到该地址对应的指令流继续分析,获取指令opcode;如果指令流栈为空, 则停止分析。 0057 进一步地,本发明所述装置中,第一分析子模块,还用于当所述Transfer指令类 型为函数调用CALL指令,且所述CALL指令的调用方式为跳转表时,或者,当所述Transfer 指令类型为无条件跳转JMP指令,且所述JMP指令的跳转方式为跳转表时,将跳转表中所有 跳转目标地址压入指令流栈,再将指令流转到指令流栈栈顶目标地址,在分析栈顶目标地 址对应的。
34、指令流后,若当前指令流的指令数无法满足所述分析步数,则将分析栈顶目标地 址得到的opcode丢弃,并将所述栈顶目标地址弹栈,继续转到栈顶目标地址进行指令流分 析,直到得到满足分析步数的opcode;或者,未得到满足分析步数的opcode,记录分析栈内 最后一个目的地址得到的opcode。 0058 进一步地,本发明所述装置中,第一分析子模块,还用于当所述Transfer指令类 型为函数调用CALL指令,且所述CALL指令的调用方式为直接调用时,将返回地址压入所述 指令流栈,当分析CALL指令的跳转目标地址对应的指令流时,若遇到RET返回指令,则将指 令流转到所述返回地址对应的指令流继续分析;其。
35、中,所述返回地址为CALL指令的后一条 指令对应的地址。 0059 与现有技术相比,本发明有益效果如下: 说 明 书CN 102855119 A 5/11页 9 0060 本发明所述方法和装置采用的F2 n 分类技术,该技术为采用可执行文件内部特征 的分类技术,具有强抗干扰性,且不会出现文件无法分类的情况。另外,所述分类技术还具 有分类速度快、分类效果好等优点,可以实现对海量可执行文件的分类。 附图说明 0061 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现 有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图仅仅是 本发明的一些实施例,对于本领域。
36、普通技术人员来讲,在不 付出创造性劳动性的前提下, 还可以根据这些附图获得其他的附图。 0062 图1为本发明实施例提供的一种可执行文件处理方法的流程图; 0063 图2为本发明实施例中病毒记录与opcode组进行关联的示意图; 0064 图3为本发明实施例提供的一种可执行文件处理装置的结构框图。 具体实施方式 0065 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完 整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于 本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他 实施例,都属于本发明保护的范围。 0066。
37、 考虑到目前大量的木马病毒文件主要还是基于同样一份代码进行修改,大量的修 改方式只是修改文件中的小部分代码甚至小部分字节以躲避杀毒软件的查杀,其可执行文 件本身并没有本质变化。而现有的可执行文件分类技术极易受代码更改的影响,不利于病 毒查杀引擎的分类查杀。 0067 对此,本发明实施例提供一种可执行文件处理方法和装置,所述方法正是针对两 项已有技术的缺陷提出的,其抛弃了可执行文件地外部特征,通过可执行文件的内部特征 对文件进行分类,使得此项分类技术具有比较强的抗干扰性,且尽量减少了无法分类的情 况。 0068 本发明实施例所述方法和装置的基本原理在于:获取可执行文件入口点前2 n 条 (优选为。
38、16或者4条)指令的opcode(Operation Code,操作码),基于得到的opcode序列 进行分类,即,本发明实施例提出了首F16(F4)技术。 0069 其中,在获取opcode时,本发明实施例,优选地,采用指令流静态分析技术,即,通 过建立指令流栈,实现了对指令的静态分析。也就是说,在opcode获取时,并不是在CPU上 真实执行入口部分的指令。 0070 基于上述的原理介绍,下面通过几个具体实施例对本发明所述方法和装置进行详 细阐述。 0071 实施例一 0072 本发明实施例提供一种可执行文件处理方法,如图1所示,包括: 0073 步骤S101,基于可执行文件入口点文件偏移。
39、,查找可执行文件入口点; 0074 步骤S102,以预先设定的分析步数X为基准,依次对所述入口点后的各指令进行 分析,获取可执行文件入口点后X条指令的操作码opcode,得到opcode组; 说 明 书CN 102855119 A 6/11页 10 0075 该步骤中,预先设定的分析步数X=2 n ,n为正整数;优选地,n取2或4,即,分析步 数X为4或16。 0076 该步骤中,得到的opcode组由X条指令对应的各opcode的第一个字节组成。 0077 该步骤中,当无法获取满足所述分析步数X的opcode时,在组成opcode组时,将 剩余位设置为空;或者,直接将当前获取的opcode组。
40、成opcode组。 0078 该步骤中,对各指令进行分析包括: 0079 步骤1021,创建指令流栈; 0080 步骤1022,判断当前分析的指令是否为Transfer指令,若是,执行步骤1023;否 则,执行步骤1024; 0081 步骤1023,获取指令的跳转目标地址后压入所述指令流栈,并分析所述指令以及 所述指令流栈内目标地址对应的指令流,获取各指令的opcode; 0082 步骤1024,获取指令的opcode后,按着指令长度定位下一指令的方式,分析下一 指令。 0083 其中,分析指令以及指令的目标地址对应的指令流,获取各指令的opcode,具体包 括: 0084 当所述Transf。
41、er指令类型为函数调用CALL指令或者无条件跳转JMP指令时,获 取该指令的opcode,并将指令流转到指令流栈内的所述CALL或者JMP指令的跳转目标地址 对应的指令流继续进行分析,获取指令opcode; 0085 当所述Transfer指令类型为条件跳转JCC指令或循环LOOP指令时,获取 该指令 的opcode,并按着指令长度定位下一指令的方式,分析下一指令,并在当前指令流指令数无 法满足分析步数时,将指令流转到指令流栈内所述JCC或LOOP指令的跳转目标地址对应的 指令流继续进行分析,获取指令opcode。 0086 其中,所述分析指令流栈内目标地址对应的指令流,具体包括:将指令流转到。
42、所述 跳转目标地址,得到所述跳转目标地址对应指令流的第一条指令,并将该指令作为当前分 析的指令继续进行指令分析。 0087 进一步地,对各指令进行分析时,还包括: 0088 (1)当所述Transfer指令为函数调用CALL指令,且所述CALL指令为间接调用时, 或者,当所述Transfer指令为条件跳转JCC指令,且所述JCC指令为间接跳转时,若无法获 得指令的跳转目标地址,则记录该指令的opcode后,按着指令长度定位下一指令的方式, 继续下一指令的分析。 0089 (2)当所述Transfer指令为无条件跳转JMP指令,且所述JMP指令为间接跳转时, 若无法获取间接跳转目标地址,则记录该。
43、指令的opcode后,停止本指令流分析,并查找指 令流栈是否为空,如果不为空则弹栈得到新指令流地址,转到该地址对应的指令流继续分 析,获取指令opcode;如果指令流栈为空,则停止分析。 0090 (3)当所述Transfer指令类型为函数调用CALL指令,且所述CALL指令的调用方 式为跳转表时,或者,当所述Transfer指令类型为无条件跳转JMP指令,且所述JMP指令的 跳转方式为跳转表时,所述分析指令流栈内目标地址对应的指令流,具体包括: 0091 将跳转表中所有跳转目标地址压入指令流栈,再将指令流转到指令流栈栈顶目标 地址,在分析栈顶目标地址对应的指令流后,若当前指令流的指令数无法满。
44、足所述分析步 说 明 书CN 102855119 A 10 7/11页 11 数,则将分析栈顶目标地址得到的opcode丢弃,并将所述栈顶目标地址弹栈,继续转到栈 顶目标地址进行指令流分析,直到得到满足分析步数的opcode;或者,未得到满足分析步 数的opcode,记录分析栈内最后一个目的地址得到的opcode。 0092 (4)当所述Transfer指令类型为函数调用CALL指令,且所述CALL指令的调用方 式为直接调用时,将返回地址压入所述指令流栈,当分析CALL指令的跳转目标地址对应的 指令流时,若遇到RET返回指令,则将指令流转到所述返回地址对应的指令流继续分析;其 中,所述返回地址。
45、为CALL指令的后一条指令对应的地址。 0093 继续上述步骤S102: 0094 步骤S103,以opcode组为分类条件,对各所述可执行文件进行分类处理。 0095 该步骤中,具体是将相同opcode组的可执行文件分为一类。 0096 应用本发明实施例所述方法进行分类处理后,可以将该分类处理技术应用于安全 查杀领域,具体应用方式可以但不限于为: 0097 将各所述可执行文件的opcode组与杀毒引擎的病毒记录相关联; 0098 所述杀毒引擎进行查毒时,获取待检查可执行文件的opcode组,判断该opocde组 是否与某一条或几条病毒记录相关联,若是,利用当前关联的病毒记录文件对所述待检查 。
46、可执行文件进行检查。 0099 实施例二 0100 本发明实施例提供一种可执行文件处理方法,本实施例的实现原理与实施例一相 同,是对实施例一所述技术方案的进一步详细论述,本实施例采用F16(F4)技术,具体涉及 如下内容: 0101 步骤1,分析可执行文件结构,找到入口点的文件偏移; 0102 步骤2,利用反汇编引擎顺序解析入口点指令,从反汇编引擎中获得:指令的长 度、指令opcode和指令类型; 0103 步骤3,创建指令流栈,辅助指令流的分析; 0104 步骤4,依据指令类型,进行如下的动作: 0105 步骤41,判断当前分析的指令是否为Transfer指令,若否,执行步骤42; 0106。
47、 若是,基于Transfer指令的类型,执行步骤43、44、45或46; 0107 步骤42,如果此条指令不是Transfer指令,则记录此条指令opcode的第一个字 节,作为指令特征,并通过获得的指令长度,计算得到下一条指令的起始地址,并对下一条 指令进行分析,返回步骤41。 0108 步骤43,如果此条指令是CALL(函数调用指令),记录当前指令opcode的第一个 字节,再分析指令的调用方式: 0109 (1)如果是直接调用,则计算得到调用函数地址(即跳转目标地址),并将调用函数 地址压入指令流栈,再将指令流转到函数地址,得到目标函数的第一条指令,并对该指令进 行分析,返回步骤41; 。
48、0110 其中,当CALL指令的调用方式为直接调用时,还将返回地址压入所述指令流栈, 当分析CALL指令的跳转目标地址对应的指令流时,若遇到RET返回指令,则将指令流转到 所述返回地址对应的指令流继续分析;其中,所述返回地址为CALL指令的后一条指令对应 的地址。 说 明 书CN 102855119 A 11 8/11页 12 0111 (2)如果是间接调用,则尝试获得间接调用的函数地址(即跳转目标地址),若无法 得到,则按着指令长度定位下一指令的方式,继续下一指令的分析,返回步骤41; 0112 若可以得到调用函数地址,则将调用函数地址压入指令流栈,再将指令流转到调 用函数地址,得到目标函数。
49、对应指令流的第一条指令,并对该指令进行分析,返回步骤41; 0113 (3)如果是跳转表(C/C+语言中switch语句),则将跳转表内所有分枝函数地址 (即目标地址)都压入指令流栈,将指令流转到指令流栈栈顶分枝函数地址进行分析,若当 前指令流指令数无法满足最大分析步数,则将分析所述分枝函数地址得到的opcode丢弃, 并将指令流栈弹栈,再转到栈顶函数地址尝试进行分析,直到分析成功或指令流栈为空分 析失败。其中,指令流栈为空分析失败是指未获得完整的16(4)opcode组合。 0114 步骤44,如果此条指令是JMP(无条件跳转指令),记录当前指令opcode的第一个 字节,再分析指令的跳转方式: 0115 (1)如果是直接跳转,则计算得到跳转目标地址,并将跳转目标地址压入指令流 栈,再将指令流转到目标地址,得到目标地址对应的第。