去除花指令的方法及装置的制作方法

文档序号:6338850阅读:420来源:国知局
专利名称:去除花指令的方法及装置的制作方法
技术领域
本发明涉及信息安全领域,特别涉及去除花指令的方法及装置。
技术背景
当前的网络环境中,存在着大量的恶意代码,并且,恶意代码的作者为了干扰 信息安全人员对恶意代码进行分析,增加代码的逆向难度,常会使用加入花指令或随机 插入垃圾代码等方法,这既造成了信息安全人员对恶意代码分析困难,也造成了难以提 取特征码的问题,导致一个文件就需要一段特征来匹配,有多少文件,就需要多少特 征,这无疑增加了信息安全人员的工作量。现在的技术只能通过虚拟执行的方法,强制 执行代码,直至解密出固定可供提取特征的数据来解决这种问题,并且,虚拟执行的速 度很慢,而且有分析失控而导致误运行恶意代码的可能。发明内容
本发明提供了一种去除花指令的方法及装置,解决了虚拟执行速度慢,易分析 失控的问题。
一种去除花指令的方法,包括步骤a:对内存缓冲区中的指令进行反汇编,并保存反汇编得到的指令; 步骤b:判断反汇编得到的指令是否是写内存指令,如果是,则查找并保存写内存 指令寄存器,转步骤d,否则,转步骤C;步骤c:判断反汇编得到的指令是否是循环跳转指令,如果是,则查找并保存控制循 环体寄存器,转步骤d,否则,直接转步骤d;步骤d:判断是否达到停止进行反汇编的条件,如果是,则转步骤e,否则,转步骤a ;步骤e:对于保存的任意一个寄存器,在反汇编得到的所有指令中逆向查找与所述寄 存器相关的指令,当满足停止查找的条件时,停止查找与所述寄存器相关的指令;步骤f:当查找完所有寄存器的相关指令后,删除反汇编得到的所有指令中与寄存器 的相关指令不同的指令。
所述的方法中,判断反汇编得到的指令是否是写内存指令包括判断反汇编得到的指令中的目的操作数是否为内存地址,如果是,则确定为写内存 指令,否则,为非写内存指令;或者,判断反汇编得到的指令是否为隐式操作数指令,如果是,则确定为写内存指 令,否则,为非写内存指令。
所述的方法中,如果反汇编得到的指令为循环跳转指令,则查找并保存控制循 环体寄存器包括如果循环跳转指令为LOOP指令、LOOPNE指令或LOOPZ指令,则保存ECX寄存器;如果循环跳转指令为jcc指令,则逆向查找第一个CMP指令、SUB指令、TEST指 令、OR指令或AND指令,保存CMP指令寄存器、SUB指令寄存器、TEST指令寄存 器、OR指令寄存器或AND指令寄存器;如果循环跳转指令为jmp指令,则查找能够调出循环体的组合指令,保存所述组合 指令寄存器。
所述的方法中,保存写内存指令寄存器包括将写内存指令寄存器保存到寄存 器链表中;保存控制循环体寄存器包括将控制循环体寄存器保存到寄存器链表中; 对于保存的任意一个寄存器具体为对于寄存器链表中的任意一个寄存器。
所述的方法中,判断是否达到停止进行反汇编的条件具体为 判断反汇编得到的指令是否是循环体结束指令;或者,判断反汇编指令的数量是否达到预设的数量。
所述的方法中,满足停止查找的条件具体为查找到将数据从内存读取到CPU的 指令。
一种去除花指令的装置,包括反汇编单元,用于对缓冲区中的指令进行反汇编,并保存反汇编得到的指令; 第一判断单元,用于判断反汇编得到的指令是否是写内存指令; 存储单元,用于当第一判断单元判断反汇编得到的指令是写内存指令时,查找并保 存写内存指令寄存器;第二判断单元,用于在第一判断单元判断反汇编得到的指令为非写内存指令后,判 断反汇编得到的指令是否是循环跳转指令,如果是,则存储单元查找并保存控制循环体 寄存器;第三判断单元,用于当第一判断单元判断反汇编得到的指令是写内存指令后,或者 当第二判断单元判断反汇编得到的指令是否是循环跳转指令后,判断是否达到停止进行 反汇编的条件,如果没有达到停止进行反汇编的条件,则有反汇编单元对缓冲区的下一 指令进行反汇编;查找单元,用于在第三判断单元判断达到停止进行反汇编的条件后,对于存储单元 保存的任意一个寄存器,在反汇编单元进行反汇编得到的所有指令中,逆向查找与所述 寄存器相关的指令,当满足停止查找条件时,停止查找与所述寄存器相关的指令;比较单元,用于当查找单元查找完所有寄存器的相关指令后,删除反汇编得到的所 有指令中与寄存器的相关指令不同的指令。
所述的装置中,第一判断单元具体用于判断反汇编得到的指令中的目的操作数 是否为内存地址,如果是,则确定为写内存指令,否则,为非写内存指令;或者,第一判断单元具体用于判断反汇编得到的指令是否为隐式操作数指令,如果 是,则确定为写内存指令,否则,为非写内存指令。
所述的装置中,如果第二判断单元判断出循环跳转指令为LOOP指令、 LOOPNE指令或LOOPZ指令,则存储单元保存ECX寄存器;如果第二判断单元判断出循环跳转指令为jcc指令,则逆向查找第一个CMP指令、 SUB指令、TEST指令、OR指令或AND指令,则存储单元保存CMP指令寄存器、SUB指令寄存器、TEST指令寄存器、OR指令寄存器或AND指令寄存器;如果第二判断单元判断出循环跳转指令为jmp指令,则存储单元查找能够调出循环 体的组合指令,并保存所述指令寄存器。
所述的装置中,存储单元具体用于将写内存指令寄存器保存到寄存器链表中; 存储单元保存控制循环体寄存器包括将控制循环体寄存器保存到寄存器链表中; 对于保存的任意一个寄存器具体为对于寄存器链表中的任意一个寄存器。
所述的装置中,第三判断单元具体用于判断反汇编得到的指令是否是循环体结 束指令;或者,第三判断单元具体用于判断反汇编指令的数量是否达到预设的数量。
所述的装置中,满足停止查找的条件具体为查找到将数据从内存读取到CPU的 指令。
本发明提供了一种去除花指令的方法和装置,通过对缓冲区中的指令进行反汇 编,并保存所有反汇编得到的指令,保存所有的写内存指令及写内存指令寄存器,根据 写内存指令寄存器,逆向查找反汇编得到的所有指令,查找到所有与写内存指令寄存器 相关的指令,将反汇编得到的所有指令与寄存器相关指令进行比较,删除不同的指令, 删除的指令即为花指令,删除花指令不影响程序的正常运行,并解决了虚拟执行速度 慢,易分析失控的问题。


