trailofbits/vendetect

GitHub: trailofbits/vendetect

一款基于语义指纹的代码相似度检测工具,用于自动识别代码库间复制或 vendored 的代码片段及其来源。

Stars: 74 | Forks: 6

# Vendetect [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/5150b3d997203003.svg)](https://github.com/trailofbits/vendetect/actions/workflows/tests.yml) [![PyPI version](https://badge.fury.io/py/vendetect.svg)](https://pypi.org/project/vendetect) [![Packaging status](https://repology.org/badge/tiny-repos/python:vendetect.svg)](https://repology.org/project/python:vendetect/versions) 一款用于自动检测代码库之间 vendored 和复制/粘贴代码的命令行工具。 ## 描述 🧑‍🎓 Vendetect 帮助识别代码库之间复制或 vendored 的代码,使检测代码是否被复制(无论是否注明出处)变得更加容易。该工具使用相似度检测算法来比较代码文件并突出显示匹配的部分。 主要功能: - 比较两个代码库(本地或远程)之间的代码 - 分析代码库中的特定子目录 - 识别具有相似代码的文件并并排显示 - 显示匹配代码的相似度百分比 - 按文件类型过滤并调整相似度阈值 - 通过 Pygments lexers 支持不同的编程语言 - 相似度 _不仅仅_ 基于符号名称;vendetect 还会考虑语义 ## 安装 🚀 ### 使用 pip ``` pip install vendetect ``` ### 使用 [uv](https://docs.astral.sh/uv/guides/tools/) ``` uv tool install vendetect ``` ### 从源码安装 克隆代码库并安装: ``` git clone https://github.com/trailofbits/vendetect.git cd vendetect uv tool install . ``` ### 开发环境安装 用于开发并包含所有依赖项: ``` git clone https://github.com/trailofbits/vendetect.git cd vendetect uv sync --group dev source .venv/bin/activate ``` ## 使用方法 🏃 ### 基本用法 ``` vendetect TEST_REPO SOURCE_REPO ``` 其中: - `TEST_REPO`:要检查是否存在复制代码的代码库的路径或 URL - `SOURCE_REPO`:作为潜在代码来源的代码库的路径或 URL ### 示例 ``` # 比较两个本地仓库 vendetect /path/to/my/project /path/to/another/project # 将本地项目与远程仓库进行比较 vendetect /path/to/my/project https://github.com/example/repo.git # 仅比较仓库内的特定子目录 vendetect /path/to/my/project https://github.com/example/repo.git \ --test-subdir src/components \ --source-subdir lib/ui # 按文件类型过滤并调整相似度阈值 vendetect /path/to/my/project /path/to/another/project \ --type py --type js \ --min-similarity 0.8 ``` ### 选项 ``` --format FORMAT Output format: rich, csv, or json (default=rich) --output OUTPUT Output file path (default: stdout) --force Force overwrite of existing output file --type FILE_TYPES, -t File extension to consider (can be used multiple times) --min-similarity THRESHOLD Minimum similarity threshold (range: 0.0-1.0, default: 0.5) --test-subdir DIR, -ts Subdirectory within TEST_REPO to analyze --source-subdir DIR, -ss Subdirectory within SOURCE_REPO to analyze --incremental Enable incremental result reporting --batch-size SIZE Number of files to process per batch (default: 100) --max-history-depth DEPTH Maximum commit history depth (default: -1 = entire history) --log-level LEVEL Sets the log level (default=INFO) --debug Equivalent to --log-level=DEBUG --quiet Equivalent to --log-level=CRITICAL ``` ### 高级功能 #### 子目录分析 在处理大型代码库时,您可以将分析重点放在特定的子目录上: ``` # 仅分析两个仓库中的 src/ 目录 vendetect /path/to/my/project /path/to/another/project \ --test-subdir src --source-subdir src # 比较一个仓库的前端代码与另一个仓库的后端代码 vendetect /path/to/frontend-repo /path/to/backend-repo \ --test-subdir client/src --source-subdir server/utils ``` 这对于以下情况特别有用: - 聚焦于相关的代码部分 - 减少大型代码库的分析时间 - 比较不同项目结构中的相似模块 #### 文件类型过滤 通过指定文件扩展名来控制要分析的文件: ``` # 仅分析 Python 文件 vendetect /path/to/my/project /path/to/another/project --type py # 分析多种文件类型 vendetect /path/to/my/project /path/to/another/project --type py --type js --type ts ``` #### 相似度阈值 调整最小相似度阈值以过滤结果: ``` # 仅显示高置信度匹配(80% 或更高相似度) vendetect /path/to/my/project /path/to/another/project --min-similarity 0.8 # 显示所有潜在匹配(较低阈值) vendetect /path/to/my/project /path/to/another/project --min-similarity 0.3 ``` ### 输出格式 Vendetect 支持三种输出格式: 1. **rich**(默认):带有语法高亮和并排代码比较的交互式控制台输出 2. **csv**:逗号分隔值格式,包含测试文件、源文件、测试切片起点、测试切片终点、源切片起点、源切片终点和相似度等列 3. **json**:JSON 格式,包含每次检测的详细信息,包括文件路径、相似度分数和匹配的代码切片 使用 CSV 输出的示例: ``` vendetect /path/to/my/project /path/to/another/project --format csv --output results.csv ``` 使用 JSON 输出的示例: ``` vendetect /path/to/my/project /path/to/another/project --format json --output results.json ``` ## 工作原理 🧐 Vendetect 结合使用多种技术来识别相似代码: 1. 根据语义而非语法,对两个代码库中的所有源代码文件进行指纹识别 2. 对于每对文件,计算相似度得分 3. 识别文件之间匹配的特定代码部分(切片) 4. 结果以富文本输出格式呈现,并带有并排比较 该工具可以处理: - 本地文件系统代码库 - Git 代码库(支持历史记录) - 远程 Git 代码库(自动克隆以进行分析) ## 系统要求 🛒 - Python 3.11 或更高版本 - Git(可选,用于代码库历史分析) ## 联系方式 💬 如果您想提交错误报告或功能请求,请使用我们的 [问题页面](https://github.com/trailofbits/deptective/issues)。 如需帮助使用或扩展 Vendetect,请随时联系我们或在 [Empire Hacking](https://slack.empirehacking.nyc/) 中留言。 ## 许可证 📝 该工具由 [Trail of Bits](https://www.trailofbits.com/) 开发。 本程序是自由软件:您可以根据 [GNU Affero General Public License](LICENSE)(由自由软件基金会发布)的条款, 即许可证的第 3 版或(您选择的)任何后续版本, 重新分发和/或修改它。 分发本程序是希望它能有用, 但没有任何保证;甚至没有 适销性或特定用途适用性的默示保证。 有关更多详细信息,请参阅 GNU Affero General Public License。 您应该随本程序一起收到一份 GNU Affero General Public License 的副本。 如果没有,请参阅 。 如果您正在寻找条款的例外,请[联系我们](mailto:opensource@trailofbits.com)。 © 2025, Trail of Bits.
标签:IPv6支持, Python, 云安全监控, 代码溯源, 代码相似度分析, 克隆代码检测, 抄袭检测, 无后门, 知识产权保护, 网络安全研究, 逆向工具, 静态分析