SySeVR环境配置:joern-0.3.1、Neo4j-2.1.5、py2neo2.0

这篇具有很好参考价值的文章主要介绍了SySeVR环境配置:joern-0.3.1、Neo4j-2.1.5、py2neo2.0。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

最近希望在基于图神经网络的漏洞检测上有所推进,准备复现文章SySeVR: A Framework for Using Deep Learningto Detect Software Vulnerabilities开源代码,基本环境配置是python库环境以及joern-0.3.1、Neo4j-2.1.5环境的配置,环境具体要求如下
SySeVR环境配置:joern-0.3.1、Neo4j-2.1.5、py2neo2.0
假期的时候就已经完成过joern的配置,光是安装就卡了我两个星期,并未详细记录,特此来记录一下。但是最后采用joern-cli绘制图代替joern使用了详细见文章链接

1.预准备

操作系统:Linux(个人ubuntux64后面选择jdk版本时候注意)
root管理员方式登录服务器,我采用的腾讯云服务器,会默认给你用户身份连接,但是会产生以下问题

  • 无法直接创建文件夹以及修改文件等报错,所以命令前需要加sudo
  • 同时注意在root管理员和用户登录时进行的系统配置是完全两个环境以用户身份修改环境例如python版本的时候管理员身份登陆的时候仍然保证原状,不同身份登陆后进行的操作互不影响
  • 鉴于管理员root身份权限更大更方便,防止两个身份同时操作混乱我们可以设置root方式登录使用远程服务器,详细过程见文章

python2版本:2.7
python3版本:3.8
如果你版本低于3.6可能遇到如下问题,具体如何安装详见文章

PyGraphviz requires Python version 3.8 or later (3.6 detected). error: Setup

2.安装java

安装Java的教程网上有很多了,我也自己总结过一种有效的方式,具体详见。
我安装的jdk版本为jdk1.7.0_80,下载链接

3.安装neo4j

我安装joern是为了运行SySeVR,所以我选择了和SySeVR一样的Neo4j 2.1.5,这里建议直接下载链接中的版本,如果自己下载neo4j还需要配置gremlin-plugin,别的所有教程也都选择了配置好的neo4j,我也上传详见资源链接
SySeVR环境配置:joern-0.3.1、Neo4j-2.1.5、py2neo2.0

3.1 neo4j解压到/usr/local/neo4j目录
3.2 解压后还需要更改几个文件
  • neo4j-server.properties($JOERN为joern安装的目录)
    vim /neo4j/conf/neo4j-server.properties
# location of the database directory
org.neo4j.server.database.location=$JOERN/.JoernIndex
# Let the webserver only listen on the specified IP. Default is localhost (only
# accept local connections). Uncomment to allow any connection. Please see the
# security section in the neo4j manual before modifying this.

注意:一定保证neo4j中的org.neo4j.server.database.location文件地址以及文件名和joern分析函数导入数据库所产生index文件的地址和文件名完全一致,具体见文章

  • neo4j-wrapper.conf
    vim /neo4j/conf/neo4j-wrapper.conf
# Java Heap Size: by default the Java heap size is dynamically
# calculated based on available system resources.
# Uncomment these lines to set specific initial and maximum
# heap size in MB.
wrapper.java.initmemory=512
wrapper.java.maxmemory=10240 #as large as you can
  • /etc/profile
    vim/etc/profile
# Add These Content at the End of the File
#######################################
NEO4J_HOME=/usr/local/neo4j
PATH=$PATH:$NEO4J_HOME/bin

export NEO4J_HOME
export PATH
#######################################
source /etc/profile
3.3 验证
/usr/local/neo4j/bin/neo4j console

4 安装ant

选择的版本是apache-ant-1.9.14,链接下载之后解压到/usr/local/ant

4.1 配置环境变量/etc/profile,如下把这些加到文档末尾

vim /etc/profile

#######################################
ANT_HOME=/usr/local/ant
PATH=$PATH:$ANT_HOME/bin

export ANT_HOME
export PATH
#######################################

source /etc/profile

4.2 检测安装结果
ant -version

安装成功会显示

Apache Ant(TM) version 1.9.14 compiled on March 12 2019

5.安装joern

安装的joern也是在SySeVR的项目详细见neo4j步骤里的文件截图,因为都已经配置好了,比较简单,可以到资源中直接下载。

5.1 解压joern-0.3.1到任意目录
cd joern-0.3.1
ant

最后显示BUILD SUCCESSFUL

