前提:我的电脑Win10,通过连接Linux服务器进行Joern工具的下载。
一、Joern工具
Joern 是一个对源代码、字节码和二进制代码进行稳健分析的平台。它生成代码属性图,一种用于跨语言代码分析的代码图形表示。代码属性图存储在自定义图数据库中。这允许使用以基于Scala的特定领域查询语言制定的搜索查询来挖掘代码。
二、安装
环境:JDK19
① 官网下载JDK压缩包,先在Linux系统中输入命令“uname -r”查看Linux版本(x86_64);
② 在root目录下通过mkdir创建install目录,该目录用来存储需要安装的JDK;
③ 找到压缩包目录,解压缩;
# 解压JDK19
tar -zxvf jdk-19.0.2_linux-x64_bin.tar.gz
④ 解压完毕后通过mv命令将解压后的目录剪切到/root/install目录下;
mv jdk-19.0.2 /root/install
⑤ 配置环境变量
通过vim /etc/profile命令,打开etc目录下的环境变量配置文件profile,按“i”键在最底端输入如下代码:
export JAVA_HOME=/root/install/jdk-19.0.2
export PATH=$JAVA_HOME/bin:$PATH
⑥ 输入完毕后,按“esc”键退出编辑,输入“:wq”保存并退出profile配置文件;
⑦ 更新配置文件;
source /etc/profile
输入Java -version查看是否安装成功,操作如图:
2.Joern安装
(1) 更新包:apt-get update
(2) 安装unzip以及sudo命令
apt-get install sudo
(3)更新curl版本
sudo apt-get install curl
按照Joern官网安装预构建的二进制文件:
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
(5)跳转到执行目录:
cd joern/joern-cli
(6)测试Joern是否安装成功:输入joern
三、实例
(1)导入项目(该项目为靶场项目),克隆一个git存储库:
git clone https://github.com/xunil154/VulnerableChat.git
(2)导入项目,命名为“test”
(3)关闭项目并保存修改
(4) joern-parse 工具
① 分析client.c文件:joern-parse /root/VulnerableChat/src/client.c
② 进入 joern shell,导入刚才生成的 cpg.bin;
(5) joern-export 导出 dot 文件;
–repr 参数指定图的类型:ast,cfg,ddg,cdg,pdg,cpg14
# 生成PDG、CFG、AST、CPG文件夹dot文件
joern-export /root/cpg.bin --repr pdg --out /root/result-pdg
joern-export /root/cpg.bin --repr cfg --out /root/result-cfg
joern-export /root/cpg.bin --repr ast --out /root/result
joern-export /root/cpg.bin --repr cpg --out /root/result-cpg
(6) dot 命令画图
-T 参数指定保存的文件类型
每个 .dot 文件生成一个图,可以看 dot 文件的大小,最大的那个文件一般是整个项目的图。
如:将dot文件转化为pdf形式
# PDG
dot -Tpdf -o 2-PDG.pdf /root/result-pdg/3-pdg.dot
# CPG
dot -Tpdf -o 4-CPG.pdf /root/result-cpg/client.c/main.dot
(7) 比如生成的main.dot的CPG如下图(截取部分展示):