一种基于子图语义同构的指令习语识别方法技术

技术编号:15109481 阅读:44 留言:0更新日期:2017-04-09 00:44
本发明专利技术公开了一种逆向分析中指令习语的分析方法,通过对一个基本块内的汇编指令序列流进行数据流分析,根据定义-使用关系构造指令序列流的数据依赖图,然后将数据依赖图中的每个联通子图与模板库中的模板进行子图语义同构匹配,发现语义同构子图,并将同构子图进行规约消减,分析子图的抽象操作和对应的操作数。该发明专利技术可以有效地提高逆向分析中中间代码的抽象程度,提高代码分析效率。

【技术实现步骤摘要】

本专利技术属于反编译
,具体涉及一种基于子图语义同构的指令习语识别方法
技术介绍
随着科技进步,目前大部分软件使用高级语言编写以机器码形式提供给用户,而机器码可读性差,人们需要将机器码程序翻译成易于理解的高级语言程序,达到对显卡有软件分析、理解和维护的目的。反编译技术又称为逆向编译技术,是指将可执行文件变成高级语言源程序的过程,反编译作为一种软件分析和理解的工具目前已经被广泛运用到程序理解、程序调试、源代码恢复等各个方面。反编译的过程通常包括:目标语言代码→反汇编→语言和编译器版本识别→库函数或类库识别→预处理→中间语言→数据流分析、控制流分析→翻译器→高级语言。目前,主流反编译软件包括Hex-Rays,RetargetableDecompiler,SecondWrite等,它们的基本技术是在汇编指令序列流中搜索相应的子序列,这种方法受到编译优化阶段的代码调度,代码优化等因素的影响,并不能够完全检测出程序中的指令习语。而基于子图语义同构的指令习语检测方法可以有效的检测出程序中因指令调度而被隐藏的指令习语,进而有效提高代码的抽象程度。
技术实现思路
本专利技术的目的是提供一种基于子图语义同构的指令习语识别方法,检测出程序中因指令调度而被隐藏的指令习语,提高代码的抽象程度。本专利技术所采用的技术方案是,一种基于子图语义同构的指令习语识别方法,包括以下步骤:步骤1:根据汇编程序控制流图的构建算法,构建过程体的汇编指令控制流图;步骤2:在步骤1所得的汇编指令控制流图上进行指令习语的分析,通过频繁序列挖掘算法分析出不同的指令习语所对应的指令序列流,将所有的指令习语和指令序列流构成数据依赖图;步骤3:步骤2中的数据依赖图键值对存储在数据库中,构建指令习语数据库;步骤4:遍历汇编指令控制流图中的每一个基本块,构造基本块的数据依赖图,将所得数据依赖图中的每一个连通子图分别与步骤3中所得指令习语数据库中的的指令习语所对应的数据依赖图进行子图语义同构匹配,并在基本块的数据依赖图中标记出被匹配的汇编指令控制流子图以及对应的指令习语;步骤5:根据数据流分析算法,分析出步骤4中被匹配的汇编指令控制流子图入口处和出口处的活跃变量,将活跃变量分别作为该汇编控制流子图所代表的抽象操作的参数和返回值;步骤6:将步骤5中被标记出来的汇编指令控制流子图进行消减,删除匹配到的节点,重构数据依赖图中的边集,即可实现指令习语的识别。本专利技术的特点还在于,步骤2中,利用频繁序列挖掘指令习语所对应的指令序列流的方法具体按照以下步骤实施:a)选择包含待挖掘指令习语的源程序,用不同的编译器的不同的优化级别编译源程序,得到二进制程序集合;b)利用反汇编工具反汇编二进制程序集合,得到汇编程序集合;c)利用汇编程序控制流图构建算法,构建汇编程序的控制流图;针对基于控制流图的汇编程序,以基本块为汇编程序作为用户编号,以基本块为事务编号以及以指令为事务类型;将b)到c)所建立的数据库作为频繁序列算法的输入,找出任一指令习语所对应的指令序列流。步骤2中,汇编程序控制流图构建算法具体按照以下步骤实施:a)构建空的未访问地址链表,并用函数入口地址初始化未访问地址链表;b)取未访问地址链表的首元素,如果该地址处的指令已经包含在汇编指令控制流图中的某个基本块中,则需要分裂包含该地址的基本块并重新构建基本块之间的跳转关系;否则,从该地址开始的内存中连续取指令,直到遇到跳转指令或程序结尾为止;以取到的指令集合为内容,实例化当前基本块;同时,为当前基本块的跳转地址和后继地址的指令序列构建基本块,并加入到汇编指令控制流图中;最后,设置当前基本块与跳转基本块以及当前基本块与后继基本块的跳转关系;c)将b)中分支基本块的跳转地址和后续地址加入到未访问地址链表中;d)重复执行b)到c),直至未访问地址链表为空。步骤3中,指令习语数据库的构建包括以下步骤:a)针对所有待挖掘的指令习语,构造包含相应指令习语的源程序,用不同编译器的不同优化级别编译源程序,利用频繁序列算法挖掘包含不同指令习语的源程序中的频繁序列,将这些频繁序列作为相应指令习语的指令序列流;b)将指令习语和相应的指令习语的指令序列流作为元素,通过定义-使用关系构建该指令序列流的数据依赖图G=(V,E),其中顶点V是基本块中的指令,边集E由定义-使用关系确定,若指令I使用了指令J定义的寄存器或内存,则构造一条有向边<I,J>;c)以指令习语和对应的数据依赖图为元素,将其插入到指令习语数据库中。d)重复步骤a)到c)的过程,直至构造出符合预期的指令习语数据库。步骤4具体按照以下步骤实施:a)对待匹配过程体的汇编指令控制流图中的每一个基本块进行数据流分析,并且根据定义-使用关系建立每个基本块的数据依赖图;b)将每个基本块中的数据依赖图中的连通子图与指令习语数据库中的指令习语对应的数据依赖图进行子图语义同构匹配,并在基本块的数据依赖图中标记出匹配子图以及对应的指令习语。步骤5中,参数和返回值的确定包括以下步骤:a)以汇编指令控制流图的基本块为单位进行数据流分析,计算被匹配的汇编指令控制流子图入口处和出口处的活跃变量;b)将匹配到的指令习语入口处的活跃变量作为该指令习语的参数,以匹配到的指令习语出口处的活跃变量作为该指令习语的返回值。步骤6中,重构数据依赖图的边集包括以下步骤:a)确定数据依赖图中被匹配指令习语的边界;b)删除被匹配的的子图。本专利技术的有益效果是,在反汇编阶段,检测指令习语可以提高中间表达式的通用性;在基于控制流图的汇编程序上进行指令习语分析,可以消减中间表达式的数目和降低控制流的复杂度,进而可以有效简化后续数据流分析和控制流分析;在基本块内进行指令习语检测,使得指令习语分析有了边界,提高了指令习语分析的精确度;通过构造基本块内的指令之间的数据依赖图,可以有效地消除指令调度对于指令顺序的影响,提高指令习语的识别精度;子图语义同构算法可以精确的匹配出基本块的数据依赖图中内嵌的指令习语。附图说明图1是本专利技术一种基于子图语义同构的指令习语识别方法的工作流程图;图2是x86中除7指令习语的数据依赖图;图3是本专利技术方法中子图语义同构匹配过程的示意图;具体实施方式下面结合附图和具体实施方式对本专利技术进行详细说明。本专利技术一种基于子图语义同构的指令习语识别方法,工作流程如图1所示,具体按照以下步骤实施:...

