deepspider 0.2.12 → 0.3.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.
Files changed (135) hide show
  1. package/README.md +53 -27
  2. package/bin/cli.js +45 -0
  3. package/package.json +10 -4
  4. package/src/agent/run.js +54 -63
  5. package/src/agent/setup.js +14 -14
  6. package/src/cli/commands/config.js +94 -0
  7. package/src/cli/commands/help.js +34 -0
  8. package/src/cli/commands/update.js +78 -0
  9. package/src/cli/commands/version.js +9 -0
  10. package/src/cli/config.js +15 -0
  11. package/src/config/settings.js +102 -0
  12. package/.claude/agents/check.md +0 -122
  13. package/.claude/agents/debug.md +0 -106
  14. package/.claude/agents/dispatch.md +0 -214
  15. package/.claude/agents/implement.md +0 -96
  16. package/.claude/agents/plan.md +0 -396
  17. package/.claude/agents/research.md +0 -120
  18. package/.claude/commands/evolve/merge.md +0 -80
  19. package/.claude/commands/trellis/before-backend-dev.md +0 -13
  20. package/.claude/commands/trellis/before-frontend-dev.md +0 -13
  21. package/.claude/commands/trellis/break-loop.md +0 -107
  22. package/.claude/commands/trellis/check-backend.md +0 -13
  23. package/.claude/commands/trellis/check-cross-layer.md +0 -153
  24. package/.claude/commands/trellis/check-frontend.md +0 -13
  25. package/.claude/commands/trellis/create-command.md +0 -154
  26. package/.claude/commands/trellis/finish-work.md +0 -129
  27. package/.claude/commands/trellis/integrate-skill.md +0 -219
  28. package/.claude/commands/trellis/onboard.md +0 -358
  29. package/.claude/commands/trellis/parallel.md +0 -193
  30. package/.claude/commands/trellis/record-session.md +0 -62
  31. package/.claude/commands/trellis/start.md +0 -280
  32. package/.claude/commands/trellis/update-spec.md +0 -213
  33. package/.claude/hooks/inject-subagent-context.py +0 -758
  34. package/.claude/hooks/ralph-loop.py +0 -374
  35. package/.claude/hooks/session-start.py +0 -126
  36. package/.claude/settings.json +0 -41
  37. package/.claude/skills/deepagents-guide/SKILL.md +0 -428
  38. package/.cursor/commands/trellis-before-backend-dev.md +0 -13
  39. package/.cursor/commands/trellis-before-frontend-dev.md +0 -13
  40. package/.cursor/commands/trellis-break-loop.md +0 -107
  41. package/.cursor/commands/trellis-check-backend.md +0 -13
  42. package/.cursor/commands/trellis-check-cross-layer.md +0 -153
  43. package/.cursor/commands/trellis-check-frontend.md +0 -13
  44. package/.cursor/commands/trellis-create-command.md +0 -154
  45. package/.cursor/commands/trellis-finish-work.md +0 -129
  46. package/.cursor/commands/trellis-integrate-skill.md +0 -219
  47. package/.cursor/commands/trellis-onboard.md +0 -358
  48. package/.cursor/commands/trellis-record-session.md +0 -62
  49. package/.cursor/commands/trellis-start.md +0 -156
  50. package/.cursor/commands/trellis-update-spec.md +0 -213
  51. package/.github/workflows/publish.yml +0 -63
  52. package/.husky/pre-commit +0 -1
  53. package/.mcp.json +0 -8
  54. package/.trellis/.template-hashes.json +0 -65
  55. package/.trellis/.version +0 -1
  56. package/.trellis/scripts/add-session.sh +0 -384
  57. package/.trellis/scripts/common/developer.sh +0 -129
  58. package/.trellis/scripts/common/git-context.sh +0 -263
  59. package/.trellis/scripts/common/paths.sh +0 -208
  60. package/.trellis/scripts/common/phase.sh +0 -150
  61. package/.trellis/scripts/common/registry.sh +0 -247
  62. package/.trellis/scripts/common/task-queue.sh +0 -142
  63. package/.trellis/scripts/common/task-utils.sh +0 -151
  64. package/.trellis/scripts/common/worktree.sh +0 -128
  65. package/.trellis/scripts/create-bootstrap.sh +0 -299
  66. package/.trellis/scripts/get-context.sh +0 -7
  67. package/.trellis/scripts/get-developer.sh +0 -15
  68. package/.trellis/scripts/init-developer.sh +0 -34
  69. package/.trellis/scripts/multi-agent/cleanup.sh +0 -396
  70. package/.trellis/scripts/multi-agent/create-pr.sh +0 -241
  71. package/.trellis/scripts/multi-agent/plan.sh +0 -207
  72. package/.trellis/scripts/multi-agent/start.sh +0 -310
  73. package/.trellis/scripts/multi-agent/status.sh +0 -828
  74. package/.trellis/scripts/task.sh +0 -1118
  75. package/.trellis/spec/backend/ci-cd-guidelines.md +0 -73
  76. package/.trellis/spec/backend/deepagents-guide.md +0 -380
  77. package/.trellis/spec/backend/directory-structure.md +0 -145
  78. package/.trellis/spec/backend/examples/skills/deepagents-guide/README.md +0 -11
  79. package/.trellis/spec/backend/examples/skills/deepagents-guide/agent.js.template +0 -20
  80. package/.trellis/spec/backend/examples/skills/deepagents-guide/skills-config.js.template +0 -13
  81. package/.trellis/spec/backend/examples/skills/deepagents-guide/subagent.js.template +0 -19
  82. package/.trellis/spec/backend/hook-guidelines.md +0 -218
  83. package/.trellis/spec/backend/index.md +0 -37
  84. package/.trellis/spec/backend/quality-guidelines.md +0 -377
  85. package/.trellis/spec/backend/state-management.md +0 -76
  86. package/.trellis/spec/backend/tool-guidelines.md +0 -144
  87. package/.trellis/spec/backend/type-safety.md +0 -71
  88. package/.trellis/spec/guides/code-reuse-thinking-guide.md +0 -92
  89. package/.trellis/spec/guides/cross-layer-thinking-guide.md +0 -94
  90. package/.trellis/spec/guides/index.md +0 -79
  91. package/.trellis/tasks/archive/02-02-evolving-skills/prd.md +0 -61
  92. package/.trellis/tasks/archive/02-02-evolving-skills/task.json +0 -29
  93. package/.trellis/tasks/archive/2026-02/00-bootstrap-guidelines/prd.md +0 -86
  94. package/.trellis/tasks/archive/2026-02/00-bootstrap-guidelines/task.json +0 -27
  95. package/.trellis/tasks/archive/2026-02/02-02-skills-system/check.jsonl +0 -3
  96. package/.trellis/tasks/archive/2026-02/02-02-skills-system/debug.jsonl +0 -2
  97. package/.trellis/tasks/archive/2026-02/02-02-skills-system/implement.jsonl +0 -5
  98. package/.trellis/tasks/archive/2026-02/02-02-skills-system/prd.md +0 -33
  99. package/.trellis/tasks/archive/2026-02/02-02-skills-system/task.json +0 -41
  100. package/.trellis/workflow.md +0 -407
  101. package/.trellis/workspace/index.md +0 -123
  102. package/.trellis/workspace/pony/index.md +0 -42
  103. package/.trellis/workspace/pony/journal-1.md +0 -125
  104. package/.trellis/worktree.yaml +0 -47
  105. package/AGENTS.md +0 -18
  106. package/CLAUDE.md +0 -315
  107. package/agents/deepspider.md +0 -142
  108. package/docs/DEBUG.md +0 -42
  109. package/docs/GUIDE.md +0 -338
  110. package/docs/PROMPT.md +0 -59
  111. package/docs/USAGE.md +0 -230
  112. package/eslint.config.js +0 -51
  113. package/test/analyze.test.js +0 -90
  114. package/test/envdump.test.js +0 -74
  115. package/test/flow.test.js +0 -90
  116. package/test/hooks.test.js +0 -138
  117. package/test/plugin.test.js +0 -35
  118. package/test/refactor-full.test.js +0 -30
  119. package/test/refactor.test.js +0 -21
  120. package/test/samples/obfuscated.js +0 -61
  121. package/test/samples/original.js +0 -66
  122. package/test/samples/v10_eval_chain.js +0 -52
  123. package/test/samples/v11_bytecode_vm.js +0 -81
  124. package/test/samples/v12_polymorphic.js +0 -69
  125. package/test/samples/v1_ob_basic.js +0 -98
  126. package/test/samples/v2_ob_advanced.js +0 -99
  127. package/test/samples/v3_jjencode.js +0 -77
  128. package/test/samples/v4_aaencode.js +0 -73
  129. package/test/samples/v5_control_flow.js +0 -86
  130. package/test/samples/v6_string_encryption.js +0 -71
  131. package/test/samples/v7_jsvmp.js +0 -83
  132. package/test/samples/v8_anti_debug.js +0 -79
  133. package/test/samples/v9_proxy_trap.js +0 -49
  134. package/test/samples.test.js +0 -96
  135. package/test/webcrack.test.js +0 -55
