关键词:
程序静态分析
标记类型推导
Java语言
抽象语法树
摘要:
近年来,由于智能手机Android的兴起,Java语言的影响力从服务器端延伸到了客户端。正是由于这一趋势,大量漏洞被发现,甚至是被恶意利用。程序静态分析是验证程序属性的分析方法之一,但是目前的程序静态分析方法遇到跨过程分析、路径爆炸和程序规模过大等困难。 本文首先分析了主流的静态分析技术,类型推导依然是程序静态分析主要技术之一。其次分析了目前主流的静态分析工具,大部分工具基本没有使用类型推导技术或者应用较简单。类型推导是一种轻量级的程序分析方法。在编译器的基础上,对程序变量,函数的类型做了进一步的约束,更严格的验证程序的安全性及正确性。 基于上述分析,本文设计并实现了面向Java语言的类型推导子系统: 1.支持预定义标记类型,程序分析人员自定义标记类型,并在配置文件中为目标程序的关键位置添加标记类型,从而避免直接修改目标程序。 2.自动将标记类型添加到目标程序语法树中。 3.对目标程序生成一个约束系统。遍历抽象语法树,为程序中数据变量添加约束变元,按既定的推导规则为变元添加约束。如果发现预定义标记类型,为约束变元添加标记常量。 4.对约束系统求解,如果发现约束变元无解,根据当前信息定位源代码中问题的精确位置。 最后,结合目前比较流行的污染传播分析案例,对系统的分析能力进行了实验和评估,达到了预期的目的。试验说明,类型推导技术有效地规避了跨过程、路径爆炸和程序规模过大等问题。