跳过正文
  1. 文章/

基于 AST 抽象语法树的 JavaScript 混淆代码自动还原实践

GeekDeveloper
作者
GeekDeveloper
深潜于二进制世界的逆向工程师,精通 Python 自动化架构与高并发数据采集。热衷于底层安全研究与逆向插桩,致力于通过代码构建稳定、高效且安全的自动化系统。
目录

这里是 WebJS 逆向演示文章的正文。

一、 JavaScript 混淆背景
#

现代 Web 应用的安全防护普遍依赖于前端混淆,例如常见的 Obfuscator 混淆。要分析其核心加密参数的生成逻辑,必须先剥离多层嵌套混淆。

二、 什么是 AST
#

AST (Abstract Syntax Tree, 抽象语法树) 是源代码语法结构的一种抽象表示。在 Node.js 环境中,我们可以使用 Babel 提供的解析器、遍历器和生成器,安全高效地重构代码。

三、 自动化还原混淆实战
#

3.1 字符串解密还原
#

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
// 使用 Babel 对 OB 混淆中的大数组还原
const parser = require("@babel/parser");
const traverse = require("@babel/traverse").default;
const generator = require("@babel/generator").default;

const code = `var _0xabc = ['data', 'log']; console.log(_0xabc[0]);`;
const ast = parser.parse(code);

traverse(ast, {
    MemberExpression(path) {
        // 自动替换数组成员为字面量
    }
});

3.2 控制流平坦化还原
#

控制流平坦化通过 switch-case 结构打乱了原有的顺序执行逻辑,通过 AST 我们可以重构其基本的程序控制块(Basic Block)依赖。

四、 结论
#

基于 AST 的静态解密,极大地提高了对高强度前端混淆代码的逆向分析效率,是现代 Web 爬虫和协议安全研究人员的必备技能。