【AST 还原】四、还原 逗号表达式混淆 [ 编程杂谈 ]
大数据男孩 文章 正文
明妃
{{nature("2022-08-14 17:23:21")}}更新例子
// 还原前
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));
}
}
})
{{nature('2020-01-02 16:47:07')}} {{format('12641')}}人已阅读
{{nature('2019-12-11 20:43:10')}} {{format('9527')}}人已阅读
{{nature('2019-12-26 17:20:52')}} {{format('7573')}}人已阅读
{{nature('2019-12-26 16:03:55')}} {{format('5017')}}人已阅读
目录
标签云
一言
评论 0
{{userInfo.data?.nickname}}
{{userInfo.data?.email}}