关注它,不迷路。
本文章中所有内容仅供学习交流,不可用于任何商业用途和非法用途,否则后果自负,如有侵权,请联系作者立即删除!
1.问题
很多时候,我们执行了AST反混淆插件,但是代码和没有执行前是一样的。
加了打印函数(console.log),发现特征被过滤了,但是特征明明是符合的,问题出在哪里?
2.解决
上面的这种情况一般是 scope 没有被重构导致的,以前我的建议是在使用了 scope 的插件最后一行加一句代码:
scope.crawl();
但是在实际操作过程中,发现加了这个,代码运行比较缓慢,并且也起不到作用。
所以,我后面又想了个另外的办法,重新解析一下ast,即在插件代码前加一行代码:
ast = parser.parse(generator(ast).code);
这行代码可以解决大部分情况。
但是它并非完美,也有不能解决的情况。
后来,我又想了招,既然重新解析都不行,那生成文件后再解析,应该没有任何问题了吧:
let { code } = generator(ast);
files.writeFileSync("./Temp.js", code, (err)=>{});
const {execSync} = require('child_process');
execSync('node ./main.js ./Temp.js ./decode_ok', (error,stdout,stderr)=>{
if (error) {
console.error(`执行的错误: ${error}`);
return;
}
}
);
files.unlink('./Temp.js', (err)=>{
if (err) {
return;
}});
上面的代码是将代码保存为 Temp.js 文件,然后再执行一次 main.js,进行反混淆处理,执行完毕后,删除 Temp.js 文件即可。
这样就能完美解决插件不起作用的问题了。
今天的分享就到这里,感谢阅读。
欢迎加入知识星球,学习更多AST和爬虫技巧。