例子
// 还原前 var a, b, c; a = 2, b = 3, c = a + b; // 还原后 var a, b, c; a = 2; b = 3; c = a + b;
思路
获取
SequenceExpression
节点,获取其中expressions
属性,遍历生成 生成ExpressionStatement
节点,再整体替换
是否通用:是
// 逗号 表达式 还原 a = 2, b = 3, c = a + b; traverse(ast, { SequenceExpression: { exit(path) { let expressions = path.node.expressions; let finalexpression = expressions.pop(); // 获取最后一个,替换 当前节点 let statement = path.getStatementParent(); // 向上遍历 找到 父节点 expressions.map((v) => { statement.insertBefore(type.ExpressionStatement(v)) }); path.replaceInline( // type.ExpressionStatement(finalexpression)); } } })
版权声明:《 【AST 还原】四、还原 逗号表达式混淆 》为明妃原创文章,转载请注明出处!
最后编辑:2022-4-22 11:04:49