关注它,不迷路。
本文章中所有内容仅供学习交流,不可用于任何商业用途和非法用途,否则后果自负,如有侵权,请联系作者立即删除!
1. 需求分析
我们在还原jsfuck代码时,代码量少的可以使用 常量折叠 插件来还原,但是对于大部分jsfuck代码来说,调用traverse 函数 时 直接报错:
尝试过看源代码解决该问题,但能力有限,跟下去后就不了了之了。因此,我们需要想个办法,来跳过这种报错,让它可以正常处理。
2. 思路详解
把jsfuck代码拿到 AST在线解析网站 进行解析,发现可以正常解析。
这时候,我想的是,它的 Transform 功能可以正常使用嘛?
浏览器环境:谷歌浏览器, 版本 114.0.5735.134(正式版本) (64 位)
1.点击 Transform 按钮,并选择 babelV7.
2.把jsfuck代码贴入到左边的第一个编辑器,然后把 常量折叠的插件 贴入到 左边的第二个编辑器,当然,需要按照它的方式进行修改:
export default function (babel) {
const { types: t } = babel;
return {
name: "ast-transform", // not required
visitor: {
"BinaryExpression|UnaryExpression"(path) {
if(path.isUnaryExpression({operator:"-"}) ||
path.isUnaryExpression({operator:"void"}))
{
return;
}
const {confident, value} = path.evaluate();
if (!confident)
return;
if (typeof value == 'number' && (!Number.isFinite(value))) {
return;
}
path.replaceWith(t.valueToNode(value));
}
}
};
}
这个时候,右边下面的编辑框还是报错:
没关系,我们 在
path.replaceWith(t.valueToNode(value));
下面加一行代码试试:
path.skip();
当我输入 path.s 后,右边的代码突然就正常了。
屡试不爽,我也不知道为啥。这个时候,我们拿右边的结果再进行反混淆,就不会报错啦。
最终还原后的jsfuck代码:
3. 代码源码:
所有的代码都在这里:
https://t.zsxq.com/10Pnlb59Q
已购买星球的的兄弟可以参考本文自行尝试。
今天的文章就分享到这里,后续分享更多的技巧,敬请期待。
欢迎加入知识星球,学习更多AST和爬虫技巧。