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,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
|
+
})();
|