AST反混淆实战篇二十六|条件表达式的优化
【摘要】
控制流平坦化是代码混淆最常见的伎俩,有些控制流比较简单,没有条件语句,直接就给出了指向执行下一条语句的值。而有些有条件语句,就比较复杂,条件的真假,会导致走向不同的代码分支。想要还原并且通用,是件很困难的事。当然,本文不是解决这种困难的事,而是尽量将复杂的代码简单化。
一.插件名称
条件表达式的优化。
二.优化实例
优化前...
控制流平坦化是代码混淆最常见的伎俩,有些控制流比较简单,没有条件语句,直接就给出了指向执行下一条语句的值。而有些有条件语句,就比较复杂,条件的真假,会导致走向不同的代码分支。想要还原并且通用,是件很困难的事。当然,本文不是解决这种困难的事,而是尽量将复杂的代码简单化。
一.插件名称
条件表达式的优化。
二.优化实例
优化前:
w = K?123:456;
优化后:
K ? w = 123 : w = 456;
三.是否通用
是。
四.还原思路
优化前后,代码变动不大,这里直接遍历ConditionalExpression,其父节点是一个AssignmentExpression,需要做判断,避免死循环
优化后的条件表达式,其consequent 和 alternate 都变成了 AssignmentExpression 类型,因此需要进行构造
再用父节点替换新构造的节点即可。
五.插件源码
https://t.zsxq.com/6qzjauf
AD:
欢迎加入我的个人星球,编写了很多有用的插件,只需要稍微有一点js基础即可,对爬虫工程师和前端工程师均有一定的帮助。
文章来源: blog.csdn.net,作者:悦来客栈的老板,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/qq523176585/article/details/120984813
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)