5.2设置环境变量
  • /etc/profile
    vim /etc/profile
 # 把这些加到文档末尾
  #######################################
  JOERN_HOME=/home/joern-0.3.1/
  
  export JOERN_HOME
  #######################################
  • ~/.bashrc
    vim ~/.bashrc
 # 把这些加到文档末尾
  #######################################
  alias joern='java -jar $JOERN/bin/joern.jar'
  #######################################
  • 更新生效
source /etc/profile
source ~/.bashrc
5.3 构建额外的工具
cd joern-0.3.1
ant tools

运行结果和ant的结果相同

BUILD FAILED ant joern-0.3.1/build.xml:35: Directory creation was not succes
如果你未以root管理员身份运行ant tools时会报错上面的内容,方便起见我们如果使用服务器则一定换成root身份运行,如果用的本地就没有这个问题了,如果就是暂时不想换,使用sudo ant就可以解决了

6.安装python-joern

python-joern下载链接也可以在项目中直接找到,具体文件格式如下,也可以直接下载资源。
SySeVR环境配置:joern-0.3.1、Neo4j-2.1.5、py2neo2.0

cd python-joern-0.3.1
python setup.py install

注意:

命令变化

如果用户身份登录,需要命令前加入sudo,若电脑命令行输入python输出python2.x的信息,需要将python setup.py install中的python换为python3,若是python3.x则没有问题。

问题:用户身份登录,根据刚才的原则使用命令sudo python3 setup.py install

产生报错如下:

PyGraphviz requires Python version 3.8 or later (3.6 detected). error: Setup

咋们都是文化人吧,那就直接换成python3.8或更高版本即可,具体升级过程见文章
使用ubuntu用户身份安装python3.8,之后再次执行命令sudo python3 setup.py install
产生报错如下:

# include <Python.h>; pygraphviz/graphviz_wrap.c:154:11: fatal error: 

最后查阅大量文献,最后收获一个信息<Python.h>是python最基础的文件,我推测是因为我虽然在ubuntu用户身份安装python3.8,但是root身份中python版本仍然为3.6,有些ubuntu用户身份可以做的事情可以使用python3.8,但是涉及到更高权限的时候命令中的sudo会使用管理员身份但是python版本不对,其中的python.h文件有问题,切换root身份安装python3.8即可安装,成功

7.安装joern-tools

joern-tools下载链接,也可以在博主资源中直接下载。

cd joern-tools-master
python setup.py install

注意:

命令变化

如果用户身份登录,需要命令前加入sudo,若电脑命令行输入python输出python2.x的信息,需要将python setup.py install中的python换为python3,若是python3.x则没有问题,博主用户身份登录,根据刚才的原则使用命令sudo python3 setup.py install

8.验证joern

输入joern-lookup查看

root@VM-12-7-ubuntu:/home/thicker/GNN/FIRST# joern-lookup
usage: joern-lookup [-h] [-f [FILE]] [-o [OUT]] [-c] [-g] [-a ATTRIBUTES [ATTRIBUTES ...]]

Lookup nodes using lucene queries and output one row for each matching node. Rows are in the format functionId TAB attributeKey:attributeValue TAB
...'

optional arguments:
  -h, --help            show this help message and exit
  -f [FILE], --file [FILE]
                        read input from the provided file
  -o [OUT], --out [OUT]
                        write output to provided file
  -c, --complete        Output the complete node, not just its ID.
  -g, --gremlin         query is a gremlin traversal as opposed to a lucene query
  -a ATTRIBUTES [ATTRIBUTES ...], --attributes ATTRIBUTES [ATTRIBUTES ...]
                        Attributes of interest
root@VM-12-7-ubuntu:/home/thicker/GNN/FIRST# 

就当最后临门一脚的时候,不出意外就又出意外了,报错了

  File "/usr/local/lib/python3.8/dist-packages/joerntools-0.1-py3.8.egg/joerntools/shelltool/LookupTool.py", line 4, in <module>
    from TraversalTool import TraversalTool
ModuleNotFoundError: No module named 'TraversalTool'

告诉我没有这个库,但是我去寻找的时候文件组织如下:
SySeVR环境配置:joern-0.3.1、Neo4j-2.1.5、py2neo2.0
一个文件下告诉我没有,这是什么鬼啊,头大
那好吧,既然找不到那我就帮你找,我把导入库的语句加上"."改成如下:
SySeVR环境配置:joern-0.3.1、Neo4j-2.1.5、py2neo2.0改完我直接运行,根本没有毛病,但是又来了一个报错,这个报错我一下就拿捏

