Joern安装之全网最详细教程写在前面网上很多关于jorn的安装教程都是几年前的了，而且joern对包的版本要求非常严格，就导致joern的安装异常麻烦。本人异常“幸运”的碰到了，历时三天终于安装成功。文章记录了本人安装joern的全过程，其中包括在安装过程中遇到的问题以及解决问题的方法，希望可以帮助到大家。所需要的各种包已经整理好放在最后。环境要求这里的环境要求尽量保持一致，否则会导致莫名其妙的问题。java 1.7python 2.7neo4j-community-2.1.8(2.1.5也可)，文末提供的安装包自带gremlin插件。关于java和neo4j的安装我这里就不细说了，网上教程一大堆，也不难，只给出安装neo4j的链接。开始安装确保jdk安装成功且环境已经配置完成；确保neo4j可以正常启动。安装joernwget https://github.com/fabsx00/joern/archive/0.3.1.tar.gztar xfzv 0.3.1.tar.gz这一步就是去那个链接下载joern的压缩包，然后解压。如果你有WinScp类似的工具，你可以直接复制这个链接去浏览器里下载，然后把解压后的文件夹放到linux就行。下载joern需要的依赖包cd joern-0.3.1wget http://mlsec.org/joern/lib/lib.tar.gztar xfzv lib.tar.gz这一步跟上一步一样，也是去那个链接里下载依赖包的压缩包，然后解压。注意要确保解压后的lib文件夹位于joern的目录下。lib文件夹中是各种各样的jar包，也就是说jar包的位置是：joern/lib/jar包下载antsudo apt-get install antsudo ant倒数第二行出现BUILD SUCCESSFUL即表示安装成功，如下图所示，其中红框中的路径下一步要用。建立连接alias joern = 'java -jar 红框中的路径'就是把第三步红框中的路径拼接在alias joern = 'java -jar后面，别忘了单引号。安装py2neo 2.0sudo pip install py2nep==2.0执行上面的代码大概率汇报错，因为2.0的包实在是过于久远，以至于pip已经抛弃了它。此时只能去github上下载，一定要下载2.0的包。https://github.com/py2neo-org/py2neo/tags?after=py2neo-2.0.7把下载好的安装包放在linux任意位置，进入py2neo的根目录，执行下面的代码：sudo python2 setup.py install安装python-joernsudo apt-get install python-setuptools python-devwget https://github.com/fabsx00/python-joern/archive/0.3.1.tar.gztar xfzv 0.3.1.tar.gzcd python-joern-0.3.1sudo python2 setup.py install这一步安装了两个东西，一定要按照上面的顺序安装。第一个的安装基本不会出错。安装的第二个是python-joern本体，这一步如果出错了，可能是因为py2neo的版本不对，也可能是某个包下载出错，譬如我这里的错误：最后一行这里提示出现了invalid syntax错误，然后很多同学就是去google或者百度invalid syntax关键字，去找解决方法，一顿操作猛如虎，结果哼哧哼哧搜了半天都是驴唇不对马嘴的答案。咱们要善于发现发现问题的本质，发挥主观能动性，不能是Terminal它说啥就是啥，怎么办呢？找到出现错误的第一行：上面的代码一看真的头皮发麻，我一开始也是这样，不想去读代码，反正就是赖。但是你稍微读一下就会发现下面的信息第一个红框肯定是正常信息，因为执行的时候没报错。咱们找错误肯定先找出错的第一行，首先定位关键字Traceback，用来跟踪错误出处的。一看到Traceback这个关键字就知道错误的起点在这部分，然后往上看，发现Reading.... Downloading...啥的，最后发现pyparsing这一看就是一个python包呀，也就是说它在下载这个包的时候出错了。那怎么办？去github上下载下来然后自己手动安装pyparsing版本那么多，咱们要下载哪一个版本呢？看上图箭头指出来的信息：searching for pyparsing != 3.0.5 ,>=2.0.2这里的!=和>=这个两个符号就很有意思，尤其是这个>=，打个比方：你给你女朋友买了个火腿肠(3.0.5)，然后她说：这>=棒棒糖(2.0.2)啥意思？肯定是你女朋友想吃棒棒糖呀，那你肯定得满足她不是？(我一个单身狗怎么能会想出这么生动的比喻？)所以它大概率想要的版本是2.0.2，实在不行把3.0.5，3.0.7也都下载下来一个个排除。怎么操作？github 上搜pyparsing通过tag找到对应的版本2.0.2，下载下来并解压把文件放到linux任意位置，进入pyparsing的根目录执行 sudo python2 setup.py install完事在安装过程中遇到的很多问题都可以通过上面的方法解决，就看你愿不愿意去找Traceback如果这一步没问题，接下来的安装基本上不会出错安装joern-tools，执行下面的代码之前请确保git已经安装成功，并成功配置。（如果没有git也没关系，无git方法下面会细说）sudo apt-get install graphviz libgraphviz-devgit clone https://github.com/fabsx00/joern-toolscd joern-toolssudo python2 setup.py install这一步跟第6步一样，安装了两个东西，前一个安装基本不会出错，主要是第二个。首先说没装git怎么下载：首先把连接复制到浏览器中，去下载这个文件夹并解压进入文件夹根目录，执行 sudo python2 setup.py install完事你也可能遇到和第6步一样的问题，在安装某个包的时候出错。但是每个人的遇到的出错的包可能不一样用，所以请按照第六步说的方法排除问题。这里还是详细的说一下我遇到的奇葩问题。乍一看，又是万恶的invalid syntax，先不慌，按照第六步的说法定位Traceback关键字，于是找到下面的信息：看图说话：这肯定是在安装pygraphviz这个包的时候出错了，还是1.9版本的pygraphviz。接下来就是直接去github上下载这个包，然后进入它的根目录执行 sudo python2 setup.py install进行安装就行了。但是我遇到个很奇葩的问题：安装joern的大环境是python2.7，但是在安装pygraphviz的时候他却给我报了这样的错误：invalid syntax它又出现了！而且这次的报错信息只有这两行！是不是慌了？别慌，再分享一招，出现无效语法这个错误还有一种可能：python版本不对，怎么知道的呢？去pygraphviz的文件夹中找readme或者install文件，这两个文件都是用来说明安装这个包的注意事项以及需要的依赖。果不其然，发现了两个说明文件，readme.rst我打不开，没关系，直接看INSTALL.txt：PyGraphviz requires:Python (version 3.8, 3.9, or 3.10)可以看到它要求的环境是python3.8及以上，那咱们的python2.7环境又不能改，咋办？发挥主观能动性的时候到了！既然python不能改，但是PyGraphviz包的版本可以改呀。老办法，去github上找，从1.9版本一个一个往下试。我已经帮同学们试过了：1.8，1.7，1.6都不行，最高只有1.5版本的PyGraphviz可以适配python2.7。问题解决！到这里，joern-tools终于装好了。革命尚未成功，咱们仍需努力。离成功还有最后一步！别骄躁，做个深呼吸，平复一下激动的心情。检查安装是否成功在joern-tools的根目录执行下面的代码：joern-lookup执行完上面的代码后，如果出现下面的信息，就说明joern安装成功了。但是我TM又报错了！麻了……提示我py2neo中没找到gremlin这个模块，但是这个模块我在安装neo4j的时候就装进去了(因为gremlin是neo4j的一个插件，是装在neo4j中的)。吻住，别慌。既然gremlin模块没问题，那就是py2neo的问题，因为一开始我使用pip命令装了一个python3的py2neo，可能是识别py2neo的时候没有用上2.0的py2neo，所以我把python3的py2neo卸载了：注意我这里卸载的是2021.2.3版本的py2neo，如果你也遇到了这个麻烦请一定要注意自己删除的版本是否是多余的版本，别删错了。果然，删除了多余的py2neo后就成功了。守得云开见月明，类目，完结撒花~写在最后一个简简单单的安装竟然也写了2000多字，除了记录一下第一次遇见环境这么复杂的而且教程也极少的软件安装，也同样想和大家分享自己遇见问题时解决问题的思路，我觉得解决问题的思路比解决问题的方法更让人收益。如果本文有帮到你，记得点个赞，拜~[button color="success" icon="" url="https://pan.baidu.com/s/1mYqNcdB5PhCKIhQFkQ03Yw " type=""]百度网盘[/button]密码：