入门篇

南大《软件分析》课程

课程视频&课件

实验作业

配套文档

工具篇

soot

项目简介

soot 是 Java 优化框架。它提供了四个用于分析和转换 Java 字节码的中间表示:

  • BAF:易于操纵的字节码的简化表示。
  • Jimple:一个适合优化的打字3个地址中间表示。
  • Shimple:Jimple的SSA变体。
  • grimp:jimple的汇总版本,适用于代码和代码检查。

项目地址

项目地址:https://github.com/soot-oss/soot

相关资料

SootUp

项目简介

  • 将 JVM 字节码(和其他输入)转换为中间表示 Jimple
  • 提供类层次结构生成
  • 使用不同算法/精度生成 CallGraph
  • 使用 Heros 支持的 IDE/IFDS 框架进行过程间数据流分析
  • 在检索方法主体时应用/启用简单转换(请参阅 BodyInterceptor)
  • 提供 Jimple IR 的序列化。

项目地址

项目地址:https://github.com/soot-oss/SootUp

相关资料

tai-e

项目简介

项目地址

项目地址:https://github.com/pascal-lab/Tai-e

相关资料

Doop

项目地址

项目地址:https://bitbucket.org/yanniss/doop/src/master/

相关资料

tabby

项目简介

TABBY 是一款针对 Java 语言的静态代码分析工具,相关工作已被接收发表在 The 53rd Annual IEEE/IFIP International Conference on Dependable Systems and Networks (DSN 2023),会议论文录用名单详见DSN2023。 TABBY使用静态分析框架 Soot 作为语义提取工具,将JAR/WAR/CLASS文件转化为代码属性图。 并使用 Neo4j 图数据库来存储生成的代码属性图CPG。

项目地址

项目地址:https://github.com/wh1t3p1g/tabby

相关资料

joern

项目地址

项目地址:https://joern.io/

相关资料

ByteCodeDL

项目简介

ByteCodeDL这个名字是从CodeQL演化的,ByteCode对应Code,DL对应QL,是一款声明式静态分析工具,主要是为了弥补CodeQL无法直接分析字节码的遗憾。

本项目主要有两个目的:

  • 教学目的,帮助大家入门静态分析,本项目将演示如何通过datalog实现一些静态分析算法,比起命令式静态分析,这种方式要简洁很多,学习了基本原理之后,也可以自己DIY规则。
  • 提高挖洞效率,安全研究人员一般拿不到源码,大多数情况只能分析Jar包,然后通过IDEA看反编译之后的代码,效率比较低,希望ByteCodeDL提供的搜索功能、调用图分析功能、污点分析功能,能够提高安全研究人员的挖洞效率。

项目地址

项目地址:https://github.com/BytecodeDL/ByteCodeDL

相关资料

JavaParser

项目简介

支持将java代码转化为AST语法树。

项目地址

项目地址:https://github.com/javaparser/javaparser

相关资料

SemGrep

项目简介

Semgrep 是一个快速、开源的静态代码分析工具,其核心采用 OCaml 语言编写。主要用于在 Commit 和 CI 时查找 Bug 并强制执行代码规范。其中 Semgrep 除了提供 Semgrep CLI 还有 Semgrep CI、Semgrep App 等。但由于 Semgrep App 社区版本有 20 个人数限制,且不支持私有的 Gitlab。故下面的介绍内容全部是基于 Semgrep CLI。

项目地址

项目地址:https://github.com/semgrep/semgrep

官方规则仓:https://github.com/semgrep/semgrep-rules

相关资料

按语言分

Python