当前位置:网站首页>Joern的代码使用-devign
Joern的代码使用-devign
2022-07-28 05:29:00 【ithicker】
最近一直在做关于图神经网络试验的复现,但是开源的代码真的是少之又少,说起我和joern的爱恨离愁还真是有很长时间了
一. 初试
最近开始对于图神经网络开始初步进行研究,结合之前所做的漏洞检测相关方向,结合趋势决定做使用图神经网络应用漏洞检测问题,通过阅读国内外论文,总结该问题上解决的基本步骤,以及不同论文中在个步骤中采取的不同措施。
总而言之,分为以下三步
- 代码构图
- 图的向量化
- 神经网络设计
综合考虑,结合创新型与可实现行而言,指定以下策略用于后期的实现 - 代码构图—joern
- 图的向量化—word2vec+ onehot
- 神经网络设计
从此我joern结缘
二. joern
对于joern的安装,我参考了以下文章,特此感谢
[https://blog.csdn.net/jlu_wangqi/article/details/109412399](https://blog.csdn.net/jlu_wangqi/article/details/109412399)
[https://blog.csdn.net/water_likly/article/details/88415127](https://blog.csdn.net/water_likly/article/details/88415127)
[https://blog.csdn.net/u013648063/article/details/106811275](https://blog.csdn.net/u013648063/article/details/106811275)
[https://blog.csdn.net/water_likly/article/details/89378623?spm=1001.2101.3001.6650.4&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-4.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-4.pc_relevant_default&utm_relevant_index=](https://blog.csdn.net/water_likly/article/details/89378623?spm=1001.2101.3001.6650.4&utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-4.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-4.pc_relevant_default&utm_relevant_index=5)
[https://blog.csdn.net/m0_37924639/article/details/78783592](https://blog.csdn.net/m0_37924639/article/details/78783592)
[https://blog.csdn.net/God_Jn/article/details/103238013](https://blog.csdn.net/God_Jn/article/details/103238013)
**主要通过第一二文章做,最后选择第三篇中的方法**
- 最后做到完全配置成功,但是最后由于Neo4j的版本问题导致失败,失败的过程可单独发文说明,总共耗时两天,最后无果而终,但是除了Neo4j的版本问题我感觉我的配置绝对没有任何问题,如果有合适老版本的Neo4j的小伙伴欢迎私信我。
- 不建议尝试老版本的joern安装,建议使用新版本的joern-cli,直接进入joern的官方网站查看官方文档安装即可,具体的安装过程见文章
三. joern-cli
关于joern-cli的安装我直接参考的joern官方安装文档,这我一看不有手就行,但是三个问题限制了我
problem one :网速的问题,三条语句一点问题没有,但是到了最后一条的时候开始下载文件,我看速度告诉我要好几天,那一刻我是崩溃的,真无语!!!!

answer one :当时已经到了深夜里,真是难以入睡,我准备相信我的电脑,我就一直开着让它下载,我想我这么帅一旦晚上网速暴涨呢,我果断睡了,果不其然第二天早上没有下载下来,我决定找别人帮我下列但是我下什么呢,我打开了joern-install.sh,把里边的网址拿了出来,https://github.com/ShiftLeftSecurity/joern/releases/latest/download/joern-cli.zip,找我的好朋友上github上下载下来,一看是joern-cli的压缩包,我可高兴坏了,感觉有了希望,但是后来才发现官方网站给出了所有joern-cli各版本的压缩包以及所有文件的网址
problemr two :我通过以下文章的启发开始使用joern-cli,我心想这不一解压就行了吗,然后直接按照他说的方法我运行就可以了呗。然而不这么顺利,我一在解压文件夹下运行/joern,就直接报错java有问题诶,一大堆主类然后lang什么有问题的,当时忘记截图了

https://blog.csdn.net/u013648063/article/details/112311392?spm=1001.2014.3001.5502
https://blog.csdn.net/qq_36281420/article/details/114526209
https://blog.csdn.net/u013648063/article/details/106970131
answer two :在./joern前加sudo。最终我认为是jdk版本的问题后来感觉换到11.04linux比较稳妥,可以上orcle官网注册下载problemr three :最后在下面这篇文章的指导下,改成自己的代码如下,费劲巴拉的导出了几张图片
https://blog.csdn.net/u013648063/article/details/112311392?spm=1001.2014.3001.5502
sudo ./joern-parse / home/code/
sudo ./joern-export cpg.bin --repr pdg --out /home/joern-cli/pdg
dot -Tpng -o test1.png ./pdg/1-pdg.dot
AST
CPG
PDG
CFG
answer three :导出图的时候已经除夕当天了,过年解决了工作的问题,嘿嘿嘿
四. 代码中使用问题
由于见识到了joern的威力,所以这个论文复现的活一致拖到了开学,最近两天再复现文章的时候遇到了种种问题
(一)指定计划
- 确定复现文章:基于关系图卷积网络的源代码漏洞检测
- 寻找合适的开源文章:Devign Effective Vulnerability Identification by Learning Comprehensive Program Semantics via Graph Neural Networks
- 选择代码:第一个链接是一位大佬自己复现的,代码容易看懂,但是对于边的处理仅限于AST。第二个链接是论文的官方作者的代码仅关于训练过程,第二个链接是论文的对于数据处理,建立图,以及图的向量化过程代码。但是由于第二个代码量很大,并且数据比较大实现难度较大,同时我们并不想复现改文章而是主要想借用其建立图的过程,故选择开源代码一
https://github.com/epicosy/devign
https://github.com/saikat107/Devign
https://github.com/VulDetProject/ReVeal
代码一的代码结构如下
(二)跑代码
配置环境:环境要求如下,对于joern来说,直接把之前下好的joern-cli压缩包放入joern文件夹下即可,同时使用anaconda建立虚拟环境GNN,然后对于Python库可以使用pip ininstall 一切。

note:
**tip1:**除了gensim库的版本要求为3.8.1以外,其他库版本无要求,pip就行,用高版本的gensim也可以就是需要修改一些代码中的参数名比较麻烦,
**tip2:**在windows下配环境的时候遇到过安装torch_sparse和torch_geometic报错的问题,详见文章调整代码:
problem one 详见文章
problem two 由于joern版本问题在devign-master\src\prepare\cpg_generator需修改输出文件夹参数,并且由于java与joern版本适配问题需添加执行sudo,故修改joern_parse函数为
def joern_parse(joern_path, input_path, output_path, file_name):
out_file = file_name + ".bin"
joern_parse_call = subprocess.run([sudo,"./" + joern_path + "joern-parse", input_path, "--out", output_path + out_file],
stdout=subprocess.PIPE, text=True, check=True)
print(str(joern_parse_call))
return out_file
此时我并未注意危险的来临,一顿操作也让代码运行了起来,没想到埋下了很大隐患
四. 问题解决
(一)问题的产生
清早起来拥抱太阳,满满的正能量,我想通过自己的想法复现那篇文章,想通过生成图后的节点和边提取入手,但是让我发现了一个问题。那就是当执行python main.py -c时虽然成功调用了joern,但是产生了一些报错,同时提示文件not process。
我发现是graph-for-funcs.sc文件产生报错
(二)解决方案的查找
- 上各大网站查找,但是发现很少附后
- 后来想到可能由于这个开源代码并没有很多人复现,不如上github上找这个项目看看有无伙伴提出问题,直接在github上搜graph-for-funcs.sc选择issue专题查看,查看再三发现以下几个解决入口
(三)解决方案的查找
- java版本
首先根据joern在github上的官方文档上的要求jdk11,并且同时根据报错我发现是库引入错误,同时并不是每一条import均有问题,考虑到是java版本升级的问题,故将jdk8升至jdk11,但最终升级也无济于事。 - graph-for-funcs.sc版本

通过作者的提示我明显感觉到了graph-for-funcs.sc版本与joern-cli版本的适配问题十分关键,接着查看作者所说issue3,在隐藏问题当中,我们看到作者更新过,所以我尝试使用新版本以及老版本,同时在https://github.com/epicosy/devign/issues/9
中同样有人提出版本问题,总共实验三次,均无果,值得说的是在第三种版本的graph-for-funcs.sc文件很多人提出解决了问题,所有版本文件均保留
- joern-cli版本
通过在github上搜寻关键字graph-for-funcs.sc查看一些解答,https://github.com/epicosy/devign/issues/9
最终问题在上面网页中得到解答,通过阅读这些讨论内容我得到以下几个结论
java版本不是问题的根源
graph-for-funcs.sc 和 joern-cli的适配问题是问题的根源,同时两者适配性很强
joern-cli更新极快,可能每天都在更新
该graph-for-funcs.sc 代码下,joern-cli 1.0.170比较适用,但是我们现在使用官方文档方法默认下载最新版本。

最后我上joern-cli的各版本下载网站查看joern-cli 1.0.170,同时查看devign开源代码中文件graph-for-funcs.sc更新时间
joern-cli 1.0.170
graph-for-funcs.sc更新时间
发现graph-for-funcs.sc更新时间在joern-cli 1.0.170发布后两天,作者应该是基于joern-cli 1.0.170做的graph-for-funcs.sc,故下载joern-cli 1.0.170压缩包解压放入代码的joern文件夹下运行,解决问题。并且在后续无意中我发现了一个更好玩的事情详见文章
如果大家实操过程存在问题或者有什么想和博主交流的,可以关注博主公众号
边栏推荐
- DNS正向解析实验
- DOM -- event chain, event bubble and capture, event proxy
- Shell script -- program conditional statements (conditional tests, if statements, case branch statements, echo usage, for loops, while loops)
- Use powercli to create a custom esxi ISO image
- SSH服务配置
- QT uses MSVC compiler to output Chinese garbled code
- Esxi community network card driver updated again
- JS four operations are repackaged to solve the problem of precision loss
- YUM仓库的搭建
- RAID disk array
猜你喜欢
随机推荐
As a result, fill in the birthday candles
Forward and backward slash notes
DHCP principle and configuration
MySQL build database Series (I) -- download MySQL
Traversal binary tree
Results fill in the blanks carelessly (violent solution)
Hdu-5806-nanoapelovesequence Ⅱ (ruler method)
Custom components -- styles
Test interview questions collection (V) | automated testing and performance testing (with answers)
[learning notes] linked list operation
Network - network layer
Technology sharing | send requests using postman
[learning notes] process creation
Hdu-5783 divide the sequence (greedy water question)
Vmware workstation configuration net mode
PXE无人值守安装管理
NFS shared storage service
Results fill in the blank. How many days of national day are Sundays (solved by pure Excel)
MOOC Weng Kai C language fourth week: further judgment and circulation: 1. Logical types and operations 2. Judgment of cascading and nesting
shell脚本——“三剑客”之awk命令








