站点图标 AI技术聚合

Joern的代码使用-devign

最近一直在做关于图神经网络试验的复现,但是开源的代码真的是少之又少,说起我和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)
**主要通过第一二文章做,最后选择第三篇中的方法**

三.joern-cli

关于joern-cli的安装我直接参考的joern官方安装文档,这我一看不有手就行,但是三个问题限制了我

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的威力,所以这个论文复现的活一致拖到了开学,最近两天再复现文章的时候遇到了种种问题

(1) 指定计划

  1. 确定重现性文章:基于关系图卷积网络的源代码漏洞检测
  2. 寻找合适的开源文章:Devign Effective Vulnerability Identification by Learning Comprehensive Program Semantics via Graph Neural Networks
  3. 选择代码:第一个链接是一位大佬自己复现的,代码容易看懂,但是对于边的处理仅限于AST。第二个链接是论文的官方作者的代码仅关于训练过程,第二个链接是论文的对于数据处理,建立图,以及图的向量化过程代码。但是由于第二个代码量很大,并且数据比较大实现难度较大,同时我们并不想复现改文章而是主要想借用其建立图的过程,故选择开源代码一
    https://github.com/epicosy/devign
    https://github.com/saikat107/Devign
    https://github.com/VulDetProject/ReVeal
    代码1的代码结构如下

(2) 运行代码

  1. 配置环境:环境要求如下,对于joern来说,直接把之前下好的joern-cli压缩包放入joern文件夹下即可,同时使用anaconda建立虚拟环境GNN,然后对于Python库可以使用pip ininstall 一切。

    note:
    **tip1:**除了gensim库的版本要求为3.8.1以外,其他库版本无要求,pip就行,用高版本的gensim也可以就是需要修改一些代码中的参数名比较麻烦,
    **tip2:**在windows下配环境的时候遇到过安装torch_sparse和torch_geometic报错的问题,详见文章
  2. 调整代码:
    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

这时候没注意危险,操作也让代码跑起来了,没想到隐患不少。

四.问题解决

(1) 出现问题

清早起来拥抱太阳,满满的正能量,我想通过自己的想法复现那篇文章,想通过生成图后的节点和边提取入手,但是让我发现了一个问题。那就是当执行python main.py -c时虽然成功调用了joern,但是产生了一些报错,同时提示文件not process。

我发现是graph-for-funcs.sc文件产生报错

(2) 寻找解决方案

(3) 寻找解决方案

  1. joern-cli版本
    通过在github上搜寻关键字graph-for-funcs.sc查看一些解答,https://github.com/epicosy/devign/issues/9
    最后一个问题在上面的网页中得到了回答,通过阅读这些讨论,我得出以下结论

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文件夹下运行,解决问题。并且在后续无意中我发现了一个更好玩的事情详见文章

版权声明:本文为博主ithicker原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/lockhou/article/details/123300572

退出移动版