57 lines
2.2 KiB
JavaScript
57 lines
2.2 KiB
JavaScript
|
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);
|
||
|
}
|