VSCode无法直接还原混淆JS,需用JavaScript Booster、JS-CSS-HTML Formatter插件美化,或Terser命令行工具配合--format beautify参数实现结构还原;变量名等无法恢复。

VSCode 打开 JS 文件显示为单行、结构全乱,基本可以断定是遇到了压缩/混淆后的代码(比如 var _0x123=["a","b"];function _0x456(){return _0x123[0];}),而不是编辑器本身出错。VSCode 默认不解析、不反混淆,它只做语法合规的格式化;所谓“还原”,本质是美化(beautify)——加缩进、换行、空格,让控制流可读,但变量名、字符串数组映射、eval 内容等无法恢复。
为什么 VSCode 默认打不开 .min.js 或单行 JS?
VSCode 把 .min.js 文件归类为“已压缩文件”,直接禁用语法高亮、跳转、格式化和 IntelliSense。右下角语言模式常显示为 Plain Text 或 JavaScript (Minified),此时 Shift+Alt+F 会静默失败或报 “No formatter installed for 'plaintext'”。
- 必须在
settings.json中显式声明:"files.associations": {"*.min.js": "javascript"} - 改完后重新打开文件,再点击右下角语言标识 → 选
JavaScript(手动确认,别依赖自动识别) - 若仍无效,检查是否有
"search.exclude": {"**/*.min.js": true}这类全局排除规则干扰了文件加载
怎么用 Prettier 美化混淆 JS?注意 parser 和容错配置
直接对混淆代码运行 Prettier 常报错,例如 Unexpected token '.' 或 Invalid left-hand side in assignment,因为混淆器生成的非标语法(如 _0x123[0] 当作变量名、逗号表达式链)超出了默认 espree 解析器的能力。
- 在项目根目录建
.prettierrc,强制使用更宽松的解析器:{"parser": "babel"} - 若仍有报错,临时关闭易冲突项:
{"semi": false, "bracketSpacing": false} - 别依赖
formatOnSave:混淆文件一般只处理一次,手动选中全部 →Shift+Alt+F更可控 - 若命令面板里
Format Document As → JavaScript可用,说明语言模式已对,但默认格式化器没绑定好
批量处理或需要更高还原度?用 Terser 命令行
当你要处理多个文件、或 Prettier 美化后仍逻辑难读(比如大量 if(a)b();else c(); 被压成 a&&b()||c()),Terser 的静态美化更可靠,且能还原部分压缩结构。
- 安装:
npm install -g terser - 执行:
terser obfuscated.js --mangle false --compress false --format beautify -o pretty.js -
--mangle false防止重命名(虽然变量名还是乱的,但至少不进一步恶化) -
--compress false是关键:否则x&&y()可能被强行转回if(x)y(),但前提是原始压缩没开启该选项 - Terser 不执行代码,也不解
eval("...")或动态 key(如window["f"+"unc"]()),仅做 AST 层静态重排
别碰 sourcemap,除非你本来就有
有人搜 “VSCode sourcemap 还原混淆 JS”,这是典型误区。sourceMappingURL 注释只是构建时生成的映射线索,它不包含原始变量名、注释或函数语义——没有配套的 .map 文件,就等于没有。强行用工具“猜” sourcemap 或注入虚假路径,只会浪费时间。真正要分析混淆逻辑,得靠调试器动态执行 + AST Viewer 静态看结构,重点先定位入口函数、网络请求点、加密调用链这些锚点。











