一个功能强大的JavaScript文件爬取和反混淆工具,使用Go语言开发,提供高性能、低内存占用和单一可执行文件部署。
- ✅ 单一可执行文件: 无需运行时依赖,直接运行
- ✅ 跨平台支持: Linux/macOS/Windows三平台原生支持
- ✅ 批量扫描: 支持从文件读取URL列表进行批量爬取
- ✅ 多模式爬取: 静态HTML解析(Colly)和动态浏览器执行(Rod)
- ✅ Source Map支持: 自动识别和下载JavaScript Source Map文件
- ✅ 智能去重: SHA-256哈希去重,跨模式/跨域名
- ✅ 智能反混淆: 集成webcrack工具,自动检测并反混淆
- ✅ 错误容错: 批量模式下支持遇到错误继续处理
- ✅ 详细报告: JSON格式爬取报告,成功/失败文件统计
- ✅ 自定义HTTP头: 命令行或配置文件设置请求头
- ✅ 中文日志: 彩色日志输出,多级别支持
- ✅ CPU自适应并发: 根据CPU核心数动态调整并发数
- ✅ 页面池复用: 动态爬取标签页智能复用,降低内存
- ✅ 流式文件处理: 大文件流式读写,低内存占用
- ✅ 多线程支持: 可配置并发线程数
访问Releases页面下载最新版本的预编译二进制文件。
根据您的操作系统选择对应的文件:
- Linux (amd64):
jsfindcrack-{VERSION}-linux-amd64.tar.gz - macOS (Intel):
jsfindcrack-{VERSION}-darwin-amd64.tar.gz - macOS (Apple Silicon):
jsfindcrack-{VERSION}-darwin-arm64.tar.gz - Windows (amd64):
jsfindcrack-{VERSION}-windows-amd64.zip
下载并解压后即可使用:
# Linux
wget https://github.com/RecoveryAshes/JsFIndcrack/releases/download/{VERSION}/jsfindcrack-{VERSION}-linux-amd64.tar.gz
tar -xzf jsfindcrack-{VERSION}-linux-amd64.tar.gz
chmod +x jsfindcrack
./jsfindcrack --help
# macOS (Intel)
curl -LO https://github.com/RecoveryAshes/JsFIndcrack/releases/download/{VERSION}/jsfindcrack-{VERSION}-darwin-amd64.tar.gz
tar -xzf jsfindcrack-{VERSION}-darwin-amd64.tar.gz
chmod +x jsfindcrack
./jsfindcrack --help
# macOS (Apple Silicon)
curl -LO https://github.com/RecoveryAshes/JsFIndcrack/releases/download/{VERSION}/jsfindcrack-{VERSION}-darwin-arm64.tar.gz
tar -xzf jsfindcrack-{VERSION}-darwin-arm64.tar.gz
chmod +x jsfindcrack
./jsfindcrack --help
# Windows (PowerShell)
Invoke-WebRequest -Uri "https://github.com/RecoveryAshes/JsFIndcrack/releases/download/{VERSION}/jsfindcrack-{VERSION}-windows-amd64.zip" -OutFile jsfindcrack.zip
Expand-Archive jsfindcrack.zip
.\jsfindcrack\jsfindcrack.exe --help注意: 将{VERSION}替换为实际版本号,如v2.0.0
# 1. 克隆项目
git clone https://github.com/RecoveryAshes/JsFIndcrack.git
cd JsFIndcrack
# 2. 确保安装Go 1.21+
go version
# 3. 安装依赖
go mod download
# 4. 构建
make build
# 或直接使用go build
go build -o jsfindcrack ./cmd/jsfindcrack
# 5. 运行
./jsfindcrack --helpwebcrack (用于JavaScript反混淆):
# 安装Node.js和npm
# Linux: sudo apt install nodejs npm
# macOS: brew install node
# Windows: https://nodejs.org/
# 安装webcrack
npm install -g webcrack浏览器 (动态爬取模式):
- Rod会自动下载Chromium,首次运行时自动安装
- 或使用系统已安装的Chrome:
export ROD_BROWSER_PATH=/path/to/chrome
# 爬取单个网站
./jsfindcrack -u https://example.com -d 2
# 动态爬取(SPA应用)
./jsfindcrack -u https://app.example.com --mode dynamic --headless
# 批量爬取
./jsfindcrack -f urls.txt --threads 4 --continue-on-error
# 自定义HTTP头
./jsfindcrack -u https://api.example.com -H "Authorization: Bearer TOKEN"
# 混合模式(静态+动态)
./jsfindcrack -u https://example.com --mode all --threads 4用法:
jsfindcrack [flags]
jsfindcrack [command]
可用命令:
help 帮助信息
version 显示版本信息
基本参数:
-u, --url string 目标URL
-f, --file string URL列表文件
-d, --depth int 爬取深度 (1-10) (默认: 2)
-m, --mode string 爬取模式: static/dynamic/all (默认: static)
-o, --output string 输出目录 (默认: output)
-l, --log-level string 日志级别: debug/info/warn/error (默认: info)
性能参数:
--threads int 并发线程数 (默认: 2)
--wait-time int 页面等待时间(秒) (默认: 3)
--playwright-tabs int 动态爬取标签页数 (默认: 4)
--batch-delay int 批量爬取延迟(秒) (默认: 0)
HTTP头部参数:
-H, --headers stringArray 自定义HTTP请求头 (可多次使用)
-c, --config string 配置文件路径
--validate-config 验证配置文件
高级参数:
--headless 无头浏览器模式 (默认: true)
--continue-on-error 批量爬取出错时继续
--similarity-enabled 启用相似度分析
--similarity-threshold float 相似度阈值 (0.0-1.0) (默认: 0.9)
创建一个文本文件(如 urls.txt),每行一个URL:
# 这是注释行,会被忽略
https://example1.com
https://example2.com
https://example3.com
# 空行也会被忽略
https://example4.com
output/
└── example.com/
├── encode/
│ └── js/ # 原始JS文件
├── decode/
│ └── js/ # 反混淆文件
└── reports/ # 爬取报告
├── crawl_report.json
├── success_files.json
└── failed_files.json
使用configs/headers.yaml配置HTTP头:
headers:
User-Agent: "JsFIndcrack/2.0"
Accept-Language: "zh-CN,zh;q=0.9"JsFIndcrack/
├── cmd/
│ └── jsfindcrack/ # 命令行入口
│ ├── main.go # 主程序
│ └── validate.go # 参数验证
├── internal/
│ ├── core/ # 核心模块
│ │ ├── crawler.go # 主爬取协调器
│ │ ├── deobfuscator.go # 反混淆器
│ │ ├── batch.go # 批量处理
│ │ └── header_manager.go # HTTP头管理
│ ├── crawlers/ # 爬取器实现
│ │ ├── static.go # 静态爬取(Colly)
│ │ ├── dynamic.go # 动态爬取(Rod)
│ │ ├── page_pool.go # 标签页池管理
│ │ ├── resource_monitor.go # 资源监控
│ │ ├── url_extractor.go # URL提取器
│ │ └── url_queue.go # URL队列
│ ├── models/ # 数据模型
│ │ ├── task.go # 任务模型
│ │ ├── file.go # 文件模型
│ │ └── report.go # 报告模型
│ ├── config/ # 配置管理
│ │ └── headers.go # 头部配置
│ └── utils/ # 工具函数
│ ├── logger.go # 日志系统
│ ├── reporter.go # 报告生成
│ └── validator.go # 验证工具
├── tests/
│ ├── unit/ # 单元测试
│ ├── e2e/ # 端到端测试
│ └── benchmark/ # 性能测试
├── configs/
│ └── config.yaml # 配置文件
├── go.mod # Go模块定义
├── go.sum # 依赖锁定
├── Makefile # 构建任务
└── README.md # 本文件
# 爬取目标网站的所有JS文件
./jsfindcrack -u https://target.com -d 3 --mode all --log-level warn
# 搜索敏感信息
grep -r "api_key\|password\|secret" output/target.com/# 分析React应用的bundle
./jsfindcrack -u https://react-app.com -d 1 --mode dynamic
# 查看文件结构
tree output/react-app.com/encode/js/# 创建竞品列表
cat > competitors.txt <<EOF
https://competitor1.com
https://competitor2.com
https://competitor3.com
EOF
# 批量爬取
./jsfindcrack -f competitors.txt --mode all --threads 3 --continue-on-error#!/bin/bash
# 持续监控目标网站JS变化
TARGET_URL="https://monitored-site.com"
OUTPUT_DIR="output/$(date +%Y%m%d)"
./jsfindcrack -u "$TARGET_URL" -d 2 --mode static --output "$OUTPUT_DIR"
# 与上一次结果对比
diff -r "$OUTPUT_DIR" "output/previous/" > changes.txt
if [ -s changes.txt ]; then
echo "检测到JS文件变化!"
cat changes.txt
fi# 安装依赖
go mod download
# 运行测试
make test
# 或
go test ./...
# 运行E2E测试
make test-e2e
# 格式化代码
go fmt ./...
# 代码检查
go vet ./...
golangci-lint run# 构建所有平台
make build-all
# 输出位于当前目录:
# - jsfindcrack-linux-amd64
# - jsfindcrack-darwin-amd64
# - jsfindcrack-darwin-arm64
# - jsfindcrack-windows-amd64.exe测试环境: macOS M1, 16GB RAM
| 场景 | 文件数 | 模式 | 并发 | 耗时 | 内存 |
|---|---|---|---|---|---|
| 小型网站 | ~20 | static | 2 | 15秒 | 60MB |
| 中型SPA | ~50 | dynamic | 4 | 45秒 | 250MB |
| 大型网站 | ~200 | all | 8 | 3分钟 | 500MB |
| 批量10个URL | ~150 | static | 4 | 2分钟 | 200MB |
| 批量100个URL | ~800 | static | 8 | 18分钟 | 600MB |
Q1: macOS提示"无法验证开发者"
xattr -d com.apple.quarantine jsfindcrackQ2: 反混淆失败
# 检查webcrack是否安装
which webcrack
npm install -g webcrackQ3: 动态爬取失败
# 启用调试日志
./jsfindcrack -u URL --mode dynamic --log-level debug
# 指定浏览器路径
export ROD_BROWSER_PATH=/path/to/chromeQ4: 编译错误
# 清理缓存重新构建
go clean -cache
go mod download
go build ./cmd/jsfindcrack- 语言: Go 1.21+
- 静态爬取: Colly - 高效HTTP爬取
- 动态爬取: Rod - 浏览器自动化
- 日志: Zerolog - 高性能结构化日志
- CLI: Cobra - 现代CLI框架
- 配置: Viper - 配置管理
- 并发: errgroup, sync - Go标准库并发原语
- 反混淆: webcrack (外部依赖)
欢迎贡献代码!请遵循以下步骤:
- Fork本仓库
- 创建特性分支 (
git checkout -b feature/amazing-feature) - 提交更改 (
git commit -m 'Add amazing feature') - 推送到分支 (
git push origin feature/amazing-feature) - 开启Pull Request
代码规范:
- 使用
gofmt格式化代码 - 通过
go vet检查 - 添加单元测试
- 更新文档
- 自适应标签页池管理
- 系统资源监控
- URL优先级队列
- GitHub Actions自动发布
- MCP服务器实现 - 将工具转换为Model Context Protocol服务
- 工具函数接口 - 提供爬取、分析、反混淆等标准化API
- 与AI助手集成 - 支持Claude等AI直接调用
- 异步任务管理 - 长时间运行任务的状态跟踪
- 结果流式输出 - 实时返回爬取进度和结果
- Web UI界面
- 实时进度WebSocket推送
- 插件系统
- 更多反混淆引擎支持
- 分布式爬取
- Redis缓存支持
- Docker镜像
- Kubernetes部署
本项目采用MIT许可证 - 查看LICENSE文件了解详情。
- 项目主页: https://github.com/RecoveryAshes/JsFIndcrack
- 问题反馈: Issues
- 功能请求: Discussions
如果这个项目对你有帮助,请给它一个星标! ⭐
更快、更轻、更强大! 🚀