Joern v1.1.590
jdk安装(jdk17)
点击jdk下载链接下载
放到要解压的目录下解压
tar xfzv jdk-17_linux-x64_bin.tar.gz
解压后转到jdk目录下输入pwd得到jdk的绝对路径
cd jdk-17.0.9/
pwd
然后配置环境
vim /etc/profile
写入
export JAVA_HOME=/绝对路径
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export PATH=$PATH:${JAVA_PATH}
保存退出再:
source /etc/profile
输入 java --version得到
安装成功
安装
下载链接下载joern-cli.zip
放到想要的目录下,解压就行了
unzip joern-cli.zip
解压完输入
./joern-clib/joern
显示下面这个界面就成功了
基础使用
控制台使用
先输入help查看命令
几个常用命令大致功能应该如下:
importCode("example.c")
importCpg("cpg.bin.zip")
都会创建一个新的project
workspace
查看所有的project
project
查看当前运行的project(没有运行会报错
open
打开最后使用的project
close
关闭project但不删除
delete
关闭project并删除
新importCode/importCpg创建了project
如果下次不使用了,记得用delete删除再exit退出
如果直接close退出或直接退,workspace还有这个project存在
查看cpg的方法可以用cpg.help
命令行使用
#生成cpg.bin————
使用指令 ./joern-cli/joern-parse example.c
可以看到成功生成了cpg.bin,也给出了cpg.bin的路径
#根据cpg.bin生成相应的图
使用指令./joern-cli/joern-export cpg.bin --repr ast --out out
--repr的参数有:ast|cfg|ddg|cdg|pdg|cpg14
--out参数是自定义的输出文件夹名称(该文件夹不能存在,无需手动创建
可以看到执行指令后,当前目录下有out目录
打开out可以看到有各种dot文件
使用指令dot -Tpng -o test.png [dot-file-name]
可以得到名为test.png的图
如下图所示:
脚本使用
控制台
在README.md中,写了查看所有内部脚本的指令
运行之后得到脚本文件和相应的描述:
上面几个脚本有几个好像用不了,可以自己去scripts目录下看有啥
指令使用格式如下:(路径记得写对
cpg.runScript("xx.sc")
命令行
因为我复现代码只需要用到graph-for-funcs.sc,所以只讲一下这个的使用,其他的可以参考一下别的作者(这个脚本要和joern的版本对应好
devign的作者写了graph-for-funcs.scala脚本,可以通过原作者写的graph-for-funcs.sc下载,他适用的版本好像是joern-cli 1.0.170,下载链接:joern-cliv1.0.170(需要其他版本可以把链接的末尾改成需要的版本
(原作者的是把cpg文件转成graph好像
我用的是一个大佬写的graph-for-funcs.scala,链接
可以看到适配的是joernv1.1.590,所以我用的joern-cli v1.1.590
然后虽然她文章里写的input是cpg,但是我用cpg.bin得不到graph,只有用.c文件才可以
她文章里也写了用的指令
一些参考文章