CN102855139B - 一种反编译数据流分析中的寄存器清除方法及系统 - Google Patents

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

Info

Publication number
CN102855139B
CN102855139B CN201210283230.4A CN201210283230A CN102855139B CN 102855139 B CN102855139 B CN 102855139B CN 201210283230 A CN201210283230 A CN 201210283230A CN 102855139 B CN102855139 B CN 102855139B
Authority
CN
China
Prior art keywords
binary tree
register
function
function statement
unit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201210283230.4A
Other languages
English (en)
Other versions
CN102855139A (zh
Inventor
姚力
李少腾
楼轶
胡瑛俊
吴幸
陆春光
刘金硕
郑稳
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
State Grid Corp of China SGCC
Electric Power Research Institute of State Grid Zhejiang Electric Power Co Ltd
Marketing Service Center of State Grid Zhejiang Electric Power Co Ltd
Original Assignee
State Grid Corp of China SGCC
Electric Power Research Institute of State Grid Zhejiang Electric Power Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by State Grid Corp of China SGCC, Electric Power Research Institute of State Grid Zhejiang Electric Power Co Ltd filed Critical State Grid Corp of China SGCC
Priority to CN201210283230.4A priority Critical patent/CN102855139B/zh
Priority to PCT/CN2012/085154 priority patent/WO2014023069A1/zh
Priority to US14/125,881 priority patent/US9405519B2/en
Publication of CN102855139A publication Critical patent/CN102855139A/zh
Application granted granted Critical
Publication of CN102855139B publication Critical patent/CN102855139B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/53Decompilation; Disassembly
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

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

Description

一种反编译数据流分析中的寄存器清除方法及系统
技术领域
本发明涉及反编译技术领域,特别是涉及一种反编译数据流分析中的寄存器清除方法及系统。
背景技术
反编译技术作为计算机逆向技术中不可或缺的一部分,在分析系统漏洞、软件安全以及病毒木马等领域得到了广泛应用。反编译技术可以将汇编语言)转换为高级语言(如C语言)。在反编译技术中,最重要、最困难的部分是数据流分析。数据流分析是一种用于收集计算机程序在不同点计算的值的信息的技术。具体的,可以使用程序控制流图(CFG,control flow graph)来确定对变量的一次赋值可能传播到程序中的哪些部分。
在数据流分析中,主要包括寄存器的清除和条件码的清除两个阶段。其中,现有的寄存器清除阶段一般采用如下方法:让两个语句相互映射,然后消去其中叠加的寄存器。
这种方法会造成磁盘的频繁读写,耗费了大量时间,执行效率低。
发明内容
为解决上述技术问题,本发明实施例提供一种反编译数据流分析中的寄存器清除方法及系统,以解决现有寄存器清除方法执行效率低的问题,技术方案如下:
一种反编译数据流分析中的寄存器清除方法,包括:
打开寄存器清除之前汇编语言的代码文件并读取所述代码文件中的所有函数语句;
对所读取的函数语句依次进行判断,判断函数语句中是否包括寄存器名称,如果是,则构建二叉树并将该函数语句输入到所述二叉树中;
对包含有寄存器名称的函数语句依次进行判断,判断该函数语句中是否包括二叉树右孩子结束标识,如果是,则对构建的二叉树进行消元处理以去除所述二叉树中的寄存器名称,生成最简二叉树,根据所述最简二叉树生成高级语言的函数语句;否则,继续判断后续函数语句中是否包括寄存器名称。
优选的,所述寄存器名称为:EAX、AX、BX、CX、DX、SP、SI、BP或DI。
优选的,所述打开寄存器清除之前汇编语言的代码文件并读取所述代码文件中的所有函数语句,包括:
打开寄存器清除之前汇编语言的代码文件;
根据所述代码文件中的所有函数语句构建单链表;
遍历所述单链表。
优选的,当所述寄存器名称为EAX时,所述二叉树右孩子结束标识为“eax;”。
优选的,所述构建二叉树并将该函数语句输入到所述二叉树中,包括:
构建二叉树;
将该函数语句中等号左边的代码输入到所述二叉树中的左孩子中;
将该函数语句中等号右边的代码输入到所述二叉树中的右孩子中。
优选的,所述进行消元处理以去除所述二叉树中的寄存器名称,生成最简二叉树,包括:
使用顶层根节点的右孩子中的代码替换顶层根节点下一层节点的右孩子中的寄存器名称并删除所述顶层根节点的下一层节点。
一种反编译数据流分析中的寄存器清除系统,包括:读取单元、寄存器名称判断单元、二叉树构建单元、结束标识判断单元、消元单元和高级语言生成单元,
所述读取单元,用于打开寄存器清除之前汇编语言的代码文件并读取所述代码文件中的所有函数语句;
所述寄存器名称判断单元,用于对所读取的函数语句依次进行判断,判断函数语句中是否包括寄存器名称,如果是,则触发所述二叉树构建单元;
所述二叉树构建单元,用于构建二叉树并将该函数语句输入到所述二叉树中;
所述结束标识判断单元,用于对包含有寄存器名称的函数语句依次进行判断,判断该函数语句中是否包括二叉树右孩子结束标识,如果是,则触发所述消元单元;否则发送一判断指令到所述寄存器名称判断单元,使所述寄存器名称判断单元继续判断后续函数语句中是否包括寄存器名称;
所述消元单元,用于对构建的二叉树进行消元处理以去除所述二叉树中的寄存器名称,生成最简二叉树;
所述高级语言生成单元,用于根据所述最简二叉树生成高级语言的函数语句。
优选的,所述读取单元包括:文件打开单元、单链表构建子单元和单链表遍历子单元,
所述文件打开子单元,用于打开寄存器清除之前汇编语言的代码文件;
所述单链表构建子单元,用于根据所述代码文件中的所有函数语句构建单链表;
所述单链表遍历子单元,用于遍历所述单链表。
优选的,所述二叉树构建单元包括:二叉树构建子单元、左孩子子单元和右孩子子单元,
所述二叉树构建子单元,用于构建二叉树;
所述左孩子子单元,用于将该函数语句中等号左边的代码输入到所述二叉树中的左孩子中;
所述右孩子子单元,用于将该函数语句中等号右边的代码输入到所述二叉树中的右孩子中。
优选的,所述消元单元具体设置为:
使用顶层根节点的右孩子中的代码替换顶层根节点下一层节点的右孩子中的寄存器名称并删除所述顶层根节点的下一层节点。
通过应用以上技术方案,本发明提供的一种反编译数据流分析中的寄存器清除方法及系统,可以一次读取所有的函数语句,不用再多次进行读写。同时,由于根据读取的函数语句构建了二叉树并对二叉树进行消元处理,因此可以很方便、快捷的得到不包含寄存器名称的函数语句,执行效率高。
附图说明
为了更清除地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种反编译数据流分析中的寄存器清除方法的流程示意图;
图2为本发明实施例提供的一种汇编语言函数语句的示意图;
图3为本发明实施例提供的另一种反编译数据流分析中的寄存器清除方法的流程示意图;
图4为本发明实施例提供的一种反编译数据流分析中的寄存器清除方法中单链表的示意图;
图5为本发明实施例提供的另一种反编译数据流分析中的寄存器清除方法的流程示意图;
图6为本发明实施例提供的汇编语言语句的示意图;
图7为本发明实施例提供的二叉树的示意图;
图8为本发明实施例提供的二叉树的示意图;
图9为本发明实施例提供的二叉树的示意图;
图10为本发明实施例提供的二叉树的示意图;
图11为本发明实施例提供的二叉树的示意图;
图12为本发明实施例提供的二叉树的示意图;
图13为本发明实施例提供的一种反编译数据流分析中的寄存器清除系统的结构示意图;
图14为本发明实施例提供的另一种反编译数据流分析中的寄存器清除系统的结构示意图;
图15为本发明实施例提供的另一种反编译数据流分析中的寄存器清除系统的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明中的技术方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清除、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
如图1所示,本发明实施例提供的一种反编译数据流分析中的寄存器清除方法,可以包括:
S101、打开寄存器清除之前汇编语言的代码文件并读取所述代码文件中的所有函数语句;
其中,寄存器清除之前汇编语言的代码文件被打开后可以如图2所示。可以理解的是,汇编语言以“;”作为函数语句间的标识,每一个“;”都代表着一个函数语句的结束。本发明可以在一个读操作的前提下,将所述代码文件中的函数语句全部读取。
S102、对所读取的函数语句依次进行判断,判断函数语句中是否包括寄存器名称,如果是,则执行步骤S103;否则执行步骤S107;
所述寄存器名称可以为:EAX、AX、BX、CX、DX、SP、SI、BP或DI。需要说明的一点是,在汇编语言及高级语言中,EAX可以为小写的“eax”。
一般而言,在约翰·冯·诺依曼计算机体系结构中,计算机寄存器主要包括AX、BX、CX、DX、SP、SI、BP、DI等。随着低8位、高8位、16位、32位的不同,对寄存器的读取以及名称的叫法也有不同。在汇编代码中,使用最多且具有迭代意义主要是AX中的EAX。例如:堆栈寄存器的用处主要是恢复系统环境等。本发明在此并不限定寄存器的具体名称。
如图2所示,在读取代码文件的函数语句后,会发现第一句(int a=1;)中没有寄存器名称,这时,可以直接将该函数语句进行输出处理,不用再进行寄存器清除。
S103、构建二叉树并将该函数语句输入到所述二叉树中;
在计算机科学中,二叉树是每个结点最多有两个子树的有序树。通常子树的根被称作左子树(left subtree)和右子树(right subtree)。每个节点的两个子节点分别被称为左孩子和右孩子。
在实际应用中,可以将包括寄存器名称的函数语句中等号左边的代码输入到二叉树中的左孩子中,将包括寄存器名称的函数语句中等号右边的代码输入到二叉树中的右孩子中。
由于读取的函数语句为多个,可以按照函数语句的顺序依次构建。如,将第一个包含寄存器名称的函数语句构造为高度为2的二叉树,将等号左右边的代码分别输入该二叉树的左孩子和右孩子中。将第二个包含寄存器名称的函数语句中等号左边的代码输入上一左孩子的左孩子中,将等号右边的代码输入上一左孩子的右孩子中。按照以上规律,依次对剩余的函数语句进行处理,直到函数语句中出现二叉树右孩子结束标识为止。
S104、对包含有寄存器名称的函数语句依次进行判断,判断该函数语句中是否包括二叉树右孩子结束标识,如果是,则执行步骤S105,否则,继续执行步骤S102;
由于并不确定哪一个函数语句中存在二叉树右孩子结束标识,因此可以在步骤S103后,进一步依次判断包含有寄存器名称的函数语句中是否包括有二叉树右孩子结束标识。
其中,二叉树右孩子结束标识可以为“寄存器名称;”,如:“eax;”或“BX;”等。当寄存器名称为eax时,二叉树右孩子结束标识为“eax;”。
S105、对构建的二叉树进行消元处理以去除所述二叉树中的寄存器名称,生成最简二叉树;
具体的,可以使用顶层根节点的右孩子中的代码替换顶层根节点下一层节点的右孩子中的寄存器名称并删除所述顶层根节点的下一层节点。
S106、根据所述最简二叉树生成高级语言的函数语句;
在实际应用中,可以将最简二叉树左孩子中的代码放于等号左边,将最简二叉树右孩子中的代码放于等号右边,并和等号一起,形成高级语言的函数语句。
S107、进行输出处理。
本发明实施例提供的一种反编译数据流分析中的寄存器清除方法,可以一次读取所有的函数语句,不用再多次进行读写。同时,由于根据读取的函数语句构建了二叉树并对二叉树进行消元处理,因此可以很方便、快捷的得到不包含寄存器名称的函数语句,执行效率高。
如图3所示,在本发明实施例提供的另一种反编译数据流分析中的寄存器清除方法中,图1所示实施例中的步骤S101可以包括:
S101a、打开寄存器清除之前汇编语言的代码文件;
S101b、根据所述代码文件中的所有函数语句构建单链表;
单链表可以用一组地址任意的存储单元存放线性表中的数据元素。它以元素(数据元素的映象)加指针(指示后继元素存储位置)来表示结点。与直接读取代码文件中的函数语句相比,使用单链表可以随意改变读取顺序,更为方便。
S101c、遍历所述单链表。
对于图2中的第一个函数语句“int a=1;”,可以构建如图4所示的单链表,其中,单链表中每个字符占用一个节点,“i”为头结点,指针指向头结点“i”,该单链表中包括一首节点。指针可以遍历单链表,同时进行字符匹配操作。如果在指针遇到“;”之前,都未遇到eax,则输出所遍历的代码。在图4中显示为遍历了“int a=1;”,则将“int a=1;”输出而不进行寄存器删除处理。
如图5所示,本发明实施例提供的另一种反编译数据流分析中的寄存器清除方法中,图1所示实施例中的步骤S103可以包括:
S103a、构建二叉树;
S103b、将该函数语句中等号左边的代码输入到所述二叉树中的左孩子中;
S103c、将该函数语句中等号右边的代码输入到所述二叉树中的右孩子中。
如图6所示,以图2所示的部分函数语句为例进行说明:
由于第一句函数语句“int a=1;”中并不包括寄存器名称,因此直接进行输出处理。然后判断第二句,由于第二句中包含寄存器名称“eax”,因此将等号左边的代码“eax”输入二叉树的左孩子(节点B)中,将右边的代码“int a”输入二叉树的右孩子(节点C)中,其中,该二叉树的根节点为节点A。形成如图7所示的二叉树,该二叉树的高度为2。
按照顺序继续对下一函数语句进行判断,第三句中包含“eax”,同理,将“eax”放入B节点的左孩子(节点D)中,将“eax+int a”放入B节点的右孩子(节点E)中,形成如图8所示的二叉树,该二叉树的高度为3。
按照上述方法继续对二叉树进行构建,并最终构建形成如图9所示的二叉树,该二叉树的高度为5。由于图6所示的函数语句中的最后一句中包括有二叉树右孩子结束标识“eax;”,因此在处理完这句函数语句后,该二叉树就创建完毕。后续函数语句将形成新的二叉树。
在创建完二叉树后,需要对其进行消元处理,以去除二叉树中的寄存器名称。优选的,图1所示实施例中的步骤S 105可以包括:
使用顶层根节点的右孩子中的代码替换顶层根节点下一层节点的右孩子中的寄存器名称并删除顶层根节点下一层节点。
下面以图9所示的已经创建好的二叉树为例进行说明:
首先,从图9所示二叉树的顶层根节点(节点A)开始,将节点A的右孩子(节点C)中的代码替换下一层的右孩子(节点E)中的寄存器名称“eax”并删除该层的节点B和节点C,形成如图10所示的二叉树。此时,顶层根节点的左孩子变为节点D,右孩子变为节点E。
然后,将图10所示二叉树中的顶层根节点的右孩子(节点E)中的代码替换下一层右孩子(节点G)中的寄存器名称,并删除节点D和节点E,形成如图11所示的二叉树。此时,顶层根节点的左孩子变为节点F,右孩子变为节点G。
最后,将图11所示二叉树中的顶层根节点的右孩子(节点G)中的代码替换下一层右孩子(节点I)中的寄存器名称,并删除节点F和节点G,形成如图12所示的二叉树。此时,顶层根节点的左孩子变为节点H,右孩子变为节点I。由于此时二叉树的高度已经为2,已经是最简二叉树,因此不用再进行消元处理。
这时,可以执行步骤S106,根据图12所示的最简二叉树,将最简二叉树的左孩子作为所要输出函数等号左边的代码,将最简二叉树的右孩子作为所要输出的函数等号右边的代码,并最终得到所要输出的高级语言函数语句为:“int a1=int a+int a+int a;”。可以看到,该高级语言函数语句中并不包含寄存器名称,本发明已经成功的将其去除。
与本发明提供的方法实施例相对应,本发明还提供了一种反编译数据流分析中的寄存器清除系统。
如图13所示,本发明实施例提供的一种反编译数据流分析中的寄存器清除系统,可以包括:读取单元100、寄存器名称判断单元200、二叉树构建单元300、结束标识判断单元400、消元单元500和高级语言生成单元600,
所述读取单元100,用于打开寄存器清除之前汇编语言的代码文件并读取所述代码文件中的所有函数语句;
其中,寄存器清除之前汇编语言的代码文件被打开后可以如图2所示。可以理解的是,汇编语言以“;”作为函数语句间的标识,每一个“;”都代表着一个函数语句的结束。本发明可以在一个读操作的前提下,将所述代码文件中的函数语句全部读取。
所述寄存器名称判断单元200,用于对所读取的函数语句依次进行判断,判断函数语句中是否包括寄存器名称,如果是,则触发所述二叉树构建单元300;
所述寄存器名称可以为:EAX、AX、BX、CX、DX、SP、SI、BP或DI。需要说明的一点是,在汇编语言及高级语言中,EAX可以为小写的“eax”
一般而言,在约翰·冯·诺依曼计算机体系结构中,计算机寄存器主要包括AX、BX、CX、DX、SP、SI、BP、DI等。随着低8位、高8位、16位、32位的不同,对寄存器的读取以及名称的叫法也有不同。在汇编代码中,使用最多且具有迭代意义主要是AX中的EAX。例如:堆栈寄存器的用处主要是恢复系统环境等。本发明在此并不限定寄存器的具体名称。
如图2所示,在读取代码文件的函数语句后,会发现第一句(int a=1;)中没有寄存器名称,这时,可以直接将该函数语句进行输出处理,不用再进行寄存器清除。
所述二叉树构建单元300,用于构建二叉树并将该函数语句输入到所述二叉树中;
在计算机科学中,二叉树是每个结点最多有两个子树的有序树。通常子树的根被称作左子树(left subtree)和右子树(right subtree)。每个节点的两个子节点分别被称为左孩子和右孩子。
在实际应用中,可以将包括寄存器名称的函数语句中等号左边的代码输入到二叉树中的左孩子中,将包括寄存器名称的函数语句中等号右边的代码输入到二叉树中的右孩子中。
由于读取的函数语句为多个,可以按照函数语句的顺序依次构建。如,将第一个包含寄存器名称的函数语句构造为高度为2的二叉树,将等号左右边的代码分别输入该二叉树的左孩子和右孩子中。将第二个包含寄存器名称的函数语句中等号左边的代码输入上一左孩子的左孩子中,将等号右边的代码输入上一左孩子的右孩子中。按照以上规律,依次对剩余的函数语句进行处理,直到函数语句中出现二叉树右孩子结束标识为止。
所述结束标识判断单元400,用于对包含有寄存器名称的函数语句依次进行判断,判断该函数语句中是否包括二叉树右孩子结束标识,如果是,则触发所述消元单元500;否则发送一判断指令到所述寄存器名称判断单元200,使所述寄存器名称判断单元200继续判断后续函数语句中是否包括寄存器名称;
其中,二叉树右孩子结束标识可以为“寄存器名称;”,如:“eax;”或“BX;”等。当寄存器名称为eax时,二叉树右孩子结束标识为“eax;”。
所述消元单元500,用于对构建的二叉树进行消元处理以去除所述二叉树中的寄存器名称,生成最简二叉树;
具体的,可以使用顶层根节点的右孩子中的代码替换顶层根节点下一层节点的右孩子中的寄存器名称并删除所述顶层根节点的下一层节点。
所述高级语言生成单元600,用于根据所述最简二叉树生成高级语言的函数语句。
在实际应用中,可以将最简二叉树左孩子中的代码放于等号左边,将最简二叉树右孩子中的代码放于等号右边,并和等号一起,形成高级语言的函数语句。
可以理解的是,在生成高级语言函数语句后就可以对其进行输出处理。
本发明实施例提供的一种反编译数据流分析中的寄存器清除系统,可以一次读取所有的函数语句,不用再多次进行读写。同时,由于根据读取的函数语句构建了二叉树并对二叉树进行消元处理,因此可以很方便、快捷的得到不包含寄存器名称的函数语句,执行效率高。
如图14所示,本发明实施例提供的另一种反编译数据流分析中的寄存器清除系统中,所述读取单元100可以包括:文件打开单元110、单链表构建子单元120和单链表遍历子单元130,
所述文件打开子单元110,用于打开寄存器清除之前汇编语言的代码文件;
所述单链表构建子单元120,用于根据所述代码文件中的所有函数语句构建单链表;
单链表可以用一组地址任意的存储单元存放线性表中的数据元素。它以元素(数据元素的映象)加指针(指示后继元素存储位置)来表示结点。与直接读取代码文件中的函数语句相比,使用单链表可以随意改变读取顺序,更为方便。
所述单链表遍历子单元130,用于遍历所述单链表。
对于图2中的第一个函数语句“int a=1;”,可以构建如图4所示的单链表,其中,单链表中每个字符占用一个节点,“i”为头结点,指针指向头结点“i”,该单链表中包括一首节点。指针可以遍历单链表,同时进行字符匹配操作。如果在指针遇到“;”之前,都未遇到eax,则输出所遍历的代码。在图4中显示为遍历了“int a=1;”,则将“int a=1;”输出而不进行寄存器删除处理。
如图15所示,本发明实施例提供的另一种反编译数据流分析中的寄存器清除系统中,所述二叉树构建单元300可以包括:二叉树构建子单元310、左孩子子单元320和右孩子子单元330,
所述二叉树构建子单元310,用于构建二叉树;
所述左孩子子单元320,用于将该函数语句中等号左边的代码输入到所述二叉树中的左孩子中;
所述右孩子子单元330,用于将该函数语句中等号右边的代码输入到所述二叉树中的右孩子中。
如图6所示,以图2所示的部分函数语句为例进行说明:
由于第一句函数语句“int a=1;”中并不包括寄存器名称,因此直接进行输出处理。然后判断第二句,由于第二句中包含寄存器名称“eax”,因此将等号左边的代码“eax”输入二叉树的左孩子(节点B)中,将右边的代码“int a”输入二叉树的右孩子(节点C)中,其中,该二叉树的根节点为节点A。形成如图7所示的二叉树,该二叉树的高度为2。
按照顺序继续对下一函数语句进行判断,第三句中包含“eax”,同理,将“eax”放入B节点的左孩子(节点D)中,将“eax+int a”放入B节点的右孩子(节点E)中,形成如图8所示的二叉树,该二叉树的高度为3。
按照上述方法继续对二叉树进行构建,并最终构建形成如图9所示的二叉树,该二叉树的高度为5。由于图6所示的函数语句中的最后一句中包括有二叉树右孩子结束标识“eax;”,因此在处理完这句函数语句后,该二叉树就创建完毕。后续函数语句将形成新的二叉树。
在创建完二叉树后,需要对其进行消元处理,以去除二叉树中的寄存器名称。优选的,消元单元500可以具体设置为:
使用顶层根节点的右孩子中的代码替换顶层根节点下一层节点的右孩子中的寄存器名称并删除所述顶层根节点的下一层节点。
下面以图9所示的已经创建好的二叉树为例进行说明:
首先,从图9所示二叉树的顶层根节点(节点A)开始,将节点A的右孩子(节点C)中的代码替换下一层的右孩子(节点E)中的寄存器名称“eax”并删除该层的节点B和节点C,形成如图10所示的二叉树。此时,顶层根节点的左孩子变为节点D,右孩子变为节点E。
然后,将图10所示二叉树中的顶层根节点的右孩子(节点E)中的代码替换下一层右孩子(节点G)中的寄存器名称,并删除节点D和节点E,形成如图11所示的二叉树。此时,顶层根节点的左孩子变为节点F,右孩子变为节点G。
最后,将图11所示二叉树中的顶层根节点的右孩子(节点G)中的代码替换下一层右孩子(节点I)中的寄存器名称,并删除节点F和节点G,形成如图12所示的二叉树。此时,顶层根节点的左孩子变为节点H,右孩子变为节点I。由于此时二叉树的高度已经为2,已经是最简二叉树,因此不用再进行消元处理。
这时,可以触发高级语言生成单元600,根据图12所示的最简二叉树,将最简二叉树的左孩子作为所要输出函数等号左边的代码,将最简二叉树的右孩子作为所要输出的函数等号右边的代码,并最终得到所要输出的高级语言函数语句为:“int a1=int a+int a+int a;”。可以看到,该高级语言函数语句中并不包含寄存器名称,本发明已经成功的将其去除。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本发明时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
通过以上的实施方式的描述可知,本领域的技术人员可以清除地了解到本发明可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
本发明可用于众多通用或专用的计算系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。
本发明可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本发明,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。
以上所述仅是本发明的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (8)

