因为想复现Devign代码,因此决定安装Joern进行图的生成,但是看了很多文章,说是很难安装好。
所以特意安装了个虚拟机(其实按照我这个步骤来,同学们可以直接在自己的服务器上部署Joern)
安装Vmware Workstation(可略过)
参考:
VMware Workstation安装
脚本之家
Bug:安装成功后可以共享文件,重装了N次VMware tools,看了各种文章,还是无法复制粘贴(有同学教教吗)
配置Ubuntu环境(可略过)
备份
cp /etc/apt/sources.list /etc/apt/sources.list.bak
换源
参考:https://blog.csdn.net/weixin_43366437/article/details/123295845
首先查看一下VIM编辑器是否支持复制粘贴
$vim --version | grep "clipboard"
#-clipboard代表不支持+clipboard代表支持。
打开路径将原本所有内容删除
$vim /etc/apt/sources.list
然后将以下内容粘贴进去
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
## Not recommended
# deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
# deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
按下esc, 输入:wq
vim操作可查看:https://blog.csdn.net/weixin_43366437/article/details/123295845
更新
$ sudo gedit /etc/apt/sources.list
$ sudo apt update
配置Joern环境
查看Java环境(目前最新Joern文档中要求JDK11)
$ java -version
因为我装的是Ubuntu 18
跟据系统自带JAVA JDK来安装,参考:https://www.jianshu.com/p/5a25b9535016
$apt install openjdk-11-jre-headless
$apt install openjdk-11-jdk-headless
设置JAVA_HOME环境变量
$ sudo update-alternatives --config java
$ sudo vim /etc/environment
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"
其他用户需要执行命令source /etc/environment或注销并重新登录才能应用此设置
下载最新版本Joern
https://github.com/joernio/joern/releases
使用unzip 命令解压后,可以看到有很多文件
运行Joern
$ sudo ./joern
二、使用Joern
因为本人主要的诉求是用Joern来生成代码属性图,因此以下内容只关于如何生成代码属性图
首先下载文档中提供的案例
git clone https://github.com/ShiftLeftSecurity/x42.git
进入x42文件夹,可以看到里面只有一个.c文件
法一(不进入Joern控制台)
在Linux命令行中
joern-parse /src/directory
#生成cpg.bin
joern-export [cpg-name] --repr pdg --out outdir
#基于cpg.bin文件生成别的图
举个例子,下图根据代码生成了PDG
也可以使用别的命令生成其他的代码属性图,如下图所示
这里生成的是DDG
安装可视化工具
sudo apt-get install graphviz
sudo apt-get install xdot
安装好后,进入.dot文件所在的目录,可以点开看下
这里点开的是1-pdg.dot(点开0-pdg.dot是空白文件,有懂哥知道是为啥吗)
明明x42文件夹里,明明只有一个.c文件但是joern生成了9个.dot文件,也可以点开看下
原来剩下的7张图都是1-pdg.dot的子图,即,此代码中不同数据的不同流向
方法二(使用Joern控制台命令)
还在摸索。。。
参考博客:
https://blog.csdn.net/qq_36281420/article/details/114526209
https://blog.csdn.net/qysh123/article/details/117005421
https://blog.csdn.net/lockhou/article/details/123300572
https://blog.csdn.net/u013648063/article/details/112311392
版权归原作者 我反我叛- 所有, 如有侵权,请联系我们删除。