Ubuntu安装
- 阿里镜像
- 安装的是22.02.3桌面版
配置root密码
sudo passwd root
vmtools安装
- 直接在线安装
$ sudo apt-get install open-vm-tools-desktop -y
jdk安装
- 如果安装了其他版本的jdk,可以先卸载
# 卸载所有与OpenJDK相关的软件包
$ sudo apt-get remove openjdk-\*
#列出所有OpenJDK相关的文件和目录
$ sudo apt install mlocate
$ sudo updatedb
$ locate openjdk
#依次进入每个目录,使用 rm -rf 命令删除目录和文件
$ sudo rm -rf /etc/java-8-openjdk
- 最新的joern文档中要求jdk19
$ apt install openjdk-19-jre-headless
$ apt install openjdk-19-jdk-headless
- 设置java环境变量
# 查看java安装位置
$ sudo update-alternatives --config java
# 用vim添加环境变量
$ sudo vim /etc/environment
# 在文件最后添加JAVA_HOME
JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64/bin/java"
#重新加载环境
$ source /etc/environment
#验证
$ echo $JAVA_HOME
"/usr/lib/jvm/java-11-openjdk-amd64/bin/java"
安装joern
- 根据 joern官方文档 安装
sudo snap install curl
mkdir joern && cd joern # optional
curl -L "https://github.com/joernio/joern/releases/latest/download/joern-install.sh" -o joern-install.sh
chmod u+x joern-install.sh
./joern-install.sh --interactive
-
如果没有curl,根据提示安装就好
速度比较慢
-
安装完成!
-
测试安装是否成功
示例
joern可视化
- 安装可视化工具
sudo apt-get install graphviz
sudo apt-get install graphviz graphviz-doc
sudo apt-get install xdot
- 进入joern控制台
./joern
- 查看指令
- 导入项目
-
- 下载官方案例
git clone https://github.com/ShiftLeftSecurity/x42.git
-
- 导入java项目,输入的是jar包;导入c项目,输入的是.c文件
- 导入java项目,输入的是jar包;导入c项目,输入的是.c文件
- 在控制台端直接输出AST、PDG、CPG的可视化图像
cpg.method($name).plotDotAst
cpg.method($name).plotDotCfg
...
cpg.method($name).plotDotCpg14
joern可以得到以下几种图形表示
- 直接输出AST、PDG、CPG的文本形式
cpg.method($name).dotAst.l
cpg.method($name).dotCfg.l
...
cpg.method($name).dotCpg14.l
常用命令
-
查看joern常用指令
-
查看各个工程的状态
-
查看cpg可用的方法
-
查看cpg各个方法的详细描述
命令行工具joern-export
- 解析/src/directory中的代码,并将所有方法的PDG转储到目录 outdir 中,可以在系统 shell 上运行以下命令:
joern-parse /src/directory
joern-export --repr pdg --out outdir
-
pdg文件已转储到outdir文件夹中
-
将dot文件转化成pdf图片
dot -Tpng 0-pdg.dot -o 0-pdg.png -
将整个图表导出为 neo4j csv、graphml、graphson 或 graphviz dot格式:
./joern-export --repr=all --format=neo4jcsv
./joern-export --repr=all --format=graphml
./joern-export --repr=all --format=graphson
./joern-export --repr=all --format=dot
- 在文件夹中已创建好新文件