AST反混淆实战篇二十六|条件表达式的优化

举报
悦来客栈的老板 发表于 2021/10/27 23:13:34 2021/10/27
【摘要】 控制流平坦化是代码混淆最常见的伎俩,有些控制流比较简单,没有条件语句,直接就给出了指向执行下一条语句的值。而有些有条件语句,就比较复杂,条件的真假,会导致走向不同的代码分支。想要还原并且通用,是件很困难的事。当然,本文不是解决这种困难的事,而是尽量将复杂的代码简单化。 一.插件名称 条件表达式的优化。 二.优化实例 优化前...

控制流平坦化是代码混淆最常见的伎俩,有些控制流比较简单,没有条件语句,直接就给出了指向执行下一条语句的值。而有些有条件语句,就比较复杂,条件的真假,会导致走向不同的代码分支。想要还原并且通用,是件很困难的事。当然,本文不是解决这种困难的事,而是尽量将复杂的代码简单化。

一.插件名称

条件表达式的优化。

二.优化实例

优化前:

w = K?123:456;
  

优化后:

K ? w = 123 : w = 456;
  

三.是否通用

是。

四.还原思路

  • 优化前后,代码变动不大,这里直接遍历ConditionalExpression,其父节点是一个AssignmentExpression,需要做判断,避免死循环

  • 优化后的条件表达式,其consequent 和 alternate 都变成了 AssignmentExpression 类型,因此需要进行构造

  • 再用父节点替换新构造的节点即可。

五.插件源码

https://t.zsxq.com/6qzjauf
  

AD:

欢迎加入我的个人星球,编写了很多有用的插件,只需要稍微有一点js基础即可,对爬虫工程师和前端工程师均有一定的帮助。

03a500f7c9c86ff40820a8a11bfe6ac5.png

文章来源: blog.csdn.net,作者:悦来客栈的老板,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/qq523176585/article/details/120984813

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。