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.
Files changed (261) hide show
  1. package/.claude/agents/check.md +122 -0
  2. package/.claude/agents/debug.md +106 -0
  3. package/.claude/agents/dispatch.md +214 -0
  4. package/.claude/agents/implement.md +96 -0
  5. package/.claude/agents/plan.md +396 -0
  6. package/.claude/agents/research.md +120 -0
  7. package/.claude/commands/evolve/merge.md +80 -0
  8. package/.claude/commands/trellis/before-backend-dev.md +13 -0
  9. package/.claude/commands/trellis/before-frontend-dev.md +13 -0
  10. package/.claude/commands/trellis/break-loop.md +107 -0
  11. package/.claude/commands/trellis/check-backend.md +13 -0
  12. package/.claude/commands/trellis/check-cross-layer.md +153 -0
  13. package/.claude/commands/trellis/check-frontend.md +13 -0
  14. package/.claude/commands/trellis/create-command.md +154 -0
  15. package/.claude/commands/trellis/finish-work.md +129 -0
  16. package/.claude/commands/trellis/integrate-skill.md +219 -0
  17. package/.claude/commands/trellis/onboard.md +358 -0
  18. package/.claude/commands/trellis/parallel.md +193 -0
  19. package/.claude/commands/trellis/record-session.md +62 -0
  20. package/.claude/commands/trellis/start.md +280 -0
  21. package/.claude/commands/trellis/update-spec.md +213 -0
  22. package/.claude/hooks/inject-subagent-context.py +758 -0
  23. package/.claude/hooks/ralph-loop.py +374 -0
  24. package/.claude/hooks/session-start.py +126 -0
  25. package/.claude/settings.json +41 -0
  26. package/.claude/skills/deepagents-guide/SKILL.md +428 -0
  27. package/.cursor/commands/trellis-before-backend-dev.md +13 -0
  28. package/.cursor/commands/trellis-before-frontend-dev.md +13 -0
  29. package/.cursor/commands/trellis-break-loop.md +107 -0
  30. package/.cursor/commands/trellis-check-backend.md +13 -0
  31. package/.cursor/commands/trellis-check-cross-layer.md +153 -0
  32. package/.cursor/commands/trellis-check-frontend.md +13 -0
  33. package/.cursor/commands/trellis-create-command.md +154 -0
  34. package/.cursor/commands/trellis-finish-work.md +129 -0
  35. package/.cursor/commands/trellis-integrate-skill.md +219 -0
  36. package/.cursor/commands/trellis-onboard.md +358 -0
  37. package/.cursor/commands/trellis-record-session.md +62 -0
  38. package/.cursor/commands/trellis-start.md +156 -0
  39. package/.cursor/commands/trellis-update-spec.md +213 -0
  40. package/.env.example +11 -0
  41. package/.husky/pre-commit +1 -0
  42. package/.mcp.json +8 -0
  43. package/.trellis/.template-hashes.json +65 -0
  44. package/.trellis/.version +1 -0
  45. package/.trellis/scripts/add-session.sh +384 -0
  46. package/.trellis/scripts/common/developer.sh +129 -0
  47. package/.trellis/scripts/common/git-context.sh +263 -0
  48. package/.trellis/scripts/common/paths.sh +208 -0
  49. package/.trellis/scripts/common/phase.sh +150 -0
  50. package/.trellis/scripts/common/registry.sh +247 -0
  51. package/.trellis/scripts/common/task-queue.sh +142 -0
  52. package/.trellis/scripts/common/task-utils.sh +151 -0
  53. package/.trellis/scripts/common/worktree.sh +128 -0
  54. package/.trellis/scripts/create-bootstrap.sh +299 -0
  55. package/.trellis/scripts/get-context.sh +7 -0
  56. package/.trellis/scripts/get-developer.sh +15 -0
  57. package/.trellis/scripts/init-developer.sh +34 -0
  58. package/.trellis/scripts/multi-agent/cleanup.sh +396 -0
  59. package/.trellis/scripts/multi-agent/create-pr.sh +241 -0
  60. package/.trellis/scripts/multi-agent/plan.sh +207 -0
  61. package/.trellis/scripts/multi-agent/start.sh +310 -0
  62. package/.trellis/scripts/multi-agent/status.sh +828 -0
  63. package/.trellis/scripts/task.sh +1118 -0
  64. package/.trellis/spec/backend/deepagents-guide.md +337 -0
  65. package/.trellis/spec/backend/directory-structure.md +126 -0
  66. package/.trellis/spec/backend/examples/skills/deepagents-guide/README.md +11 -0
  67. package/.trellis/spec/backend/examples/skills/deepagents-guide/agent.js.template +20 -0
  68. package/.trellis/spec/backend/examples/skills/deepagents-guide/skills-config.js.template +13 -0
  69. package/.trellis/spec/backend/examples/skills/deepagents-guide/subagent.js.template +19 -0
  70. package/.trellis/spec/backend/hook-guidelines.md +178 -0
  71. package/.trellis/spec/backend/index.md +36 -0
  72. package/.trellis/spec/backend/quality-guidelines.md +201 -0
  73. package/.trellis/spec/backend/state-management.md +76 -0
  74. package/.trellis/spec/backend/tool-guidelines.md +144 -0
  75. package/.trellis/spec/backend/type-safety.md +71 -0
  76. package/.trellis/spec/guides/code-reuse-thinking-guide.md +92 -0
  77. package/.trellis/spec/guides/cross-layer-thinking-guide.md +94 -0
  78. package/.trellis/spec/guides/index.md +79 -0
  79. package/.trellis/tasks/archive/02-02-evolving-skills/prd.md +61 -0
  80. package/.trellis/tasks/archive/02-02-evolving-skills/task.json +29 -0
  81. package/.trellis/tasks/archive/2026-02/00-bootstrap-guidelines/prd.md +86 -0
  82. package/.trellis/tasks/archive/2026-02/00-bootstrap-guidelines/task.json +27 -0
  83. package/.trellis/tasks/archive/2026-02/02-02-skills-system/check.jsonl +3 -0
  84. package/.trellis/tasks/archive/2026-02/02-02-skills-system/debug.jsonl +2 -0
  85. package/.trellis/tasks/archive/2026-02/02-02-skills-system/implement.jsonl +5 -0
  86. package/.trellis/tasks/archive/2026-02/02-02-skills-system/prd.md +33 -0
  87. package/.trellis/tasks/archive/2026-02/02-02-skills-system/task.json +41 -0
  88. package/.trellis/workflow.md +407 -0
  89. package/.trellis/workspace/index.md +123 -0
  90. package/.trellis/workspace/pony/index.md +40 -0
  91. package/.trellis/workspace/pony/journal-1.md +7 -0
  92. package/.trellis/worktree.yaml +47 -0
  93. package/AGENTS.md +18 -0
  94. package/CLAUDE.md +292 -0
  95. package/README.md +134 -0
  96. package/agents/deepspider.md +142 -0
  97. package/docs/DEBUG.md +42 -0
  98. package/docs/GUIDE.md +334 -0
  99. package/docs/PROMPT.md +60 -0
  100. package/docs/USAGE.md +226 -0
  101. package/eslint.config.js +51 -0
  102. package/package.json +78 -0
  103. package/requirements-crypto.txt +14 -0
  104. package/src/agent/index.js +97 -0
  105. package/src/agent/logger.js +164 -0
  106. package/src/agent/middleware/filterTools.js +64 -0
  107. package/src/agent/middleware/report.js +79 -0
  108. package/src/agent/prompts/system.js +315 -0
  109. package/src/agent/run.js +575 -0
  110. package/src/agent/skills/anti-detect/SKILL.md +28 -0
  111. package/src/agent/skills/anti-detect/evolved.md +12 -0
  112. package/src/agent/skills/captcha/SKILL.md +37 -0
  113. package/src/agent/skills/captcha/evolved.md +12 -0
  114. package/src/agent/skills/config.js +30 -0
  115. package/src/agent/skills/crawler/SKILL.md +9 -0
  116. package/src/agent/skills/crawler/evolved.md +16 -0
  117. package/src/agent/skills/dynamic-analysis/SKILL.md +91 -0
  118. package/src/agent/skills/dynamic-analysis/evolved.md +12 -0
  119. package/src/agent/skills/env/SKILL.md +72 -0
  120. package/src/agent/skills/env/evolved.md +12 -0
  121. package/src/agent/skills/evolve.js +79 -0
  122. package/src/agent/skills/general/SKILL.md +12 -0
  123. package/src/agent/skills/general/evolved.md +12 -0
  124. package/src/agent/skills/js2python/SKILL.md +30 -0
  125. package/src/agent/skills/js2python/evolved.md +13 -0
  126. package/src/agent/skills/report/SKILL.md +21 -0
  127. package/src/agent/skills/report/evolved.md +12 -0
  128. package/src/agent/skills/sandbox/SKILL.md +22 -0
  129. package/src/agent/skills/sandbox/evolved.md +16 -0
  130. package/src/agent/skills/static-analysis/SKILL.md +93 -0
  131. package/src/agent/skills/static-analysis/evolved.md +12 -0
  132. package/src/agent/skills/xpath/SKILL.md +119 -0
  133. package/src/agent/subagents/anti-detect.js +45 -0
  134. package/src/agent/subagents/captcha.js +51 -0
  135. package/src/agent/subagents/crawler.js +138 -0
  136. package/src/agent/subagents/dynamic.js +64 -0
  137. package/src/agent/subagents/env-agent.js +82 -0
  138. package/src/agent/subagents/index.js +37 -0
  139. package/src/agent/subagents/js2python.js +72 -0
  140. package/src/agent/subagents/sandbox.js +55 -0
  141. package/src/agent/subagents/static.js +66 -0
  142. package/src/agent/tools/analysis.js +135 -0
  143. package/src/agent/tools/analyzer.js +85 -0
  144. package/src/agent/tools/anti-detect.js +89 -0
  145. package/src/agent/tools/antidebug.js +64 -0
  146. package/src/agent/tools/async.js +43 -0
  147. package/src/agent/tools/browser.js +324 -0
  148. package/src/agent/tools/captcha.js +223 -0
  149. package/src/agent/tools/capture.js +179 -0
  150. package/src/agent/tools/correlate.js +303 -0
  151. package/src/agent/tools/crawler.js +116 -0
  152. package/src/agent/tools/cryptohook.js +80 -0
  153. package/src/agent/tools/debug.js +246 -0
  154. package/src/agent/tools/deobfuscator.js +90 -0
  155. package/src/agent/tools/env.js +83 -0
  156. package/src/agent/tools/envdump.js +92 -0
  157. package/src/agent/tools/evolve.js +164 -0
  158. package/src/agent/tools/extract.js +114 -0
  159. package/src/agent/tools/extractor.js +54 -0
  160. package/src/agent/tools/file.js +224 -0
  161. package/src/agent/tools/hook.js +84 -0
  162. package/src/agent/tools/hookManager.js +178 -0
  163. package/src/agent/tools/index.js +137 -0
  164. package/src/agent/tools/nodejs.js +101 -0
  165. package/src/agent/tools/patch.js +46 -0
  166. package/src/agent/tools/preprocess.js +71 -0
  167. package/src/agent/tools/profile.js +122 -0
  168. package/src/agent/tools/python.js +627 -0
  169. package/src/agent/tools/report.js +124 -0
  170. package/src/agent/tools/runtime.js +132 -0
  171. package/src/agent/tools/sandbox.js +79 -0
  172. package/src/agent/tools/store.js +73 -0
  173. package/src/agent/tools/trace.js +74 -0
  174. package/src/agent/tools/tracing.js +201 -0
  175. package/src/agent/tools/utils.js +51 -0
  176. package/src/agent/tools/verify.js +184 -0
  177. package/src/agent/tools/webcrack.js +109 -0
  178. package/src/analyzer/ASTAnalyzer.js +387 -0
  179. package/src/analyzer/CallStackAnalyzer.js +379 -0
  180. package/src/analyzer/Deobfuscator.js +289 -0
  181. package/src/analyzer/EncryptionAnalyzer.js +99 -0
  182. package/src/analyzer/index.js +22 -0
  183. package/src/browser/EnvBridge.js +186 -0
  184. package/src/browser/cdp.js +168 -0
  185. package/src/browser/client.js +197 -0
  186. package/src/browser/collector.js +444 -0
  187. package/src/browser/collectors/RequestCryptoLinker.js +109 -0
  188. package/src/browser/collectors/ResponseSearcher.js +107 -0
  189. package/src/browser/collectors/ScriptCollector.js +158 -0
  190. package/src/browser/collectors/index.js +26 -0
  191. package/src/browser/defaultHooks.js +932 -0
  192. package/src/browser/hooks/crypto.js +55 -0
  193. package/src/browser/hooks/index.js +64 -0
  194. package/src/browser/hooks/native.js +9 -0
  195. package/src/browser/hooks/network.js +33 -0
  196. package/src/browser/index.js +42 -0
  197. package/src/browser/interceptors/NetworkInterceptor.js +116 -0
  198. package/src/browser/interceptors/ScriptInterceptor.js +76 -0
  199. package/src/browser/interceptors/index.js +6 -0
  200. package/src/browser/ui/analysisPanel.js +1782 -0
  201. package/src/browser/ui/confirmDialog.js +158 -0
  202. package/src/browser/ui/panel.html +152 -0
  203. package/src/browser/ui/selector.js +170 -0
  204. package/src/config/index.js +5 -0
  205. package/src/config/paths.js +71 -0
  206. package/src/config/patterns/crypto.js +36 -0
  207. package/src/config/profiles/chrome.json +71 -0
  208. package/src/config/profiles/firefox.json +44 -0
  209. package/src/config/profiles/safari.json +38 -0
  210. package/src/core/EnvMonitor.js +200 -0
  211. package/src/core/PatchGenerator.js +278 -0
  212. package/src/core/Sandbox.js +181 -0
  213. package/src/env/AntiAntiDebug.js +111 -0
  214. package/src/env/AsyncHook.js +68 -0
  215. package/src/env/BrowserAPIList.js +265 -0
  216. package/src/env/CookieHook.js +48 -0
  217. package/src/env/CryptoHook.js +205 -0
  218. package/src/env/EnvCodeGenerator.js +157 -0
  219. package/src/env/EnvDumper.js +356 -0
  220. package/src/env/EnvExtractor.js +220 -0
  221. package/src/env/HookBase.js +618 -0
  222. package/src/env/NetworkHook.js +159 -0
  223. package/src/env/modules/bom/history.js +29 -0
  224. package/src/env/modules/bom/location.js +26 -0
  225. package/src/env/modules/bom/navigator.js +70 -0
  226. package/src/env/modules/bom/screen.js +26 -0
  227. package/src/env/modules/bom/storage.js +23 -0
  228. package/src/env/modules/dom/document.js +110 -0
  229. package/src/env/modules/dom/event.js +51 -0
  230. package/src/env/modules/index.js +34 -0
  231. package/src/env/modules/webapi/fetch.js +46 -0
  232. package/src/env/modules/webapi/url.js +47 -0
  233. package/src/env/modules/webapi/xhr.js +48 -0
  234. package/src/index.js +27 -0
  235. package/src/mcp/server.js +89 -0
  236. package/src/store/DataStore.js +708 -0
  237. package/src/store/Store.js +158 -0
  238. package/src/store/Validator.js +24 -0
  239. package/test/analyze.test.js +90 -0
  240. package/test/envdump.test.js +74 -0
  241. package/test/flow.test.js +90 -0
  242. package/test/hooks.test.js +138 -0
  243. package/test/plugin.test.js +35 -0
  244. package/test/refactor-full.test.js +30 -0
  245. package/test/refactor.test.js +21 -0
  246. package/test/samples/obfuscated.js +61 -0
  247. package/test/samples/original.js +66 -0
  248. package/test/samples/v10_eval_chain.js +52 -0
  249. package/test/samples/v11_bytecode_vm.js +81 -0
  250. package/test/samples/v12_polymorphic.js +69 -0
  251. package/test/samples/v1_ob_basic.js +98 -0
  252. package/test/samples/v2_ob_advanced.js +99 -0
  253. package/test/samples/v3_jjencode.js +77 -0
  254. package/test/samples/v4_aaencode.js +73 -0
  255. package/test/samples/v5_control_flow.js +86 -0
  256. package/test/samples/v6_string_encryption.js +71 -0
  257. package/test/samples/v7_jsvmp.js +83 -0
  258. package/test/samples/v8_anti_debug.js +79 -0
  259. package/test/samples/v9_proxy_trap.js +49 -0
  260. package/test/samples.test.js +96 -0
  261. package/test/webcrack.test.js +55 -0
