变量名还原
控制流平坦化
控制流平坦化(Control flow flattening)的基本思想主要是通过一个主分发器来控制程序基本块的执行流程:

其实简单来说,就是将所有的嵌套的条件判断转换成一个不断循环的while。
我们会用 @babel/parser来解析AST, @babel/traverse去遍历和修改AST。同时,还有 @babel/generator, @babel/types
我们可以用 astexplorer.net 在线地去解析JavaScript的AST,可以选择不同的JavaScript编译器。
例如要将下面的代码进行平坦化:
function a(){
function b(){
var bank = 234;
count = "Have Fun!";
for(var i=0;i<10;i++){
if(i%2==0){
console.log(count);
}
else{
continue;
}
}
}
var count = 100;
b();
}
var glob = 100;
a();
查看

我使用的是
const parser = require('@babel/parser');
const traverse = require('@babel/traverse).default;
const code = `
const hello = 'world';
console.log(hello);
`;
const ast = parser.parse(code);
traverse();
https://www.reveone.cn/article/99827d5d-4d4f-4a52-ae43-92e543ce46b3 https://bbs.kanxue.com/thread-266082.htm