反编译是软件逆向分析的重要手段之一,是将由编译产生的二进制代码转换成与之逻
辑和功能等价的高级代码形式,在代码移植、软件理解与维护等方面具有重要作用。随着
互联网软件的飞速增长,反编译在保障软件可用性及系统安全性方面作用凸显。类型重构
作为反编译的关键步骤,对提高反编译结果的可读性具有重要意义。
论文以动静结合的反编译框架为基础,首先通过分析指令中含库函数调用的程序上下
文环境,得出对应于函数参数和返回值的变量类型,然后通过分析中间语言 BIL 中操作符
的类型特征,制定了基于操作符的类型提取规则,并根据规则得出指令中非函数调用处变
量的类型信息;根据中间语句的不同操作类型,结合类型变量的三元组表示方法分别从三
个方面阐述了用已获取的类型信息推导未知类型的过程;针对指针与整型变量的歧义问
题,给出了基于运行时信息指针辅助判定方法,同时针对基本类型重构结果不确定的情况,
给出了基于数据流分析框架的双向类型传播模型,通过构建类型格并在格的基础上求解类
型传播方程,从而达到类型细化的目的;通过分析复杂数据结构的存储特点及寻址方式,
以等价类划分的思想求取复杂数据结构的内存布局,并以已得到基本类型来恢复复杂数据
结构的类型。