#node.js #babeljs #abstract-syntax-tree #traversal #deobfuscation
Вопрос:
Я пытаюсь создать AST с типами Babel и заменить это дерево телом функции ниже. В частности, я хочу удалить var G = 2
, создать AST, состоящий из циклов while и операторов if, а затем заменить цикл for этим новым AST. Я смог создать узел оператора if, используя t.ifStatement, но, похоже, не могу получить путь к этому узлу оператора if, который я планирую использовать для добавления дополнительных операторов с помощью функции path.insertAfter.
Я довольно новичок в Babel JS, поэтому, если есть лучший способ преобразовать исходный код в цель, пожалуйста, не стесняйтесь давать мне предложения.
Исходный Код
q8tt[48318] = (function() {
var G = 2;
for (; G !== 9; ) {
switch (G) {
case 1:
return globalThis;
break;
case 5:
var q;
try {
var N = 2;
for (; N !== 6; ) {
switch (N) {
case 9:
delete q['tEKup'];
var W = Object['prototype'];
delete W['bECIA'];
N = 6;
break;
case 3:
throw "";
N = 9;
break;
case 2:
Object['defineProperty'](Object['prototype'], 'bECIA', {
'get': function() {
var s = 2;
for (; s !== 1; ) {
switch (s) {
case 2:
return this;
break;
}
}
},
'configurable': true
});
q = bECIA;
N = 5;
break;
case 5:
q['tEKup'] = q;
N = 4;
break;
case 4:
N = typeof tEKup === 'undefined' ? 3 : 9;
break;
}
}
} catch (r) {
q = window;
}
return q;
break;
case 2:
G = typeof globalThis === 'object' ? 1 : 5;
break;
}
}
}
)();
Цель
q8tt[48318] = (function() {
if (typeof globalThis === 'object') {
return globalThis;
} else {
var q;
Object['defineProperty'](Object['prototype'], 'bECIA', {
'get': function() {
return this;
},
'configurable': true
});
q = bECIA;
q['tEKup'] = q;
if (typeof tEKup === 'undefined') {
q = window;
} else {
delete q['tEKup'];
var W = Object['prototype'];
delete W['bECIA'];
}
return q;
}
})