const parser = require("@babel/parser"); const generate = require("@babel/generator").default const traverse = require("@babel/traverse").default const types = require('@babel/types'); const fs = require("fs"); code = ` var _arrays=decode_result; var p0=6,p1=0,p2=6,p3=1,p4=1,p5=decode_result,p6=_arrays; set__garp_b4088_0(call_get_res_from_func1(p0, p1) + call_get_res_from_func1(p2, p3), _garp_a2b0, _garp_a2b0, 0); p0=1,p1=0,p2=6,p3=2,p4=2,p5=decode_result,p6=_arrays; set__garp_b4088_0(call_get_res_from_func1(p0, p1) + call_get_res_from_func1(p2, p3), _garp_a2b0, _garp_a2b0, 0); p0=1,p1=0,p2=6,p3=3,p4=3,p5=decode_result,p6=_arrays; p0=2,p1=2,p2=6,p3=3,p4=3,p5=decode_result,p6=_arrays; set__garp_b4088_0(call_get_res_from_func1(p0, p1) + call_get_res_from_func1(p2, p3), _garp_a2b0, _garp_a2b0, 0); ` code = fs.readFileSync("XHS.js", {encoding: "utf-8"}); const ast = parser.parse(code) const visitor = { // 初始化时创建并维护每个变量的最后赋值节点 VariableDeclarator(path) { const varName = path.node.id.name; if (["p0", "p1", "p2", "p3", "p3", "p4", "p5", "p6"].includes(varName)){ path.scope.setData(varName, path.node.init); // 初始赋值 } }, AssignmentExpression(path) { const varName = path.node.left.name; if (["p0", "p1", "p2", "p3", "p3", "p4", "p5", "p6"].includes(varName) && path.scope.hasBinding(varName)) { path.scope.setData(varName, path.node.right); // 更新最后一次赋值的节点 } }, CallExpression(path) { path.node.arguments.forEach((arg, idx) => { if (types.isIdentifier(arg) && ["p0", "p1", "p2", "p3", "p3", "p4", "p5", "p6"].includes(arg.name)) { const binding = path.scope.getBinding(arg.name); if (binding) { const lastAssignmentPath = path.scope.getData(arg.name); if (lastAssignmentPath) { path.node.arguments[idx] = lastAssignmentPath; } } } }); } }; traverse(ast, visitor) const result = generate(ast) try { fs.writeFileSync('XHS2.js', result.code, 'utf8'); console.log('File has been written'); } catch (err) { console.error(err); }