xhs_ast/antiXHS1.js

61 lines
2.7 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");
const code = fs.readFileSync("XHS1.js", {encoding: "utf-8"});
const ast = parser.parse(code)
const visitor = {
VariableDeclarator(path) {
if (path.node.id.name === "_garp_d40c") {
arg = arg.arguments[0];
let _arrys = path.scope.getBinding(arg.name)
}
// let switchNode = path.node.body.body[0];
// // switch 语句内的控制流数组名,本例中是 _0x34e16a
// let arrayName = switchNode.discriminant.object.name;
// // 获取控制流数组绑定的节点
// let bindingArray = path.scope.getBinding(arrayName);
// // 获取节点整个表达式的参数、分割方法、分隔符
// let init = bindingArray.path.node.init;
// let object = init.callee.object.value;
// let property = init.callee.property.value;
// let argument = init.arguments[0].value;
// // 模拟执行 '3,4,0,5,1,2'['split'](',') 语句
// let array = object[property](argument)
// // 也可以直接取参数进行分割,方法不通用,比如分隔符换成 | 就不行了
// // let array = init.callee.object.value.split(',');
// // switch 语句内的控制流自增变量名,本例中是 _0x2eff02
// let autoIncrementName = switchNode.discriminant.property.argument.name;
// // 获取控制流自增变量名绑定的节点
// let bindingAutoIncrement = path.scope.getBinding(autoIncrementName);
// // 可选择的操作:删除控制流数组绑定的节点、自增变量名绑定的节点
// bindingArray.path.remove();
// bindingAutoIncrement.path.remove();
// // 储存正确顺序的控制流语句
// let replace = [];
// // 遍历控制流数组,按正确顺序取 case 内容
// array.forEach(index => {
// let consequent = switchNode.cases[index].consequent;
// // 如果最后一个节点是 continue 语句,则删除 ContinueStatement 节点
// if (types.isContinueStatement(consequent[consequent.length - 1])) {
// consequent.pop();
// }
// // concat 方法拼接多个数组,即正确顺序的 case 内容
// replace = replace.concat(consequent);
// }
// );
// // 替换整个 while 节点,两种方法都可以
// path.replaceWithMultiple(replace);
// // path.replaceInline(replace);
}
}
traverse(ast, visitor)
const result = generate(ast)
console.log(result.code)