deepspider 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/check.md +122 -0
- package/.claude/agents/debug.md +106 -0
- package/.claude/agents/dispatch.md +214 -0
- package/.claude/agents/implement.md +96 -0
- package/.claude/agents/plan.md +396 -0
- package/.claude/agents/research.md +120 -0
- package/.claude/commands/evolve/merge.md +80 -0
- package/.claude/commands/trellis/before-backend-dev.md +13 -0
- package/.claude/commands/trellis/before-frontend-dev.md +13 -0
- package/.claude/commands/trellis/break-loop.md +107 -0
- package/.claude/commands/trellis/check-backend.md +13 -0
- package/.claude/commands/trellis/check-cross-layer.md +153 -0
- package/.claude/commands/trellis/check-frontend.md +13 -0
- package/.claude/commands/trellis/create-command.md +154 -0
- package/.claude/commands/trellis/finish-work.md +129 -0
- package/.claude/commands/trellis/integrate-skill.md +219 -0
- package/.claude/commands/trellis/onboard.md +358 -0
- package/.claude/commands/trellis/parallel.md +193 -0
- package/.claude/commands/trellis/record-session.md +62 -0
- package/.claude/commands/trellis/start.md +280 -0
- package/.claude/commands/trellis/update-spec.md +213 -0
- package/.claude/hooks/inject-subagent-context.py +758 -0
- package/.claude/hooks/ralph-loop.py +374 -0
- package/.claude/hooks/session-start.py +126 -0
- package/.claude/settings.json +41 -0
- package/.claude/skills/deepagents-guide/SKILL.md +428 -0
- package/.cursor/commands/trellis-before-backend-dev.md +13 -0
- package/.cursor/commands/trellis-before-frontend-dev.md +13 -0
- package/.cursor/commands/trellis-break-loop.md +107 -0
- package/.cursor/commands/trellis-check-backend.md +13 -0
- package/.cursor/commands/trellis-check-cross-layer.md +153 -0
- package/.cursor/commands/trellis-check-frontend.md +13 -0
- package/.cursor/commands/trellis-create-command.md +154 -0
- package/.cursor/commands/trellis-finish-work.md +129 -0
- package/.cursor/commands/trellis-integrate-skill.md +219 -0
- package/.cursor/commands/trellis-onboard.md +358 -0
- package/.cursor/commands/trellis-record-session.md +62 -0
- package/.cursor/commands/trellis-start.md +156 -0
- package/.cursor/commands/trellis-update-spec.md +213 -0
- package/.env.example +11 -0
- package/.husky/pre-commit +1 -0
- package/.mcp.json +8 -0
- package/.trellis/.template-hashes.json +65 -0
- package/.trellis/.version +1 -0
- package/.trellis/scripts/add-session.sh +384 -0
- package/.trellis/scripts/common/developer.sh +129 -0
- package/.trellis/scripts/common/git-context.sh +263 -0
- package/.trellis/scripts/common/paths.sh +208 -0
- package/.trellis/scripts/common/phase.sh +150 -0
- package/.trellis/scripts/common/registry.sh +247 -0
- package/.trellis/scripts/common/task-queue.sh +142 -0
- package/.trellis/scripts/common/task-utils.sh +151 -0
- package/.trellis/scripts/common/worktree.sh +128 -0
- package/.trellis/scripts/create-bootstrap.sh +299 -0
- package/.trellis/scripts/get-context.sh +7 -0
- package/.trellis/scripts/get-developer.sh +15 -0
- package/.trellis/scripts/init-developer.sh +34 -0
- package/.trellis/scripts/multi-agent/cleanup.sh +396 -0
- package/.trellis/scripts/multi-agent/create-pr.sh +241 -0
- package/.trellis/scripts/multi-agent/plan.sh +207 -0
- package/.trellis/scripts/multi-agent/start.sh +310 -0
- package/.trellis/scripts/multi-agent/status.sh +828 -0
- package/.trellis/scripts/task.sh +1118 -0
- package/.trellis/spec/backend/deepagents-guide.md +337 -0
- package/.trellis/spec/backend/directory-structure.md +126 -0
- package/.trellis/spec/backend/examples/skills/deepagents-guide/README.md +11 -0
- package/.trellis/spec/backend/examples/skills/deepagents-guide/agent.js.template +20 -0
- package/.trellis/spec/backend/examples/skills/deepagents-guide/skills-config.js.template +13 -0
- package/.trellis/spec/backend/examples/skills/deepagents-guide/subagent.js.template +19 -0
- package/.trellis/spec/backend/hook-guidelines.md +178 -0
- package/.trellis/spec/backend/index.md +36 -0
- package/.trellis/spec/backend/quality-guidelines.md +201 -0
- package/.trellis/spec/backend/state-management.md +76 -0
- package/.trellis/spec/backend/tool-guidelines.md +144 -0
- package/.trellis/spec/backend/type-safety.md +71 -0
- package/.trellis/spec/guides/code-reuse-thinking-guide.md +92 -0
- package/.trellis/spec/guides/cross-layer-thinking-guide.md +94 -0
- package/.trellis/spec/guides/index.md +79 -0
- package/.trellis/tasks/archive/02-02-evolving-skills/prd.md +61 -0
- package/.trellis/tasks/archive/02-02-evolving-skills/task.json +29 -0
- package/.trellis/tasks/archive/2026-02/00-bootstrap-guidelines/prd.md +86 -0
- package/.trellis/tasks/archive/2026-02/00-bootstrap-guidelines/task.json +27 -0
- package/.trellis/tasks/archive/2026-02/02-02-skills-system/check.jsonl +3 -0
- package/.trellis/tasks/archive/2026-02/02-02-skills-system/debug.jsonl +2 -0
- package/.trellis/tasks/archive/2026-02/02-02-skills-system/implement.jsonl +5 -0
- package/.trellis/tasks/archive/2026-02/02-02-skills-system/prd.md +33 -0
- package/.trellis/tasks/archive/2026-02/02-02-skills-system/task.json +41 -0
- package/.trellis/workflow.md +407 -0
- package/.trellis/workspace/index.md +123 -0
- package/.trellis/workspace/pony/index.md +40 -0
- package/.trellis/workspace/pony/journal-1.md +7 -0
- package/.trellis/worktree.yaml +47 -0
- package/AGENTS.md +18 -0
- package/CLAUDE.md +292 -0
- package/README.md +134 -0
- package/agents/deepspider.md +142 -0
- package/docs/DEBUG.md +42 -0
- package/docs/GUIDE.md +334 -0
- package/docs/PROMPT.md +60 -0
- package/docs/USAGE.md +226 -0
- package/eslint.config.js +51 -0
- package/package.json +78 -0
- package/requirements-crypto.txt +14 -0
- package/src/agent/index.js +97 -0
- package/src/agent/logger.js +164 -0
- package/src/agent/middleware/filterTools.js +64 -0
- package/src/agent/middleware/report.js +79 -0
- package/src/agent/prompts/system.js +315 -0
- package/src/agent/run.js +575 -0
- package/src/agent/skills/anti-detect/SKILL.md +28 -0
- package/src/agent/skills/anti-detect/evolved.md +12 -0
- package/src/agent/skills/captcha/SKILL.md +37 -0
- package/src/agent/skills/captcha/evolved.md +12 -0
- package/src/agent/skills/config.js +30 -0
- package/src/agent/skills/crawler/SKILL.md +9 -0
- package/src/agent/skills/crawler/evolved.md +16 -0
- package/src/agent/skills/dynamic-analysis/SKILL.md +91 -0
- package/src/agent/skills/dynamic-analysis/evolved.md +12 -0
- package/src/agent/skills/env/SKILL.md +72 -0
- package/src/agent/skills/env/evolved.md +12 -0
- package/src/agent/skills/evolve.js +79 -0
- package/src/agent/skills/general/SKILL.md +12 -0
- package/src/agent/skills/general/evolved.md +12 -0
- package/src/agent/skills/js2python/SKILL.md +30 -0
- package/src/agent/skills/js2python/evolved.md +13 -0
- package/src/agent/skills/report/SKILL.md +21 -0
- package/src/agent/skills/report/evolved.md +12 -0
- package/src/agent/skills/sandbox/SKILL.md +22 -0
- package/src/agent/skills/sandbox/evolved.md +16 -0
- package/src/agent/skills/static-analysis/SKILL.md +93 -0
- package/src/agent/skills/static-analysis/evolved.md +12 -0
- package/src/agent/skills/xpath/SKILL.md +119 -0
- package/src/agent/subagents/anti-detect.js +45 -0
- package/src/agent/subagents/captcha.js +51 -0
- package/src/agent/subagents/crawler.js +138 -0
- package/src/agent/subagents/dynamic.js +64 -0
- package/src/agent/subagents/env-agent.js +82 -0
- package/src/agent/subagents/index.js +37 -0
- package/src/agent/subagents/js2python.js +72 -0
- package/src/agent/subagents/sandbox.js +55 -0
- package/src/agent/subagents/static.js +66 -0
- package/src/agent/tools/analysis.js +135 -0
- package/src/agent/tools/analyzer.js +85 -0
- package/src/agent/tools/anti-detect.js +89 -0
- package/src/agent/tools/antidebug.js +64 -0
- package/src/agent/tools/async.js +43 -0
- package/src/agent/tools/browser.js +324 -0
- package/src/agent/tools/captcha.js +223 -0
- package/src/agent/tools/capture.js +179 -0
- package/src/agent/tools/correlate.js +303 -0
- package/src/agent/tools/crawler.js +116 -0
- package/src/agent/tools/cryptohook.js +80 -0
- package/src/agent/tools/debug.js +246 -0
- package/src/agent/tools/deobfuscator.js +90 -0
- package/src/agent/tools/env.js +83 -0
- package/src/agent/tools/envdump.js +92 -0
- package/src/agent/tools/evolve.js +164 -0
- package/src/agent/tools/extract.js +114 -0
- package/src/agent/tools/extractor.js +54 -0
- package/src/agent/tools/file.js +224 -0
- package/src/agent/tools/hook.js +84 -0
- package/src/agent/tools/hookManager.js +178 -0
- package/src/agent/tools/index.js +137 -0
- package/src/agent/tools/nodejs.js +101 -0
- package/src/agent/tools/patch.js +46 -0
- package/src/agent/tools/preprocess.js +71 -0
- package/src/agent/tools/profile.js +122 -0
- package/src/agent/tools/python.js +627 -0
- package/src/agent/tools/report.js +124 -0
- package/src/agent/tools/runtime.js +132 -0
- package/src/agent/tools/sandbox.js +79 -0
- package/src/agent/tools/store.js +73 -0
- package/src/agent/tools/trace.js +74 -0
- package/src/agent/tools/tracing.js +201 -0
- package/src/agent/tools/utils.js +51 -0
- package/src/agent/tools/verify.js +184 -0
- package/src/agent/tools/webcrack.js +109 -0
- package/src/analyzer/ASTAnalyzer.js +387 -0
- package/src/analyzer/CallStackAnalyzer.js +379 -0
- package/src/analyzer/Deobfuscator.js +289 -0
- package/src/analyzer/EncryptionAnalyzer.js +99 -0
- package/src/analyzer/index.js +22 -0
- package/src/browser/EnvBridge.js +186 -0
- package/src/browser/cdp.js +168 -0
- package/src/browser/client.js +197 -0
- package/src/browser/collector.js +444 -0
- package/src/browser/collectors/RequestCryptoLinker.js +109 -0
- package/src/browser/collectors/ResponseSearcher.js +107 -0
- package/src/browser/collectors/ScriptCollector.js +158 -0
- package/src/browser/collectors/index.js +26 -0
- package/src/browser/defaultHooks.js +932 -0
- package/src/browser/hooks/crypto.js +55 -0
- package/src/browser/hooks/index.js +64 -0
- package/src/browser/hooks/native.js +9 -0
- package/src/browser/hooks/network.js +33 -0
- package/src/browser/index.js +42 -0
- package/src/browser/interceptors/NetworkInterceptor.js +116 -0
- package/src/browser/interceptors/ScriptInterceptor.js +76 -0
- package/src/browser/interceptors/index.js +6 -0
- package/src/browser/ui/analysisPanel.js +1782 -0
- package/src/browser/ui/confirmDialog.js +158 -0
- package/src/browser/ui/panel.html +152 -0
- package/src/browser/ui/selector.js +170 -0
- package/src/config/index.js +5 -0
- package/src/config/paths.js +71 -0
- package/src/config/patterns/crypto.js +36 -0
- package/src/config/profiles/chrome.json +71 -0
- package/src/config/profiles/firefox.json +44 -0
- package/src/config/profiles/safari.json +38 -0
- package/src/core/EnvMonitor.js +200 -0
- package/src/core/PatchGenerator.js +278 -0
- package/src/core/Sandbox.js +181 -0
- package/src/env/AntiAntiDebug.js +111 -0
- package/src/env/AsyncHook.js +68 -0
- package/src/env/BrowserAPIList.js +265 -0
- package/src/env/CookieHook.js +48 -0
- package/src/env/CryptoHook.js +205 -0
- package/src/env/EnvCodeGenerator.js +157 -0
- package/src/env/EnvDumper.js +356 -0
- package/src/env/EnvExtractor.js +220 -0
- package/src/env/HookBase.js +618 -0
- package/src/env/NetworkHook.js +159 -0
- package/src/env/modules/bom/history.js +29 -0
- package/src/env/modules/bom/location.js +26 -0
- package/src/env/modules/bom/navigator.js +70 -0
- package/src/env/modules/bom/screen.js +26 -0
- package/src/env/modules/bom/storage.js +23 -0
- package/src/env/modules/dom/document.js +110 -0
- package/src/env/modules/dom/event.js +51 -0
- package/src/env/modules/index.js +34 -0
- package/src/env/modules/webapi/fetch.js +46 -0
- package/src/env/modules/webapi/url.js +47 -0
- package/src/env/modules/webapi/xhr.js +48 -0
- package/src/index.js +27 -0
- package/src/mcp/server.js +89 -0
- package/src/store/DataStore.js +708 -0
- package/src/store/Store.js +158 -0
- package/src/store/Validator.js +24 -0
- package/test/analyze.test.js +90 -0
- package/test/envdump.test.js +74 -0
- package/test/flow.test.js +90 -0
- package/test/hooks.test.js +138 -0
- package/test/plugin.test.js +35 -0
- package/test/refactor-full.test.js +30 -0
- package/test/refactor.test.js +21 -0
- package/test/samples/obfuscated.js +61 -0
- package/test/samples/original.js +66 -0
- package/test/samples/v10_eval_chain.js +52 -0
- package/test/samples/v11_bytecode_vm.js +81 -0
- package/test/samples/v12_polymorphic.js +69 -0
- package/test/samples/v1_ob_basic.js +98 -0
- package/test/samples/v2_ob_advanced.js +99 -0
- package/test/samples/v3_jjencode.js +77 -0
- package/test/samples/v4_aaencode.js +73 -0
- package/test/samples/v5_control_flow.js +86 -0
- package/test/samples/v6_string_encryption.js +71 -0
- package/test/samples/v7_jsvmp.js +83 -0
- package/test/samples/v8_anti_debug.js +79 -0
- package/test/samples/v9_proxy_trap.js +49 -0
- package/test/samples.test.js +96 -0
- package/test/webcrack.test.js +55 -0
package/docs/GUIDE.md
ADDED
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
# DeepSpider 开发使用指南
|
|
2
|
+
|
|
3
|
+
> JavaScript 逆向分析引擎 - Claude Code Plugin
|
|
4
|
+
|
|
5
|
+
## 目录
|
|
6
|
+
|
|
7
|
+
1. [项目概述](#项目概述)
|
|
8
|
+
2. [安装配置](#安装配置)
|
|
9
|
+
3. [使用方式](#使用方式)
|
|
10
|
+
4. [核心功能](#核心功能)
|
|
11
|
+
5. [MCP 工具](#mcp-工具)
|
|
12
|
+
6. [调试排查](#调试排查)
|
|
13
|
+
7. [开发扩展](#开发扩展)
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## 项目概述
|
|
18
|
+
|
|
19
|
+
DeepSpider 是一个专业的 JavaScript 逆向分析引擎,作为 Claude Code Plugin 运行。
|
|
20
|
+
|
|
21
|
+
### 核心能力
|
|
22
|
+
|
|
23
|
+
| 能力 | 说明 |
|
|
24
|
+
|------|------|
|
|
25
|
+
| 代码预处理 | Webpack/Browserify 解包,Vite/Rollup 直接反混淆 |
|
|
26
|
+
| 环境补全 | 检测并补全浏览器环境 (window/document/navigator) |
|
|
27
|
+
| 混淆分析 | AST 解析、控制流分析、字符串解密 |
|
|
28
|
+
| 加密逆向 | Hook 捕获 CryptoJS/RSA 加密调用 |
|
|
29
|
+
| 动态调试 | Patchright 反检测浏览器 + CDP 断点 |
|
|
30
|
+
|
|
31
|
+
### 项目结构
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
deepspider/
|
|
35
|
+
├── src/
|
|
36
|
+
│ ├── agent/ # DeepAgent 系统
|
|
37
|
+
│ │ ├── tools/ # 39个工具
|
|
38
|
+
│ │ ├── subagents/ # 3个子代理
|
|
39
|
+
│ │ └── prompts/ # 系统提示
|
|
40
|
+
│ ├── browser/ # 浏览器运行时 (Patchright)
|
|
41
|
+
│ │ ├── client.js # 反检测浏览器客户端
|
|
42
|
+
│ │ ├── cdp.js # CDP 会话管理
|
|
43
|
+
│ │ └── hooks/ # Hook 脚本
|
|
44
|
+
│ ├── analyzer/ # 静态分析器
|
|
45
|
+
│ ├── core/ # 核心引擎
|
|
46
|
+
│ ├── env/ # 环境补丁模块
|
|
47
|
+
│ ├── store/ # 知识库
|
|
48
|
+
│ └── mcp/ # MCP Server
|
|
49
|
+
└── test/ # 测试
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## 安装配置
|
|
55
|
+
|
|
56
|
+
### 依赖安装
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
cd /path/to/deepspider
|
|
60
|
+
pnpm install
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### 作为 Plugin 安装
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
claude /install /path/to/deepspider
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### 本地开发测试 (不安装)
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
claude --plugin-dir /path/to/deepspider
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### 独立 CLI 使用
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
pnpm run cli run target.js # 执行代码
|
|
79
|
+
pnpm run cli analyze target.js # 分析代码
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## 使用方式
|
|
85
|
+
|
|
86
|
+
### 方式一: Commands (斜杠命令)
|
|
87
|
+
|
|
88
|
+
```
|
|
89
|
+
/deepspider:run <file.js> # 在沙箱中执行并自动补环境
|
|
90
|
+
/deepspider:analyze <file.js> # 分析代码结构和加密
|
|
91
|
+
/deepspider:deob <file.js> # 反混淆代码
|
|
92
|
+
/deepspider:trace <param> # 追踪参数生成逻辑
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### 方式二: Agent 对话
|
|
96
|
+
|
|
97
|
+
直接与 DeepSpider Agent 对话:
|
|
98
|
+
|
|
99
|
+
```
|
|
100
|
+
分析这段 JS 代码的加密逻辑
|
|
101
|
+
帮我补全这段代码的浏览器环境
|
|
102
|
+
反混淆这个文件
|
|
103
|
+
追踪 sign 参数的生成过程
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### 方式三: MCP 工具调用
|
|
107
|
+
|
|
108
|
+
Claude 会自动调用 MCP 工具,工具命名格式:
|
|
109
|
+
- `mcp__deepspider__sandbox_execute`
|
|
110
|
+
- `mcp__deepspider__analyze_ast`
|
|
111
|
+
- `mcp__deepspider__deobfuscate`
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## 核心功能
|
|
116
|
+
|
|
117
|
+
### 4.1 沙箱执行
|
|
118
|
+
|
|
119
|
+
在隔离环境中安全执行 JS 代码:
|
|
120
|
+
|
|
121
|
+
```javascript
|
|
122
|
+
// 工具: sandbox_execute
|
|
123
|
+
{
|
|
124
|
+
code: "var a = 1 + 1; a;",
|
|
125
|
+
timeout: 5000
|
|
126
|
+
}
|
|
127
|
+
// 返回: { success: true, result: 2 }
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### 4.2 环境补全
|
|
131
|
+
|
|
132
|
+
自动检测并补全缺失的浏览器环境:
|
|
133
|
+
|
|
134
|
+
| 环境对象 | 补全内容 |
|
|
135
|
+
|----------|----------|
|
|
136
|
+
| window | location, innerWidth, devicePixelRatio |
|
|
137
|
+
| document | cookie, createElement, getElementById |
|
|
138
|
+
| navigator | userAgent, platform, language |
|
|
139
|
+
| localStorage | getItem, setItem |
|
|
140
|
+
|
|
141
|
+
### 4.3 加密识别
|
|
142
|
+
|
|
143
|
+
支持识别的加密算法:
|
|
144
|
+
|
|
145
|
+
| 类型 | 算法 |
|
|
146
|
+
|------|------|
|
|
147
|
+
| 哈希 | MD5, SHA1, SHA256, SHA512, SM3 |
|
|
148
|
+
| 对称 | AES, DES, 3DES, SM4, RC4 |
|
|
149
|
+
| 非对称 | RSA, SM2, ECC |
|
|
150
|
+
| MAC | HMAC-MD5, HMAC-SHA256, HMAC-SM3 |
|
|
151
|
+
|
|
152
|
+
### 4.4 反混淆
|
|
153
|
+
|
|
154
|
+
支持的混淆类型:
|
|
155
|
+
|
|
156
|
+
| 类型 | 特征 | 处理方式 |
|
|
157
|
+
|------|------|----------|
|
|
158
|
+
| eval 包装 | `eval(...)` | 解包执行 |
|
|
159
|
+
| 字符串数组 | `_0x` 变量 | 还原字符串 |
|
|
160
|
+
| Unicode | `\u0061` | 解码 |
|
|
161
|
+
| 控制流平坦化 | switch-case | 简化 |
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## MCP 工具
|
|
166
|
+
|
|
167
|
+
### 工具列表 (39个)
|
|
168
|
+
|
|
169
|
+
**预处理与解包**
|
|
170
|
+
| 工具名 | 说明 |
|
|
171
|
+
|--------|------|
|
|
172
|
+
| preprocess_code | 智能预处理(自动解包或反混淆) |
|
|
173
|
+
| unpack_bundle | Webpack/Browserify 解包 |
|
|
174
|
+
| analyze_bundle | 分析 Bundle 结构 |
|
|
175
|
+
|
|
176
|
+
**静态分析**
|
|
177
|
+
| 工具名 | 说明 |
|
|
178
|
+
|--------|------|
|
|
179
|
+
| analyze_ast | AST 结构分析 |
|
|
180
|
+
| analyze_callstack | 调用栈分析 |
|
|
181
|
+
| analyze_encryption | 加密模式识别 |
|
|
182
|
+
| deobfuscate | 反混淆 |
|
|
183
|
+
| deobfuscate_pipeline | 反混淆流水线 |
|
|
184
|
+
| detect_obfuscator | 识别混淆器类型 |
|
|
185
|
+
| decode_strings | 解密字符串 |
|
|
186
|
+
|
|
187
|
+
**追踪分析**
|
|
188
|
+
| 工具名 | 说明 |
|
|
189
|
+
|--------|------|
|
|
190
|
+
| trace_variable | 变量数据流追踪 |
|
|
191
|
+
| trace_request_params | 请求参数追踪 |
|
|
192
|
+
| find_call_pattern | 查找调用模式 |
|
|
193
|
+
|
|
194
|
+
**浏览器运行时**
|
|
195
|
+
| 工具名 | 说明 |
|
|
196
|
+
|--------|------|
|
|
197
|
+
| launch_browser | 启动反检测浏览器 |
|
|
198
|
+
| navigate_to | 导航到 URL |
|
|
199
|
+
| browser_close | 关闭浏览器 |
|
|
200
|
+
| set_breakpoint | 设置断点 |
|
|
201
|
+
| set_xhr_breakpoint | 设置 XHR 断点 |
|
|
202
|
+
| collect_env | 采集环境数据 |
|
|
203
|
+
| get_hook_logs | 获取 Hook 日志 |
|
|
204
|
+
|
|
205
|
+
**页面交互**
|
|
206
|
+
| 工具名 | 说明 |
|
|
207
|
+
|--------|------|
|
|
208
|
+
| click_element | 点击元素 |
|
|
209
|
+
| fill_input | 填充输入框 |
|
|
210
|
+
| take_screenshot | 截图 |
|
|
211
|
+
| wait_for_selector | 等待元素 |
|
|
212
|
+
|
|
213
|
+
**沙箱执行**
|
|
214
|
+
| 工具名 | 说明 |
|
|
215
|
+
|--------|------|
|
|
216
|
+
| sandbox_execute | 沙箱执行代码 |
|
|
217
|
+
| sandbox_inject | 注入补丁 |
|
|
218
|
+
| sandbox_reset | 重置沙箱 |
|
|
219
|
+
|
|
220
|
+
**环境补全**
|
|
221
|
+
| 工具名 | 说明 |
|
|
222
|
+
|--------|------|
|
|
223
|
+
| generate_patch | 生成环境补丁 |
|
|
224
|
+
| match_module | 批量匹配缺失属性 |
|
|
225
|
+
| list_env_modules | 列出环境模块 |
|
|
226
|
+
| load_env_module | 加载环境模块 |
|
|
227
|
+
| list_profiles | 列出浏览器配置 |
|
|
228
|
+
| load_profile | 加载配置 |
|
|
229
|
+
|
|
230
|
+
**知识库**
|
|
231
|
+
| 工具名 | 说明 |
|
|
232
|
+
|--------|------|
|
|
233
|
+
| save_to_store | 保存到知识库 |
|
|
234
|
+
| query_store | 查询知识库 |
|
|
235
|
+
| list_store | 列出知识库 |
|
|
236
|
+
|
|
237
|
+
**报告**
|
|
238
|
+
| 工具名 | 说明 |
|
|
239
|
+
|--------|------|
|
|
240
|
+
| generate_report | 生成分析报告 |
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
## 调试排查
|
|
245
|
+
|
|
246
|
+
### 调试模式
|
|
247
|
+
|
|
248
|
+
```bash
|
|
249
|
+
# 开启调试模式
|
|
250
|
+
claude --debug --plugin-dir /path/to/deepspider
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
### MCP Inspector
|
|
254
|
+
|
|
255
|
+
```bash
|
|
256
|
+
npx @modelcontextprotocol/inspector node src/mcp/server.js
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
### 查看工具调用日志
|
|
260
|
+
|
|
261
|
+
```bash
|
|
262
|
+
tail -f logs/deepspider-debug.log
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
### 常见问题
|
|
266
|
+
|
|
267
|
+
| 问题 | 排查方法 |
|
|
268
|
+
|------|----------|
|
|
269
|
+
| MCP Server 启动失败 | `node src/mcp/server.js` |
|
|
270
|
+
| 工具未找到 | `node test/plugin.test.js` |
|
|
271
|
+
| 沙箱执行失败 | 检查 isolated-vm 依赖 |
|
|
272
|
+
|
|
273
|
+
---
|
|
274
|
+
|
|
275
|
+
## 开发扩展
|
|
276
|
+
|
|
277
|
+
### 添加新工具
|
|
278
|
+
|
|
279
|
+
在 `src/agent/tools/` 下创建工具文件:
|
|
280
|
+
|
|
281
|
+
```javascript
|
|
282
|
+
import { z } from 'zod';
|
|
283
|
+
import { tool } from '@langchain/core/tools';
|
|
284
|
+
|
|
285
|
+
export const myTool = tool(
|
|
286
|
+
async ({ param }) => {
|
|
287
|
+
return JSON.stringify({ result: param });
|
|
288
|
+
},
|
|
289
|
+
{
|
|
290
|
+
name: 'my_tool',
|
|
291
|
+
description: '工具描述',
|
|
292
|
+
schema: z.object({
|
|
293
|
+
param: z.string().describe('参数描述'),
|
|
294
|
+
}),
|
|
295
|
+
}
|
|
296
|
+
);
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
然后在 `src/agent/tools/index.js` 中导出。
|
|
300
|
+
|
|
301
|
+
### 子代理架构
|
|
302
|
+
|
|
303
|
+
| 子代理 | 职责 |
|
|
304
|
+
|--------|------|
|
|
305
|
+
| static-agent | 预处理、解包、反混淆、加密定位 |
|
|
306
|
+
| dynamic-agent | 浏览器控制、断点、Hook、数据采集 |
|
|
307
|
+
| sandbox-agent | 环境补全、代码执行、补丁生成 |
|
|
308
|
+
|
|
309
|
+
### 知识库
|
|
310
|
+
|
|
311
|
+
知识库存储在 `.deepspider-store/` 目录:
|
|
312
|
+
|
|
313
|
+
```
|
|
314
|
+
.deepspider-store/
|
|
315
|
+
├── index.json # 索引
|
|
316
|
+
├── env/ # 环境补丁
|
|
317
|
+
└── analysis/ # 分析结果
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
### 运行测试
|
|
321
|
+
|
|
322
|
+
```bash
|
|
323
|
+
pnpm test # 运行所有测试
|
|
324
|
+
node test/plugin.test.js # 验证工具定义
|
|
325
|
+
node test/samples.test.js # 测试样本执行
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
---
|
|
329
|
+
|
|
330
|
+
## 参考资料
|
|
331
|
+
|
|
332
|
+
- [Claude Code Hooks](https://code.claude.com/docs/en/hooks)
|
|
333
|
+
- [MCP Inspector](https://modelcontextprotocol.io/docs/tools/inspector)
|
|
334
|
+
- [Plugin 开发文档](https://code.claude.com/docs/en/plugins)
|
package/docs/PROMPT.md
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# DeepSpider Subagent 系统提示
|
|
2
|
+
|
|
3
|
+
> 此文件为 Subagent 系统提示的参考文档。
|
|
4
|
+
> 实际 Subagent 定义位于 `.claude/agents/deepspider.md`
|
|
5
|
+
|
|
6
|
+
你是 DeepSpider,一个专业的 JavaScript 逆向工程 Subagent。
|
|
7
|
+
|
|
8
|
+
## 核心能力
|
|
9
|
+
|
|
10
|
+
1. **环境补全** - 检测并补全浏览器环境依赖
|
|
11
|
+
2. **混淆分析** - AST 解析、控制流分析、字符串解密
|
|
12
|
+
3. **加密逆向** - 识别加密函数、追踪参数流向
|
|
13
|
+
4. **请求分析** - 调用栈追踪、请求参数生成逻辑
|
|
14
|
+
|
|
15
|
+
## 工作原则
|
|
16
|
+
|
|
17
|
+
1. **最小补丁**: 只补充必要的环境
|
|
18
|
+
2. **迭代验证**: 每次补丁后验证执行结果
|
|
19
|
+
3. **清晰输出**: 生成可独立运行的代码
|
|
20
|
+
|
|
21
|
+
## 可用工具
|
|
22
|
+
|
|
23
|
+
Subagent 使用 Claude Code 内置工具:
|
|
24
|
+
|
|
25
|
+
| 工具 | 用途 |
|
|
26
|
+
|------|------|
|
|
27
|
+
| `Read` | 读取文件内容 |
|
|
28
|
+
| `Bash` | 执行命令(node 运行 JS) |
|
|
29
|
+
| `Glob` | 文件模式匹配 |
|
|
30
|
+
| `Grep` | 代码搜索 |
|
|
31
|
+
| `Write` | 写入文件 |
|
|
32
|
+
| `Edit` | 编辑文件 |
|
|
33
|
+
|
|
34
|
+
## 任务处理流程
|
|
35
|
+
|
|
36
|
+
### 补环境任务
|
|
37
|
+
```
|
|
38
|
+
1. Read 读取目标 JS 文件
|
|
39
|
+
2. Bash node 执行,捕获错误
|
|
40
|
+
3. 分析缺失的环境属性
|
|
41
|
+
4. 生成补丁代码
|
|
42
|
+
5. Write 保存补丁文件
|
|
43
|
+
6. Bash 再次执行验证
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### 加密分析任务
|
|
47
|
+
```
|
|
48
|
+
1. Read 读取代码
|
|
49
|
+
2. Grep 搜索加密关键词
|
|
50
|
+
3. 分析函数结构和调用关系
|
|
51
|
+
4. 输出分析报告
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### 反混淆任务
|
|
55
|
+
```
|
|
56
|
+
1. Read 读取混淆代码
|
|
57
|
+
2. 识别混淆类型
|
|
58
|
+
3. 手动或使用工具还原
|
|
59
|
+
4. Write 保存还原后的代码
|
|
60
|
+
```
|
package/docs/USAGE.md
ADDED
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
# DeepSpider 使用指南
|
|
2
|
+
|
|
3
|
+
> JS 逆向分析引擎 - 四类加密场景分析指南
|
|
4
|
+
|
|
5
|
+
## 快速开始
|
|
6
|
+
|
|
7
|
+
### 1. 启动 Agent
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
pnpm run agent
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
### 2. 基本流程
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
启动浏览器 → 注入Hook → 访问目标 → 触发请求 → 分析日志 → 定位源码 → 提取逻辑
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 场景一:Headers 动态加密
|
|
22
|
+
|
|
23
|
+
**适用于:** X-Sign、X-Token、Authorization 等动态签名
|
|
24
|
+
|
|
25
|
+
### 操作步骤
|
|
26
|
+
|
|
27
|
+
**第一步:启动浏览器并注入 Hook**
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
请启动浏览器,注入网络和加密 Hook
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Agent 会执行:
|
|
34
|
+
- `launch_browser` - 启动浏览器
|
|
35
|
+
- `generate_xhr_hook` / `generate_fetch_hook` - 生成网络 Hook
|
|
36
|
+
- `generate_cryptojs_hook` - 生成加密 Hook
|
|
37
|
+
|
|
38
|
+
**第二步:访问目标网站**
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
访问 https://example.com
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
**第三步:触发目标请求**
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
点击登录按钮触发请求
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
或使用工具:
|
|
51
|
+
```
|
|
52
|
+
请点击页面上的登录按钮
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**第四步:分析加密来源**
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
分析 X-Sign 这个 Header 是如何生成的
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Agent 会:
|
|
62
|
+
1. 获取日志 `__deepspider__.getAllLogs()`
|
|
63
|
+
2. 调用 `analyze_header_encryption` 分析
|
|
64
|
+
3. 调用 `locate_crypto_source` 定位源码
|
|
65
|
+
|
|
66
|
+
**第五步:提取加密逻辑**
|
|
67
|
+
|
|
68
|
+
```
|
|
69
|
+
提取生成 X-Sign 的加密函数代码
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## 场景二:Cookie 动态加密
|
|
75
|
+
|
|
76
|
+
**适用于:** 反爬虫 Cookie、__jsl_clearance、acw_sc__v2 等
|
|
77
|
+
|
|
78
|
+
### 操作步骤
|
|
79
|
+
|
|
80
|
+
**第一步:启动浏览器,页面加载前注入 Hook**
|
|
81
|
+
|
|
82
|
+
```
|
|
83
|
+
启动浏览器,需要在页面加载前注入 Hook 来捕获 Cookie 生成
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Agent 会使用 `add_init_script` 在页面加载前注入。
|
|
87
|
+
|
|
88
|
+
**第二步:清除 Cookie 并访问**
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
清除 Cookie 后访问 https://example.com,触发 Cookie 生成
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
**第三步:分析 Cookie 来源**
|
|
95
|
+
|
|
96
|
+
```
|
|
97
|
+
分析 __token__ 这个 Cookie 是如何生成的
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Agent 会调用 `analyze_cookie_encryption` 分析。
|
|
101
|
+
|
|
102
|
+
**第四步:提取生成逻辑**
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
提取生成该 Cookie 的完整代码
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## 场景三:请求参数加密
|
|
111
|
+
|
|
112
|
+
**适用于:** POST Body 加密、查询参数加密
|
|
113
|
+
|
|
114
|
+
### 操作步骤
|
|
115
|
+
|
|
116
|
+
**第一步:注入 Hook 并触发请求**
|
|
117
|
+
|
|
118
|
+
```
|
|
119
|
+
启动浏览器,访问目标网站,触发登录请求
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
**第二步:分析加密参数**
|
|
123
|
+
|
|
124
|
+
```
|
|
125
|
+
分析请求体中的加密参数是如何生成的
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Agent 会:
|
|
129
|
+
1. 从 `linkedCrypto` 找到关联的加密调用
|
|
130
|
+
2. 定位加密函数
|
|
131
|
+
|
|
132
|
+
**第三步:提取加密逻辑**
|
|
133
|
+
|
|
134
|
+
```
|
|
135
|
+
提取参数加密的函数,我需要在 Node.js 中复现
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## 场景四:响应结果加密
|
|
141
|
+
|
|
142
|
+
**适用于:** 接口返回加密数据
|
|
143
|
+
|
|
144
|
+
### 操作步骤
|
|
145
|
+
|
|
146
|
+
**第一步:注入 Hook 并触发请求**
|
|
147
|
+
|
|
148
|
+
```
|
|
149
|
+
启动浏览器,访问目标网站,触发数据请求
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
**第二步:分析解密逻辑**
|
|
153
|
+
|
|
154
|
+
```
|
|
155
|
+
分析响应数据是如何解密的
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
Agent 会调用 `analyze_response_decryption` 分析。
|
|
159
|
+
|
|
160
|
+
**第三步:提取解密逻辑**
|
|
161
|
+
|
|
162
|
+
```
|
|
163
|
+
提取解密函数代码
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## 常用命令参考
|
|
169
|
+
|
|
170
|
+
### 浏览器操作
|
|
171
|
+
|
|
172
|
+
| 命令 | 说明 |
|
|
173
|
+
|------|------|
|
|
174
|
+
| 启动浏览器 | 启动并注入基础 Hook |
|
|
175
|
+
| 访问 URL | 导航到指定页面 |
|
|
176
|
+
| 点击 XXX | 点击页面元素 |
|
|
177
|
+
| 截图 | 保存当前页面截图 |
|
|
178
|
+
| 关闭浏览器 | 关闭浏览器释放资源 |
|
|
179
|
+
|
|
180
|
+
### 分析操作
|
|
181
|
+
|
|
182
|
+
| 命令 | 说明 |
|
|
183
|
+
|------|------|
|
|
184
|
+
| 分析 Header XXX | 分析指定 Header 的加密来源 |
|
|
185
|
+
| 分析 Cookie XXX | 分析指定 Cookie 的生成逻辑 |
|
|
186
|
+
| 分析请求加密 | 分析请求参数的加密方式 |
|
|
187
|
+
| 分析响应解密 | 分析响应数据的解密方式 |
|
|
188
|
+
|
|
189
|
+
### 调试操作
|
|
190
|
+
|
|
191
|
+
| 命令 | 说明 |
|
|
192
|
+
|------|------|
|
|
193
|
+
| 设置断点 | 在指定位置设置断点 |
|
|
194
|
+
| 设置 XHR 断点 | 拦截指定 URL 的请求 |
|
|
195
|
+
| 查看调用栈 | 查看当前断点的调用栈 |
|
|
196
|
+
| 查看变量 | 查看当前作用域的变量 |
|
|
197
|
+
|
|
198
|
+
### 提取操作
|
|
199
|
+
|
|
200
|
+
| 命令 | 说明 |
|
|
201
|
+
|------|------|
|
|
202
|
+
| 提取函数 XXX | 提取指定函数的代码 |
|
|
203
|
+
| 列出所有函数 | 列出代码中的函数列表 |
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
## 沙箱验证
|
|
208
|
+
|
|
209
|
+
提取代码后,可以在沙箱中验证:
|
|
210
|
+
|
|
211
|
+
```
|
|
212
|
+
在沙箱中执行以下代码验证加密结果:
|
|
213
|
+
[粘贴提取的代码]
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
如果报错缺少环境:
|
|
217
|
+
|
|
218
|
+
```
|
|
219
|
+
自动补全缺失的环境并重新执行
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
Agent 会:
|
|
223
|
+
1. 分析缺失的环境属性
|
|
224
|
+
2. 从真实浏览器采集
|
|
225
|
+
3. 生成补丁代码
|
|
226
|
+
4. 重新执行验证
|
package/eslint.config.js
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import js from '@eslint/js';
|
|
2
|
+
|
|
3
|
+
export default [
|
|
4
|
+
js.configs.recommended,
|
|
5
|
+
{
|
|
6
|
+
languageOptions: {
|
|
7
|
+
ecmaVersion: 2022,
|
|
8
|
+
sourceType: 'module',
|
|
9
|
+
globals: {
|
|
10
|
+
// Node.js
|
|
11
|
+
console: 'readonly',
|
|
12
|
+
process: 'readonly',
|
|
13
|
+
Buffer: 'readonly',
|
|
14
|
+
__dirname: 'readonly',
|
|
15
|
+
__filename: 'readonly',
|
|
16
|
+
// Web APIs
|
|
17
|
+
URL: 'readonly',
|
|
18
|
+
fetch: 'readonly',
|
|
19
|
+
setTimeout: 'readonly',
|
|
20
|
+
setInterval: 'readonly',
|
|
21
|
+
clearTimeout: 'readonly',
|
|
22
|
+
clearInterval: 'readonly',
|
|
23
|
+
// Browser (用于生成注入代码)
|
|
24
|
+
window: 'readonly',
|
|
25
|
+
document: 'readonly',
|
|
26
|
+
navigator: 'readonly',
|
|
27
|
+
localStorage: 'readonly',
|
|
28
|
+
sessionStorage: 'readonly',
|
|
29
|
+
screen: 'readonly',
|
|
30
|
+
Image: 'readonly',
|
|
31
|
+
btoa: 'readonly',
|
|
32
|
+
atob: 'readonly',
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
rules: {
|
|
36
|
+
'no-unused-vars': ['warn', { argsIgnorePattern: '^_', varsIgnorePattern: '^_' }],
|
|
37
|
+
'no-console': 'off',
|
|
38
|
+
'no-case-declarations': 'off',
|
|
39
|
+
'no-control-regex': 'off',
|
|
40
|
+
'no-useless-escape': 'warn',
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
ignores: [
|
|
45
|
+
'node_modules/**',
|
|
46
|
+
'.deepspider-data/**',
|
|
47
|
+
'dist/**',
|
|
48
|
+
'test/samples/**',
|
|
49
|
+
],
|
|
50
|
+
},
|
|
51
|
+
];
|