[发明专利]一种基于变量关联树的复杂类型重构方法有效
申请号: | 201810793950.2 | 申请日: | 2018-07-19 |
公开(公告)号: | CN108897572B | 公开(公告)日: | 2020-09-15 |
发明(设计)人: | 胡昌振;马锐;菅泽峰;朱天保;刘健雄 | 申请(专利权)人: | 北京理工大学;北京计算机技术及应用研究所 |
主分类号: | G06F8/72 | 分类号: | G06F8/72 |
代理公司: | 北京理工大学专利中心 11120 | 代理人: | 高会允;仇蕾安 |
地址: | 100081 *** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 变量 关联 复杂 类型 方法 | ||
本发明公开了一种基于变量关联树的复杂类型重构方法,该方法具体为:将待处理的二进制程序转化为汇编程序,并对汇编程序中的各函数单元进行变量关联树VRT的创建;依据变量关联树VRT创建变量地址映射表VAM;根据汇编程序对变量关联树VRT中节点的属性信息进行更新得到最终VRT,同时更新变量地址映射表VAM,最终VRT对应的变量地址映射表VAM包含了汇编程序的基本类型重构结果。识别筛选出根节点的运算符属性为解引用的最终VRT作为指针VRT,其中B+C形式指针VRT对应的复杂类型为结构体,B+V+C形式指针VRT对应的复杂类型为数组,对于B+C形式指针VRT和B+V+C形式指针VRT分别采用不同的方法进行结构体和数组的重构。该方法能够实现快速、有效的复杂类型重构,且重构结果较为准确。
技术领域
本发明涉及软件维护和安全技术领域,具体涉及一种基于变量关联树的复杂类型重构方法。
背景技术
反编译是编译的逆过程,其目标是将二进制代码转换成与之逻辑和功能等价的高级语言形式。源程序中变量的结构类型决定了变量的存储空间和使用规则,然而源代码经过编译优化之后,有关程序的类型及调试信息都不复存在,转而以匿名的字节块信息代之,通过内存的分配访问形式及其相互间的依赖关系体现变量的类型信息。随着第三方软件的大量使用,出于安全的考虑,越来越多的软件需要进行安全分析,检测软件中是否含有漏洞以及恶意代码,而常规手段就是对比分析程序中的数据结构类型。类型重构作为“源代码再现”的过程,能够有效增强代码的可读性,提高程序分析的效率。类型重构的原则通常是先恢复基本类型,而后通过综合的分析方法恢复出复杂数据类型。
类型重构属于反编译过程中重要步骤之一,而数据类型重构又可以分为基本类型重构和复杂类型重构,现阶段对于基本类型重构的研究和技术已经比较成熟,但对于复杂类型重构却没有比较深入的研究能够得出好的结果。
目前的复杂类型重构方案有静态的,主要思想是基于中间语言,对指针进行分析,但存在指针别名问题,处理较为困难;大多数方案是动态的,主要思想是基于中间语言,在指针使用处插入插桩代码,再将中间语言翻译成可执行程序(或模拟运行环境下的可执行程序),(模拟)运行程序,获得指针变量指向的实际地址,根据这些地址重构复杂类型的内部布局。但动态方法准确率较低,重构结果往往需要手工去重等处理。
Mycroft在1999年提出的Type-based decompilation系统能够恢复不同架构下二进制代码中常规的变量类型,该系统先把可执行代码转化为RTL(Register TransferLanguage)代码以达到跨架构的目标,然后为RTL指令添加约束条件,最后为约束方程求解以获得变量的类型信息。但该方法无法避免约束求解方法的通病,即约束方程可能无解或多解,同时该方法对复杂变量类型也无法恢复。
2007年,Ilfak Guilfanov发布了反汇编器IDA Pro的一个反编译插件Hex-Rays,这是一款功能强大的商业软件,它能快速地将32位windows可执行程序转换成与源码功能和语义等价的类C代码,但只可用于分析而不能编译。它对函数的参数和返回值检测很准确,但对于变量的符号及复杂类型的重构效果欠佳。
2008年由A.Cozzie等人提出的Laika系统,利用动态分析的方法对数据结构进行恢复。该系统采用了贝叶斯自适应算法检测数据结构,但是其结果很不准确,并且不能处理复杂类型结构。对于结构化的类型变量,只能给出结构的大体轮廓,无法对其内部成员变量的类型进行处理。
卡耐基梅隆大学的Jong Hyup Lee在2011年提出了基于规则的可执行程序的类型重构方法,先使用BAP(Binary Analysis Platform)将二进制代码转化为静态单赋值SSA(Static Single Assignment)的形式,然后对推断出的变量做类型标记,根据这些变量的使用产生对应的类型约束,最后对约束求解。该方法虽能识别指针,但对结构、数组和指针都一概而论,未做区分。
因此目前缺少一种有效准确的方案来实现复杂类型的重构。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京理工大学;北京计算机技术及应用研究所,未经北京理工大学;北京计算机技术及应用研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201810793950.2/2.html,转载请声明来源钻瓜专利网。