Re-Movery是一个基于Movery重构的漏洞代码克隆检测工具,该版本在原有功能基础上进行了重大改进,提升了性能并增加了新特性。提供Python和Go两个版本的改进。该工具主要用于检测代码库中可能存在的已知漏洞代码克隆。它不仅可以发现完全相同的代码克隆,还能识别经过修改的漏洞代码,帮助开发者及时发现和修复潜在的安全问题。
本项目提供两个版本的实现:
- Python版本:原始实现,功能完整,易于扩展
- Go版本:新增实现,性能优化,并发处理
- 安装依赖:
pip install -r requirements.txt
pip install -e .- 创建配置文件
config.json:
{
"processing": {
"num_processes": 4,
"enable_cache": true
}
}- 运行扫描:
movery /path/to/your/code- 多进程并行分析
- 内存映射文件处理
- 结果缓存机制
- 算法优化
- 支持多种编程语言:
- Python
- Java
- C/C++
- JavaScript/TypeScript
-
安装Go (1.21或更高版本)
-
克隆仓库:
git clone https://github.com/heyangxu/Re-movery.git
cd Re-movery- 构建项目:
cd go
go build -o movery ./cmd/movery- 运行扫描:
# 扫描单个文件
./movery scan --file path/to/file.py
# 扫描目录
./movery scan --dir path/to/directory
# 排除特定文件或目录
./movery scan --dir path/to/directory --exclude "node_modules,*.min.js"
# 生成HTML报告
./movery scan --dir path/to/directory --output report.html
# 启用并行处理
./movery scan --dir path/to/directory --parallel
# 启用增量扫描
./movery scan --dir path/to/directory --incremental- Go语言实现,性能优异
- 并发处理
- 内存使用监控
- 工作池调度
- 结果缓存机制
- 多种接口选项:命令行、Web界面和API接口
- 生成HTML、JSON和XML格式的报告
- 与CI/CD工具集成(GitHub Actions、GitLab CI)
- 当前支持Python和JavaScript语言,其他语言支持陆续添加中
-
scan: 扫描文件或目录--file: 指定要扫描的文件--dir: 指定要扫描的目录--exclude: 排除特定文件或目录(逗号分隔)--output: 报告输出路径--format: 报告格式(html, json, xml)--parallel: 启用并行处理--incremental: 启用增量扫描--confidence: 置信度阈值(0.0-1.0)
-
web: 启动Web界面--host: 指定主机(默认: localhost)--port: 指定端口(默认: 8080)--debug: 启用调试模式
-
server: 启动API服务器--host: 指定主机(默认: localhost)--port: 指定端口(默认: 8081)--debug: 启用调试模式
-
generate: 生成集成文件github-action: 生成GitHub Actions工作流文件gitlab-ci: 生成GitLab CI配置文件vscode-extension: 生成VS Code扩展配置文件
- 基于模式的检测
- AST语法分析
- 语义相似度匹配
- 上下文感知检测
- HTML格式报告
- 可视化图表
- 漏洞严重程度分类
- 详细的上下文信息
- 修复建议
- 输入验证
- 资源限制
- 速率限制
re-movery/
├── movery/ # Python实现
│ ├── config/ # 配置
│ ├── utils/ # 工具
│ ├── analyzers/ # 分析器
│ ├── detectors/ # 检测器
│ └── reporters/ # 报告生成器
│
├── go/ # Go实现
│ ├── cmd/ # 命令行工具
│ │ └── movery/ # 主程序
│ ├── internal/ # 内部包
│ │ ├── cmd/ # 命令行命令
│ │ ├── config/ # 配置管理
│ │ ├── core/ # 核心功能
│ │ ├── detectors/# 漏洞检测器
│ │ ├── reporters/# 报告生成器
│ │ ├── api/ # API服务器
│ │ └── web/ # Web应用
│ └── pkg/ # 公共包
│
└── docs/ # 文档
两个版本都支持配置文件,Go版本支持JSON和YAML格式:
# re-movery.yaml
scanner:
parallel: true
incremental: true
confidenceThreshold: 0.7
excludePatterns:
- node_modules
- "*.min.js"
web:
host: localhost
port: 8080
debug: false
server:
host: localhost
port: 8081
debug: false创建signatures.json文件来定义漏洞模式:
{
"signatures": [
{
"id": "CWE-78",
"name": "OS命令注入",
"severity": "high",
"code_patterns": [
"os\\.system\\(.*\\)"
]
}
]
}POST /api/scan/code
Content-Type: application/json
{
"code": "代码内容",
"language": "python",
"fileName": "example.py"
}
POST /api/scan/file
Content-Type: multipart/form-data
file: [文件内容]
POST /api/scan/directory
Content-Type: application/json
{
"directory": "/path/to/directory",
"excludePatterns": ["node_modules", "*.min.js"],
"parallel": true,
"incremental": false
}
GET /api/languages
- 如果您需要分析多种编程语言的代码,建议使用Python版本
- 如果您主要分析Python和JavaScript代码,或对性能有较高要求,建议使用Go版本
- 两个版本的检测结果是兼容的,可以根据需要混合使用
欢迎提交Pull Request!请查看CONTRIBUTING.md了解如何参与项目开发。
本项目采用MIT许可证 - 详见LICENSE文件。
本项目由heyangxu开发和维护。
如需报告问题,请在GitHub仓库提交Issue。