Java开源静态代码分析框架及工具介绍
【摘要】 列出了部分面向Java语言的静态代码分析工具或者框架,主要指向如何自己实现Java静态代码分析框架的参考,不是直接拿来用的介绍。
本文列出部分Java开源的静态代码分析及验证工具,会不断完善(主要目的是为了 ① 自研静态代码分析框架,或者 ② 提升检查检查能力或者精度,或者 ③ 在企业内直接选择开源工具集成或者优化使用而收集的,部分小众,或者没有太大参考价值的,就不收集了)。
框架名称 | 开源协议 | 成熟度 | 类型 | 基础框架 | 基本算法 | 基本情况介绍 |
Soot | LGPL-2.1 | 高 | 框架 | 是当前业界在 Java 程序分析领域使用最广泛的一种静态代码分析框架,而且生态非常好,社区非常活跃,当前很多有名的静态代码检查工具都是基于Soot开发的。是学习Java静态代码分析的不二之选,但是因为各种分析实现都是基于step实现,一定要嵌在执行流程中,这一点不是太友好。推荐指数:5颗星(业界最广泛的静态程序分析框架) | ||
SootUp | LGPL-2.1 | 中 | 框架 | 是用来替代Soot的静态程序分析框架,Soot的维护者们已经识别到Soot的局限性,因此开发了SootUp作为Soot的替代品,SootUp使用起来更加的轻量,支持的JDK版本更高,使用更加方便。只是有一点儿,就是推出的时间比较短,还需要进行打磨。推荐指数:5颗星(虽然时间短,但是是站在巨人的肩膀上起来的) | ||
Wala | EPL-2.0 | 高 | 框架 | Wala是IBM 2006年开源的一个镜头代码分析框架,涉及到的静态代码分析相关的方方面面的内容,在Wala里面都有实现,而且作为一个第三方库使用时,我个人觉得是比Soot更方便的,因此一度我在执行相关的一些验证时,都是使用的Wala。Wala最大的劣势是相关文档比较少,生态比不上Soot。推荐指数:5颗星(使用方便,静态分析基础框架完整) | ||
Tai-e | LGPL-3.0 GPL-3.0 |
中 | 框架 | 是南京大学李樾、谭添两位老师打造的一个面向Java静态代码分析工具,根据介绍,吸收了Soot、Wala、Doop 等工具的优点打造出来的,但是我一直没有时间来使用一把。推荐指数:5颗星(必须无脑推) | ||
jacodb | Apache-2.0 |
框架 | JacoDB通过ASM读取class文件的内容,将Java字节码中涉及到类、类层次结构、方法、字段等信息都存储到数据库(SQLite)中,从而对代码结构进行持久化处理,支持在其他的程序分析任务执行时直接加载。思路很不错,有点儿类似于Coverity的实现(Coverity 就是在编译捕获的时候将AST解析出来放到SQLite数据库里面的)。 | |||
Doop | MIT | 中 | 工具 | 基于Datalog实现的一款可以应用于Java的指针分析和污点分析的框架。虽然Datalog很早以前,就在《编译原理》相关的书籍上面有介绍(比如龙书),但是当前产业界基于Datalog的工具比较少,CodeQL(准确地说,LGTM)是基于Datalog的,但是引擎代码没有开源,因此该框架对于我们研究Datalog实现的程序分析有非常重要的参考价值。推荐指数:5颗星(开源的Datalog程序分析框架) | ||
Spoon | CeCILL-C MIT |
中 | 工具 | 自己设计了一套Java源码的AST实现,并提供了遍历和分析的接口。不过我看它的源码,并不是很成熟,没办法和老牌的Java静态代码分析框架相比。推荐指数:3颗星(如果真的做程序分析,可以把这个工具排最后) | ||
JavaParser | LGPL 3.0 Apache2.0 |
高 | 框架 | Java Parser 是当前应用的最火的 Java 源码解析框架,协议非常友好,可以应用到商用工具上面,因此使用率非常高。支持 Java 语言生成 AST,在 AST 基础上进行类型推断分析和符号分析,支持修改 AST 从而生成新的 Java 文件内容,对最新的Java版本也支持良好,在 Java 的解析框架上,我最喜欢的就是这个。推荐指数:5颗星(API非常非常友好) | ||
Eclipse JDT | EPL-2.0 | 高 | 框架 | 是 Eclipse IDE 的 Java 的解析组件,对 Java 的支持度非常高,也非常及时,是跟随 Java 发布最紧密的组件之一。可直接用于开发基于AST的Java的规则,也可以作为其他工具解析Java代码的框架。我们已知的业界顶级的静态代码分析工具Coverity和Fortify,都是基于Eclipse JDT实现Java源码的解析的。推荐指数:4颗星(虽然东西不错,我喜欢JavaParser多一点点) | ||
heros | LGPL-2.1 | 高 | 框架 | Soot | IDE/IFDS | 实现了一套面向Java语言的IDE/IFDS静态代码分析实现,支持多线程分析。虽然该框架实现时,和下面的IR进行了解耦,但是目前来看,heros也只在Soot上面使用成功。推荐指数:4颗星(可以基于该框架,熟悉IDE/IFDS实现,但是如果要基于IFDS算法构建自己的程序分析引擎,建议参考实现) |
SPDS | EPL-2.0 | 中 | 框架 | Soot | SPDS/WPDS | 高效精确的别名分析和数据流分析框架。前面两个缩略词分别是 Synchronized Pushdown System 和 Weighted Pushdown System。是基于 PDS 的程序分析的实现,我搜相关的论文还是比较多的,但是相关的实现,并不多,而且有可能并没有相关的实现工具,该框架算是填补了这部分的空白,对我们学习程序分析有非常好的参考价值。推荐指数:5颗星(基于PDS的程序分析实现) |
FlowDroid | LGPL-2.1 | 高 | 工具 | Soot | IFDS | 一款基于IFDS实现的面向Java语言的污点分析引擎,是当前已有的开源Java污点分析引擎中比较成熟的一款。我一直觉得,对于SAST工具:一分靠技术,九分靠运营,对FlowDroid结合公司内部实际情况,进行优化改造,不失是一款优秀的检查工具。推荐指数:5颗星(很多公司Java污点分析引擎都有FlowDroid的影子) |
TaintAnalysis | 低 | 工具 | Soot/Heros | IFDS | 该工具,在 soot-oss 用户下,基于 Heros 做前向的污点分析,基于 Boomerang 做别名分析。和 FlowDroid 不同的是 FlowDroid 的别名分析采用后向的 IFDS 算法。该工具综合了 Soot、Heros、Boomerang 三个框架,可以学习 IFDS、SPDS 等相关的技术,对我们有非常好的参考价值,即使它开发的时间并不长。推荐指数:5颗星(综合了多种技术优势) | |
AppShark | Apache-2.0 | 高 | 工具 | Soot | 字节跳动无恒实验室打造的一款面向Android程序的检查工具,基于Soot开发,工具自己实现了一个指针分析,数据流分析实现也比较规整,对于希望学习静态代码分析技术的同学来说,是个不错的工具。在字节内部,应该也是打磨过很长一段时间了,所以也可以直接使用该工具完成一些漏洞挖掘的事情。 | |
QiLinPTA | LGPL-2.1 | Soot | 一个Java指针分析框架,由薛老师(Jingling Xue's Home Page (unsw.edu.au))团队打造。 | |||
JBSE | GPL-3.0 | 符号执行 | 一个面向Java语言的程序分析、验证、测试生成的框架,看着应该属于研究性质的项目,现在应该还在持续开发。 | |||
JayHorn | MIT LGPL-2.1 |
Soot | 模型检测? 符号执行 |
JayHorn是一个Java的模型检查工具,该工具以 Soot 的 Jimple IR 作为输入,生成 Horn clause,然后使用 Z3 求解器进行运算。 | ||
JBMC | BSD |
|||||
PathFinder | Apache-2.0 |
符号执行 |
支持在Java bytecode上面做符号执行,支持不同的基本类型(包括int,long,double,boolean等),同时也支持字符串、数组和用户定义的类数据结构等。 | |||
JDart | Apache-2.0 |
PathFinder | ||||
java-ranger | Apache-2.0 |
PathFinder | ||||
coastal | Apache-2.0 |
Fuzzing? |
||||
PMD | BSD | 高 | 工具 | AST | 一款基于AST的静态代码分析框架。推荐指数:4颗星(可以基于该工具,继续补齐基于程序结构的检查能力) | |
SpotBugs | LGPL-2.1 | 高 | 工具 | 基于ASM读取Java字节码,能有简单的数据流分析能力,但是扩展并不方便,但是已有很多规则,可以开箱即用。推荐指数:4颗星(规则开箱即用) | ||
CheckStyle | LGPL-2.1 Apache-2.0 |
高 | 工具 | 提供了开箱即用的风格类检查规则,但是并不方便扩展,对于自研实现没有太大的参考价值。推荐指数:3颗星(规则开箱即用) |
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)