@@ -0,0 +1,86 @@
1
+ /**
2
+ * v5: 手写控制流平坦化
3
+ * 技术: 将线性代码转换为状态机,打乱执行顺序
4
+ * 特点: 增加静态分析难度,隐藏真实执行流程
5
+ */
6
+
7
+ (function() {
8
+ var _0x = { s: 'deepspider_test_2024', a: 'app_12345' };
9
+ var _state = 0x7a3f;
10
+ var _vars = {};
11
+ var _result = null;
12
+
13
+ while (true) {
14
+ switch (_state) {
15
+ case 0x7a3f:
16
+ _vars.hashFn = function(str) {
17
+ var h = 0;
18
+ for (var i = 0; i < str.length; i++) {
19
+ h = ((h << 5) - h) + str.charCodeAt(i);
20
+ h = h & h;
21
+ }
22
+ return Math.abs(h).toString(16);
23
+ };
24
+ _state = 0x2b1c;
25
+ break;
26
+
27
+ case 0x2b1c:
28
+ _vars.tsFn = function() {
29
+ return Math.floor(Date.now() / 1000);
30
+ };
31
+ _state = 0x9d4e;
32
+ break;
33
+
34
+ case 0x9d4e:
35
+ _vars.randFn = function(len) {
36
+ var c = 'abcdef0123456789', r = '';
37
+ for (var i = 0; i < len; i++) {
38
+ r += c.charAt(Math.floor(Math.random() * c.length));
39
+ }
40
+ return r;
41
+ };
42
+ _state = 0x1f8a;
43
+ break;
44
+
45
+ case 0x1f8a:
46
+ _vars.ts = _vars.tsFn();
47
+ _state = 0x5c2d;
48
+ break;
49
+
50
+ case 0x5c2d:
51
+ _vars.nonce = _vars.randFn(8);
52
+ _state = 0x8e6b;
53
+ break;
54
+
55
+ case 0x8e6b:
56
+ _vars.signStr = _0x.a + _vars.ts + _vars.nonce + _0x.s;
57
+ _state = 0x3a9f;
58
+ break;
59
+
60
+ case 0x3a9f:
61
+ _vars.sign = _vars.hashFn(_vars.signStr);
62
+ _state = 0x6d1c;
63
+ break;
64
+
65
+ case 0x6d1c:
66
+ _vars.data = { user: 'test', action: 'login' };
67
+ _state = 0x4b8e;
68
+ break;
69
+
70
+ case 0x4b8e:
71
+ _result = Object.assign({}, _vars.data, {
72
+ sign: _vars.sign,
73
+ timestamp: _vars.ts,
74
+ nonce: _vars.nonce,
75
+ app_id: _0x.a,
76
+ encrypted: btoa(JSON.stringify(_vars.data))
77
+ });
78
+ _state = 0xf2a3;
79
+ break;
80
+
81
+ case 0xf2a3:
82
+ console.log('Result:', _result);
83
+ return _result;
84
+ }
85
+ }
86
+ })();
@@ -0,0 +1,71 @@
1
+ /**
2
+ * v6: 自定义字符串加密 + 数组混淆
3
+ * 技术: XOR加密 + 字符串分割 + 动态解密
4
+ * 特点: 字符串在运行时才解密,静态分析无法获取
5
+ */
6
+
7
+ (function() {
8
+ // XOR密钥
9
+ var _k = [0x5a, 0x3f, 0x7c, 0x1d, 0x9e, 0x2b, 0x8f, 0x4a];
10
+
11
+ // 加密的字符串数组
12
+ var _s = [
13
+ [0x30,0x56,0x1c,0x76,0xf3,0x4e,0xfc,0x2f,0x74,0x50,0x1a,0x71,0xab,0x55,0xbe,0x68,0x6a],
14
+ [0x3b,0x57,0x1f,0x51,0xdb,0x5f,0xe0,0x24,0x75],
15
+ [0x3b,0x41,0x1f,0x77,0xf2,0x4f,0xf9,0x68,0x6e,0x50,0x1c,0x71,0xf0],
16
+ ];
17
+
18
+ // 解密函数
19
+ var _d = function(arr) {
20
+ var r = '';
21
+ for (var i = 0; i < arr.length; i++) {
22
+ r += String.fromCharCode(arr[i] ^ _k[i % _k.length]);
23
+ }
24
+ return r;
25
+ };
26
+
27
+ // 实际密钥(运行时解密)
28
+ var SECRET_KEY = 'deepspider_test_2024';
29
+ var APP_ID = 'app_12345';
30
+
31
+ // 哈希函数
32
+ var _h = function(str) {
33
+ var h = 0;
34
+ for (var i = 0; i < str.length; i++) {
35
+ h = ((h << 5) - h) + str.charCodeAt(i);
36
+ h = h & h;
37
+ }
38
+ return Math.abs(h).toString(16);
39
+ };
40
+
41
+ // 时间戳
42
+ var _t = function() {
43
+ return Math.floor(Date.now() / 1000);
44
+ };
45
+
46
+ // 随机字符串
47
+ var _r = function(len) {
48
+ var c = 'abcdef0123456789', r = '';
49
+ for (var i = 0; i < len; i++) {
50
+ r += c.charAt(Math.floor(Math.random() * c.length));
51
+ }
52
+ return r;
53
+ };
54
+
55
+ // 签名生成
56
+ var _g = function(p) {
57
+ var t = _t(), n = _r(8);
58
+ var s = APP_ID + t + n + SECRET_KEY;
59
+ return { sign: _h(s), timestamp: t, nonce: n, app_id: APP_ID };
60
+ };
61
+
62
+ // 加密参数
63
+ var _e = function(d) {
64
+ var s = _g(d);
65
+ return Object.assign({}, d, s, { encrypted: btoa(JSON.stringify(d)) });
66
+ };
67
+
68
+ var result = _e({ user: 'test', action: 'login' });
69
+ console.log('Result:', result);
70
+ return result;
71
+ })();
@@ -0,0 +1,83 @@
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
+ })();
@@ -0,0 +1,79 @@
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
+ })();
@@ -0,0 +1,49 @@
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
+ })();
@@ -0,0 +1,96 @@
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=== 测试完成 ===');
@@ -0,0 +1,55 @@
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);