Traceback (most recent call last):
  File "/usr/local/bin/joern-lookup", line 4, in <module>
    __import__('pkg_resources').run_script('joerntools==0.1', 'joern-lookup')
  File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 658, in run_script
    self.require(requires)[0].run_script(script_name, ns)
  File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 1438, in run_script
    exec(code, namespace, namespace)
  File "/usr/local/lib/python3.8/dist-packages/joerntools-0.1-py3.8.egg/EGG-INFO/scripts/joern-lookup", line 3, in <module>
    from joerntools.shelltool.LookupTool import LookupTool
  File "/usr/local/lib/python3.8/dist-packages/joerntools-0.1-py3.8.egg/joerntools/shelltool/LookupTool.py", line 4, in <module>
    from .TraversalTool import TraversalTool
  File "/usr/local/lib/python3.8/dist-packages/joerntools-0.1-py3.8.egg/joerntools/shelltool/TraversalTool.py", line 2, in <module>
    from PipeTool import PipeTool
ModuleNotFoundError: No module named 'PipeTool'

告诉我找不到’PipeTool’,这不巧了,刚才我也看到这个文件了
SySeVR环境配置:joern-0.3.1、Neo4j-2.1.5、py2neo2.0
找不到我就帮你,直接加点我就是运行,我不信他不行,但是显示现实让我相信了,报错如下:

Traceback (most recent call last):
  File "/usr/local/bin/joern-lookup", line 4, in <module>
    __import__('pkg_resources').run_script('joerntools==0.1', 'joern-lookup')
  File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 658, in run_script
    self.require(requires)[0].run_script(script_name, ns)
  File "/usr/lib/python3/dist-packages/pkg_resources/__init__.py", line 1438, in run_script
    exec(code, namespace, namespace)
  File "/usr/local/lib/python3.8/dist-packages/joerntools-0.1-py3.8.egg/EGG-INFO/scripts/joern-lookup", line 3, in <module>
    from joerntools.shelltool.LookupTool import LookupTool
  File "/usr/local/lib/python3.8/dist-packages/joerntools-0.1-py3.8.egg/joerntools/shelltool/LookupTool.py", line 4, in <module>
    from .TraversalTool import TraversalTool
  File "/usr/local/lib/python3.8/dist-packages/joerntools-0.1-py3.8.egg/joerntools/shelltool/TraversalTool.py", line 3, in <module>
    from joerntools.shelltool.JoernTool import JoernTool
  File "/usr/local/lib/python3.8/dist-packages/joerntools-0.1-py3.8.egg/joerntools/shelltool/JoernTool.py", line 3, in <module>
    from joerntools.DBInterface import DBInterface
  File "/usr/local/lib/python3.8/dist-packages/joerntools-0.1-py3.8.egg/joerntools/DBInterface.py", line 2, in <module>
    from joern.all import JoernSteps
  File "/usr/local/lib/python3.8/dist-packages/joern-0.1-py3.8.egg/joern/all.py", line 2, in <module>
    from py2neo.ext.gremlin import Gremlin
ModuleNotFoundError: No module named 'py2neo.ext'

我一看这个错我有点蒙了,这不完了,拿捏不住了,错不一样了,不慌上网一搜,告诉我py2neo在新版本当中没有ext这个库,好像是从2020.1.1和4.0版本以上都没有这个库,那我先看了一下我的py2neo版本果然是最新的,那咋们不怕啊,直接pip install py2neo==3.x,直接enter安装,告诉我没有这个版本了,直接木了

Looking in indexes: http://mirrors.tencentyun.com/pypi/simple
ERROR: Could not find a version that satisfies the requirement py2neo==3.1.2 (from versions: 4.0.0, 4.1.0, 4.1.1, 4.1.2, 4.1.3, 4.2.0, 4.3.0, 2020.0.0, 2020.1.0, 2020.1.1, 2021.0.0, 2021.0.1, 2021.1.0, 2021.1.1, 2021.1.2, 2021.1.3, 2021.1.4, 2021.1.5, 2021.2.0, 2021.2.1, 2021.2.2, 2021.2.3)

没事,勇敢牛牛不怕困难,上网上搜看看有没有资源,功夫不负有心人真的找到py2neo3.x版本了,这不就有了,但是结果还是不行,资源我也挂了连接

#py2neo-3.1.1-py2.py3-none-any.whl 使用方式 
pip install py2neo-3.1.1-py2.py3-none-any.whl

产生什么错了呢,就是他告诉我有’py2neo.ext’,但是没有’py2neo.ext.gremlin’,心态有点崩了兄弟,但是在此搜索,发现’py2neo.ext.gremlin’在新版本中也去掉了,只有在py2neo2.X中才有