1.一种反编译数据流分析中的寄存器清除方法,其特征在于,包括:
打开寄存器清除之前汇编语言的代码文件并读取所述代码文件中的所有函数语句;
对所读取的函数语句依次进行判断,判断函数语句中是否包括寄存器名称,如果是,则构建二叉树并将该函数语句输入到所述二叉树中;
对包含有寄存器名称的函数语句依次进行判断,判断该函数语句中是否包括二叉树右孩子结束标识,如果是,则对构建的二叉树进行消元处理以去除所述二叉树中的寄存器名称,生成最简二叉树,根据所述最简二叉树生成高级语言的函数语句;否则,继续判断后续函数语句中是否包括寄存器名称;
其中,所述构建二叉树并将该函数语句输入到所述二叉树中,包括:
构建二叉树;
将该函数语句中等号左边的代码输入到所述二叉树中的左孩子中;
将该函数语句中等号右边的代码输入到所述二叉树中的右孩子中。
2.根据权利要求1所述的方法,其特征在于,所述寄存器名称为:EAX、AX、BX、CX、DX、SP、SI、BP或DI。
3.根据权利要求1或2所述的方法,其特征在于,所述打开寄存器清除之前汇编语言的代码文件并读取所述代码文件中的所有函数语句,包括:
打开寄存器清除之前汇编语言的代码文件;
根据所述代码文件中的所有函数语句构建单链表;
遍历所述单链表。
4.根据权利要求1所述的方法,其特征在于,当所述寄存器名称为EAX时,所述二叉树右孩子结束标识为“eax;”。
5.根据权利要求1所述的方法,其特征在于,所述进行消元处理以去除所述二叉树中的寄存器名称,生成最简二叉树,包括:
使用顶层根节点的右孩子中的代码替换顶层根节点下一层节点的右孩子中的寄存器名称并删除所述顶层根节点的下一层节点。
6.一种反编译数据流分析中的寄存器清除系统,其特征在于,包括:读取单元、寄存器名称判断单元、二叉树构建单元、结束标识判断单元、消元单元和高级语言生成单元,
所述读取单元,用于打开寄存器清除之前汇编语言的代码文件并读取所述代码文件中的所有函数语句;
所述寄存器名称判断单元,用于对所读取的函数语句依次进行判断,判断函数语句中是否包括寄存器名称,如果是,则触发所述二叉树构建单元;
所述二叉树构建单元,用于构建二叉树并将该函数语句输入到所述二叉树中;
所述结束标识判断单元,用于对包含有寄存器名称的函数语句依次进行判断,判断该函数语句中是否包括二叉树右孩子结束标识,如果是,则触发所述消元单元;否则发送一判断指令到所述寄存器名称判断单元,使所述寄存器名称判断单元继续判断后续函数语句中是否包括寄存器名称;
所述消元单元,用于对构建的二叉树进行消元处理以去除所述二叉树中的寄存器名称,生成最简二叉树;
所述高级语言生成单元,用于根据所述最简二叉树生成高级语言的函数语句;
其中,所述二叉树构建单元包括:二叉树构建子单元、左孩子子单元和右孩子子单元,
所述二叉树构建子单元,用于构建二叉树;
所述左孩子子单元,用于将该函数语句中等号左边的代码输入到所述二叉树中的左孩子中;
所述右孩子子单元,用于将该函数语句中等号右边的代码输入到所述二叉树中的右孩子中。
7.根据权利要求6所述的系统,其特征在于,所述读取单元包括:文件打开单元、单链表构建子单元和单链表遍历子单元,
所述文件打开子单元,用于打开寄存器清除之前汇编语言的代码文件;
所述单链表构建子单元,用于根据所述代码文件中的所有函数语句构建单链表;
所述单链表遍历子单元,用于遍历所述单链表。
8.根据权利要求6所述的系统,其特征在于,所述消元单元具体设置为:
使用顶层根节点的右孩子中的代码替换顶层根节点下一层节点的右孩子中的寄存器名称并删除所述顶层根节点的下一层节点。
CN201210283230.4A 2012-08-10 2012-08-10 一种反编译数据流分析中的寄存器清除方法及系统 Active CN102855139B (zh)

