AST实战|AST入门与实战星球高频问题汇总
一.t.isStringLiteral...中的t是什么变量?
答:早期的一些代码,我都是参考官方写的,但由于ob混淆在还原的时候,会用到eval函数,这样可能导致变量名污染,所以我在后面统一改成了 types
const types = require("@babel/types");
二.下面的代码中:
let {node,scope} = path;
代码中的{}是什么意思?
答:这是ES6的语法,是变量的解构赋值。
在之前,我们一般这么写:
-
let node = path.node;
-
let scope = path.scope;
但是在ES6语法中,我们可以简写为:
let {node,scope} = path;
具体知识参考这个链接:https://wangdoc.com/es6/destructuring.html
三.下面的代码中:
path.findParent(p => p.isConditionalExpression());
p是什么,哪里传来的?
答:问题的本质不是p,而是箭头函数。
箭头函数的详细介绍可以参考这篇文章:
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/arrow_functions
四.下面的代码中:
StringLiteral({node}) {...}
这个函数中{}是啥?
答: 和问题二是一样的,也是变量的解构赋值罢。
原本应该是
StringLiteral(path) {...}
而node是path的一个属性,因此可以这么简写:
StringLiteral({node})
你甚至还可以根据自己的需求写成:
StringLiteral({node,scope})
五.下面的代码中:
scope.traverse(scope.block, {...})
scope.traverse是什么,scope.block是什么?
答:scope.traverse 这个和 @babel/traverse 中的 traverse 用法是一样的,
scope.block表示当前scope的node,可以参见源代码:
node_modules\@babel\traverse\lib\scope\index.js
中对 Scope 的定义。
六.编写的插件报错该怎么定位和处理?
答:插件报错后,一般我会在插件的第一行打印报错的源代码:
console.log(path.toString());
观察当前源代码的特征,如果不符合所遍历的规则,可以进行return。
也可以进行判断,只处理需要处理的path。
七.为什么运行插件后报 "Maximum call stack size exceeded"的错误?该怎么处理?
答: 根据我的实践总结,绝大部分的情况,用了path.replacexxx函数,而替换前后的类型是一致的。
比如,你当前遍历的节点是 StringLiteral 类型,而你在path.replacexxx函数里的实参节点也是 StringLiteral 类型,这样就导致一直在访问这个插件,
最后提示 RangeError: Maximum call stack size exceeded。
一个简单的实例:
var s = "abc";
想要把"abc",变成"hello",也许会这么写插件:
-
const visitor = {
-
StringLiteral(path)
-
{
-
path.replaceWith(t.StringLiteral("hello"));
-
}
-
}
运行后就报错了。
建立一个 if-return 机制就可以解决这样的问题了。
八.JS逆向时找不到加密参数在哪里生成的怎么办?
答:
第一步:先全局搜索,搜不到转第二步;
第二步:抓包加密请求的URL,看看其 Initiator里面的 Request call stack,跟进去看看哪里打断点合适。还是不行转第三步;
第三步:看看有没有被混淆了的js,有的话先还原,如果没有转第四步;
第四步:看看能不能打XHR断点或者其他的断点,不能打转第五步;
第五步:hook,看看是否为全局变量,或者某些需要经过系统函数加密的,注意观察加密字符串的特征,md5:32位英数混合;所有的字符是否属于base64码表内.......如果hook不到转第六步;
第六步:网上搜一搜教程,大厂的东西肯定有教程的。
建议直接跳到第六步。
总结:
学习是一个观摩的过程,先看看别人怎么弄的,然后再自己实战。
学习嘛,先得学,别一上来就自己搞自己的,然后报错了各种问题打击自信心...一般官方文档都会有例子。
文章来源: blog.csdn.net,作者:悦来客栈的老板,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/qq523176585/article/details/119922831
- 点赞
- 收藏
- 关注作者
评论(0)