控制流平坦化是代码混淆最常见的伎俩,有些控制流比较简单,没有条件语句,直接就给出了指向执行下一条语句的值。而有些有条件语句,就比较复杂,条件的真假,会导致走向不同的代码分支。想要还原并且通用,是件很困难的事。当然,本文不是解决这种困难的事,而是尽量将复杂的代码简单化。
一.插件名称
条件表达式的优化。
二.优化实例
优化前:
w = K?123:456;
优化后:
K ? w = 123 : w = 456;
三.是否通用
是。
四.还原思路
优化前后,代码变动不大,这里直接遍历ConditionalExpression,其父节点是一个AssignmentExpression,需要做判断,避免死循环
优化后的条件表达式,其consequent 和 alternate 都变成了 AssignmentExpression 类型,因此需要进行构造
再用父节点替换新构造的节点即可。
五.插件源码
https://t.zsxq.com/6qzjauf
AD:
欢迎加入我的个人星球,编写了很多有用的插件,只需要稍微有一点js基础即可,对爬虫工程师和前端工程师均有一定的帮助。