Traceback (most recent call last):
  File "/usr/local/bin/joern-lookup", line 6, in <module>
    exec(compile(open(__file__).read(), __file__, 'exec'))
  File "/home/thicker/GNN/FIRST/joern-tools-master/tools/lowLevel/joern-lookup", line 3, in <module>
    from joerntools.shelltool.LookupTool import LookupTool
  File "/home/thicker/GNN/FIRST/joern-tools-master/joerntools/shelltool/LookupTool.py", line 4, in <module>
    from .TraversalTool import TraversalTool
  File "/home/thicker/GNN/FIRST/joern-tools-master/joerntools/shelltool/TraversalTool.py", line 3, in <module>
    from joerntools.shelltool.JoernTool import JoernTool
  File "/home/thicker/GNN/FIRST/joern-tools-master/joerntools/shelltool/JoernTool.py", line 3, in <module>
    from joerntools.DBInterface import DBInterface
  File "/home/thicker/GNN/FIRST/joern-tools-master/joerntools/DBInterface.py", line 2, in <module>
    from joern.all import JoernSteps
  File "/usr/local/lib/python3.8/dist-packages/joern-0.1-py3.8.egg/joern/all.py", line 2, in <module>
    from py2neo.ext.gremlin import Gremlin
ModuleNotFoundError: No module named 'py2neo.ext.gremlin'

那就事不宜迟了,不想再拖了,我下载了py2neo2.x,资源在这喽,不是博主的偶,要是想要免费的话可以私信博主厚厚偶或者关注公众号私信偶

解压得到py2neo-py2neo-2.0.8.tar.gz
cmd切换到文件目录
执行pip install py2neo-py2neo-2.0.8.tar.gz 安装

并且后来运行成功发现在那个开源项目中也给出了py2neo2.x版本,但是博主没有用过,大家可以试一试好用告诉博主偶,最后按照步骤安装py2neo2.x,运行joern-lookup验证,成功,撒花撒花

8.使用joern

完成joern的安装后,进入joern的安装目录,我的安装目录在/home/linux用户名/joern-0.3.1

两种方法,根据填充的数据的大小来采用不同的方法

  • 第一种:分析小型程序
 // 模板
 java -jar $JOERN/bin/joern.jar $CodeDirectory
$JOERN:joern安装目录,$CodeDirectory:待分析的程序目录

 // 实际运行,示例
 sudo java -jar /home/linux用户名/joern-0.3.1/bin/joern.jar /home/linux用户名/joern-0.3.1/testcode/
//joern-0.3.1文件夹内自带一个testcode文件夹,用于测试

该命令运行完后会在该目录(joern-0.3.1)下生成一个 .joernIndex的隐藏文件(ctrl+h可以查看)。注意,如果此目录已经存在,则joern.jar就会在其中添加代码,因此在每次你想要创建一个新的数据库之前需要删除.joernIndex,然后重复此步骤。

  • 第二种:分析大型程序
 // 模板
 java -Xmx$SIZEg -jar $JOERN/bin/joern.jar $CodeDirectory
//$JOERN:joern安装目录,$CodeDirectory:待分析的程序目录,$SIZE:给jvm分配内存 (以GB为单位)
 // 实际运行,实例Xmx1g,代表最大分配1G空间
 sudo java -Xmx1g -jar /home/linux用户名/joern-0.3.1/bin/joern.jar /home/linux用户名/joern-0.3.

SySeVR环境配置:joern-0.3.1、Neo4j-2.1.5、py2neo2.0
遇到两个警告,告诉我第一个是空间不足需要使用-Xmx参数扩大空间,看是要2G,加上参数-Xmx2g,还是空间不足,改成-Xmx3g成功消除了警告,再就是直接使用自带的testcode告诉无法获得,我就创建一个新的文件夹code在joern-0.3.1文件夹下并上传随意代码,再次运行警告消除。

所有的安装过程介绍完毕了,希望大家安装顺利偶,如果大家有什么问题,欢迎关注公众号“厚点编程”和博主进一步交流偶文章来源地址https://www.toymoban.com/news/detail-403866.html

