-
-
[原创] Babel 太慢?OXC,SWC 学习成本太高,试一试go-fAST.
-
发表于: 2026-1-24 00:58 744
-
前言:
作为高强度discord 冲浪者,我在SneakerDevelopment 服务器发现了一个新玩意go-fAST,它是babel 的替代品而且更快,或许大部分国内的爬虫工程师们觉得babel 的速度不是太大的问题,如果你只是让babel帮助你静态解析scripts那已经很足够了,但应对海外的一些动态anti-bot系统的抢购bot 来说,它们需要hyper solution。于是bot开发者选择了OXC、SWC 这样的编译器,这些框架都是基于Rust,所以你的visitor 也的rust,rust的学习成本你懂的。但是现在go-fAST 可以解决的你顾虑。它使用了goja的解析器,设计思想源于SWC,废话少说,接下来我通过一个非常简单Deobfuscator展示一下。(关于上诉框架的benchmark 我忘记在哪儿了)
分析混淆
准备好受害者的script。这份script 来自海外的一家搜索引擎公司 .
字符混淆方式分析
原始代码部分:

混淆逻辑分析
它的混淆逻辑非常简单,我们使用上图第二行代码作为例子:

Kn 和 zn 是保存输入的表,注意Un 和 Gn 它们函数的内部只是返回了一个三元表达式,所以它不会返回后面的表。Mn 把两个输入还原成原始值
3. 编写deobfuscator.go
3.1 安装go-fAST
go get github.com/t14raptor/go-fast
3.2 注意:
3.2.1. go-fAST 不支持parent, sibling, reference, maps 它的风格非常像SWC。你需要创建类似下面的结构体,然后实现相应的接口.


3.2.2. 需要手动迭代子节点

3.3 deobfuscator 逻辑
3.3.1 首先根据特征找到所有表,保存到DeobStrMap:

3.3.2 根据特征找到所有deobfuscator的函数名称,这样我们可以根据名称找到被引用的混淆

3.3.3 使用golang 复写一个Deob函数
3.3.4 找到所有的需要解混淆的expression,执行DeobString并且将结果替换原节点,这里需要注意跟babel不一样,你不可以直接将节点替换,也不可以是通过函数获取 parent节点然后替换,假如在babel中直接迭代CallExpression 然后根据特征匹配到以后可以直接replaceWith 换成StringLiteral, 但这里选择了在迭代了Expression 然后匹配。
4. 最后效果

5. 链接:
5.1 本项目地址
5.2 go-fAST 项目地址
5.3 go-fAST 文档
