Files
hack/tools/scripts/llm-key-hunter/README.md
T

180 lines
6.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# LLM Key Hunter
全网泄露 LLM API Key 搜索 & 验证工具 — 覆盖国际 + 中国 LLM 平台。
## 架构
```
llm-key-hunter/
├── llm-key-hunter.sh # 主入口,参数解析 + pipeline 调度
├── verify.sh # Key 验证模块 — 25 个 provider 调 API 确认 live
├── scan.sh # TruffleHog 深度扫描模块 — 扫 org/user 全 history
├── gist.sh # GitHub Gist 扫描模块 — 公开 gist 是泄露重灾区
├── patterns.conf # 正则指纹库 — 所有 LLM provider 的 key 格式
└── results/ # 输出目录
```
## 支持的 LLM Provider
### 国际平台
| Provider | Key 格式 | 验证 Endpoint |
|---|---|---|
| OpenAI | `sk-...` / `sk-proj-...` | `api.openai.com/v1/models` |
| Anthropic | `sk-ant-...` | `api.anthropic.com/v1/models` |
| Google Gemini | `AIza...` | `generativelanguage.googleapis.com` |
| HuggingFace | `hf_...` | `huggingface.co/api/whoami-v2` |
| Groq | `gsk_...` | `api.groq.com/openai/v1/models` |
| Replicate | `r8_...` | `api.replicate.com/v1/account` |
| Together AI | 64-char hex | `api.together.xyz/models` |
| Mistral | 32-char alnum | `api.mistral.ai/v1/models` |
| Cohere | 40-char alnum | `api.cohere.ai/v1/models` |
| DeepSeek | `sk-` + 32 hex | `api.deepseek.com/v1/models` |
| Perplexity | `pplx-...` | `api.perplexity.ai` |
| OpenRouter | `sk-or-...` | `openrouter.ai/api/v1/models` |
| Azure OpenAI | 32-char hex | (降级到 OpenAI 验证) |
### 中国平台
| Provider | Key 格式 | 验证 Endpoint | Auth |
|---|---|---|---|
| 火山引擎 Ark | UUID `[0-9a-f]{8}-...` | `ark.cn-beijing.volces.com/api/v3/models` | Bearer |
| 火山 Coding Plan | UUID (同上) | `ark.cn-beijing.volces.com/api/coding/v1/models` | Bearer |
| 智谱 AI (ChatGLM) | `APIKey.APISecret` (dot) | `open.bigmodel.cn/api/paas/v4/models` | Bearer |
| 阿里云 DashScope | `sk-` + 32 chars | `dashscope.aliyuncs.com/compatible-mode/v1/models` | Bearer |
| Kimi (Moonshot) | `sk-` + 48 chars | `api.moonshot.cn/v1/models` | Bearer |
| MiniMax | 40+ char alnum | `api.minimaxi.com/v1/models` | Bearer |
| 腾讯混元 | `AKID...` 或 alnum | `api.hunyuan.cloud.tencent.com/v1/models` | Bearer |
| 百度千帆 | 20-32 char alnum | `qianfan.baidubce.com/v2/models` | Bearer |
| 讯飞星火 (Spark) | `UUID:APISecret` | `spark-api.xf-yun.com/v1/chat/completions` | HMAC |
| 讯飞星辰 (Coding Plan) | 32+ char alnum | `maas-coding-api.cn-huabei-1.xf-yun.com/v2` | Bearer |
| 零一万物 (01.AI) | `sk-` + 48 chars | `api.lingyiwanwu.com/v1/models` | Bearer |
| 阶跃星辰 (StepFun) | `sk-` + 48 chars | `api.stepfun.com/v1/models` | Bearer |
| 硅基流动 (SiliconFlow) | `sk-` + 48 chars | `api.siliconflow.cn/v1/models` | Bearer |
> **注:** 豆包 (Doubao) 通过火山引擎 Ark 平台,key 格式同 VolcanoArk。
> 讯飞星火使用 HMAC 签名认证,无法简单 Bearer 验证,仅做格式校验。
> 讯飞星辰 Coding Plan 使用 OpenAI 兼容协议,Bearer auth,可直接验证。
## 快速开始
```bash
# 设置 GitHub token
export GH_TOKEN="ghp_your_token_here"
# 完整 pipeline: 广搜 → 提取 → 验证 (覆盖所有平台)
./llm-key-hunter.sh full -t ghp_xxx -v
# 只做 GitHub 全局广搜
./llm-key-hunter.sh broad -t ghp_xxx
# 深度扫描指定 org (trufflehog)
./llm-key-hunter.sh scan -o target-org -t ghp_xxx --deep
# 扫描公开 Gist
./llm-key-hunter.sh gist -t ghp_xxx
# 只验证已有候选 key
./llm-key-hunter.sh verify
# Raw 模式:跳过验证,只做正则匹配
./llm-key-hunter.sh full -t ghp_xxx --raw
```
## Pipeline 流程
```
gh search code (广搜定位候选文件 — 60+ 查询覆盖国际+中国平台)
↓
candidates.json
↓
curl raw content (拉取文件内容)
↓
regex match (正则提取 key — 25 个 provider pattern)
↓
extracted_keys.txt
↓
API verify (逐个调 provider API 验证 — 25 个 verify 函数)
↓
live_keys.txt / dead_keys.txt
↓
trufflehog (对高价值目标深度补刀)
```
## 输出文件
### 总表
| 文件 | 说明 |
|---|---|
| `results/candidates.json` | 广搜候选文件列表 |
| `results/extracted_keys.txt` | 正则提取的候选 key |
| `results/live_keys.txt` | 验证通过的 live key (总表) |
| `results/dead_keys.txt` | 验证失败的 dead key |
| `results/verified_all.txt` | 完整验证结果 |
| `results/trufflehog_results.json` | TruffleHog 深扫结果 |
| `results/gist_keys.txt` | Gist 扫描结果 |
### 按厂商分类的 Live Keys
验证通过的 key 会按厂商和地区分类存储:
```
results/live/
├── international/ # 国际平台
│ ├── openai.txt
│ ├── anthropic.txt
│ ├── google_gemini.txt
│ ├── huggingface.txt
│ ├── groq.txt
│ ├── deepseek.txt
│ └── ...
└── china/ # 中国平台
├── volcano_ark.txt # 火山引擎
├── zhipu_chatglm.txt # 智谱 AI
├── alibaba_dashscope.txt # 阿里云通义
├── kimi_moonshot.txt # Kimi
├── minimax.txt # MiniMax
├── tencent_hunyuan.txt # 腾讯混元
├── baidu_qianfan.txt # 百度千帆
├── iflytek_spark.txt # 讯飞星火
├── iflytek_coding_plan.txt # 讯飞星辰 Coding Plan
├── lingyiwanwu_01ai.txt # 零一万物
├── stepfun.txt # 阶跃星辰
└── siliconflow.txt # 硅基流动
```
每个文件格式: `Provider|Key|SourceURL|Description`
## 自定义正则模式
编辑 `patterns.conf`,格式为 `Provider|Regex|Description`:
```
MyProvider|mykey-[a-zA-Z0-9]{32}|Custom provider key
```
## 搜索查询覆盖
主脚本内置 60+ 条 GitHub code search 查询,覆盖:
- **文件类型**: `.env`, `.py`, `.js`, `.ts`, `.sh`, `.cfg`, `.ini`, `.ipynb`
- **国际平台**: OpenAI, Anthropic, Google, HuggingFace, Groq, Replicate 等
- **中国平台**: 火山 Ark, 智谱, 阿里 DashScope, Kimi, MiniMax, 腾讯混元, 百度千帆, 讯飞, 零一万物, 阶跃星辰, 硅基流动
- **搜索策略**: 既搜 key 前缀 (`sk-proj-`, `sk-ant-`),也搜环境变量名 (`ARK_API_KEY`, `DASHSCOPE_API_KEY`),还搜 API endpoint URL
## 依赖
- `gh` (GitHub CLI) — 必需
- `curl` — 必需
- `jq` — 必需
- `trufflehog` — scan 模式需要,自动安装
## 注意
- GitHub code search 每次最多 1000 条结果,脚本用 60+ 个查询变体覆盖
- 验证 key 会向 provider API 发真实请求,注意速率限制
- `--only-verified` (trufflehog) 只输出实际验证通过的 key,误报率最低
- 讯飞星火使用 HMAC 签名,无法简单验证,仅做格式校验
- 腾讯混元 key 格式灵活,可能有较高误报率