概述:AST 抽象语法树 实战 入门 案例 js逆向 js滑块 js加密 极验 瑞数 阿里滑块 5秒盾
引言:
AST算得上是高端技能。如果把爬虫技能分为初中高三个阶段的话。常规的JS逆向找找参数,扣扣代码只能属于中级技能,而通过使用AST先对目标代码进行修复,最终转化为方便我们调试的代码,则属于高级技能。
其实AST也没有想象的那么难,懂得了基本原理,然后多练习,多思考,就可以了。
该系列文章将会循序渐进、深入浅出的给大家分享AST的知识和我学习AST的心路历程。希望大家跟着文章一点一点的去了解,去掌握。这东西我都能学会,那么你也肯定能学会!
废话不多说,我们直接开始吧~~
效果展示:
概要:
说白了就是把if...else...语句中的大括号去掉,单纯的看这个示例可能大家觉得没啥用处,但是其实这是一套复杂混淆中的一步。这个操作作为一种元操作。
转换前:
if(a){
a = 9
}else{
b =9
}
转换后:
if (a) a = 9;else b = 9;
思路分析:
如果consequent,alternate中只有一条语句的话,是可以不加大括号的,直接将consequent和alternate的body中的元素提取出来
插件代码:
const visitor = {
IfStatement(path){
let {test, consequent, alternate} = path.node;
if(types.isBlockStatement(consequent) && consequent.body.length == 1){
path.node.consequent = consequent.body[0]
}
if(types.isBlockStatement(alternate) && alternate.body.length == 1){
path.node.alternate = alternate.body[0]
}
}
}
HISTORY/往期推荐
分享爬虫进阶知识,包括但不限于JS逆向,Android逆向,知名爬虫工具源码分析等