基本是对joern主页的一个搬运工作,并且这篇年代久远,可能工具已经更新了好几个版本,仅作参考吧。
joern是一个C/C++代码分析工具,主要功能是从源码生成抽象语法树,控制流图和程序依赖,合成一个叫做代码属性图(Code Property Graph, 擅自翻译了)的东西,存入图形数据库neo4j。
joern主要分为三个部分:joern(-core),python joern,joern tools。joern(-core)主要用来进行代码的解析以及以代码属性图形式进行存储。python joern是joern数据库的接口。joern tools是针对python joern的一个命令行工具,便于简单的分析在shell进行。
安装要求和依赖
- Windows/Mac/Linux操作系统,此处记录在linux下的安装
- 30GB硬盘和8GB RAM
需要软件
- JVM1.7及以上
- Neo4J 2.X社区版
- Gremlin for Neo4J 2.X.,Gremlin语言的图遍历组件
关于Gremlin,joern开发者提供neo4j的gremlin插件,然而出于某种奇怪的原因一直没装上,这里是利用了neo4j自带的cypher查询语言对于代码属性图进行查询,因此直接安装了py2neo 2.0 - 其他的一些依赖,已打包为lib.tar.gz
步骤
- 安装Neo4j:
下载完毕后进行解压
tar -zxvf neo4j-community-2.0.1.tar.gz
修改conf/neo4j-server.properties配置文件,将org.neo4j.server.webserver.address=0.0.0.0注释字符去掉
- 下载joern的最新版本并解压
wget https://github.com/fabsx00/joern/archive/0.3.1.tar.gz
tar xvf 0.3.1.tar.gz
- 进入joern-0.3.1目录,下载依赖包lib.tar.gz并解压,若想构建开发版则需从官网下载其他依赖
cd joern-0.3.1
wget http://mlsec.org/joern/lib/lib.tar.gz
tar xfzv lib.tar.gz
- 命令行输入
ant
来build此工程 - 创建符号连接(可选),将
joern-0.3.1/bin/joern.jar
复制到磁盘中的任意位置,如果使用bash,则在~/.bashrc
中添加如下代码,其中$JOERN代表joern的安装路径:
alias joern='java -jar $JOERN/bin/joern.jar'
- 构建附加工具(可选)
ant tools
至此joern就基本安装完毕,可以使用了,然而强烈建议安装python-joern和joern-tools。
安装python-joern
- 安装python-dev:
sudo apt-get install python-setuptools python-dev
- 安装python-joern:
wget https://github.com/fabsx00/python-joern/archive/python-joern-0.3.1.tar.gz
tar xfzv python-joern-0.3.1.tar.gz
cd python-joern-0.3.1
sudo python2 setup.py install
安装joern-tools
git clone https://github.com/fabsx00/joern-tools
cd joern-tools
sudo python2 setup.py install
至此就全部安装结束,可以输入joern-lookup
查看是否安装成功。
joern使用基本步骤
- 导入代码
java -jar $JOERN/bin/joern.jar $CodeDirectory
其中$CodeDirectory
代表你的代码的存放目录,这一步会创建一个neo4j的目录.joernIndex,注意,如果此目录已经存在,则joern.jar就会在其中添加代码,因此在每次你想要创建一个新的数据库之前需要删除.joernIndex,然后重复此步骤。
- 配置neo4j数据库位置
进入neo4j目录,找到conf/neo4j-server.properties,找到并修改以下代码:
# neo4j-server.properties
org.neo4j.server.database.location=/$path_to_index/.joernIndex/
其中$path_to_index为joern的安装位置。
- 尝试运行neo4j,若失败,则修改conf/neo4j.properties,找到并修改以下代码:
# neo4j.properties
allow_store_upgrade=true
使得neo4j能够更新数据。
运行joern
在运行之前,确保neo4j关闭,在joern安装路径下键入:./joern $CodeDirectory
注意,若添加CodeDirectory时此目录非空,则其中代码已经存入数据库,无需此步。运行neo4j
在neo4j安装路径下键入bin/neo4j console
,在控制台下运行neo4j,浏览器中网址输入localhost:7474
即可查看你的代码的代码属性图。- 利用neo4j server命令行或在程序中插入对代码属性图的遍历。