纪念一下花费四天才安装好的joern
目录
1 为什么要安装joern?
运行一个项目,该项目的数据预处理要求把C/C++源码转换为代码属性图(不能跳过这一步???)
2 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进行。(此处借鉴https://blog.csdn.net/m0_37924639/article/details/78783592)
3 joern安装步骤及可能遇到的问题
安装joern之前,建议仔细查看官方文档的安装教程
3.1 预准备
-
操作系统:linux
-
python环境:2.7(注意:如果你有多个python版本,可以上网查找切换python版本的方法——可能会用得到)
-
配置“System Settings”中的“Software&Update”的“Download from:”
-
此时你有两种选择:
-
选择"Server for United States"(优点:包全都有;缺点:需要科学上网,否则下载速度很慢)
-
选择国内的某个镜像源(优点:下载速度快;缺点:有一些包可能找不到,还得科学上网下载)
-
-
3.2 joern的系统需求和依赖
-
操作系统:建议在linux或者mac中安装joern,windows下鲜有人安装joern(但是官方说只要系统支持jvm,就可以运行joern)
-
python环境:2.7(重点!!!)
-
网络建议:全程“科学上网”
-
软件需求:
-

-
java virtual machine 1.7:
-
jdk1.7安装方法,参见如下链接:
-
方法二:废弃!!!此方法安装的jdk不能被系统正确的识别
-
即安装jdk,先检查一下linux中有没有装过jdk:
打开终端,输入命令 java -version-
去官网找适合你的系统的版本,此处提供jdk7下载链接: https://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html#jdk-7u80-oth-JPR
-
linux下如何安装jdk7?参见如下链接:http://jingyan.baidu.com/article/e2284b2b61a2efe2e6118d39.html(此链接中也包括环境变量的配置,请仔细查看)
-
注意在环境变量里面JAVA_HOME路径得是自己安装包所在路径。
-
安装成功,截图如下:
-

-
注意:在安装成功后,查看jdk文件夹里的内容,有可能会少一些文件(原因:在linux中解压tar.gz时,一些文件不能正确的解压出来,导致这些文件会消失)
-
解决方法:在windows下提前解压好tar.gz文件,得到jdk文件夹,将该文件夹覆盖linux中残缺的jdk文件
-
windows中jdk内含文件,截图如下:
-
-

-
linux解压出来的jdk文件夹内容,截图如下:
-
-

-
可以看到linux中的jdk文件夹中少了很多文件,请补全这些文件,否则之后使用ant时会报错
-
-
-
-
Neo4j 2.1.5(好像不安装neo4j 2.1.5也没问题,只要配置neo4j-community-2.1.5?大家可以尝试一下)(P.S.我下载neo4j 2.1.5花了6h):
-
因为2.1.5版本太老,官网找不到安装包,因此只能使用apt-get install安装,具体安装命令如下所示:
-
wget -O - https://debian.neo4j.org/neotechnology.gpg.key | sudo apt-key add - echo 'deb https://debian.neo4j.org/repo stable/' | sudo tee /etc/apt/sources.list.d/neo4j.list sudo apt-get update sudo apt-get install neo4j=2.1.5 -
注意:下载速度很慢,一般至少需要一个小时(而且还会由于下载速度过慢而中断很多次,建议每隔十分钟看看下载进度),下载时可以做点其他事情
//如果中断了,则运行如下命令 sudo apt-get install neo4j=2.1.5 --fix-missing -
下载可能遇到的问题:
-
问题1:
-
终端报错: GnuTLS recv error (-9): A TLS packet with unexpected length was received. 之后,再尝试一次,有可能会提示: Back-end Server is at capability -
解决方案:重启一下,等待服务器空闲,再尝试下载
-
-
问题2:
-
终端报错: Internal Error, ordering was unable to handle the media swap-
解决方案:
sudo rm -fR /var/lib/apt/lists/* sudo apt-get update 尝试重新运行如下命令: sudo apt-get install neo4j
-
-
-
-
安装完成截图:
-
-
gremlin
-
听前辈说,安装很麻烦,所以前辈留下了一个已经配置好gremlin的数据库neo4j,见neo4j-community-2.1.8.zip。解压,直接可用(具体怎么用可以看这篇博客:https://blog.csdn.net/water_likly/article/details/89378623)(建议把neo4j-community-2.1.8放到/usr/Neo4j/文件夹中,解压到其他文件夹也可以)
-
-
如何判断gremlin安装成功?等joern完全安装之后判断。
-
3.3 安装joern
-
按照官网的安装步骤,按顺序!!!,安装即可。
-
此为官网安装教程地址:http://joern.readthedocs.io/en/latest/installation.html
-
Building joern
-
可能遇到的问题:
-
问题1:未安装ant
-
解决方案:
sudo apt-get install ant
-
-
问题2:如果你更改了jdk的版本,建议重新build,即重新执行命令ant
-
由于一些文件的下载较慢,前辈给大家提供了lib.tar.gz安装包,但是接下来的一些文件下载也挺慢的,所以耐心等待下载完成吧
-
结果:ant成功之后,会在/joern-0.3.1/bin文件夹中生成一个文件joern.jar(这个文件很重要)
-
build成功:终端会显示 BUILD SUCCESSFUL 否则,失败会显示: BUILD FAILURE (请仔细查看报错信息,先分析报错信息,再想解决方案)
-
-
注意:
-
安装python-joern之前,执行如下命令,安装py2neo(2.0)
pip2 install py2neo==2.0 // 注意:一定是py2neo2.0版本的,否则之后运行joern-lookup的时候会提示找不到对应的module -
安装py2neo可能出现的问题:
-
问题1:
-
问题描述:
-
TypeError: unsupported operand type(s) for -=: 'Retry' and 'int'
-
问题分析:由于没有开代理(访问外网),因此在执行pip install py2neo时,pip由于没能一次连接上服务器,准备retry,再次连接。但是因为'retry.py'有问题,所以在尝试重连时会报错
-
解决方案:更换pip的镜像源,让本地无阻碍的连上服务器端
-
1、在用户目录下(/home/XXX)创建.pip文件夹,并创建pip.conf文件 mkdir .pip cd .pip touch pip.conf sudo gedit pip.conf 2、在pip.conf下输入:(注意:这里更换的是阿里云镜像源) [global] trusted-host = mirrors.aliyun.com index-url = http://mirrors.aliyun.com/pypi/simple 3、 sudo apt-get update最后再次使用pip install py2neo,国内镜像源有这个包,下载速度挺快的
-
-
-
-
python-joern
-
运行sudo python2 setup.py install可能遇到的问题:
-
问题1:python2.7没有装setuptools
-
解决方案:
-
wget -q http://peak.telecommunity.com/dist/ez_setup.py wget http://pypi.python.org/packages/2.4/s/setuptools/setuptools-0.6c8-py2.4.egg python ez_setup.py //注意:第三步的url是根据第二步得到的url. //关键:是要准备好2个东西:ez_setup.py和setuptools-0.6c8-py2.4.egg
-
-
问题2:需要依赖项:py2neo-gremlin(国内镜像源没有这个包!!!)
-
问题描述: https://github.com/fabsx00/py2neo-gremlin/tarball/master/#egg=py2neo-gremlin-0.1 需要科学上网
-
解决方案1:使用pip安装py2neo-gremlin
-
出现问题:HTTPError: 404 Client Error: Not Found for url: http://mirrors.aliyun.com/pypi/simple/py2neo-gremlin/
-
问题分析:国内没有同步资源包,应该使用国外的源(但是使用国外的源要科学上网!!!)
-
解决方案:使用解决方案2,如下所示
-
-
解决方案2:建议科学上网,先把这个tar.gz压缩包下下来,再解压,cd到该文件夹内,运行如下命令:
sudo python2 setup.py install然后再运行
cd python-joern-0.3.1 sudo python2 setup.py install
-
-
问题3:待续
-
-
joern-tools
-
运行sudo python2 setup.py install可能遇到的问题:
-
问题1:
-
问题描述:依赖项:chardet(不知道国内镜像源有没有)下载过慢
-
解决方案:退出当前进程,下载对应的whl文件,执行命令
pip install chardet-3.0.4-py2.-y3-noe-any.whl安装好这个包之后,再运行sudo python2 setup.py install
-
-
问题2:
-
问题描述:依赖项:pygraphviz(国内镜像源有这个包)下载过慢
-
解决方案:执行命令
pip install pygraphviz安装好这个包之后,再运行sudo python2 setup.py install
-
-
-
配置完所有的内容后,在joern-tools目录下,输入如下命令,可查验是否安装成功
joern-lookup-
注意:一定要在python2.7环境下执行该命令,否则可能会报错:no module 'xxx'
-
-
安装成功截图(花了四天终于装好了):
-
-
如果遇到其他问题,建议多问问有linux使用经验的人,或者去博客查找解决方案
4 joern的使用
官方文档为全英,建议有一定的英语基础的人去看官方文档,英语基础不太好的人可以去博客找找教程
或者看我的下一篇博客呀!



5815

被折叠的 条评论
为什么被折叠?



