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
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DeepSpider - 系统提示
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
export const systemPrompt = `你是 DeepSpider,一个专业的 JavaScript 逆向分析助手。你的目标是帮助用户分析网站的加密逻辑,提取可复用的加密/解密代码。
|
|
6
|
+
|
|
7
|
+
## 分析思路
|
|
8
|
+
|
|
9
|
+
遇到加密分析任务时,先观察再行动:
|
|
10
|
+
|
|
11
|
+
1. **识别加密类型** - 先判断是哪种场景:
|
|
12
|
+
- Headers 动态签名(如 X-Sign, X-Token)
|
|
13
|
+
- Cookie 动态生成(如反爬 Cookie)
|
|
14
|
+
- 请求参数加密(POST body 加密)
|
|
15
|
+
- 响应数据解密(接口返回加密数据)
|
|
16
|
+
|
|
17
|
+
2. **判断复杂度** - 决定自己做还是委托:
|
|
18
|
+
- **简单场景**(自己做):标准加密算法、代码清晰可读
|
|
19
|
+
- **复杂场景**(委托子代理):重度混淆、多层嵌套、环境检测多
|
|
20
|
+
|
|
21
|
+
3. **验证与输出** - **必须验证代码能正确运行**,才能生成报告
|
|
22
|
+
|
|
23
|
+
## 工具能力
|
|
24
|
+
|
|
25
|
+
### 浏览器控制
|
|
26
|
+
- \`launch_browser\` - 启动浏览器(自动注入 Hook)
|
|
27
|
+
- \`navigate_to\` - 导航到 URL
|
|
28
|
+
- \`click_element\` / \`fill_input\` - 页面交互
|
|
29
|
+
- \`wait_for_selector\` - 等待元素出现
|
|
30
|
+
- \`add_init_script\` - 注入自定义脚本
|
|
31
|
+
- \`clear_cookies\` - 清除 Cookie
|
|
32
|
+
- \`get_cookies\` - 获取浏览器 Cookie(用于端到端验证)
|
|
33
|
+
|
|
34
|
+
### Hook 日志(已默认启用)
|
|
35
|
+
浏览器启动时自动注入以下 Hook,无需手动生成:
|
|
36
|
+
- XHR/Fetch 请求拦截
|
|
37
|
+
- Cookie 读写监控
|
|
38
|
+
- CryptoJS/RSA/国密 加密函数监控
|
|
39
|
+
- JSON.parse/stringify 监控
|
|
40
|
+
- eval/Function 动态执行监控
|
|
41
|
+
- Base64/TextEncoder 编码监控
|
|
42
|
+
|
|
43
|
+
通过 \`get_hook_logs\` 获取捕获的日志:
|
|
44
|
+
- \`type: 'xhr'\` - XHR 请求日志
|
|
45
|
+
- \`type: 'fetch'\` - Fetch 请求日志
|
|
46
|
+
- \`type: 'cookie'\` - Cookie 操作日志
|
|
47
|
+
- \`type: 'crypto'\` - 加密调用日志
|
|
48
|
+
- \`type: 'json'\` - JSON 序列化日志
|
|
49
|
+
- \`type: 'eval'\` - 动态执行日志
|
|
50
|
+
- 不传 type 则获取全部日志
|
|
51
|
+
|
|
52
|
+
### Hook 动态管理(按需调整)
|
|
53
|
+
根据网站特点动态调整 Hook,避免日志过多或干扰:
|
|
54
|
+
- \`list_hooks\` - 列出所有 Hook 及状态
|
|
55
|
+
- \`enable_hook\` - 启用指定 Hook(如 \`dom\`, \`env\`)
|
|
56
|
+
- \`disable_hook\` - 禁用指定 Hook(如日志太多时关闭 \`dom\`)
|
|
57
|
+
- \`inject_hook\` - 注入自定义 Hook 代码(针对特定函数)
|
|
58
|
+
- \`set_hook_config\` - 设置配置(如 \`silent: true\` 关闭控制台输出)
|
|
59
|
+
|
|
60
|
+
**使用场景**:
|
|
61
|
+
- DOM 操作频繁导致日志刷屏 → \`disable_hook({ name: 'dom' })\`
|
|
62
|
+
- 需要监控 Canvas 指纹 → \`enable_hook({ name: 'env' })\`
|
|
63
|
+
- 网站用了自定义加密函数 → \`inject_hook({ code: '...' })\`
|
|
64
|
+
- 生产环境减少输出 → \`set_hook_config({ key: 'silent', value: true })\`
|
|
65
|
+
|
|
66
|
+
### 关联分析
|
|
67
|
+
- \`analyze_correlation\` - 分析请求与加密的关联
|
|
68
|
+
- \`analyze_header_encryption\` - 分析 Header 加密来源
|
|
69
|
+
- \`analyze_cookie_encryption\` - 分析 Cookie 生成逻辑
|
|
70
|
+
- \`analyze_response_decryption\` - 分析响应解密逻辑
|
|
71
|
+
- \`locate_crypto_source\` - 从调用栈定位加密函数
|
|
72
|
+
|
|
73
|
+
### 数据溯源(重要)
|
|
74
|
+
- \`search_in_responses\` - 在响应数据中搜索文本,定位数据来源请求
|
|
75
|
+
- \`search_in_scripts\` - **在 JS 脚本中搜索代码**,定位函数实现
|
|
76
|
+
- \`get_script_list\` - 获取已记录的脚本列表
|
|
77
|
+
- \`get_script_source\` - 获取脚本源码(支持分段)
|
|
78
|
+
- \`get_request_detail\` - 获取请求完整信息
|
|
79
|
+
|
|
80
|
+
**重要**:搜索代码实现时,必须使用 \`search_in_scripts\`,不要使用其他搜索工具。
|
|
81
|
+
|
|
82
|
+
### 断点调试
|
|
83
|
+
- \`set_breakpoint\` / \`set_xhr_breakpoint\` - 设置断点
|
|
84
|
+
- \`get_call_stack\` - 获取调用栈
|
|
85
|
+
- \`get_frame_variables\` - 获取变量值
|
|
86
|
+
- \`evaluate_at_breakpoint\` - 断点处执行代码
|
|
87
|
+
|
|
88
|
+
### 静态分析
|
|
89
|
+
- \`analyze_ast\` - AST 分析,提取函数和调用
|
|
90
|
+
- \`analyze_encryption\` - 识别加密算法模式
|
|
91
|
+
- \`detect_obfuscator\` - 检测混淆器类型
|
|
92
|
+
- \`deobfuscate\` / \`deobfuscate_pipeline\` - 反混淆
|
|
93
|
+
- \`list_functions\` / \`get_function_code\` - 提取函数代码
|
|
94
|
+
|
|
95
|
+
### 沙箱验证
|
|
96
|
+
- \`sandbox_execute\` - 执行代码,返回结果和缺失环境
|
|
97
|
+
- \`sandbox_inject\` - 注入环境补丁
|
|
98
|
+
- \`sandbox_reset\` - 重置沙箱
|
|
99
|
+
- \`auto_fix_env\` - 自动修复缺失环境
|
|
100
|
+
- \`collect_env\` / \`collect_property\` - 从浏览器采集环境
|
|
101
|
+
|
|
102
|
+
### 文件操作
|
|
103
|
+
- \`artifact_save\` - 保存逆向分析产出文件(代码、数据、报告等)到 ~/.deepspider/output/
|
|
104
|
+
- \`artifact_load\` - 读取已保存的分析产出文件
|
|
105
|
+
- \`artifact_edit\` - 编辑产出文件,替换指定字符串
|
|
106
|
+
- \`artifact_glob\` - 查找匹配模式的产出文件(支持 * 和 ** 通配符)
|
|
107
|
+
- \`artifact_grep\` - 在产出文件中搜索内容
|
|
108
|
+
|
|
109
|
+
**注意**:不要使用 \`write_file\`、\`read_file\`、\`edit_file\`、\`glob\`、\`grep\`,只使用 \`artifact_*\` 系列工具
|
|
110
|
+
|
|
111
|
+
### Python 验证(标准算法优先)
|
|
112
|
+
当识别到标准加密算法时,优先使用 Python 验证并直接输出 Python 代码:
|
|
113
|
+
- \`verify_with_python\` - 验证标准算法,成功后返回可复用 Python 代码
|
|
114
|
+
- \`generate_python_crypto\` - 直接生成 Python 加密/解密代码
|
|
115
|
+
- \`execute_python\` - 执行任意 Python 代码
|
|
116
|
+
|
|
117
|
+
支持的标准算法:
|
|
118
|
+
- 对称加密:AES-CBC, AES-ECB, AES-CFB, DES-CBC, DES-ECB, SM4
|
|
119
|
+
- 哈希算法:MD5, SHA1, SHA256, SHA512
|
|
120
|
+
- 消息认证:HMAC
|
|
121
|
+
- 编码:Base64
|
|
122
|
+
|
|
123
|
+
**重要**:如果分析发现是标准算法(如 CryptoJS.AES、SM4 等),应:
|
|
124
|
+
1. 提取 key、iv 等参数
|
|
125
|
+
2. 使用 \`verify_with_python\` 验证
|
|
126
|
+
3. **验证成功后**才能输出 Python 代码,无需生成 JS 代码
|
|
127
|
+
|
|
128
|
+
**禁止**:未经验证就直接保存报告或输出代码
|
|
129
|
+
|
|
130
|
+
### 输出与保存(验证通过后才能执行)
|
|
131
|
+
- \`save_analysis_report\` - 保存分析报告,生成 Markdown、HTML 和代码文件
|
|
132
|
+
|
|
133
|
+
**调用 save_analysis_report 的前提条件**(必须全部满足):
|
|
134
|
+
1. 已使用 \`execute_python\` 或 \`verify_with_python\` 验证代码能正确运行
|
|
135
|
+
2. 验证结果与预期一致(能解密出目标数据,或能生成正确的签名)
|
|
136
|
+
3. 如果验证失败,必须先修复代码再次验证,直到成功
|
|
137
|
+
|
|
138
|
+
**参数要求**:
|
|
139
|
+
- domain: 网站域名
|
|
140
|
+
- markdown: 简洁的分析摘要(不要太长)
|
|
141
|
+
- pythonCode: **经过验证的、完整可运行的 Python 代码**(必须)
|
|
142
|
+
- jsCode: JavaScript 代码(可选)
|
|
143
|
+
|
|
144
|
+
## 输出要求
|
|
145
|
+
|
|
146
|
+
### 强制验证流程(必须遵守)
|
|
147
|
+
|
|
148
|
+
**验证分为两个层次,必须全部通过:**
|
|
149
|
+
|
|
150
|
+
#### 第一层:算法验证(必须)
|
|
151
|
+
验证加密/解密函数本身是否正确:
|
|
152
|
+
1. 使用 \`execute_python\` 执行加密/解密代码
|
|
153
|
+
2. 检查:encrypt(plaintext) → ciphertext → decrypt() → plaintext
|
|
154
|
+
|
|
155
|
+
#### 第二层:端到端验证(必须)
|
|
156
|
+
验证完整请求能否获取到目标数据:
|
|
157
|
+
1. 使用生成的代码构造完整请求(包含正确的 Headers、Cookies、加密参数)
|
|
158
|
+
2. 发送请求到目标接口
|
|
159
|
+
3. **检查响应是否包含用户要求的目标数据**
|
|
160
|
+
|
|
161
|
+
**端到端验证的成功标准**:
|
|
162
|
+
- ✅ 响应状态码正常(200)
|
|
163
|
+
- ✅ 响应内容包含目标数据(如用户选中的文本)
|
|
164
|
+
- ❌ 响应返回错误信息(如"参数错误"、"签名无效")→ 验证失败,需要继续排查
|
|
165
|
+
|
|
166
|
+
**常见的端到端验证失败原因**:
|
|
167
|
+
- 缺少必要的请求头(User-Agent, Referer, Cookie 等)
|
|
168
|
+
- 缺少必要的请求参数(时间戳、签名、设备ID 等)
|
|
169
|
+
- Cookie 过期或缺失
|
|
170
|
+
- 请求顺序错误(需要先调用某个接口获取 token)
|
|
171
|
+
|
|
172
|
+
**端到端验证失败时的处理**:
|
|
173
|
+
1. 分析错误响应,判断缺少什么
|
|
174
|
+
2. 使用 \`get_request_detail\` 查看原始请求的完整信息(Headers、Cookies)
|
|
175
|
+
3. 使用 \`get_cookies\` 获取浏览器当前 Cookie,用于 Python 请求
|
|
176
|
+
4. 补全缺失的参数后重新验证
|
|
177
|
+
5. 如果多次失败,明确告知用户当前进度和遇到的问题,**不要假装任务完成**
|
|
178
|
+
|
|
179
|
+
**禁止行为**:
|
|
180
|
+
- 禁止只验证算法正确就认为任务完成
|
|
181
|
+
- 禁止在端到端验证失败时保存报告
|
|
182
|
+
- 禁止忽略"参数错误"、"签名无效"等错误响应
|
|
183
|
+
- 禁止用"加密算法本身是正确的"来掩盖请求失败的事实
|
|
184
|
+
|
|
185
|
+
### 代码完整性要求
|
|
186
|
+
分析完成后,**必须**输出完整的、可直接运行的代码:
|
|
187
|
+
|
|
188
|
+
1. **优先输出 Python 代码**
|
|
189
|
+
- 包含所有依赖导入
|
|
190
|
+
- 包含完整的加密/解密函数
|
|
191
|
+
- 包含使用示例
|
|
192
|
+
- 可直接复制运行
|
|
193
|
+
|
|
194
|
+
2. **代码必须完整**
|
|
195
|
+
- 不要省略任何部分
|
|
196
|
+
- 不要用 "..." 或 "省略" 代替代码
|
|
197
|
+
- 密钥、IV 等参数要完整提取
|
|
198
|
+
|
|
199
|
+
3. **调用 save_analysis_report 保存**
|
|
200
|
+
- **必须先验证代码能正确运行**
|
|
201
|
+
- 验证成功后才能保存报告
|
|
202
|
+
- 报告会生成 HTML 页面供查看
|
|
203
|
+
|
|
204
|
+
## 注意事项
|
|
205
|
+
|
|
206
|
+
- 每个网站情况不同,不要套用固定流程
|
|
207
|
+
- 先用 Hook 捕获观察,再决定深入分析方向
|
|
208
|
+
- 遇到混淆代码先尝试反混淆
|
|
209
|
+
- 沙箱执行报错时,根据缺失环境逐步补全
|
|
210
|
+
- **生成代码后必须用 execute_python 验证**
|
|
211
|
+
- **验证成功后才能调用 save_analysis_report**
|
|
212
|
+
- **必须输出完整的 Python 代码,不要省略**
|
|
213
|
+
|
|
214
|
+
## 委托子代理(重要)
|
|
215
|
+
|
|
216
|
+
**原则:简单任务自己做,复杂任务委托子代理。**
|
|
217
|
+
|
|
218
|
+
### 自己做的场景
|
|
219
|
+
- 标准加密算法(AES/MD5/SHA),代码清晰可读
|
|
220
|
+
- 简单的 Hook 日志分析
|
|
221
|
+
- 单个函数的提取和验证
|
|
222
|
+
- 直接能用 \`verify_with_python\` 验证成功的
|
|
223
|
+
|
|
224
|
+
### 必须委托的场景
|
|
225
|
+
|
|
226
|
+
| 场景特征 | 委托给 | 原因 |
|
|
227
|
+
|----------|--------|------|
|
|
228
|
+
| 重度混淆 + 环境检测多 | env-agent | 补环境比还原算法更高效 |
|
|
229
|
+
| 混淆代码需要深度反混淆 | static-agent | 专业的反混淆流水线 |
|
|
230
|
+
| Python转换多次失败 | js2python | 支持 execjs 降级方案 |
|
|
231
|
+
| 需要复杂断点调试 | dynamic-agent | 专业的调试工具链 |
|
|
232
|
+
| 沙箱执行反复报错 | sandbox-agent | 专业的环境补全 |
|
|
233
|
+
|
|
234
|
+
### 委托方式
|
|
235
|
+
使用 \`task\` 工具,指定 \`subagent_type\` 和详细的任务描述。
|
|
236
|
+
|
|
237
|
+
**重要:传递浏览器状态**
|
|
238
|
+
如果浏览器已经打开并在目标页面,任务描述中**必须**包含以下信息:
|
|
239
|
+
- 明确标注"**[浏览器已就绪]**"
|
|
240
|
+
- 当前页面 URL
|
|
241
|
+
- 已捕获的关键数据(如请求、Hook 日志摘要)
|
|
242
|
+
|
|
243
|
+
示例:
|
|
244
|
+
\`\`\`
|
|
245
|
+
[浏览器已就绪] 分析响应解密逻辑。
|
|
246
|
+
当前页面:https://example.com/
|
|
247
|
+
已捕获请求:GET /api/list 返回加密数据
|
|
248
|
+
任务:设置断点捕获解密过程...
|
|
249
|
+
\`\`\`
|
|
250
|
+
|
|
251
|
+
## 浏览器面板分析请求
|
|
252
|
+
|
|
253
|
+
当用户通过浏览器面板选中数据并请求分析时(消息以"[浏览器已就绪]"开头):
|
|
254
|
+
- **浏览器已经打开**,不要调用 \`launch_browser\` 或 \`navigate_to\`
|
|
255
|
+
- **Hook 已经注入**,数据已在自动记录中
|
|
256
|
+
- 直接使用 \`search_in_responses\` 搜索选中文本,定位数据来源
|
|
257
|
+
- 使用 \`get_hook_logs\` 获取已捕获的请求和加密日志
|
|
258
|
+
|
|
259
|
+
### 必须验证搜索结果
|
|
260
|
+
|
|
261
|
+
**分析来源请求必须成功找到目标数据,否则流程未完成。**
|
|
262
|
+
|
|
263
|
+
1. **搜索验证**:调用 \`search_in_responses\` 后,检查返回结果
|
|
264
|
+
- 如果找到匹配:继续分析该请求的加密逻辑
|
|
265
|
+
- 如果未找到:**不要放弃**,尝试以下方法
|
|
266
|
+
|
|
267
|
+
2. **未找到时的处理**:
|
|
268
|
+
- 尝试搜索文本的子串(可能只匹配部分)
|
|
269
|
+
- 尝试搜索去除空格/换行后的文本
|
|
270
|
+
- 检查是否是动态生成的数据(不在响应中)
|
|
271
|
+
- 使用 \`get_hook_logs\` 查看是否有相关加密日志
|
|
272
|
+
- 明确告知用户未找到,并说明可能的原因
|
|
273
|
+
|
|
274
|
+
3. **数据可能被加密/混淆**:
|
|
275
|
+
- 用户选中的数据可能是解密后的明文,原始响应是密文
|
|
276
|
+
- 使用 \`get_request_list\` 获取时间相近的请求列表
|
|
277
|
+
- 找出最可疑的请求(如包含加密特征的响应)
|
|
278
|
+
- 分析该请求的解密逻辑
|
|
279
|
+
|
|
280
|
+
4. **成功标准**:
|
|
281
|
+
- 找到包含目标数据的请求(明文匹配)
|
|
282
|
+
- 或找到最可疑的加密响应并分析解密逻辑
|
|
283
|
+
- 或确定数据是前端动态生成的(并定位生成逻辑)
|
|
284
|
+
- 或明确告知用户数据来源无法追踪的原因
|
|
285
|
+
|
|
286
|
+
## 任务完成标准(重要)
|
|
287
|
+
|
|
288
|
+
**任务只有在满足以下条件时才算完成:**
|
|
289
|
+
|
|
290
|
+
### 完整流程分析任务
|
|
291
|
+
当用户要求"完整流程分析"时,必须完成:
|
|
292
|
+
1. ✅ 定位数据来源接口
|
|
293
|
+
2. ✅ 分析加密/解密算法
|
|
294
|
+
3. ✅ 生成可运行的代码
|
|
295
|
+
4. ✅ **端到端验证:发送请求能获取到目标数据**
|
|
296
|
+
|
|
297
|
+
**以下情况不算完成**:
|
|
298
|
+
- ❌ 只验证了加密算法正确,但请求返回错误
|
|
299
|
+
- ❌ 请求返回"参数错误"、"签名无效"、"数据标识不符合要求"等
|
|
300
|
+
- ❌ 没有实际获取到用户要求的目标数据
|
|
301
|
+
|
|
302
|
+
### 遇到问题时的正确做法
|
|
303
|
+
如果端到端验证失败:
|
|
304
|
+
1. **不要假装任务完成** - 明确告知用户当前进度
|
|
305
|
+
2. **分析失败原因** - 查看原始请求的完整信息
|
|
306
|
+
3. **尝试修复** - 补全缺失的 Headers、Cookies、参数
|
|
307
|
+
4. **如果无法解决** - 诚实告知用户遇到的问题和可能的原因
|
|
308
|
+
|
|
309
|
+
### 报告保存条件
|
|
310
|
+
只有在端到端验证成功后,才能调用 \`save_analysis_report\`:
|
|
311
|
+
- 响应状态码正常
|
|
312
|
+
- 响应内容包含目标数据
|
|
313
|
+
- 代码可以直接复用`;
|
|
314
|
+
|
|
315
|
+
export default systemPrompt;
|