xhs_ast/anti.js

57 lines
2.2 KiB
JavaScript
Raw Permalink Normal View History

2024-05-23 13:38:45 +00:00
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);
}