@@ -1,83 +0,0 @@
1
- /**
2
- * v7: 简化版JSVMP虚拟机保护
3
- * 技术: 将JS代码编译为自定义字节码,由内置VM执行
4
- * 特点: 极难逆向,需要先理解VM指令集
5
- */
6
-
7
- (function() {
8
- // 虚拟机寄存器
9
- var R = [0, 0, 0, 0, 0, 0, 0, 0];
10
- var STACK = [];
11
- var MEM = {};
12
- var PC = 0;
13
-
14
- // 操作码定义
15
- var OP = {
16
- PUSH: 0x01, POP: 0x02, LOAD: 0x03, STORE: 0x04,
17
- ADD: 0x10, SUB: 0x11, MUL: 0x12, XOR: 0x13, SHL: 0x14, AND: 0x15,
18
- CALL: 0x20, RET: 0x21, JMP: 0x30, JZ: 0x31,
19
- HALT: 0xFF
20
- };
21
-
22
- // 内置函数表
23
- var FUNCS = {
24
- 0: function() { return Math.floor(Date.now() / 1000); },
25
- 1: function(len) {
26
- var c = 'abcdef0123456789', r = '';
27
- for (var i = 0; i < len; i++) r += c.charAt(Math.floor(Math.random() * c.length));
28
- return r;
29
- },
30
- 2: function(s) { return btoa(s); },
31
- 3: function(o) { return JSON.stringify(o); }
32
- };
33
-
34
- // VM执行器
35
- var exec = function(code) {
36
- PC = 0;
37
- while (PC < code.length) {
38
- var op = code[PC++];
39
- switch (op) {
40
- case OP.PUSH: STACK.push(code[PC++]); break;
41
- case OP.POP: R[code[PC++]] = STACK.pop(); break;
42
- case OP.ADD: STACK.push(STACK.pop() + STACK.pop()); break;
43
- case OP.SHL: var a = STACK.pop(), b = STACK.pop(); STACK.push(b << a); break;
44
- case OP.SUB: var a = STACK.pop(), b = STACK.pop(); STACK.push(b - a); break;
45
- case OP.AND: STACK.push(STACK.pop() & STACK.pop()); break;
46
- case OP.CALL: var fn = code[PC++]; STACK.push(FUNCS[fn](STACK.pop())); break;
47
- case OP.HALT: return STACK.pop();
48
- }
49
- }
50
- };
51
-
52
- // 哈希函数(原生实现,VM调用)
53
- var hash = function(str) {
54
- var h = 0;
55
- for (var i = 0; i < str.length; i++) {
56
- h = ((h << 5) - h) + str.charCodeAt(i);
57
- h = h & h;
58
- }
59
- return Math.abs(h).toString(16);
60
- };
61
-
62
- // 常量
63
- var SECRET = 'deepspider_test_2024';
64
- var APPID = 'app_12345';
65
-
66
- // 主逻辑
67
- var ts = FUNCS[0]();
68
- var nonce = FUNCS[1](8);
69
- var signStr = APPID + ts + nonce + SECRET;
70
- var sign = hash(signStr);
71
- var data = { user: 'test', action: 'login' };
72
-
73
- var result = Object.assign({}, data, {
74
- sign: sign,
75
- timestamp: ts,
76
- nonce: nonce,
77
- app_id: APPID,
78
- encrypted: FUNCS[2](FUNCS[3](data))
79
- });
80
-
81
- console.log('Result:', result);
82
- return result;
83
- })();
@@ -1,79 +0,0 @@
1
- /**
2
- * v8: 反调试 + 环境检测 + 代码自校验
3
- * 技术: 检测调试器、控制台、代码篡改
4
- * 特点: 动态检测运行环境,防止调试分析
5
- */
6
-
7
- (function() {
8
- // 反调试检测
9
- var _antiDebug = function() {
10
- var start = Date.now();
11
- debugger;
12
- if (Date.now() - start > 100) {
13
- return true;
14
- }
15
- return false;
16
- };
17
-
18
- // 控制台检测
19
- var _consoleCheck = function() {
20
- var el = new Image();
21
- Object.defineProperty(el, 'id', {
22
- get: function() {
23
- throw new Error('Console opened');
24
- }
25
- });
26
- return false;
27
- };
28
-
29
- // 代码自校验
30
- var _selfCheck = function(fn) {
31
- var code = fn.toString();
32
- var h = 0;
33
- for (var i = 0; i < code.length; i++) {
34
- h = ((h << 5) - h) + code.charCodeAt(i);
35
- h = h & h;
36
- }
37
- return Math.abs(h).toString(16);
38
- };
39
-
40
- // 环境检测
41
- var _envCheck = function() {
42
- if (typeof window === 'undefined') return false;
43
- if (window.outerWidth - window.innerWidth > 160) return false;
44
- return true;
45
- };
46
-
47
- // 核心逻辑
48
- var SECRET = 'deepspider_test_2024';
49
- var APPID = 'app_12345';
50
-
51
- var hash = function(str) {
52
- var h = 0;
53
- for (var i = 0; i < str.length; i++) {
54
- h = ((h << 5) - h) + str.charCodeAt(i);
55
- h = h & h;
56
- }
57
- return Math.abs(h).toString(16);
58
- };
59
-
60
- var ts = function() { return Math.floor(Date.now() / 1000); };
61
-
62
- var rand = function(len) {
63
- var c = 'abcdef0123456789', r = '';
64
- for (var i = 0; i < len; i++) r += c.charAt(Math.floor(Math.random() * c.length));
65
- return r;
66
- };
67
-
68
- var t = ts(), n = rand(8);
69
- var signStr = APPID + t + n + SECRET;
70
- var data = { user: 'test', action: 'login' };
71
-
72
- var result = Object.assign({}, data, {
73
- sign: hash(signStr), timestamp: t, nonce: n, app_id: APPID,
74
- encrypted: btoa(JSON.stringify(data))
75
- });
76
-
77
- console.log('Result:', result);
78
- return result;
79
- })();
@@ -1,49 +0,0 @@
1
- /**
2
- * v9: Proxy代理陷阱混淆
3
- * 技术: 使用Proxy拦截属性访问,隐藏真实逻辑
4
- * 特点: 动态属性解析,静态分析困难
5
- */
6
-
7
- (function() {
8
- var _secret = 'deepspider_test_2024';
9
- var _appid = 'app_12345';
10
-
11
- // 混淆的函数映射
12
- var _funcs = {
13
- 'a': function(s) {
14
- var h = 0;
15
- for (var i = 0; i < s.length; i++) {
16
- h = ((h << 5) - h) + s.charCodeAt(i);
17
- h = h & h;
18
- }
19
- return Math.abs(h).toString(16);
20
- },
21
- 'b': function() { return Math.floor(Date.now() / 1000); },
22
- 'c': function(l) {
23
- var c = 'abcdef0123456789', r = '';
24
- for (var i = 0; i < l; i++) r += c.charAt(Math.floor(Math.random() * c.length));
25
- return r;
26
- }
27
- };
28
-
29
- // Proxy陷阱处理器
30
- var handler = {
31
- get: function(t, p) {
32
- if (p in _funcs) return _funcs[p];
33
- return t[p];
34
- }
35
- };
36
-
37
- var _ = new Proxy({}, handler);
38
- var t = _.b(), n = _.c(8);
39
- var s = _appid + t + n + _secret;
40
- var data = { user: 'test', action: 'login' };
41
-
42
- var result = Object.assign({}, data, {
43
- sign: _.a(s), timestamp: t, nonce: n,
44
- app_id: _appid, encrypted: btoa(JSON.stringify(data))
45
- });
46
-
47
- console.log('Result:', result);
48
- return result;
49
- })();
@@ -1,96 +0,0 @@
1
- /**
2
- * DeepSpider 综合测试 - 测试所有混淆样本
3
- */
4
-
5
- import { ASTAnalyzer } from '../src/analyzer/ASTAnalyzer.js';
6
- import { CallStackAnalyzer } from '../src/analyzer/CallStackAnalyzer.js';
7
- import { EncryptionAnalyzer } from '../src/analyzer/EncryptionAnalyzer.js';
8
- import { Deobfuscator } from '../src/analyzer/Deobfuscator.js';
9
- import fs from 'fs';
10
- import path from 'path';
11
- import { fileURLToPath } from 'url';
12
-
13
- const __dirname = path.dirname(fileURLToPath(import.meta.url));
14
- const samplesDir = path.join(__dirname, 'samples');
15
-
16
- // 获取所有样本文件
17
- const sampleFiles = fs.readdirSync(samplesDir)
18
- .filter(f => f.endsWith('.js') && f.startsWith('v'))
19
- .sort();
20
-
21
- console.log('=== DeepSpider 综合测试 ===\n');
22
- console.log(`发现 ${sampleFiles.length} 个测试样本\n`);
23
-
24
- // 初始化分析器
25
- const deob = new Deobfuscator();
26
- const astAnalyzer = new ASTAnalyzer();
27
- const encAnalyzer = new EncryptionAnalyzer();
28
-
29
- // 导入沙箱工具
30
- import { sandboxExecute, sandboxReset } from '../src/agent/tools/sandbox.js';
31
-
32
- // 测试结果统计
33
- const results = {
34
- total: sampleFiles.length,
35
- detected: 0,
36
- executed: 0,
37
- failed: []
38
- };
39
-
40
- // 逐个测试样本
41
- for (const file of sampleFiles) {
42
- const filePath = path.join(samplesDir, file);
43
- const code = fs.readFileSync(filePath, 'utf-8');
44
-
45
- console.log(`\n【${file}】`);
46
- console.log('-'.repeat(40));
47
-
48
- // 1. 混淆器识别
49
- const obType = deob.detectObfuscator(code);
50
- const codeType = deob._detectType(code);
51
- console.log(`混淆器: ${obType} | 类型: ${codeType}`);
52
- if (obType !== 'unknown') results.detected++;
53
-
54
- // 2. 函数提取
55
- const funcs = astAnalyzer.extractFunctions(code);
56
- console.log(`函数数: ${funcs.length}`);
57
-
58
- // 3. 加密检测
59
- const crypto = encAnalyzer.analyze(code);
60
- if (crypto.detectedAlgorithms.length > 0) {
61
- console.log(`加密算法: ${crypto.detectedAlgorithms.map(a => a.name).join(', ')}`);
62
- }
63
-
64
- // 4. 沙箱执行
65
- const execResultStr = await sandboxExecute.invoke({ code, timeout: 3000 });
66
- const execResult = JSON.parse(execResultStr);
67
- if (execResult.success) {
68
- console.log(`执行: ✅ 成功`);
69
- results.executed++;
70
- } else {
71
- console.log(`执行: ❌ ${execResult.errorType || 'error'}`);
72
- if (execResult.missingEnv?.length > 0) {
73
- console.log(`缺失: ${execResult.missingEnv.slice(0, 3).join(', ')}...`);
74
- }
75
- results.failed.push({ file, error: execResult.error });
76
- }
77
-
78
- // 重置沙箱
79
- await sandboxReset.invoke({});
80
- }
81
-
82
- // 输出统计
83
- console.log('\n' + '='.repeat(50));
84
- console.log('【测试统计】');
85
- console.log(`总样本: ${results.total}`);
86
- console.log(`识别成功: ${results.detected}/${results.total}`);
87
- console.log(`执行成功: ${results.executed}/${results.total}`);
88
-
89
- if (results.failed.length > 0) {
90
- console.log('\n【失败详情】');
91
- results.failed.forEach(f => {
92
- console.log(` ${f.file}: ${f.error?.slice(0, 50)}...`);
93
- });
94
- }
95
-
96
- console.log('\n=== 测试完成 ===');
@@ -1,55 +0,0 @@
1
- /**
2
- * webcrack 集成测试
3
- */
4
-
5
- import { unpackBundle, analyzeBundle } from '../src/agent/tools/webcrack.js';
6
-
7
- // 模拟一个简单的 Webpack bundle
8
- const sampleBundle = `
9
- (function(modules) {
10
- var installedModules = {};
11
- function __webpack_require__(moduleId) {
12
- if(installedModules[moduleId]) return installedModules[moduleId].exports;
13
- var module = installedModules[moduleId] = { exports: {} };
14
- modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
15
- return module.exports;
16
- }
17
- return __webpack_require__(0);
18
- })([
19
- function(module, exports, __webpack_require__) {
20
- var utils = __webpack_require__(1);
21
- console.log(utils.hello());
22
- },
23
- function(module, exports) {
24
- module.exports = {
25
- hello: function() { return "Hello World"; }
26
- };
27
- }
28
- ]);
29
- `;
30
-
31
- async function test() {
32
- console.log('=== webcrack 集成测试 ===\n');
33
-
34
- // 测试 analyze_bundle
35
- console.log('1. 测试 analyze_bundle...');
36
- const analysisResult = await analyzeBundle.invoke({ code: sampleBundle });
37
- const analysis = JSON.parse(analysisResult);
38
- console.log(' Bundle 类型:', analysis.bundleType);
39
- console.log(' 模块数量:', analysis.moduleCount);
40
- console.log(' 成功:', analysis.success);
41
-
42
- // 测试 unpack_bundle
43
- console.log('\n2. 测试 unpack_bundle...');
44
- const unpackResult = await unpackBundle.invoke({ code: sampleBundle });
45
- const unpacked = JSON.parse(unpackResult);
46
- console.log(' 成功:', unpacked.success);
47
- console.log(' 模块数量:', unpacked.moduleCount);
48
- if (unpacked.code) {
49
- console.log(' 解包后代码长度:', unpacked.code.length);
50
- }
51
-
52
- console.log('\n=== 测试完成 ===');
53
- }
54
-
55
- test().catch(console.error);