[发明专利]一种反编译数据流分析中的寄存器清除方法及系统有效
申请号: | 201210283230.4 | 申请日: | 2012-08-10 |
公开(公告)号: | CN102855139A | 公开(公告)日: | 2013-01-02 |
发明(设计)人: | 姚力;李少腾;楼轶;胡瑛俊;吴幸;陆春光;刘金硕;郑稳 | 申请(专利权)人: | 浙江省电力公司电力科学研究院 |
主分类号: | G06F9/44 | 分类号: | G06F9/44;G06F17/30 |
代理公司: | 北京集佳知识产权代理有限公司 11227 | 代理人: | 王宝筠 |
地址: | 310014 浙*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 反编译 数据流 分析 中的 寄存器 清除 方法 系统 | ||
技术领域
本发明涉及反编译技术领域,特别是涉及一种反编译数据流分析中的寄存器清除方法及系统。
背景技术
反编译技术作为计算机逆向技术中不可或缺的一部分,在分析系统漏洞、软件安全以及病毒木马等领域得到了广泛应用。反编译技术可以将汇编语言)转换为高级语言(如C语言)。在反编译技术中,最重要、最困难的部分是数据流分析。数据流分析是一种用于收集计算机程序在不同点计算的值的信息的技术。具体的,可以使用程序控制流图(CFG,control flow graph)来确定对变量的一次赋值可能传播到程序中的哪些部分。
在数据流分析中,主要包括寄存器的清除和条件码的清除两个阶段。其中,现有的寄存器清除阶段一般采用如下方法:让两个语句相互映射,然后消去其中叠加的寄存器。
这种方法会造成磁盘的频繁读写,耗费了大量时间,执行效率低。
发明内容
为解决上述技术问题,本发明实施例提供一种反编译数据流分析中的寄存器清除方法及系统,以解决现有寄存器清除方法执行效率低的问题,技术方案如下:
一种反编译数据流分析中的寄存器清除方法,包括:
打开寄存器清除之前汇编语言的代码文件并读取所述代码文件中的所有函数语句;
对所读取的函数语句依次进行判断,判断函数语句中是否包括寄存器名称,如果是,则构建二叉树并将该函数语句输入到所述二叉树中;
对包含有寄存器名称的函数语句依次进行判断,判断该函数语句中是否包括二叉树右孩子结束标识,如果是,则对构建的二叉树进行消元处理以去除所述二叉树中的寄存器名称,生成最简二叉树,根据所述最简二叉树生成高级语言的函数语句;否则,继续判断后续函数语句中是否包括寄存器名称。
优选的,所述寄存器名称为:EAX、AX、BX、CX、DX、SP、SI、BP或DI。
优选的,所述打开寄存器清除之前汇编语言的代码文件并读取所述代码文件中的所有函数语句,包括:
打开寄存器清除之前汇编语言的代码文件;
根据所述代码文件中的所有函数语句构建单链表;
遍历所述单链表。
优选的,当所述寄存器名称为EAX时,所述二叉树右孩子结束标识为“eax;”。
优选的,所述构建二叉树并将该函数语句输入到所述二叉树中,包括:
构建二叉树;
将该函数语句中等号左边的代码输入到所述二叉树中的左孩子中;
将该函数语句中等号右边的代码输入到所述二叉树中的右孩子中。
优选的,所述进行消元处理以去除所述二叉树中的寄存器名称,生成最简二叉树,包括:
使用顶层根节点的右孩子中的代码替换顶层根节点下一层节点的右孩子中的寄存器名称并删除所述顶层根节点的下一层节点。
一种反编译数据流分析中的寄存器清除系统,包括:读取单元、寄存器名称判断单元、二叉树构建单元、结束标识判断单元、消元单元和高级语言生成单元,
所述读取单元,用于打开寄存器清除之前汇编语言的代码文件并读取所述代码文件中的所有函数语句;
所述寄存器名称判断单元,用于对所读取的函数语句依次进行判断,判断函数语句中是否包括寄存器名称,如果是,则触发所述二叉树构建单元;
所述二叉树构建单元,用于构建二叉树并将该函数语句输入到所述二叉树中;
所述结束标识判断单元,用于对包含有寄存器名称的函数语句依次进行判断,判断该函数语句中是否包括二叉树右孩子结束标识,如果是,则触发所述消元单元;否则发送一判断指令到所述寄存器名称判断单元,使所述寄存器名称判断单元继续判断后续函数语句中是否包括寄存器名称;
所述消元单元,用于对构建的二叉树进行消元处理以去除所述二叉树中的寄存器名称,生成最简二叉树;
所述高级语言生成单元,用于根据所述最简二叉树生成高级语言的函数语句。
优选的,所述读取单元包括:文件打开单元、单链表构建子单元和单链表遍历子单元,
所述文件打开子单元,用于打开寄存器清除之前汇编语言的代码文件;
所述单链表构建子单元,用于根据所述代码文件中的所有函数语句构建单链表;
所述单链表遍历子单元,用于遍历所述单链表。
优选的,所述二叉树构建单元包括:二叉树构建子单元、左孩子子单元和右孩子子单元,
所述二叉树构建子单元,用于构建二叉树;
所述左孩子子单元,用于将该函数语句中等号左边的代码输入到所述二叉树中的左孩子中;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于浙江省电力公司电力科学研究院,未经浙江省电力公司电力科学研究院许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201210283230.4/2.html,转载请声明来源钻瓜专利网。