VSCode中无加密规则,仅支持javascript-obfuscator混淆配置;必须启用controlFlowFlattening与controlFlowFlatteningThreshold:1、debugProtection,并合理设置stringArrayEncoding、reservedNames及sourceMap等选项,否则将导致运行报错或保护失效。

VSCode 里没有“加密规则”,只有混淆配置;所谓“加密”是误称,实际生效的是 javascript-obfuscator 的混淆选项,必须手动开启高阶项才能防住基础逆向。
controlFlowFlattening 必须开,否则 if/for 逻辑裸奔
默认关闭,不开就等于没保护。它把线性控制流打散成 switch + label + while(true) 套嵌结构,让静态分析工具(如 AST 解析器)无法还原原始分支逻辑。
- 只开
controlFlowFlattening: true不够,必须同时配controlFlowFlatteningThreshold: 1(最小阈值),否则小函数不扁平化 - 副作用:调试时堆栈完全不可读,
debugProtection要同步启用,否则断点会跳进无意义的 label 循环里 - 性能影响:执行速度下降约 15–25%,但对插件主流程(如 activation、command handler)影响有限
stringArrayEncoding 别用 base64,选 rc4 或 none
stringArrayEncoding: ["base64"] 是伪安全——字符串数组本身明文存在,base64 解码后立刻可见。真正有效的是 ["rc4"] 或 [](即全乱序+动态解密)。
-
rc4模式下,字符串存进数组前先用随机密钥 RC4 加密,运行时才解,静态提取失败 - 若代码含大量正则或模板字符串(如
`/api/${id}`),建议关掉stringArray,改用unicodeEscape防止插值被破坏 - 注意:
rc4依赖stringArray和rotateStringArray同时为true才生效
reservedNames 不填就可能让 fetch / console 失效
混淆器默认会重命名所有变量和函数,包括全局对象方法。一旦 fetch 变成 _0xabc123,而你代码里还写 fetch('/login'),运行就报 ReferenceError。
- 必须显式保留:
"reservedNames": ["fetch", "console", "localStorage", "JSON", "setTimeout"] - 如果用了 Axios 或自定义 request 封装,也要把封装函数名加进去,比如
"apiRequest" - Vue/React 项目额外保留
"Vue"、"React"、"useState"等,否则组件直接白屏
混淆后不验证 source map 和 XHR 就等于没做
很多人点了“Obfuscate”就以为完事,结果上线后接口全 404 或控制台疯狂报错——因为混淆动了模板字符串和 source map 引用。
- 检查 Network 面板里所有 Fetch URL:若出现
/api/${_0x456def[7]}这种,说明模板字符串被错误处理,得关stringArray或切到identifierNamesGenerator: "hexadecimal" - 确认没生成
.map文件,或已从发布包中删掉;sourceMap: false必须写死在配置里 - 在无扩展、无缓存的隐身窗口跑完整流程:登录 → 触发命令 → 查看状态栏图标 → 点击右键菜单 —— 任一环节报错都得回退配置
真正卡住人的从来不是怎么配,而是混淆器不会告诉你哪一行模板字符串崩了、哪个保留名漏写了、或者 debugProtection 和你的断点调试习惯冲突。每次改配置后,必须用真实用户路径过一遍,而不是只看输出文件是否“变乱了”。


















