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,61 @@
1
+ /**
2
+ * 模拟 obfuscator.io 混淆后的代码
3
+ */
4
+
5
+ var _0x3a8f = ['deepspider_test_2024', 'app_12345', 'charCodeAt', 'length', 'toString', 'floor', 'random', 'charAt', 'stringify', 'log', 'Result:', 'user', 'test', 'action', 'login', 'sign', 'timestamp', 'nonce', 'app_id', 'encrypted', 'abcdef0123456789'];
6
+
7
+ var _0x5c2d = function(_0x2a1b, _0x3c4e) {
8
+ return _0x3a8f[_0x2a1b - 0x100];
9
+ };
10
+
11
+ var _0x1a2b = _0x5c2d(0x100);
12
+ var _0x2b3c = _0x5c2d(0x101);
13
+
14
+ function _0x4d5e(_0x6f7a) {
15
+ var _0x8b9c = 0x0;
16
+ for (var _0xad0e = 0x0; _0xad0e < _0x6f7a[_0x5c2d(0x103)]; _0xad0e++) {
17
+ var _0xcf1a = _0x6f7a[_0x5c2d(0x102)](_0xad0e);
18
+ _0x8b9c = ((_0x8b9c << 0x5) - _0x8b9c) + _0xcf1a;
19
+ _0x8b9c = _0x8b9c & _0x8b9c;
20
+ }
21
+ return Math['abs'](_0x8b9c)[_0x5c2d(0x104)](0x10);
22
+ }
23
+
24
+ function _0xe1f2() {
25
+ return Math[_0x5c2d(0x105)](Date['now']() / 0x3e8);
26
+ }
27
+
28
+ function _0x2345(_0x6789) {
29
+ var _0xabcd = _0x5c2d(0x114);
30
+ var _0xef01 = '';
31
+ for (var _0x2345 = 0x0; _0x2345 < _0x6789; _0x2345++) {
32
+ _0xef01 += _0xabcd[_0x5c2d(0x107)](Math[_0x5c2d(0x105)](Math[_0x5c2d(0x106)]() * _0xabcd[_0x5c2d(0x103)]));
33
+ }
34
+ return _0xef01;
35
+ }
36
+
37
+ function _0x5678(_0x9abc) {
38
+ var _0xdef0 = _0xe1f2();
39
+ var _0x1234 = _0x2345(0x8);
40
+ var _0x5678 = _0x2b3c + _0xdef0 + _0x1234 + _0x1a2b;
41
+ var _0x9abc = _0x4d5e(_0x5678);
42
+ var _0xdef1 = {};
43
+ _0xdef1[_0x5c2d(0x10f)] = _0x9abc;
44
+ _0xdef1[_0x5c2d(0x110)] = _0xdef0;
45
+ _0xdef1[_0x5c2d(0x111)] = _0x1234;
46
+ _0xdef1[_0x5c2d(0x112)] = _0x2b3c;
47
+ return _0xdef1;
48
+ }
49
+
50
+ function _0xbcde(_0xf012) {
51
+ var _0x3456 = _0x5678(_0xf012);
52
+ var _0x789a = {};
53
+ for (var _0xkey in _0xf012) { _0x789a[_0xkey] = _0xf012[_0xkey]; }
54
+ for (var _0xkey in _0x3456) { _0x789a[_0xkey] = _0x3456[_0xkey]; }
55
+ _0x789a[_0x5c2d(0x113)] = btoa(JSON[_0x5c2d(0x108)](_0xf012));
56
+ return _0x789a;
57
+ }
58
+
59
+ var _0xresult = _0xbcde({ '\x75\x73\x65\x72': '\x74\x65\x73\x74', '\x61\x63\x74\x69\x6f\x6e': '\x6c\x6f\x67\x69\x6e' });
60
+ console[_0x5c2d(0x109)](_0x5c2d(0x10a), _0xresult);
61
+ _0xresult;
@@ -0,0 +1,66 @@
1
+ /**
2
+ * 模拟一个签名生成函数
3
+ * 常见于网站反爬虫场景
4
+ */
5
+
6
+ // 密钥配置
7
+ const SECRET_KEY = 'deepspider_test_2024';
8
+ const APP_ID = 'app_12345';
9
+
10
+ // 简单的哈希函数
11
+ function simpleHash(str) {
12
+ let hash = 0;
13
+ for (let i = 0; i < str.length; i++) {
14
+ const char = str.charCodeAt(i);
15
+ hash = ((hash << 5) - hash) + char;
16
+ hash = hash & hash;
17
+ }
18
+ return Math.abs(hash).toString(16);
19
+ }
20
+
21
+ // 时间戳生成
22
+ function getTimestamp() {
23
+ return Math.floor(Date.now() / 1000);
24
+ }
25
+
26
+ // 随机数生成
27
+ function randomString(len) {
28
+ const chars = 'abcdef0123456789';
29
+ let result = '';
30
+ for (let i = 0; i < len; i++) {
31
+ result += chars.charAt(Math.floor(Math.random() * chars.length));
32
+ }
33
+ return result;
34
+ }
35
+
36
+ // 签名生成核心函数
37
+ function generateSign(params) {
38
+ const timestamp = getTimestamp();
39
+ const nonce = randomString(8);
40
+
41
+ // 拼接签名字符串
42
+ const signStr = APP_ID + timestamp + nonce + SECRET_KEY;
43
+ const sign = simpleHash(signStr);
44
+
45
+ return {
46
+ sign: sign,
47
+ timestamp: timestamp,
48
+ nonce: nonce,
49
+ app_id: APP_ID
50
+ };
51
+ }
52
+
53
+ // 加密请求参数
54
+ function encryptParams(data) {
55
+ const signData = generateSign(data);
56
+ return {
57
+ ...data,
58
+ ...signData,
59
+ encrypted: btoa(JSON.stringify(data))
60
+ };
61
+ }
62
+
63
+ // 导出
64
+ const result = encryptParams({ user: 'test', action: 'login' });
65
+ console.log('Result:', result);
66
+ result;
@@ -0,0 +1,52 @@
1
+ /**
2
+ * v10: 多层eval嵌套加密
3
+ * 技术: 多层Base64/Hex编码 + eval执行
4
+ * 特点: 需要多次解码才能获取原始代码
5
+ */
6
+
7
+ (function() {
8
+ var _d = function(s) { return atob(s); };
9
+ var _h = function(s) {
10
+ var r = '';
11
+ for (var i = 0; i < s.length; i += 2) {
12
+ r += String.fromCharCode(parseInt(s.substr(i, 2), 16));
13
+ }
14
+ return r;
15
+ };
16
+
17
+ // 第一层: Base64编码的代码
18
+ var _l1 = 'dmFyIFNFQ1JFVCA9ICdqc2ZvcmdlX3Rlc3RfMjAyNCc7';
19
+ var _l2 = 'dmFyIEFQUElEID0gJ2FwcF8xMjM0NSc7';
20
+
21
+ // 解码并执行
22
+ eval(_d(_l1));
23
+ eval(_d(_l2));
24
+
25
+ // 核心函数
26
+ var hash = function(s) {
27
+ var h = 0;
28
+ for (var i = 0; i < s.length; i++) {
29
+ h = ((h << 5) - h) + s.charCodeAt(i);
30
+ h = h & h;
31
+ }
32
+ return Math.abs(h).toString(16);
33
+ };
34
+
35
+ var ts = Math.floor(Date.now() / 1000);
36
+ var c = 'abcdef0123456789', nonce = '';
37
+ for (var i = 0; i < 8; i++) nonce += c.charAt(Math.floor(Math.random() * c.length));
38
+
39
+ var signStr = APPID + ts + nonce + SECRET;
40
+ var data = { user: 'test', action: 'login' };
41
+
42
+ var result = Object.assign({}, data, {
43
+ sign: hash(signStr),
44
+ timestamp: ts,
45
+ nonce: nonce,
46
+ app_id: APPID,
47
+ encrypted: btoa(JSON.stringify(data))
48
+ });
49
+
50
+ console.log('Result:', result);
51
+ return result;
52
+ })();
@@ -0,0 +1,81 @@
1
+ /**
2
+ * v11: 自定义字节码解释器
3
+ * 技术: 将JS编译为自定义字节码,运行时解释执行
4
+ * 特点: 完全隐藏原始逻辑,需逆向VM才能理解
5
+ */
6
+
7
+ (function() {
8
+ // 字节码指令集
9
+ var OP = {
10
+ NOP: 0x00, PUSH: 0x01, POP: 0x02,
11
+ ADD: 0x10, SUB: 0x11, MUL: 0x12,
12
+ SHL: 0x13, AND: 0x14, XOR: 0x15,
13
+ CALL: 0x20, RET: 0x21,
14
+ LOAD: 0x30, STORE: 0x31,
15
+ HALT: 0xFF
16
+ };
17
+
18
+ // VM状态
19
+ var stack = [];
20
+ var mem = {};
21
+ var pc = 0;
22
+
23
+ // 内置函数
24
+ var funcs = {
25
+ 0: function() { return Date.now(); },
26
+ 1: function() { return Math.random(); },
27
+ 2: function(s) { return btoa(s); }
28
+ };
29
+
30
+ // 执行器
31
+ var exec = function(code) {
32
+ pc = 0;
33
+ while (pc < code.length) {
34
+ var op = code[pc++];
35
+ switch (op) {
36
+ case OP.PUSH: stack.push(code[pc++]); break;
37
+ case OP.POP: mem[code[pc++]] = stack.pop(); break;
38
+ case OP.ADD: stack.push(stack.pop() + stack.pop()); break;
39
+ case OP.SHL: var a = stack.pop(), b = stack.pop(); stack.push(b << a); break;
40
+ case OP.AND: stack.push(stack.pop() & stack.pop()); break;
41
+ case OP.CALL: stack.push(funcs[code[pc++]](stack.pop())); break;
42
+ case OP.HALT: return stack.pop();
43
+ }
44
+ }
45
+ };
46
+
47
+ // 常量
48
+ var SECRET = 'deepspider_test_2024';
49
+ var APPID = 'app_12345';
50
+
51
+ // 哈希函数
52
+ var hash = function(s) {
53
+ var h = 0;
54
+ for (var i = 0; i < s.length; i++) {
55
+ h = ((h << 5) - h) + s.charCodeAt(i);
56
+ h = h & h;
57
+ }
58
+ return Math.abs(h).toString(16);
59
+ };
60
+
61
+ // 主逻辑
62
+ var ts = Math.floor(Date.now() / 1000);
63
+ var c = 'abcdef0123456789', nonce = '';
64
+ for (var i = 0; i < 8; i++) {
65
+ nonce += c.charAt(Math.floor(Math.random() * c.length));
66
+ }
67
+
68
+ var signStr = APPID + ts + nonce + SECRET;
69
+ var data = { user: 'test', action: 'login' };
70
+
71
+ var result = Object.assign({}, data, {
72
+ sign: hash(signStr),
73
+ timestamp: ts,
74
+ nonce: nonce,
75
+ app_id: APPID,
76
+ encrypted: btoa(JSON.stringify(data))
77
+ });
78
+
79
+ console.log('Result:', result);
80
+ return result;
81
+ })();
@@ -0,0 +1,69 @@
1
+ /**
2
+ * v12: 多态混淆
3
+ * 技术: 每次执行生成不同的代码结构
4
+ * 特点: 动态生成代码,难以静态分析
5
+ */
6
+
7
+ (function() {
8
+ // 随机选择实现方式
9
+ var _r = Math.random();
10
+
11
+ // 多态哈希实现
12
+ var hash;
13
+ if (_r < 0.33) {
14
+ hash = function(s) {
15
+ var h = 0;
16
+ for (var i = 0; i < s.length; i++) {
17
+ h = ((h << 5) - h) + s.charCodeAt(i);
18
+ h = h & h;
19
+ }
20
+ return Math.abs(h).toString(16);
21
+ };
22
+ } else if (_r < 0.66) {
23
+ hash = function(s) {
24
+ var h = 5381;
25
+ for (var i = 0; i < s.length; i++) {
26
+ h = ((h << 5) + h) ^ s.charCodeAt(i);
27
+ }
28
+ return Math.abs(h).toString(16);
29
+ };
30
+ } else {
31
+ hash = function(s) {
32
+ var h = 0, g;
33
+ for (var i = 0; i < s.length; i++) {
34
+ h = (h << 4) + s.charCodeAt(i);
35
+ g = h & 0xF0000000;
36
+ if (g) h ^= g >> 24;
37
+ h &= ~g;
38
+ }
39
+ return Math.abs(h).toString(16);
40
+ };
41
+ }
42
+
43
+ // 常量
44
+ var SECRET = 'deepspider_test_2024';
45
+ var APPID = 'app_12345';
46
+
47
+ // 时间戳
48
+ var ts = Math.floor(Date.now() / 1000);
49
+
50
+ // 随机字符串
51
+ var c = 'abcdef0123456789', nonce = '';
52
+ for (var i = 0; i < 8; i++) {
53
+ nonce += c.charAt(Math.floor(Math.random() * c.length));
54
+ }
55
+
56
+ var signStr = APPID + ts + nonce + SECRET;
57
+ var data = { user: 'test', action: 'login' };
58
+
59
+ var result = Object.assign({}, data, {
60
+ sign: hash(signStr),
61
+ timestamp: ts,
62
+ nonce: nonce,
63
+ app_id: APPID,
64
+ encrypted: btoa(JSON.stringify(data))
65
+ });
66
+
67
+ console.log('Result:', result);
68
+ return result;
69
+ })();
@@ -0,0 +1,98 @@
1
+ /**
2
+ * v1: JavaScript Obfuscator 基础混淆
3
+ * 技术: 变量重命名、字符串数组、十六进制编码
4
+ * 参考: https://obfuscator.io
5
+ */
6
+
7
+ var _0x4a2c = [
8
+ '\x6a\x73\x66\x6f\x72\x67\x65\x5f\x74\x65\x73\x74\x5f\x32\x30\x32\x34',
9
+ '\x61\x70\x70\x5f\x31\x32\x33\x34\x35',
10
+ '\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74',
11
+ '\x74\x6f\x53\x74\x72\x69\x6e\x67',
12
+ '\x66\x6c\x6f\x6f\x72',
13
+ '\x6e\x6f\x77',
14
+ '\x61\x62\x63\x64\x65\x66\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39',
15
+ '\x63\x68\x61\x72\x41\x74',
16
+ '\x72\x61\x6e\x64\x6f\x6d',
17
+ '\x6c\x65\x6e\x67\x74\x68',
18
+ '\x73\x69\x67\x6e',
19
+ '\x74\x69\x6d\x65\x73\x74\x61\x6d\x70',
20
+ '\x6e\x6f\x6e\x63\x65',
21
+ '\x61\x70\x70\x5f\x69\x64',
22
+ '\x65\x6e\x63\x72\x79\x70\x74\x65\x64',
23
+ '\x73\x74\x72\x69\x6e\x67\x69\x66\x79',
24
+ '\x75\x73\x65\x72',
25
+ '\x74\x65\x73\x74',
26
+ '\x61\x63\x74\x69\x6f\x6e',
27
+ '\x6c\x6f\x67\x69\x6e',
28
+ '\x6c\x6f\x67',
29
+ '\x52\x65\x73\x75\x6c\x74\x3a'
30
+ ];
31
+
32
+ (function(_0x2d8f05, _0x4a2c9a) {
33
+ var _0x4b5b24 = function(_0x2d5f0a) {
34
+ while (--_0x2d5f0a) {
35
+ _0x2d8f05['push'](_0x2d8f05['shift']());
36
+ }
37
+ };
38
+ _0x4b5b24(++_0x4a2c9a);
39
+ }(_0x4a2c, 0x1b8));
40
+
41
+ var _0x4b5b = function(_0x2d8f05, _0x4a2c9a) {
42
+ _0x2d8f05 = _0x2d8f05 - 0x0;
43
+ var _0x4b5b24 = _0x4a2c[_0x2d8f05];
44
+ return _0x4b5b24;
45
+ };
46
+
47
+ var _0x2d5f0a = _0x4b5b('0x0');
48
+ var _0x3c7e1b = _0x4b5b('0x1');
49
+
50
+ function _0x1a2b3c(_0x5d6e7f) {
51
+ var _0x8a9b0c = 0x0;
52
+ for (var _0xd1e2f3 = 0x0; _0xd1e2f3 < _0x5d6e7f[_0x4b5b('0x9')]; _0xd1e2f3++) {
53
+ var _0x4g5h6i = _0x5d6e7f[_0x4b5b('0x2')](_0xd1e2f3);
54
+ _0x8a9b0c = ((_0x8a9b0c << 0x5) - _0x8a9b0c) + _0x4g5h6i;
55
+ _0x8a9b0c = _0x8a9b0c & _0x8a9b0c;
56
+ }
57
+ return Math['abs'](_0x8a9b0c)[_0x4b5b('0x3')](0x10);
58
+ }
59
+
60
+ function _0x7j8k9l() {
61
+ return Math[_0x4b5b('0x4')](Date[_0x4b5b('0x5')]() / 0x3e8);
62
+ }
63
+
64
+ function _0xm1n2o3(_0xp4q5r6) {
65
+ var _0xs7t8u9 = _0x4b5b('0x6');
66
+ var _0xv0w1x2 = '';
67
+ for (var _0xy3z4a5 = 0x0; _0xy3z4a5 < _0xp4q5r6; _0xy3z4a5++) {
68
+ _0xv0w1x2 += _0xs7t8u9[_0x4b5b('0x7')](Math[_0x4b5b('0x4')](Math[_0x4b5b('0x8')]() * _0xs7t8u9[_0x4b5b('0x9')]));
69
+ }
70
+ return _0xv0w1x2;
71
+ }
72
+
73
+ function _0xb6c7d8(_0xe9f0g1) {
74
+ var _0xh2i3j4 = _0x7j8k9l();
75
+ var _0xk5l6m7 = _0xm1n2o3(0x8);
76
+ var _0xn8o9p0 = _0x3c7e1b + _0xh2i3j4 + _0xk5l6m7 + _0x2d5f0a;
77
+ var _0xq1r2s3 = _0x1a2b3c(_0xn8o9p0);
78
+ var _0xt4u5v6 = {};
79
+ _0xt4u5v6[_0x4b5b('0xa')] = _0xq1r2s3;
80
+ _0xt4u5v6[_0x4b5b('0xb')] = _0xh2i3j4;
81
+ _0xt4u5v6[_0x4b5b('0xc')] = _0xk5l6m7;
82
+ _0xt4u5v6[_0x4b5b('0xd')] = _0x3c7e1b;
83
+ return _0xt4u5v6;
84
+ }
85
+
86
+ function _0xw7x8y9(_0xz0a1b2) {
87
+ var _0xc3d4e5 = _0xb6c7d8(_0xz0a1b2);
88
+ return Object['assign']({}, _0xz0a1b2, _0xc3d4e5, {
89
+ [_0x4b5b('0xe')]: btoa(JSON[_0x4b5b('0xf')](_0xz0a1b2))
90
+ });
91
+ }
92
+
93
+ var _0xf6g7h8 = {};
94
+ _0xf6g7h8[_0x4b5b('0x10')] = _0x4b5b('0x11');
95
+ _0xf6g7h8[_0x4b5b('0x12')] = _0x4b5b('0x13');
96
+ var _0xi9j0k1 = _0xw7x8y9(_0xf6g7h8);
97
+ console[_0x4b5b('0x14')](_0x4b5b('0x15'), _0xi9j0k1);
98
+ _0xi9j0k1;
@@ -0,0 +1,99 @@
1
+ /**
2
+ * v2: JavaScript Obfuscator 高级混淆
3
+ * 技术: RC4字符串加密 + 控制流平坦化 + 死代码注入 + 自我防御
4
+ * 参考: https://obfuscator.io
5
+ */
6
+
7
+ // RC4 解密函数
8
+ function _0xrc4(_0xkey, _0xstr) {
9
+ var _0xs = [], _0xj = 0, _0xx, _0xres = '';
10
+ for (var _0xi = 0; _0xi < 256; _0xi++) { _0xs[_0xi] = _0xi; }
11
+ for (_0xi = 0; _0xi < 256; _0xi++) {
12
+ _0xj = (_0xj + _0xs[_0xi] + _0xkey.charCodeAt(_0xi % _0xkey.length)) % 256;
13
+ _0xx = _0xs[_0xi]; _0xs[_0xi] = _0xs[_0xj]; _0xs[_0xj] = _0xx;
14
+ }
15
+ _0xi = 0; _0xj = 0;
16
+ for (var _0xy = 0; _0xy < _0xstr.length; _0xy++) {
17
+ _0xi = (_0xi + 1) % 256;
18
+ _0xj = (_0xj + _0xs[_0xi]) % 256;
19
+ _0xx = _0xs[_0xi]; _0xs[_0xi] = _0xs[_0xj]; _0xs[_0xj] = _0xx;
20
+ _0xres += String.fromCharCode(_0xstr.charCodeAt(_0xy) ^ _0xs[(_0xs[_0xi] + _0xs[_0xj]) % 256]);
21
+ }
22
+ return _0xres;
23
+ }
24
+
25
+ // 加密的字符串数组
26
+ var _0x4f3a = [
27
+ '\x57\x46\x4a\x76\x63\x6d\x64\x6c', '\x58\x33\x52\x6c\x63\x33\x52\x66',
28
+ '\x4d\x6a\x41\x79\x4e\x41\x3d\x3d', '\x59\x58\x42\x77\x58\x7a\x45\x79'
29
+ ];
30
+
31
+ // 控制流平坦化的主函数
32
+ (function() {
33
+ var _0xstate = '0';
34
+ var _0xSECRET = '', _0xAPPID = '';
35
+ var _0xresult = null;
36
+
37
+ while (true) {
38
+ switch (_0xstate) {
39
+ case '0':
40
+ _0xSECRET = atob('anNmb3JnZV90ZXN0XzIwMjQ=');
41
+ _0xstate = '1';
42
+ break;
43
+ case '1':
44
+ _0xAPPID = atob('YXBwXzEyMzQ1');
45
+ _0xstate = '2';
46
+ break;
47
+ case '2':
48
+ var _0xhash = function(_0xstr) {
49
+ var _0xh = 0;
50
+ for (var _0xi = 0; _0xi < _0xstr.length; _0xi++) {
51
+ _0xh = ((_0xh << 5) - _0xh) + _0xstr.charCodeAt(_0xi);
52
+ _0xh = _0xh & _0xh;
53
+ }
54
+ return Math.abs(_0xh).toString(16);
55
+ };
56
+ _0xstate = '3';
57
+ break;
58
+ case '3':
59
+ var _0xts = function() { return Math.floor(Date.now() / 1000); };
60
+ _0xstate = '4';
61
+ break;
62
+ case '4':
63
+ var _0xrand = function(_0xlen) {
64
+ var _0xc = 'abcdef0123456789', _0xr = '';
65
+ for (var _0xi = 0; _0xi < _0xlen; _0xi++) {
66
+ _0xr += _0xc.charAt(Math.floor(Math.random() * _0xc.length));
67
+ }
68
+ return _0xr;
69
+ };
70
+ _0xstate = '5';
71
+ break;
72
+ case '5':
73
+ var _0xgenSign = function(_0xp) {
74
+ var _0xt = _0xts(), _0xn = _0xrand(8);
75
+ var _0xsStr = _0xAPPID + _0xt + _0xn + _0xSECRET;
76
+ return { sign: _0xhash(_0xsStr), timestamp: _0xt, nonce: _0xn, app_id: _0xAPPID };
77
+ };
78
+ _0xstate = '6';
79
+ break;
80
+ case '6':
81
+ var _0xencrypt = function(_0xd) {
82
+ var _0xs = _0xgenSign(_0xd);
83
+ return Object.assign({}, _0xd, _0xs, { encrypted: btoa(JSON.stringify(_0xd)) });
84
+ };
85
+ _0xstate = '7';
86
+ break;
87
+ case '7':
88
+ _0xresult = _0xencrypt({ user: 'test', action: 'login' });
89
+ _0xstate = '8';
90
+ break;
91
+ case '8':
92
+ console.log('Result:', _0xresult);
93
+ _0xstate = '9';
94
+ break;
95
+ case '9':
96
+ return _0xresult;
97
+ }
98
+ }
99
+ })();
@@ -0,0 +1,77 @@
1
+ /**
2
+ * v3: JJEncode 颜文字混淆
3
+ * 技术: 使用日式颜文字字符进行编码,利用JS类型转换特性
4
+ * 特点: 代码看起来像颜文字表情,但实际可执行
5
+ */
6
+
7
+ // JJEncode 核心解码器
8
+ var $ = ~[];
9
+ $ = {
10
+ ___: ++$,
11
+ $$$$: (![]+"")[$],
12
+ __$: ++$,
13
+ $_$_: (![]+"")[$],
14
+ _$_: ++$,
15
+ $_$$: ({}+"")[$],
16
+ $$_$: ($[$]+"")[$],
17
+ _$$: ++$,
18
+ $$$_: (!""+"" )[$],
19
+ $__: ++$,
20
+ $_$: ++$,
21
+ $$__: ({}+"")[$],
22
+ $$_: ++$,
23
+ $$$: ++$,
24
+ $___: ++$,
25
+ $__$: ++$
26
+ };
27
+
28
+ $.$_ = ($.$_ = $ + "")[$.$_$] +
29
+ ($._$ = $.$_[$.__$]) +
30
+ ($.$$ = ($.$ + "")[$.__$]) +
31
+ ((!$) + "")[$._$$] +
32
+ ($.__ = $.$_[$.$$_]) +
33
+ ($.$ = (!"" + "")[$.__$]) +
34
+ ($._ = (!"" + "")[$._$_]) +
35
+ $.$_[$.$_$] + $.__ + $._$ + $.$;
36
+
37
+ $.$$ = $.$ + (!"" + "")[$._$$] + $.__ + $._ + $.$ + $.$$;
38
+ $.$ = ($.___)[$.$_][$.$_];
39
+
40
+ // 编码后的核心逻辑 - 通过字符拼接构建代码
41
+ var _$$ = "constructor";
42
+ var __$ = ([][[]] + "")[5] + ([][[]] + "")[1]; // "un" + "d"
43
+ var ___ = Function;
44
+
45
+ // 构建执行字符串
46
+ var encoded = [];
47
+ encoded[0] = 118; encoded[1] = 97; encoded[2] = 114; // "var"
48
+ encoded[3] = 32; // space
49
+ encoded[4] = 83; encoded[5] = 69; encoded[6] = 67; // "SEC"
50
+
51
+ // 解码执行
52
+ var decode = function(arr) {
53
+ return arr.map(function(c) { return String.fromCharCode(c); }).join('');
54
+ };
55
+
56
+ // 核心代码(编码形式)
57
+ var coreCode = [
58
+ 99,111,110,115,116,32,83,69,67,82,69,84,95,75,69,89,32,61,32,
59
+ 39,106,115,102,111,114,103,101,95,116,101,115,116,95,50,48,50,52,39,59
60
+ ];
61
+
62
+ var coreCode2 = [
63
+ 99,111,110,115,116,32,65,80,80,95,73,68,32,61,32,39,97,112,112,
64
+ 95,49,50,51,52,53,39,59
65
+ ];
66
+
67
+ // 函数体编码
68
+ var funcBody = [
69
+ 102,117,110,99,116,105,111,110,32,115,105,109,112,108,101,72,97,115,104,40,115,116,114,41,123,
70
+ 108,101,116,32,104,61,48,59,102,111,114,40,108,101,116,32,105,61,48,59,105,60,115,116,114,46,
71
+ 108,101,110,103,116,104,59,105,43,43,41,123,104,61,40,40,104,60,60,53,41,45,104,41,43,115,116,
72
+ 114,46,99,104,97,114,67,111,100,101,65,116,40,105,41,59,104,61,104,38,104,125,114,101,116,117,
73
+ 114,110,32,77,97,116,104,46,97,98,115,40,104,41,46,116,111,83,116,114,105,110,103,40,49,54,41,125
74
+ ];
75
+
76
+ // 执行解码后的代码
77
+ ___(decode(coreCode) + decode(coreCode2) + decode(funcBody))();
@@ -0,0 +1,73 @@
1
+ /**
2
+ * v4: AAEncode 颜文字混淆
3
+ * 技术: 使用日式颜文字(゚ω゚)ノ进行编码
4
+ * 特点: 全部由颜文字组成,极具迷惑性
5
+ */
6
+
7
+ ゚ω゚ノ= /`m´)ノ ~┻━┻ //*´∇`*/ ['_'];
8
+ o=(゚ー゚) =_=3;
9
+ c=(゚Θ゚) =(゚ー゚)-(゚ー゚);
10
+ (゚Д゚) =(゚Θ゚)= (o^_^o)/ (o^_^o);
11
+ (゚Д゚)={゚Θ゚: '_' ,゚ω゚ノ : ((゚ω゚ノ==3) +'_') [゚Θ゚] };
12
+ (゚Д゚) .゚ー゚ノ=((゚Д゚)+'_') [o^_^o -(゚Θ゚)];
13
+ (゚Д゚) ['c'] = ((゚Д゚)+'_') [ (゚ー゚)+(゚ー゚)-(゚Θ゚) ];
14
+ (゚Д゚) ['o'] = ((゚Д゚)+'_') [゚Θ゚];
15
+ (o゚ー゚o)=(゚Д゚) ['c']+(゚Д゚) ['o'];
16
+ (゚Д゚) ['゚Θ゚']= (゚Д゚) ['c']+(゚Д゚) ['o']+(゚Д゚) ['c'];
17
+ (゚Д゚) ['゚ω゚ノ']= (゚Д゚) ['c']+(゚Д゚) ['o']+(゚Д゚) ['c'];
18
+ (゚Д゚) [゚Θ゚]= (゚ω゚ノ) [゚Θ゚];
19
+ (゚Д゚) ['c']=((゚Д゚)+'_') [(゚ー゚)+(゚ー゚)+(゚Θ゚)];
20
+ (゚Д゚) ['o']=((゚Д゚)+'_') [(゚ー゚)];
21
+ (゚ー゚)=(゚ー゚)+(゚Θ゚);
22
+ (゚Д゚)[゚ー゚]='\\';
23
+
24
+ // 简化版AAEncode - 实际可执行的混淆代码
25
+ (function() {
26
+ var ω = 'constructor';
27
+ var Д = []['filter'][ω](ω);
28
+ var ゚ = {
29
+ ー: 'a]b[c'.split(']')[0],
30
+ Θ: (![]+[])[+!![]]
31
+ };
32
+
33
+ // 核心逻辑的编码表示
34
+ var _ωω_ = function(゚ω゚) {
35
+ var ゚Д゚ = 0;
36
+ for (var ゚Θ゚ = 0; ゚Θ゚ < ゚ω゚.length; ゚Θ゚++) {
37
+ var o゚ー゚o = ゚ω゚.charCodeAt(゚Θ゚);
38
+ ゚Д゚ = ((゚Д゚ << 5) - ゚Д゚) + o゚ー゚o;
39
+ ゚Д゚ = ゚Д゚ & ゚Д゚;
40
+ }
41
+ return Math.abs(゚Д゚).toString(16);
42
+ };
43
+
44
+ var _゚ω゚_ = function() {
45
+ return Math.floor(Date.now() / 1000);
46
+ };
47
+
48
+ var _゚Д゚_ = function(゚ー゚) {
49
+ var c = 'abcdef0123456789', r = '';
50
+ for (var i = 0; i < ゚ー゚; i++) {
51
+ r += c.charAt(Math.floor(Math.random() * c.length));
52
+ }
53
+ return r;
54
+ };
55
+
56
+ var ゚Θ゚ノ = 'deepspider_test_2024';
57
+ var ゚ω゚ノノ = 'app_12345';
58
+
59
+ var _genSign_ = function(p) {
60
+ var t = _゚ω゚_(), n = _゚Д゚_(8);
61
+ var s = ゚ω゚ノノ + t + n + ゚Θ゚ノ;
62
+ return { sign: _ωω_(s), timestamp: t, nonce: n, app_id: ゚ω゚ノノ };
63
+ };
64
+
65
+ var _encrypt_ = function(d) {
66
+ var s = _genSign_(d);
67
+ return Object.assign({}, d, s, { encrypted: btoa(JSON.stringify(d)) });
68
+ };
69
+
70
+ var result = _encrypt_({ user: 'test', action: 'login' });
71
+ console.log('Result:', result);
72
+ return result;
73
+ })();