AST反混淆实战篇七|常量折叠
【摘要】
初看标题,你可能不知道 常量折叠 是什么意思,其实很简单,我把它理解为一个多元表达式合并为一个常量表达式,例如:
var a = 1 + 2 + 3 + 4;
等式右边是一个计算表达式,这样的表达式是可以直接计算出来的,可以替换成:
var&n...
初看标题,你可能不知道 常量折叠 是什么意思,其实很简单,我把它理解为一个多元表达式合并为一个常量表达式,例如:
var a = 1 + 2 + 3 + 4;
等式右边是一个计算表达式,这样的表达式是可以直接计算出来的,可以替换成:
var a = 10;
又如,经常可以看到混淆的js代码中包含如下表达式:
-
while(!![])
-
{
-
......
-
}
其实就是一个条件恒为真的循环:
-
while(true)
-
{
-
......
-
}
对于这样的常量计算,如果针对每个表达式都写个插件,那是不是太辛苦了?
不用担心,强大的babel库帮我们搞好了,只需要调用它的相关方法即可。
一.插件名称
常量折叠。
二.还原实例
还原前:
-
var a = !![],b = 'Hello ' + 'world' + '!',c = 2 + 3 * 50,d = Math.abs(-200) % 19,e = true ? 123:456;
-
-
-
-
还原后:
var a = true,b = "Hello world!",c = 152,d = 10,e = 123;
三.是否通用
是。
四.还原思路
可用于常量折叠的表达式基本上有下面这些,根据需求,可以同时遍历不同的表达式。
BinaryExpression、UnaryExpression、ConditionalExpression、CallExpression、MemberExpression、SequenceExpression
调用babel库的 evaluate 方法,注意判断返回值是否合理;
注意某些表达式的遍历会导致堆栈溢出,需要进行过滤;
五.插件源代码
星友们可以访问这里获取插件源代码:
https://t.zsxq.com/YvvVrjE
文章来源: blog.csdn.net,作者:悦来客栈的老板,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/qq523176585/article/details/120148240
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)