关注它,不迷路。
本文章中所有内容仅供学习交流,不可用于任何商业用途和非法用途,否则后果自负,如有侵权,请联系作者立即删除!
1. 需求分析
在处理完ob混淆后,有时可以看到类似下面的代码段:
if ("abc" === "abc")
{
//do something;
}
else
{
//do something;
}
再通过强大的 path.evaluateTruthy方法,可以更加精简代码:
if (true)
{
//do something;
}
else
{
//do something;
}
这个时候,其实可以看出来它实际上会执行哪个语句块(在这里是if语句的代码)。
所以我们可以通过这个已知条件来进行处理。
2. 混淆代码
还原前:
if ("abc" === "abc")
{
code1;
}
else
{
code2;
}
还原后:
code1;
3. 思路
有些 if 语句块没有被 "{}" 括起来,为了统一,所以需要提前加上 "{}";
获取语句的 test 节点,使用 path.evaluateTruthy 来计算它的值;
注意,第二步计算出来的结果,一定要与true和false比较;
根据比较后的结果做相应的替换即可。
4. 插件源码
https://t.zsxq.com/076QiUGyP
思考题,如果是类似下面的判断:
if (location.host)
{
code1;
}
else
{
code2;
}
又该如何处理?
今天的文章就分享到这里,后续分享更多的技巧,敬请期待。
欢迎加入知识星球,学习更多AST和爬虫技巧。