首页
社区
课程
招聘
[原创] Babel 太慢?OXC,SWC 学习成本太高,试一试go-fAST.
发表于: 2026-1-24 00:58 744

[原创] Babel 太慢?OXC,SWC 学习成本太高,试一试go-fAST.

2026-1-24 00:58
744


  1. 前言:

    作为高强度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 我忘记在哪儿了


  2. 分析混淆

    1. 准备好受害者的script。这份script 来自海外的一家搜索引擎公司 .

    2. 字符混淆方式分析

      1. 原始代码部分:

      2. 混淆逻辑分析

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

        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 文档   

          5.4 go-fAST explorer tool

                    


[培训]Windows内核深度攻防:从Hook技术到Rootkit实战!

收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回