AST实战|AST入门与实战星球高频问题汇总(二)
关注它,不迷路。
本文章中所有内容仅供学习交流,不可用于任何商业用途和非法用途,否则后果自负,如有侵权,请联系作者立即删除!
一.下面的代码看不懂是啥意思,可以帮忙看看吗?
if (!callExpress.isCallExpression(callee:referPath.node))
{
//some code;
}
答:它是一个简写,相当于如下代码:
if (!callExpress.isCallExpression() || callExpress.node.callee != referPath.node))
{
//some code;
}
if语句里面的判断是这样的:
先判断callExpress是否为 CallExpression类型; 如果是的话,再判断 callExpress 的 callee 节点是否就是 referPath.node 节点。
二.一般情况下 要把 a.length 转换成 a["length"]吗?
答:是的,结构统一,才能更方便的编写核心插件,减少需要考虑的情况。花更少的时间编写更多的代码。而这些通用的结构化混淆代码的插件在星球里都有,直接拿来用即可。插件的运行有先后顺序,才能得到满意的效果。
当然,也看个人喜好,我更倾向于用 a["length"] 形式。目的只是为了结构统一,减少考虑的情况。
三.这个js文件只能在node里面运行 那岂不是我要解混淆要先补环境?答: 解混淆大部分情况下并不需要直接运行混淆的js文件,而是编写插件对这个js文件解混淆。混淆的js内容是通过库解析成了语法树,再对这棵树进行剪枝等操作。
AST是一门基础性学科,作为爬虫爱好者或者js逆向爱好者,应该先学AST再学补环境,因为它可以帮你减少补环境所花的时间,再就是方便你改写成其他语言调用。
目前我所遇到需要补环境再运行插件的只有函数调用需要,基本是非常少见。比如ob混淆,某验,某数,其函数调用都不需要补环境,node下直接运行字符串解密函数就能拿到结果。这也给做反爬的兄弟一个反爬点:尝试在解密函数里加入大量的环境检测。
四.蔡老板好, 晚上打扰下, 问个问题, 就是我看你的代码中直接用的path.isUnaryExpression, 但是这样的话ide没法自动补全, 用types.isUnaryExpression就有自动补全, 可以将isUnaryExpression自动补全, 是有什么特别的技巧可以让path有提示吗, 还是说就是手打的?答:我一直用UE (UltraEdit) 来编写AST插件,用cmder来运行js文件。因为插件的编写代码量一般很少上千行,真用不到IDE.
我基本都是对着在线解析网站进行插件的编写,它真的很棒,就像一张map一样,其所有的节点名称均可复制。而构造节点是types.xxx,判断节点是types.isxxx或者path.isxxx,对着在线解析网站复制就好。当然有些节点可能复制不了,这个时候,需要油猴插件帮助我们:
// ==UserScript==
// @name copyAstNode
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author xfan
// @match AST explorer
// @grant none
// ==/UserScript==
(function() {
document.body.contentEditable="true";
})();
今天的内容就介绍到这里,等下次攒够一波问题,再写文章,感谢阅读。
文章来源: blog.csdn.net,作者:悦来客栈的老板,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/qq523176585/article/details/125326087
- 点赞
- 收藏
- 关注作者
评论(0)