【技术实现步骤摘要】
一种基于变量关联树的复杂类型重构方法
本专利技术涉及软件维护和安全
,具体涉及一种基于变量关联树的复杂类型重构方法。
技术介绍
反编译是编译的逆过程,其目标是将二进制代码转换成与之逻辑和功能等价的高级语言形式。源程序中变量的结构类型决定了变量的存储空间和使用规则,然而源代码经过编译优化之后,有关程序的类型及调试信息都不复存在,转而以匿名的字节块信息代之,通过内存的分配访问形式及其相互间的依赖关系体现变量的类型信息。随着第三方软件的大量使用,出于安全的考虑,越来越多的软件需要进行安全分析,检测软件中是否含有漏洞以及恶意代码,而常规手段就是对比分析程序中的数据结构类型。类型重构作为“源代码再现”的过程,能够有效增强代码的可读性,提高程序分析的效率。类型重构的原则通常是先恢复基本类型,而后通过综合的分析方法恢复出复杂数据类型。类型重构属于反编译过程中重要步骤之一,而数据类型重构又可以分为基本类型重构和复杂类型重构,现阶段对于基本类型重构的研究和技术已经比较成熟,但对于复杂类型重构却没有比较深入的研究能够得出好的结果。目前的复杂类型重构方案有静态的,主要思想是基于中 ...
【技术保护点】
1.一种基于变量关联树的复杂类型重构方法,其特征在于,该方法包括如下步骤:步骤一、将待处理的二进制程序转化为汇编程序,并对汇编程序中的各函数单元进行变量关联树VRT的创建;所述变量关联树VRT的节点为所述函数单元中的变量,以变量之间的关联关系创建节点间的关联关系;每个变量关联树VRT中的节点属性信息包括:从所述汇编程序中提取的类型约束信息属性以及运算符属性;所述类型约束信息属性为节点对应变量在所述汇编程序中的类型信息,所述运算符属性为节点对应变量在所述汇编程序中对应的运算符信息;同时依据所述变量关联树VRT创建变量地址映射表VAM,所述变量地址映射表VAM中存储有所述变量关 ...
【技术特征摘要】
1.一种基于变量关联树的复杂类型重构方法,其特征在于,该方法包括如下步骤:步骤一、将待处理的二进制程序转化为汇编程序,并对汇编程序中的各函数单元进行变量关联树VRT的创建;所述变量关联树VRT的节点为所述函数单元中的变量,以变量之间的关联关系创建节点间的关联关系;每个变量关联树VRT中的节点属性信息包括:从所述汇编程序中提取的类型约束信息属性以及运算符属性;所述类型约束信息属性为节点对应变量在所述汇编程序中的类型信息,所述运算符属性为节点对应变量在所述汇编程序中对应的运算符信息;同时依据所述变量关联树VRT创建变量地址映射表VAM,所述变量地址映射表VAM中存储有所述变量关联树VRT中所有节点对应变量的索引,包括变量的属性信息,即类型约束信息属性以及运算符属性;根据汇编程序对变量关联树VRT中节点的属性信息进行更新得到最终VRT,同时更新变量地址映射表VAM,最终的变量地址映射表VAM包含了基本类型重构结果;步骤二、识别筛选出根节点的运算符属性为解引用的最终VRT作为指针VRT;所述指针VRT根据其结构形式分为B+C形式指针VRT以及B+V+C形式指针VRT;其中B+C形式指针VRT对应的复杂类型为结构体,B+V+C形式指针VRT对应的复杂类型为数组;其中B表示基址,C表示偏移常量,V表示数组下标中的变量;所述B+C形式指针VRT的结构形式包括如下两种:第一种B+C形式结构为:由一个根节点以及一个叶子节点组成,其中根节点对应的变量为T1,表示结构体中的一个成员变量,该根节点的运算符属性为解引用,采用符号“!”表示;叶子节点对应的变量为L1,表示所述指针VRT对应的结构体的基址;第二种B+C形式结构为:由一个根节点、一个寄存器型节点以及两个叶子节点组成;其中根节点对应的变量为T2,表示结构体中的一个成员变量,该根节点的运算符属性为解引用,采用符号“!”表示;寄存器型节点对应的变量为寄存器EAX,该节点的运算符属性为加;两个叶子节点对应的变量分别为L2和C1,其中L2表示所述指针VRT对应的结构体的基址,C1表示T2指示的成员变量在所述结构体中的偏移常量;所述B+V+C形式指针VRT的结构形式包括如下三种:第一种B+V+C形式结构为:根节点对应的变量为T6,表示一个数组元素,该根节点的运算符属性为解引用,采用符号“!”表示;根节点具有一个子节点,对应的变量为T5,运算符属性为加;T5有两个子节点,左儿子节点对应的变量为T3,运算符属性为取地址,采用符号“&”表示,右儿子节点对应的变量为T4,运算符属性为乘;T3有一个子节点,对应的变量为S1,运算符属性为空;T4有两个子节点,左儿子节点对应的变量为L3,运算符属性为空,右儿子节点对应的变量为C2,运算符属性为空;其中T3和T5为指针,T3指向变量S1,T5指向变量T6,T6表示一个数组元素;第二种B+V+C形式结构为:根节点对应的变量为T11,表示一个数组元素,该根节点的运算符属性为解引用,采用符号“!”表示;根节点具有一个子节点,对应的变量为T10,运算符属性为加;T10有两个子节点,左儿子节点对应的变量为T8,运算符属性为取地址,采用符号“&”表示,右儿子节点对应的变量为T9,运算符属性为加;T8有一个子节点,对应的变量为S2,运算符属性为空;T9有两个子节点,左儿子节点对应的变量为T7,运算符属性为乘,右儿子节点对应的变量为C4,运算符属性为空;T7有两个子节点,左儿子节点对应的变量为L4,运算符属性为空,右儿子节点对应的变量为C3,运算符属性为空;其中T8和T10为指针,T8指向变量S2,T10指向变量T11,T11表示一个数组元素;第三种B+V+C形式结构为:根节点对应的变量为T15,表示一个数组元素,该根节点的运算符属性为解引用,采用符号“!”表示;根节点具有一个子节点,对应的变量为T14,运算符属性为加;T14有两个子节点,左儿子节点对应的变量为ESP,运算符属性为空,右儿子节点对应的变量为T13,运算符属性为加;T13有两个子节点,左儿子节点对应的变量为T12,运算符属性为乘,右儿子节点对应的变量为C6,运算符属性为空;T12有两个子节点,左儿子节点对应的变量为L5,运算符属性为空,右儿子节点对应的变量为C5,运算符属性为空;其中ESP和T14为指针,其中ESP为寄存器的一种,称为栈寄存器,表示栈指针;T14指向变量T15,T15表示一个数组元素;若所述指针VRT属于B+C形式指针VRT,执行如下S201~S202;S201、对所有的B+C形式指针VRT,提取基址B、偏移常量C以及所述指针VRT的根节点对应的变量在所述变量地址映射表VAM中对应的类型t,得到(B,C,t)集合;S202、在(B,C,t)集合中,按照基址B分类,根据相同基址B下的偏移常量C和类型t所占的字节大小重构基址B对应结构体的内部布局,即可以得到结构体...
【专利技术属性】
技术研发人员:胡昌振,马锐,菅泽峰,朱天保,刘健雄,
申请(专利权)人:北京理工大学,北京计算机技术及应用研究所,
类型:发明
国别省市:北京,11
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。