【技术保护点】
一种基于子图语义同构的指令习语识别方法,其特征在于,包括以下步骤:步骤1:根据汇编程序控制流图的构建算法,构建过程体的汇编指令控制流图;步骤2:在步骤1所得的汇编指令控制流图上进行指令习语的分析,通过频繁序列挖掘算法分析出不同的指令习语所对应的指令序列流,将所有的指令习语和指令序列流构成数据依赖图;步骤3:将步骤2所得的数据依赖图键值对存储在数据库中,构建指令习语数据库;步骤4:遍历汇编指令控制流图中的每一个基本块,构造基本块的数据依赖图,将所得数据依赖图中的每一个连通子图分别与步骤3中所得指令习语数据库中的指令习语对应的数据依赖图进行子图语义同构匹配,并在基本块的数据依赖图中标记出被匹配的汇编指令控制流子图以及对应的指令习语;步骤5:根据数据流分析算法,分析出步骤4中被匹配的汇编指令控制流子图入口处和出口处的活跃变量,将活跃变量分别作为该汇编控制流子图所代表的抽象操作的参数和返回值;步骤6:将步骤5中被标记出来的汇编指令控制流子图进行消减,删除匹配到的节点,重构数据依赖图中的边集,即可实现指令习语的识别。

【技术特征摘要】
1.一种基于子图语义同构的指令习语识别方法,其特征在于,包括以下步骤:
步骤1:根据汇编程序控制流图的构建算法,构建过程体的汇编指令控制流图;
步骤2:在步骤1所得的汇编指令控制流图上进行指令习语的分析,通过频繁序列挖掘
算法分析出不同的指令习语所对应的指令序列流,将所有的指令习语和指令序列流构成数
据依赖图;
步骤3:将步骤2所得的数据依赖图键值对存储在数据库中,构建指令习语数据库;
步骤4:遍历汇编指令控制流图中的每一个基本块,构造基本块的数据依赖图,将所得
数据依赖图中的每一个连通子图分别与步骤3中所得指令习语数据库中的指令习语对应的
数据依赖图进行子图语义同构匹配,并在基本块的数据依赖图中标记出被匹配的汇编指令
控制流子图以及对应的指令习语;
步骤5:根据数据流分析算法,分析出步骤4中被匹配的汇编指令控制流子图入口处和
出口处的活跃变量,将活跃变量分别作为该汇编控制流子图所代表的抽象操作的参数和返
回值;
步骤6:将步骤5中被标记出来的汇编指令控制流子图进行消减,删除匹配到的节点,重
构数据依赖图中的边集,即可实现指令习语的识别。
2.根据权利要求1所述的一种基于子图语义同构的指令习语识别方法,其特征在于,所
述步骤2中利用频繁序列挖掘指令习语所对应的指令序列流的方法具体按照以下步骤实
施:
a)选择包含待挖掘指令习语的源程序,用不同的编译器的不同的优化级别编译源程
序,得到二进制程序集合;
b)利用反汇编工具反汇编二进制程序集合,得到汇编程序集合;
c)利用汇编程序控制流图构建算法,构建汇编程序的控制流图;针对基于控制流图的
汇编程序,以基本块为汇编程序为用户编号,以基本块为事务编号以及以指令为事务类型;
将b)到c)所建立的数据库作为频繁序列算法的输入,找出任一指令习语所对应的指令序列
流。
3.根据权利要求1或2所述的一种基于子图语义同构的指令习语识别方法,其特征在
于,所述的汇编程序控制流图构建算法具体按照以下步骤实施:
a)构建空的未访问地址链表,并用函数入口地址初始化未访问地址链表;
b)取未访问地址链表的首元素,如果该地址处的指令已经包含在汇编指令控制流图中
的某个基本块中,则需要分裂包含该地址的基本块并重新构建基本块之间的跳转关系;否
则,从该地址开始的内存中连续取指令,直到遇到跳转指令或程序结尾为止;以取到的指令
集合为内容实例化当...

【专利技术属性】
技术研发人员:李浩高寅生李向军李立崔啸华
申请(专利权)人:西安文理学院
类型:发明
国别省市:陕西;61

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1