到了这里,关于SySeVR环境配置:joern-0.3.1、Neo4j-2.1.5、py2neo2.0的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 探索Py2neo:Python与Neo4j图数据库的交互实践

    在数据驱动的世界中,图形数据库如Neo4j成为处理复杂关系数据的强大工具。这种数据库类型以图结构存储数据,优秀地表示和查询实体间的连接关系。Py2neo,作为Neo4j的Python驱动程序,使得在Python环境中使用Neo4j变得简单而直观。以下内容,将详细介绍如何利用Py2neo在Python中

    2024年03月11日
    浏览(56)
  • 知识图谱基本工具Neo4j使用笔记 三 :Py2neo 基本增删改查使用

    每天掌握一点,创建 --修改–查询–删除 知识图谱基本工具Neo4j使用笔记 一 :入门基本操作 Python操作api py2neo 是一个Python库,用于连接和操作Neo4j图数据库。它提供了一组API,可让用户在Python中轻松地 创建 、 查询 和 操纵图形数据 。 py2neo允许用户使用 Python 代码 创建节点

    2024年02月11日
    浏览(56)
  • Neo4j企业版报错:py2neo.errors.ProtocolError: Cannot decode response content as JSON

    环境为neo4j-enterprise-5.1.0、py2neo、Neo4j Desktop-1.5.2 根据堆栈追踪,我们发现self.graph.name为空,而self.graph为Graph(\\\"http://localhost:7474/ \\\") 所以我们自己修改源码 打开python的包的安装位置: X:*****PythonPython37Libsite-packagespy2neodatabase.py 原来的代码: (990行左右) 更改后的代码:

    2024年02月12日
    浏览(68)
  • Neo4j报错:py2neo.errors.ProtocolError: Cannot decode response content as JSON 解决方案

    环境: neo4j-5.1.0、py2neo-2021.2.3、Neo4j Desktop-1.5.2、python3.9.13 1、创建neo4j链接,对数据库进行增删改的时候报错。 报错代码: 奇怪的是,同样的代码、数据,用在python3.8.3的环境中没有报错,所以首先查看两个版本python的区别,发现json的__init__中有一些小区别,关于json解析的,

    2024年02月12日
    浏览(67)
  • 【知识图谱】python连接neo4j报错:py2neo.errors.ProtocolError: Cannot decode response content as JSON

    源代码如下 报错信息: 从graph.run这里报错,报出一个JSon相关的错误,百思不得其解。 解决方法: 需要加上一个name=“neo4j”,才能成功,如下 或者这样 完整demo

    2024年02月11日
    浏览(54)
  • Ubuntu环境下安装neo4j,配置远程连接、python创建节点demo

    neo4j是较为知名的图数据库,也常常用在知识图谱领域,用来存储实体和实体属性,实体关系等,可以说是构建知识图谱非常有用的工具。neo4j主要有以下几个优点: 采用原生图(Native Graph)存储和处理数据:提供最优化的关系遍历执行效率,比关系数据库的表连接快上千倍 基

    2024年02月05日
    浏览(83)
  • Neo4j在Ubuntu 20.04上安装、配置以及Python连接使用 - Neo4j

    1. 进入要安装neo4j的ubuntu环境。 2. 添加Debian资源库。 java 1.8.xx版本对应neo4j 3.xx版本(jdk 11版本对应neo4j 4.xx版本): (1)wget -O - https://debian.neo4j.com/neotechnology.gpg.key | sudo apt-key add - (2)echo \\\'deb https://debian.neo4j.com stable 3.5\\\' | sudo tee /etc/apt/sources.list.d/neo4j.list(或者:echo \\\'deb

    2024年02月04日
    浏览(61)
  • Neo4j安装与配置

    注意:在安装Neo4j之前要安装JAVA SE的SDK。 企业版本的收费的,社区版本是免费的。我下载的是社区版本。 社区版本下载地址:https://neo4j.com/download-center/#community 我下载的是3.5.35 下载好以后是zip文件,把它解压放在你想要放置的路径下。 打开高级系统设置的环境变量 设置—

    2024年02月09日
    浏览(63)
  • Neo4j安装配置教程

    安装所需配件网盘一键下载。 以下描述中,官网下载均有描述,也可自官网下载。 Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。由于知识图谱中存在大量的关系型信息(实体—关系—实体), 使用结构化数据库进行存储将产生大量的冗余存

    2024年02月14日
    浏览(38)
  • neo4j下载安装配置步骤

    目录 一、介绍 简介 Neo4j和JDK版本对应 二、下载 官网下载  直接获取 三、解压缩安装 四、配置环境变量 五、启动测试 简介 Neo4j是一款高性能的图数据库,专门用于存储和处理图形数据。它采用节点、关系和属性的图形结构,非常适用于表示和查询复杂的实体关系。Neo4j具有

    2024年02月05日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包