AST 解混淆 分析在线网址:
https://www.astexplorer.net/
下载解析库:
npm install @babel/core
const fs = require('fs') // 解析 const parser = require("@babel/parser") // 遍历 const traverse = require("@babel/traverse").default // 类型判断 const types = require("@babel/types") // 解完混淆后, 生成反混淆后的代码 const generator = require("@babel/generator").default // 读取被混淆的文件 let jsCode = fs.readFileSync("encode.js", {encoding: "utf-8"}); // 解析成 AST let ast = parser.parse(jsCode) // 编写插件 plugs = { BinaryExpression(path) { let {left, operator, right} = path.node; if(types.isLiteral(left) && operator === "+" && types.isLiteral(right)){ let newValue = left.value + right.value; // 创建新的节点 let newNode = types.NumericLiteral(newValue); // 替换原有节点 path.replaceWith(newNode) } } } // 遍历ast节点 traverse(ast, plugs) // 生成新代码 let {code} = generator(ast) console.log(code)