java-tabby安装

##Neo4j
如果经过很多的导入/删除操作,图数据库占用了很多的硬盘存储,那么可以将原有的图数据库删除,重新按照上面的步骤新建图数据库。 删除所有约束

DROP CONSTRAINT c1;
DROP CONSTRAINT c2;
DROP CONSTRAINT c3;
DROP CONSTRAINT c4;
DROP INDEX index1;
DROP INDEX index2;
DROP INDEX index3;
DROP INDEX index4;
DROP INDEX index5;
DROP INDEX index6;
DROP INDEX index7;

##使用教程
这里使用的java版本是

要使用tabby,首先需要导出项目所有Jar包。在IDEA中,可以通过”File -> Project Structure -> Project Settings -> Artifacts”中添加一个Artifact,将项目打包出来,这样便能顺利导出所有项目相关的jar包以供tabby分析。

随后运行”Build -> Build Artifacts -> Rebuild”即可导出到/out目录中。随后我们将这些jar包全放到上文”安装tabby“一节中,创建的jars目录下。在运行最好将/cache目录下的文件删除。随后运行命令
##Neo4j查询

  • Neo4j是一个图数据库
  • Neo4j是一个图数据库,需要先明白如下几点:
  • Neo4j用的是CQL查询语言的图数据库,和MySQL这些使用SQL查询语言的关系型数据库语法不一样。但是思路还是一样的,无非是 数据查询+条件筛选关系型数据库存放的数据是按行和列查询,而图数据库是用节点和关系边进行查询。
    在代码分析中,有两个关键术语:Source和Sink。Source是输入,即用户可控部分;Sink是汇聚点,即危险代码。Tabby的思路是:通过Neo4j图数据库的节点和关系边,将每个方法之间的调用链用Neo4j的关系边串联起来。我们便可查询Source到Sink之间的调用路径。

##查询模版

match (source:Method {NAME:"execute"})
match (sink:Method {IS_SINK:true, NAME:"getInstance"})<-[:CALL]-(m1:Method)
call apoc.algo.allSimplePaths(m1, source, "<CALL|ALIAS", 20) yield path
return * limit 20

其中match()表示匹配哪些节点,类似于SQL中的select。
在match(source:Method{NAME:”execute”})这句话中,source是别名,Method是节点类,{NAME:”execute”}是匹配的节点内容,——》都是来自tabby生成的csv文件,并且一般是类json格式,有两个关键的节点:Method和Class

Author

vague huang

Posted on

2022-12-21

Updated on

2023-02-14

Licensed under

Comments