一种反编译数据流分析中的寄存器清除方法及系统技术方案

技术编号:8161433 阅读:275 留言:0更新日期:2013-01-07 19:28
本发明专利技术公开了一种反编译数据流分析中的寄存器清除方法及系统,可以读取代码文件中的所有函数语句并对所读取的函数语句依次进行判断,当函数语句中包括寄存器名称时,构建二叉树并将该函数语句输入到所述二叉树中;进一步对包含有寄存器名称的函数语句依次进行判断,当该函数语句中包括二叉树右孩子结束标识时,对构建的二叉树进行消元处理以去除所述二叉树中的寄存器名称,生成最简二叉树,根据所述最简二叉树生成高级语言的函数语句。由于可以一次将所有语句进行读取,因此本发明专利技术不用再多次进行读写。同时,由于根据读取的函数语句构建了二叉树并对二叉树进行消元处理,因此可以很方便、快捷的得到不包含寄存器名称的函数语句,执行效率高。

【技术实现步骤摘要】

本专利技术涉及反编译
,特别是涉及ー种反编译数据流分析中的寄存器清除方法及系统
技术介绍
反编译技术作为计算机逆向技术中不可或缺的一部分,在分析系统漏洞、软件安全以及病毒木马等领域得到了广泛应用。反编译技术可以将汇编语言)转换为高级语言(如C语言)。在反编译技术中,最重要、最困难的 部分是数据流分析。数据流分析是ー种用于收集计算机程序在不同点计算的值的信息的技木。具体的,可以使用程序控制流图(CFG,control flow graph)来确定对变量的一次赋值可能传播到程序中的哪些部分。在数据流分析中,主要包括寄存器的清除和条件码的清除两个阶段。其中,现有的寄存器清除阶段一般采用如下方法让两个语句相互映射,然后消去其中叠加的寄存器。这种方法会造成磁盘的频繁读写,耗费了大量时间,执行效率低。
技术实现思路
为解决上述技术问题,本专利技术实施例提供一种反编译数据流分析中的寄存器清除方法及系统,以解决现有寄存器清除方法执行效率低的问题,技术方案如下一种反编译数据流分析中的寄存器清除方法,包括打开寄存器清除之前汇编语言的代码文件并读取所述代码文件中的所有函数语句;对所读取的函数语句依次进行判断,判断函数语句中是否包括寄存器名称,如果是,则构建ニ叉树并将该函数语句输入到所述ニ叉树中;对包含有寄存器名称的函数语句依次进行判断,判断该函数语句中是否包括ニ叉树右孩子结束标识,如果是,则对构建的ニ叉树进行消元处理以去除所述ニ叉树中的寄存器名称,生成最简ニ叉树,根据所述最简ニ叉树生成高级语言的函数语句;否则,继续判断后续函数语句中是否包括寄存器名称。优选的,所述寄存器名称为EAX、AX、BX、CX、DX、SP、SI、BP_DI。优选的,所述打开寄存器清除之前汇编语言的代码文件并读取所述代码文件中的所有函数语句,包括打开寄存器清除之前汇编语言的代码文件;根据所述代码文件中的所有函数语句构建单链表;遍历所述单链表。优选的,当所述寄存器名称为EAX时,所述ニ叉树右孩子结束标识为“eax ; ”。优选的,所述构建ニ叉树并将该函数语句输入到所述ニ叉树中,包括构建ニ叉树;将该函数语句中等号左边的代码输入到所述ニ叉树中的左孩子中;将该函数语句中等号右边的代码输入到所述ニ叉树中的右孩子中。优选的,所述进行消元处理以去除所述ニ叉树中的寄存器名称,生成最简ニ叉树,包括使用顶层根节点的右孩子中的代码替换顶层根节点下一层节点的右孩子中的寄存器名称并删除所述顶层根节点的下ー层节点。一种反编译数据流分析中的寄存器清除系统,包括读取单元、寄存器名称判断单元、ニ叉树构建単元、结束标识判断単元、消元単元和高级语言生成単元,所述读取単元,用于打开寄存器清除之前汇编语言的代码文件并读取所述代码文件中的所有函数语句;所述寄存器名称判断単元,用于对所读取的函数语句依次进行判断,判断函数语句中是否包括寄存器名称,如果是,则触发所述ニ叉树构建単元;所述ニ叉树构建単元,用于构建ニ叉树并将该函数语句输入到所述ニ叉树中;所述结束标识判断単元,用于对包含有寄存器名称的函数语句依次进行判断,判断该函数语句中是否包括ニ叉树右孩子结束标识,如果是,则触发所述消元単元;否则发送一判断指令到所述寄存器名称判断単元,使所述寄存器名称判断単元继续判断后续函数语句中是否包括寄存器名称;所述消元単元,用于对构建的ニ叉树进行消元处理以去除所述ニ叉树中的寄存器名称,生成最简_■叉树;所述高级语言生成単元,用于根据所述最简ニ叉树生成高级语言的函数语句。优选的,所述读取単元包括文件打开单元、单链表构建子単元和单链表遍历子单元,所述文件打开子单元,用于打开寄存器清除之前汇编语言的代码文件;所述单链表构建子単元,用于根据所述代码文件中的所有函数语句构建单链表;所述单链表遍历子単元,用于遍历所述单链表。优选的,所述ニ叉树构建単元包括ニ叉树构建子単元、左孩子子単元和右孩子子单元,所述ニ叉树构建子单元,用于构建ニ叉树;所述左孩子子単元,用于将该函数语句中等号左边的代码输入到所述ニ叉树中的左孩子中;所述右孩子子単元,用于将该函数语句中等号右边的代码输入到所述ニ叉树中的右孩子中。优选的,所述消元単元具体设置为使用顶层根节点的右孩子中的代码替换顶层根节点下一层节点的右孩子中的寄存器名称并删除所述顶层根节点的下ー层节点。通过应用以上技术方案,本专利技术提供的一种反编译数据流分析中的寄存器清除方法及系统,可以一次读取所有的函数语句,不用再多次进行读写。同吋,由于根据读取的函数语句构建了ニ叉树并对ニ叉树进行消元处理,因此可以很方便、快捷的得到不包含寄存器名称的函数语句,执行效率高。附图说明为了更清除地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图I为本专利技术实施例提供的一种反编译数据流分析中的寄存器清除方法的流程示意图;图2为本专利技术实施例提供的ー种汇编语言函数语句的示意图;图3为本专利技术实施例提供的另ー种反编译数据流分析中的寄存器清除方法的流程不意图;图4为本专利技术实施例提供的一种反编译数据流分析中的寄存器清除方法中单链表的不意图;图5为本专利技术实施例提供的另ー种反编译数据流分析中的寄存器清除方法的流程不意图;图6为本专利技术实施例提供的汇编语言语句的示意图;图7为本专利技术实施例提供的ニ叉树的示意图;图8为本专利技术实施例提供的ニ叉树的示意图;图9为本专利技术实施例提供的ニ叉树的示意图;图10为本专利技术实施例提供的ニ叉树的示意图;图11为本专利技术实施例提供的ニ叉树的示意图;图12为本专利技术实施例提供的ニ叉树的示意图;图13为本专利技术实施例提供的一种反编译数据流分析中的寄存器清除系统的结构示意图;图14为本专利技术实施例提供的另ー种反编译数据流分析中的寄存器清除系统的结构示意图;图15为本专利技术实施例提供的另ー种反编译数据流分析中的寄存器清除系统的结构示意图。具体实施例方式为了使本
的人员更好地理解本专利技术中的技术方案,下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清除、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本专利技术保护的范围。如图I所示,本专利技术实施例提供的一种反编译数据流分析中的寄存器清除方法,可以包括S101、打开寄存器清除之前汇编语言的代码文件并读取所述代码文件中的所有函数语句;其中,寄存器清除之前汇编语言的代码文件被打开后可以如图2所示。可以理解的是,汇编语言以“;”作为函数语句间的标识,每ー个“;”都代表着ー个函数语句的结束。本专利技术可以在ー个读操作的前提下,将所述代码文件中的函数语句全部读取。S102、对所读取的函数语句依次进行判断,判断函数语句中是否包括寄存器名称,如果是,则执行步骤S103 ;否则执行步骤S107 ;所述寄存器名称可以为EAX、AX、BX、CX、DX、SP、SI、BP或DI。需要说明的一点是,在汇编语言及高级语言中,EAX可以为小写的“eax”。一般而言,在约翰 本文档来自技高网
...

【技术保护点】
一种反编译数据流分析中的寄存器清除方法,其特征在于,包括:打开寄存器清除之前汇编语言的代码文件并读取所述代码文件中的所有函数语句;对所读取的函数语句依次进行判断,判断函数语句中是否包括寄存器名称,如果是,则构建二叉树并将该函数语句输入到所述二叉树中;对包含有寄存器名称的函数语句依次进行判断,判断该函数语句中是否包括二叉树右孩子结束标识,如果是,则对构建的二叉树进行消元处理以去除所述二叉树中的寄存器名称,生成最简二叉树,根据所述最简二叉树生成高级语言的函数语句;否则,继续判断后续函数语句中是否包括寄存器名称。

【技术特征摘要】

【专利技术属性】
技术研发人员:姚力李少腾楼轶胡瑛俊吴幸陆春光刘金硕郑稳
申请(专利权)人:浙江省电力公司电力科学研究院
类型:发明
国别省市:

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

1