Priority Applications (3)

Application Number Priority Date Filing Date Title
CN201210283230.4A CN102855139B (zh) 2012-08-10 2012-08-10 一种反编译数据流分析中的寄存器清除方法及系统
PCT/CN2012/085154 WO2014023069A1 (zh) 2012-08-10 2012-11-23 一种反编译数据流分析中的寄存器清除方法及系统
US14/125,881 US9405519B2 (en) 2012-08-10 2012-11-23 Method and system for register clearing in data flow analysis in decompilation

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210283230.4A CN102855139B (zh) 2012-08-10 2012-08-10 一种反编译数据流分析中的寄存器清除方法及系统

Publications (2)

Publication Number Publication Date
CN102855139A CN102855139A (zh) 2013-01-02
CN102855139B true CN102855139B (zh) 2015-04-22

Family

ID=47401750

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210283230.4A Active CN102855139B (zh) 2012-08-10 2012-08-10 一种反编译数据流分析中的寄存器清除方法及系统

Country Status (3)

Country Link
US (1) US9405519B2 (zh)
CN (1) CN102855139B (zh)
WO (1) WO2014023069A1 (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20220012346A1 (en) * 2013-09-13 2022-01-13 Vmware, Inc. Risk assessment for managed client devices
CN105044653A (zh) * 2015-06-30 2015-11-11 武汉大学 一种智能电表的软件一致性检测方法
CN106919430B (zh) * 2015-12-25 2020-11-24 阿里巴巴集团控股有限公司 反编译指令中寄存器的处理方法和装置
CN106919429B (zh) * 2015-12-25 2021-05-04 阿里巴巴集团控股有限公司 反编译数据的处理方法和装置
CN106055378B (zh) * 2016-06-06 2018-03-13 中国南方电网有限责任公司电网技术研究中心 继电保护装置嵌入式软件的反汇编方法和系统
CN115392160B (zh) * 2022-06-10 2024-04-09 无锡芯光互连技术研究院有限公司 一种电路图描述文件的格式转换方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6516319B1 (en) * 1999-05-20 2003-02-04 International Business Machines Corporation Parallelized processing device for processing search keys based upon tree structure
CN101751334A (zh) * 2009-12-30 2010-06-23 中国人民解放军国防科学技术大学 一种基于还原程序的硬件故障检测方法
CN101963898A (zh) * 2010-09-17 2011-02-02 广州迪庆电子科技有限公司 反编译过程中的寄存器传播方法、装置及反编译器

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5117493A (en) * 1989-08-07 1992-05-26 Sun Microsystems, Inc. Pipelined register cache
EP0703532B1 (en) * 1994-09-22 2001-11-28 Sun Microsystems, Inc. Embedded program flow information for object code manipulation
US5860008A (en) * 1996-02-02 1999-01-12 Apple Computer, Inc. Method and apparatus for decompiling a compiled interpretive code
US6981132B2 (en) * 2000-08-09 2005-12-27 Advanced Micro Devices, Inc. Uniform register addressing using prefix byte
WO2002017071A1 (en) * 2000-08-22 2002-02-28 Theis Jean Paul A configurable register file with multi-range shift register support
US8589861B2 (en) * 2002-11-06 2013-11-19 Code Valley Corp Pty Ltd Code generation
US7051322B2 (en) * 2002-12-06 2006-05-23 @Stake, Inc. Software analysis framework
US20060130016A1 (en) * 2003-03-17 2006-06-15 Wagner John R Method of kernal-mode instruction interception and apparatus therefor
US7765539B1 (en) * 2004-05-19 2010-07-27 Nintendo Co., Ltd. System and method for trans-compiling video games
CN100377089C (zh) * 2005-07-22 2008-03-26 中国科学院计算技术研究所 二进制翻译中经由跳转表的多目标分支语句的识别方法
US8584109B2 (en) * 2006-10-27 2013-11-12 Microsoft Corporation Virtualization for diversified tamper resistance
US8935677B2 (en) * 2008-04-07 2015-01-13 Microsoft Corporation Automatic reverse engineering of input formats
CN101561779A (zh) * 2008-04-14 2009-10-21 国际商业机器公司 一种调试方法和调试器
US8645935B2 (en) * 2009-05-01 2014-02-04 University Of Maryland Automatic parallelization using binary rewriting
US8607193B2 (en) * 2012-01-16 2013-12-10 International Business Machines Corporation Tracking stale comments in source code listings
US8918881B2 (en) * 2012-02-24 2014-12-23 Appthority, Inc. Off-device anti-malware protection for mobile devices
US8966635B2 (en) * 2012-02-24 2015-02-24 Hewlett-Packard Development Company, L.P. Software module object analysis
US9690584B2 (en) * 2013-10-18 2017-06-27 Marvell World Trade Ltd. Systems and methods for register allocation

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6516319B1 (en) * 1999-05-20 2003-02-04 International Business Machines Corporation Parallelized processing device for processing search keys based upon tree structure
CN101751334A (zh) * 2009-12-30 2010-06-23 中国人民解放军国防科学技术大学 一种基于还原程序的硬件故障检测方法
CN101963898A (zh) * 2010-09-17 2011-02-02 广州迪庆电子科技有限公司 反编译过程中的寄存器传播方法、装置及反编译器

Also Published As

Publication number Publication date
US9405519B2 (en) 2016-08-02
CN102855139A (zh) 2013-01-02
US20150212805A1 (en) 2015-07-30
WO2014023069A1 (zh) 2014-02-13

Similar Documents

Publication Publication Date Title
CN102855139B (zh) 一种反编译数据流分析中的寄存器清除方法及系统
Ehrig et al. Graph grammars and Petri net transformations
JP2016157407A (ja) テキスト分析及び応答システムのための語彙意味パターンの事前構築方法
CN103077192B (zh) 一种数据处理方法及其系统
Grati et al. Extracting sequence diagrams from execution traces using interactive visualization
CN105389184A (zh) 产品界面信息的配置方法及装置
CN108469955A (zh) 一种基于注解的Android注入框架
US20190179624A1 (en) Software upgrade impact analysis by cognitive services
Biermann et al. A visual editor for reconfigurable object nets based on the ECLIPSE graphical editor framework
van der Aalst Do petri nets provide the right representational bias for process mining?
CN105468381A (zh) 一种安卓和iOS快速集成第三方类库的系统及操作方法
Biermann et al. Independence analysis of firing and rule-based net transformations in reconfigurable object nets
Alizadehsani et al. Modern integrated development environment (ides)
CN107315599A (zh) 图形库提取方法及装置
Grønmo et al. A collection operator for graph transformation
CN104537128A (zh) 一种网页信息提取方法及装置
CN104750482A (zh) 一种构建基于MapReduce的动态脚本执行引擎的方法
US20100251211A1 (en) Generating and using code-based diagrams
CN113268965A (zh) 用于自动生成路由表的方法、装置、存储介质及电子设备
US8495033B2 (en) Data processing
Baidada et al. An Analysis and New Methodology for Reverse Engineering of UML Behavioral
Mohamed et al. An enhancement of traceability model based-on scenario for digital forensic investigation process
Hung et al. A framework for exacting workflows from e-commerce systems
CN115391780B (zh) 应用代码的安全加固方法、系统、设备及存储介质
Ermel et al. RONs revisited: General approach to model reconfigurable object nets based on algebraic high-level nets

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
ASS Succession or assignment of patent right

Owner name: STATE ELECTRIC NET CROP.

Effective date: 20130121

C41 Transfer of patent application or patent right or utility model
TA01 Transfer of patent application right

Effective date of registration: 20130121

Address after: Hangzhou City, Zhejiang province 310014 eight District No. 1, Huadian Zhaohui

Applicant after: Electric Power Research Institute of Zhejiang electric power company

Applicant after: State Grid Corporation of China

Address before: Hangzhou City, Zhejiang province 310014 eight District No. 1, Huadian Zhaohui

Applicant before: Electric Power Research Institute of Zhejiang electric power company

GR01 Patent grant
CP01 Change in the name or title of a patent holder

Address after: Hangzhou City, Zhejiang province 310014 eight District No. 1, Huadian Zhaohui

Patentee after: STATE GRID ZHEJIANG ELECTRIC POWER COMPANY LIMITED ELECTRIC POWER Research Institute

Patentee after: STATE GRID CORPORATION OF CHINA

Address before: Hangzhou City, Zhejiang province 310014 eight District No. 1, Huadian Zhaohui

Patentee before: Electric Power Research Institute of Zhejiang electric power company

Patentee before: State Grid Corporation of China

CP01 Change in the name or title of a patent holder
TR01 Transfer of patent right

Effective date of registration: 20220316

Address after: 311100 Building 5, 138 Yunlian Road, Yuhang District, Hangzhou City, Zhejiang Province

Patentee after: Marketing service center of State Grid Zhejiang Electric Power Co.,Ltd.

Patentee after: STATE GRID CORPORATION OF CHINA

Address before: Hangzhou City, Zhejiang province 310014 eight District No. 1, Huadian Zhaohui

Patentee before: STATE GRID ZHEJIANG ELECTRIC POWER COMPANY LIMITED ELECTRIC POWER Research Institute

Patentee before: STATE GRID CORPORATION OF CHINA

TR01 Transfer of patent right