为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描 述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明中 记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还 可以根据这些附图获得其他的附图。
图1为本发明提供的一种去除花指令的方法流程图; 图2为本发明提供的一种去除花指令的装置结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明实施例中的技术方案,并使本发明 的上述目的、特征和优点能够更加明显易懂,下面结合附图对本发明中技术方案作进一 步详细的说明。
本发明提供了一种去除花指令的方法及装置,解决了虚拟执行速度慢,易分析 失控的问题。
本发明提供了一种去除花指令的方法,包括步骤a:对内存缓冲区中的指令进行反汇编,并保存反汇编得到的指令; 步骤b:判断反汇编得到的指令是否是写内存指令,如果是,则查找并保存写内存 指令寄存器,转步骤d,否则,转步骤C;步骤c:判断反汇编得到的指令是否是循环跳转指令,如果是,则查找并保存控制循 环体寄存器,转步骤d,否则,直接转步骤d;步骤d:判断是否达到停止进行反汇编的条件,如果是,则转步骤e,否则,转步骤步骤e:对于保存的任意一个寄存器,在反汇编得到的所有指令中逆向查找与所述寄 存器相关的指令,当满足停止查找的条件时,停止查找与所述寄存器相关的指令;步骤f:当查找完所有寄存器的相关指令后,删除反汇编得到的所有指令中与寄存器 的相关指令不同的指令。
所述的方法中,判断反汇编得到的指令是否是写内存指令包括判断反汇编得到的指令中的目的操作数是否为内存地址,如果是,则确定为写内存 指令,否则,为非写内存指令;或者,判断反汇编得到的指令是否为隐式操作数指令,如果是,则确定为写内存指 令,否则,为非写内存指令。
所述的方法中,如果反汇编得到的指令为循环跳转指令,则查找并保存控制循 环体寄存器包括如果循环跳转指令为LOOP指令、LOOPNE指令或LOOPZ指令,则保存ECX寄存器;如果循环跳转指令为jcc指令,则逆向查找第一个CMP指令、SUB指令、TEST指 令、OR指令或AND指令,保存CMP指令寄存器、SUB指令寄存器、TEST指令寄存 器、OR指令寄存器或AND指令寄存器;如果循环跳转指令为jmp指令,则查找能够调出循环体的组合指令,保存所述组合 指令寄存器。
所述的方法中,保存写内存指令寄存器包括将写内存指令寄存器保存到寄存 器链表中;保存控制循环体寄存器包括将控制循环体寄存器保存到寄存器链表中; 对于保存的任意一个寄存器具体为对于寄存器链表中的任意一个寄存器。
所述的方法中,判断是否达到停止进行反汇编的条件具体为 判断反汇编得到的指令是否是循环体结束指令;或者,判断反汇编指令的数量是否达到预设的数量。
所述的方法中,满足停止查找的条件具体为查找到将数据从内存读取到CPU的 指令。
结合上述方法的应用,对本发明涉及的技术方案做进一步举例说明,本发明提 供了一种去除花指令的方法,如图1所示,包括SlOl 对内存缓冲区中的指令进行反汇编,并保存反汇编得到的指令; S102判断反汇编得到的指令是否是写内存指令,如果是,则执行S103,否则,执 行 S104 ;S103查找并保存所有写内存指令寄存器到寄存器链表中,执行S106; 查找并保存所有写内存指令寄存器到寄存器链表包括 当写内存指令为STOS指令时,直接记录寄存器EAX、EDI ; 当写内存指令为pop指令时,如果所述的pop指令操作寄存器,则记录所操作的寄存 器,并逆向查找到第一个push指令,并记录相寄存器; 其他情况则直接记录寄存器。
S104判断是否是循环跳转指令,如果是,则执行S105,否则直接执行S106 ;S105查找并保存控制循环体寄存器到寄存器链表,执行S106; S106 判断是否到达停止进行反汇编的条件;S107根据寄存器链表中记录的任意一个寄存器,逐一在反汇编得到的指令链中逆 向查找并存储与所述寄存器相关指令,当查找到将数据从内存读取到CPU的指令时,停 止对当前寄存器的查找;S108 删除反汇编得到的所有指令中与寄存器相关指令不同的指令。
判断反汇编得到的指令是否是写内存指令包括判断反汇编得到的指令中的目的操作数是否为内存地址,如果是,则确定为写内存 指令,否则,为非写内存指令;或者,判断反汇编得到的指令是否为隐式操作数指令,如果是,则确定为写内存指 令,否则,为非写内存指令。
如果反汇编得到的指令为循环跳转指令,则查找并保存控制循环体寄存器包 括如果循环跳转指令为LOOP指令、LOOPNE指令或LOOPZ指令,则保存ECX寄存器;如果循环跳转指令为jcc指令,则逆向查找第一个CMP指令、SUB指令、TEST指 令、OR指令或AND指令,保存CMP指令寄存器、SUB指令寄存器、TEST指令寄存 器、OR指令寄存器或AND指令寄存器;如果循环跳转指令为jmp指令,则查找能够调出循环体的组合指令,保存所述组合 指令寄存器。
判断是否达到停止进行反汇编的条件具体为 判断反汇编得到的指令是否是循环体结束指令; 或者,判断反汇编指令的数量是否达到预设的数量。
本发明还提供了一种去除花指令的装置,包括反汇编单元201,用于对缓冲区中的指令进行反汇编,并保存反汇编得到的指令; 第一判断单元202,用于判断反汇编得到的指令是否是写内存指令; 存储单元203,用于当第一判断单元202判断反汇编得到的指令是写内存指令时,查 找并保存写内存指令寄存器;第二判断单元204,用于在第一判断单元202判断反汇编得到的指令为非写内存指令 后,判断反汇编得到的指令是否是循环跳转指令,如果是,则存储单元203查找并保存 控制循环体寄存器;第三判断单元205,用于当第一判断单元202判断反汇编得到的指令是写内存指令 后,或者当第二判断单元204判断反汇编得到的指令是否是循环跳转指令后,判断是否 达到停止进行反汇编的条件,如果没有达到停止进行反汇编的条件,则由反汇编单元对 缓冲区中的下一个指令进行反汇编;查找单元206,用于在第三判断单元205判断达到停止进行反汇编的条件后,对于存 储单元保存的任意一个寄存器,在反汇编单元201进行反汇编得到的所有指令中,逆向 查找与所述寄存器相关的指令,当满足停止查找条件时,停止查找与所述寄存器相关的指令;比较单元207,用于当查找单元206查找完所有寄存器的相关指令后,删除反汇编得 到的所有指令中与寄存器的相关指令不同的指令。
所述的装置中,第一判断单元202具体用于判断反汇编得到的指令中的目的操 作数是否为内存地址,如果是,则确定为写内存指令,否则,为非写内存指令;或者,第一判断单元202判断反汇编得到的指令是否为隐式操作数指令,如果是, 则确定为写内存指令,否则,为非写内存指令。
所述的装置中,如果第二判断单元204判断出循环跳转指令为LOOP指令、 LOOPNE指令或LOOPZ指令,则存储单元保存ECX寄存器;如果第二判断单元204判断出循环跳转指令为jcc指令,则逆向查找第一个CMP指 令、SUB指令、TEST指令、OR指令或AND指令,则存储单元保存CMP指令寄存器、 SUB指令寄存器、TEST指令寄存器、OR指令寄存器或AND指令寄存器;如果第二判断单元204判断出循环跳转指令为jmp指令,则存储单元203查找能够调 出循环体的组合指令,并保存所述指令寄存器。
所述的装置中,存储单元203具体用于将写内存指令寄存器保存到寄存器链表 中;存储单元203具体用于将控制循环体寄存器保存到寄存器链表中; 对于保存的任意一个寄存器具体为对于寄存器链表中的任意一个寄存器。
所述的装置中,第三判断单元205具体用于判断反汇编得到的指令是否是循环 体结束指令;或者,第三判断单元205具体用于判断反汇编指令的数量是否达到预设的数量。
所述的装置中,满足停止查找的条件具体为查找到将数据从内存读取到CPU的 指令。
本发明提供了一种去除花指令的方法和装置,通过对缓冲区中的指令进行反汇 编,并保存所有反汇编得到的指令,保存所有的写内存指令及写内存指令寄存器,根据 写内存指令寄存器,逆向查找反汇编得到的所有指令,查找到所有与写内存指令寄存器 相关的指令,将反汇编得到的所有指令与寄存器相关指令进行比较,删除不同的指令, 删除的指令即为花指令,删除花指令不影响程序的正常运行。
虽然通过实施例描绘了本发明,本领域普通技术人员知道,本发明有许多变形 和变化而不脱离本发明的精神,希望所附的权利要求包括这些变形和变化而不脱离本发 明的精神。
权利要求
1.一种去除花指令的方法,其特征在于,包括步骤a:对内存缓冲区中的指令进行反汇编,并保存反汇编得到的指令; 步骤b:判断反汇编得到的指令是否是写内存指令,如果是,则查找并保存写内存 指令寄存器,转步骤d,否则,转步骤C;步骤c:判断反汇编得到的指令是否是循环跳转指令,如果是,则查找并保存控制循 环体寄存器,转步骤d,否则,直接转步骤d;步骤d:判断是否达到停止进行反汇编的条件,如果是,则转步骤e,否则,转步骤a ;步骤e:对于保存的任意一个寄存器,在反汇编得到的所有指令中逆向查找与所述寄 存器相关的指令,当满足停止查找的条件时,停止查找与所述寄存器相关的指令;步骤f:当查找完所有寄存器的相关指令后,删除反汇编得到的所有指令中与寄存器 的相关指令不同的指令。
2.如权利要求1所述的方法,其特征在于,判断反汇编得到的指令是否是写内存指令 包括判断反编得到的指令中的目的操作数是否为内存地址,如果是,则确定为写内存 指令,否则,为非写内存指令;或者,判断反汇编得到的指令是否为隐式操作数指令,如果是,则确定为写内存指 令,否则,为非写内存指令。
3.如权利要求1所述的方法,其特征在于,如果反汇编得到的指令为循环跳转指令, 则查找并保存控制循环体寄存器包括如果循环跳转指令为LOOP指令、LOOPNE指令或LOOPZ指令,则保存ECX寄存器;如果循环跳转指令为jcc指令,则逆向查找第一个CMP指令、SUB指令、TEST指 令、OR指令或AND指令,保存CMP指令寄存器、SUB指令寄存器、TEST指令寄存 器、OR指令寄存器或AND指令寄存器;如果循环跳转指令为jmp指令,则查找能够调出循环体的组合指令,保存所述组合 指令寄存器。
4.如权利要求1所述的方法,其特征在于,保存写内存指令寄存器包括将写内存 指令寄存器保存到寄存器链表中;保存控制循环体寄存器包括将控制循环体寄存器保存到寄存器链表中; 对于保存的任意一个寄存器具体为对于寄存器链表中中的任意一个寄存器。
5.如权利要求1所述的方法,其特征在于,判断是否达到停止进行反汇编的条件具体为判断反汇编得到的指令是否是循环体结束指令; 或者,判断反汇编指令的数量是否达到预设的数量。
6.如权利要求1所述的方法,其特征在于,满足停止查找的条件具体为查找到将数据 从内存读取到CPU的指令。
7.—种去除花指令的装置,其特征在于,包括反汇编单元,用于对缓冲区中的指令进行反汇编,并保存反汇编得到的指令;2第一判断单元,用于判断反汇编得到的指令是否是写内存指令;存储单元,用于当第一判断单元判断反汇编得到的指令是写内存指令时,查找并保 存写内存指令寄存器;第二判断单元,用于在第一判断单元判断反汇编得到的指令为非写内存指令后,判 断反汇编得到的指令是否是循环跳转指令,如果是,则存储单元查找并保存控制循环体 寄存器;第三判断单元,用于当第一判断单元判断反汇编得到的指令是写内存指令后,或者 当第二判断单元判断反汇编得到的指令是否是循环跳转指令后,判断是否达到停止进行 反汇编的条件,如果没有达到停止进行反汇编的条件,则由反汇编单元对缓冲区中的下 一个指令进行反汇编;查找单元,用于在第三判断单元判断达到停止进行反汇编的条件后,对于存储单元 保存的任意一个寄存器,在反汇编单元进行反汇编得到的所有指令中,逆向查找与所述 寄存器相关的指令,当满足停止查找条件时,停止查找与所述寄存器相关的指令;比较单元,用于当查找单元查找完所有寄存器的相关指令后,删除反汇编得到的所 有指令中与寄存器相关指令不同的指令。
8.如权利要求7所述的装置,其特征在于,第一判断单元具体用于判断反汇编得到的 指令中的目的操作数是否为内存地址,如果是,则确定为写内存指令,否则,为非写内 存指令;或者,第一判断单元具体用于判断反汇编得到的指令是否为隐式操作数指令,如果 是,则确定为写内存指令,否则,为非写内存指令。
9.如权利要求7所述的装置,其特征在于,如果第二判断单元判断出循环跳转指令为 LOOP指令、LOOPNE指令或LOOPZ指令,则存储单元保存ECX寄存器;如果第二判断单元判断出循环跳转指令为jcc指令,则逆向查找第一个CMP指令、 SUB指令、TEST指令、OR指令或AND指令,则存储单元保存CMP指令寄存器、SUB 指令寄存器、TEST指令寄存器、OR指令寄存器或AND指令寄存器;如果第二判断单元判断出循环跳转指令为jmp指令,则存储单元查找能够调出循环 体的组合指令,并保存所述指令寄存器。
10.如权利要求7所述的装置,其特征在于,存储单元具体用于将写内存指令寄存器 保存到寄存器链表中;存储单元具体用于将控制循环体寄存器保存到寄存器链表中;对于保存的任意一个寄存器具体为对于寄存器链表中的任意一个寄存器。
11.如权利要求7所述的装置,其特征在于,第三判断单元具体用于判断反汇编得到 的指令是否是循环体结束指令;或者,第三判断单元具体用于判断反汇编指令的数量是否达到预设的数量。
12.如权利要求7所述的装置,其特征在于,满足停止查找的条件具体为查找到将数 据从内存读取到CPU的指令。
全文摘要
本发明提供了一种去除花指令的方法和装置,通过对缓冲区中的指令进行反汇编,并保存反汇编得到的指令,保存所有的写内存指令及写内存指令寄存器,根据写内存指令寄存器,逆向查找反汇编得到的指令,查找到所有与写内存指令寄存器相关的指令,将反汇编得到的所有指令与寄存器相关指令进行比较,删除不同的指令,即为花指令。通过本发明提供的方法,解决了虚拟执行代码速度慢,容易分析失控的问题。
文档编号G06F9/30GK102023842SQ20101059115
公开日2011年4月20日 申请日期2010年12月16日 优先权日2010年12月16日
发明者张栗伟, 李石磊, 童志明 申请人:北京安天电子设备有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1