AST实战|AST入门与实战星球高频问题汇总(二)

举报
悦来客栈的老板 发表于 2022/06/17 22:10:54 2022/06/17
【摘要】 关注它,不迷路。 本文章中所有内容仅供学习交流,不可用于任何商业用途和非法用途,否则后果自负,如有侵权,请联系作者立即删除! 一.下面的代码看不懂是啥意思,可以帮忙看看吗? if (!callExpress.isCallExpression(callee:referPath.node)) { //some code; } ...

关注它,不迷路。

  • 本文章中所有内容仅供学习交流,不可用于任何商业用途和非法用途,否则后果自负,如有侵权,请联系作者立即删除!

一.下面的代码看不懂是啥意思,可以帮忙看看吗?

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下直接运行字符串解密函数就能拿到结果。这也给做反爬的兄弟一个反爬点:尝试在解密函数里加入大量的环境检测。

四.蔡老板好, 晚上打扰下, 问个问题4d26b1731a8f777e17b24dcb0b958f03.png, 就是我看你的代码中直接用的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

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200