文章总结: 本文详细介绍了Tabby代码审计工具的环境搭建流程,涵盖Java17和Neo4j数据库的环境配置、Tabby核心与插件的编译安装、项目结构配置、关键配置文件修改、Neo4j数据库配置与插件安装、索引初始化及最终测试运行步骤。关键操作包括修改Neo4j配置文件以允许CSV导入、安装APOC和tabby-path-finder插件、分配足够内存避免OOM,并通过Cypher查询验证环境搭建成功。 综合评分: 78 文章分类: 代码审计,安全工具,技术标准,安全开发,漏洞分析
【代码审计】Tabby 环境搭建
原创
十月的进阶之路 十月的进阶之路
十月的进阶之路
2026年4月16日 16:17 重庆
在小说阅读器读本章
去阅读
你的代审
baby
目录
一、环境要求
二、安装 tabby 核心
三、安装 tabby-vul-finder
四、配置 tabby 项目结构
五、配置修改
六、配置neo4j 数据库
七、安装 neo4j 插件
八、初始化 neo4j 索引
九、验证插件安装
十、测试运行
注意事项
一、环境要求
- Java 17:需配置
Java 17环境。 - Neo4j 图数据库:推荐使用Neo4j Desktop(需注意版本兼容性,如
tabby需要搭配5.26.1)。
二、安装 Tabby 核心
- 克隆项目:
git clone https://github.com/wh1t3p1g/tabby.git
- 编译打包: 在项目根目录执行:
mvn clean package -DskipTests "-Dfile.encoding=UTF-8"
- 准备核心 JAR: 将
target目录下生成的tabby.jar复制到项目根目录。
三、安装 tabby-vul-finder
- 克隆项目:
git clone https://github.com/wh1t3p1g/tabby-vul-finder.git
- 编译打包: 进入项目目录执行
mvn clean package -DskipTests,生成tabby-vul-finder.jar。 - 复制规则文件: 将
tabby-vul-finder/rules/cyphers.yml复制到Tabby 项目的rules文件夹中。
四、配置 Tabby 项目结构
确保tabby项目目录包含以下结构:
tabby/
├── cases/ # 放置待分析的 JAR 包(如 commons-collections-3.2.1.jar)
├── config/ # 配置文件目录
│ ├── db.properties # 数据库连接配置
│ └── settings.properties # 分析任务配置
├── output/ # 生成的 CSV 文件输出目录
├── rules/ # 规则文件(含 sinks.json、cyphers.yml 等)
├── libs/ # 目标项目依赖 jar 包
├── temp/ # 临时文件目录
├── tabby.jar # 核心 JAR
└── tabby-vul-finder.jar # 导入/查询 JAR
关键配置文件
- config/settings.properties: 配置待分析项目、
JRE路径、分析模式等。 - config/db.properties: 配置
Neo4j连接信息:
# 路径适配配置
tabby.cache.isDockerImportPath = false
# Neo4j数据库连接配置
tabby.neo4j.username = neo4j
tabby.neo4j.password = 你的Neo4j数据库密码
tabby.neo4j.url = bolt://127.0.0.1:7687
五、配置修改
将java_home修改为Windows本地有效的JDK路径。
# 目标项目java-sec-code为JDK8编译,推荐配置本地JDK8路径
tabby.build.javaHome = D:/Java/jdk1.8.0_202
# 也可使用Windows双反斜杠写法
# tabby.build.javaHome = D:\\Java\\jdk1.8.0_202
tabby.build.isJDKProcess = false,关闭了对JDK内置类的分析,但是如果你打开就会导致OOM。tabby的内存由JVM控制,核心通过两个参数调整:
- Xms:
JVM初始堆内存,建议和最大值设为一致,避免运行时动态扩容缩容带来的性能损耗与GC压力 - Xmx:
JVM最大堆内存,决定了tabby能使用的内存上限,也是解决OOM的核心参数
# 示例1:16G内存机器,分配8G最大堆内存(推荐)
java -Xms8G -Xmx8G -jar tabby.jar
# 示例2:32G内存机器,分配16G最大堆内存(大项目/全量依赖分析)
java -Xms16G -Xmx16G -jar tabby.jar
# 示例3:8G内存机器,分配4G最大堆内存(低配环境)
java -Xms4G -Xmx4G -jar tabby.jar
补充说明:此处javaHome是待分析目标项目的编译JDK版本,而tabby本身运行需要 Java17环境,需确保执行java -jar命令时,系统默认Java版本为Java17。配置了tabby.build.target = cases/java-sec-code-1.0.0.jar,必须确保cases目录下确实存在java-sec-code-1.0.0.jar文件,这个jar文件就是你的审计目标,否则build阶段会直接因找不到目标文件失败。
六、配置 Neo4j 数据库
- 下载并安装 Neo4j Desktop:
-
官网下载最新版即可,若桌面版无法打开,可先断网再启动。
-
neo4j desktop无法通过ui界面安装程序到指定目录,参考如下命令.\neo4j-desktop-2.1.3-x64.exe /S /D=D:\code-audit\neo4j\app将程序安装到指定目录。 -
数据库实例推荐版本:
5.26.1(需代理才会出现下载版本列表,tabby推荐5.26.1),创建后开始自动下载数据库,这个过程需要点时间。
- 修改 Neo4j 配置: 打开
Neo4j Desktop,进入数据库管理界面,修改neo4j.conf。我猜测如果您整个过程中将会碰到的最大的麻烦一定是将tabby的数据导入neo4j,因此请导入数据之前修改neo4j.conf配置文件,这相当重要,参考如下的内容,您可以将您的计算机配置给ai以获取一份量身定制的配置。
# 注释掉 import 目录限制,允许从任意位置加载 CSV
#server.directories.import=import
# 允许 APOC 和 Tabby 扩展
dbms.security.procedures.unrestricted=jwt.security.*,apoc.*,tabby.*
#其他配置参考如下
server.default_listen_address=0.0.0.0
server.bolt.enabled=true
server.bolt.listen_address=0.0.0.0:7687
server.bolt.tls_level=DISABLED
server.http.enabled=true
server.http.listen_address=0.0.0.0:7474
server.memory.heap.initial_size=6G
server.memory.heap.max_size=6G
server.memory.pagecache.size=4G
db.memory.transaction.max=256M
db.memory.transaction.total.max=1G
db.transaction.timeout=30m
server.config.strict_validation.enabled=true
- 创建
apoc.conf: 在Neo4j配置目录新建apoc.conf:
apoc.import.file.enabled=true
apoc.import.file.use_neo4j_config=false
配置文件目录如下。
七、安装 Neo4j 插件
将以下插件JAR放入Neo4j 的 plugins 目录:
- APOC 插件:
-
apoc-core:
https://github.com/neo4j/apoc -
apoc-extended:
https://github.com/neo4j-contrib/neo4j-apoc-procedures -
Neo4j v5 需分为
apoc-core和apoc-extended: -
版本对应:
APOC插件版本前两位需与Neo4j版本一致(如Neo4j 5.26.x对应APOC 5.26.x)。
- tabby-path-finder 插件:
- 克隆项目:
https://github.com/wh1t3p1g/tabby-path-finder - 编译打包:
mvn clean package -DskipTests,生成JAR后放入plugins目录。(注意: 不是tabby-vul-finder插件,别搞混了)
最终您的插件目录包含如下内容。
八、初始化 Neo4j 索引
启动Neo4j数据库,打开Neo4j Browser,执行以下Cypher语句创建索引(通过浏览器访问http://127.0.0.1:7474/,并键入您的账号密码):
CREATE CONSTRAINT c1 IF NOT EXISTS FOR (c:Class) REQUIRE c.ID IS UNIQUE;
CREATE CONSTRAINT c2 IF NOT EXISTS FOR (c:Class) REQUIRE c.NAME IS UNIQUE;
CREATE CONSTRAINT c3 IF NOT EXISTS FOR (m:Method) REQUIRE m.ID IS UNIQUE;
CREATE CONSTRAINT c4 IF NOT EXISTS FOR (m:Method) REQUIRE m.SIGNATURE IS UNIQUE;
CREATE INDEX index1 IF NOT EXISTS FOR (m:Method) ON (m.NAME);
CREATE INDEX index2 IF NOT EXISTS FOR (m:Method) ON (m.CLASSNAME);
CREATE INDEX index3 IF NOT EXISTS FOR (m:Method) ON (m.NAME, m.CLASSNAME);
CREATE INDEX index4 IF NOT EXISTS FOR (m:Method) ON (m.NAME, m.NAME0);
CREATE INDEX index5 IF NOT EXISTS FOR (m:Method) ON (m.SIGNATURE);
CREATE INDEX index6 IF NOT EXISTS FOR (m:Method) ON (m.NAME0);
CREATE INDEX index7 IF NOT EXISTS FOR (m:Method) ON (m.NAME0, m.CLASSNAME);
九、验证插件安装
在Neo4j Browser中执行:
CALL apoc.help('all'); // 验证 APOC
CALL tabby.help('tabby'); // 验证 Tabby
若成功返回结果,说明插件安装成功。
十、测试运行
- 生成图数据(Build): 在
Tabby项目根目录执行如下命令。
java -Xmx16g -jar tabby.jar
成功后会在 output 目录生成CSV文件。
- 导入数据到 Neo4j(Load):
java -Xms12G -Xmx12G -jar tabby-vul-finder.jar --load ./output/dev
- 查询漏洞链: 在
Neo4j Browser中执行Cypher查询,验证是否能返回结果。
注意事项
- Neo4j 版本:需与
APOC、Tabby插件版本严格匹配。 - 内存配置:
Neo4j和Tabby的内存分配需足够大,避免OOM。 - 网络问题:
Neo4j Desktop下载版本需挂代理。
完成以上步骤后,即可开始使用Tabby进行代码审计和漏洞链分析。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:十月的进阶之路 十月的进阶之路 十月的进阶之路《【代码审计】Tabby 环境搭建》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。







评论