要处理的目标源码:
!function (t, e) {
var $_CIEE = bVnHz.$_CT,
$_CIDV = ["$_CIHk"].concat($_CIEE),
$_CIF_ = $_CIDV[1];
$_CIDV.shift();
var $_CIGe = $_CIDV[0];
"use strict";
$_CIEE(74) == typeof module && $_CIEE(74) == typeof module[$_CIF_(20)] ? module[$_CIEE(20)] = t[$_CIF_(39)] ? e(t, !0) : function (t) {
var $_CIJt = bVnHz.$_CT,
$_CIIY = ["$_CJCv"].concat($_CIJt),
$_CJAB = $_CIIY[1];
$_CIIY.shift();
var $_CJBs = $_CIIY[0];
if (!t[$_CJAB(39)]) throw new Error($_CIJt(13));
return e(t);
} : e(t);
}
!function (t, e) {
var $_CIEE = bVnHz.$_CT,
$_CIDV = ["$_CIHk"].concat($_CIEE),
$_CIF_ = $_CIDV[1];
$_CIDV.shift();
var $_CIGe = $_CIDV[0];
"use strict";
$_CIEE(74) == typeof module && $_CIEE(74) == typeof module[$_CIF_(20)] ? module[$_CIEE(20)] = t[$_CIF_(39)] ? e(t, !0) : function (t) {
var $_CIJt = bVnHz.$_CT,
$_CIIY = ["$_CJCv"].concat($_CIJt),
$_CJAB = $_CIIY[1];
$_CIIY.shift();
var $_CJBs = $_CIIY[0];
if (!t[$_CJAB(39)]) throw new Error($_CIJt(13));
return e(t);
} : e(t);
}
function aa(){
};
主要目标把每个函数中第一句命名函数等于bVnHz.$_CT的,那么在该函数中把变量给统一换成一个函数名,并把每个函数划圈的部分节点给删除了。
const fs =require('fs');
//js转AST代码
const parser =require('@babel/parser');
//遍历ASR节点
const traverse =require('@babel/traverse').default;
//用来判断节点类型产生新的节点
const t =require('@babel/types');
//用来把AST转换成js代码
const generator =require('@babel/generator').default;
const jscode=fs.readFileSync("./testdemo1.js", {
encoding:"utf-8"
});
let names1="";
let names2="";
let ee=null;
let rr=null;
let tt=null;
const deceli={
CallExpression(path){
if(path.node.callee.type=="Identifier"){
if(path.node.callee.name==names1|path.node.callee.name==names2){
console.log("哈哈");
console.log(path.node.callee.name);
path.node.callee.name="sxplain";
}
}
}
};
const deceli1={
"VariableDeclaration|ExpressionStatement"(path){
if(path.node==ee|path.node==rr|path.node==tt){
path.remove();
};
}
};
const visitor = {
FunctionExpression(path){
if(path.node.body.body.length!=0){
if(path.node.body.body[0].type=="VariableDeclaration"&&path.node.body.body[0].declarations.length>1){
//console.log(path.node.body.body[0].declarations[0].init.object.name);
if(path.node.body.body[0].declarations[0].init.object.name=="bVnHz"){
names1=path.node.body.body[0].declarations[0].id.name;
names2=path.node.body.body[0].declarations[2].id.name;
//console.log(path.node.body.body[0].declarations[0].id.name);
//console.log(path.node.body.body[0].declarations[2].id.name);
path.traverse(deceli,names1,names2);
ee=path.node.body.body[0];
rr=path.node.body.body[1];
tt=path.node.body.body[2];
//console.log(ee);
path.traverse(deceli1,ee,rr,tt);
}
}
}
}
}
let ast=parser.parse(jscode);
traverse(ast,visitor);
let code =generator(ast).code;
fs.writeFile('./testfter.js',code,(err)=>{});