JS代码混淆详细流程(1)

JS代码混淆详细流程之AST

AST语法树分析

构建 JavaScript 抽象语法树(Abstract Syntax Tree,AST)是将 JavaScript 代码解析成一种更易于分析和处理的树状结构的过程。以下是构建 JavaScript AST 的详细步骤:

1. **词法分析(Lexical Analysis)**:
   - 将输入的 JavaScript 代码字符串分解成一个个的词法单元(Token),如标识符、关键字、操作符等。
   - 去掉无关的空格、注释等。

2. **语法分析(Syntax Analysis)**:
   - 使用语法规则将词法单元组合成语法结构,形成语法树。
   - 根据 JavaScript 语言规范,将词法单元组合成语法结构,识别出各种语法元素,如变量声明、函数定义、表达式等。

3. **抽象语法树构建(Abstract Syntax Tree Construction)**:
   - 遍历语法树节点,创建一个抽象的树状结构,表示 JavaScript 代码的语法结构。
   - 每个节点代表一个语法单元,如变量声明、函数声明、赋值表达式等,节点之间相互关联,形成树形结构。

4. **遍历和分析语法树**:
   - 对构建好的 AST 进行遍历分析,可以进行静态分析、优化或代码转换等操作。
   - 遍历可以采用深度优先或广度优先的算法,访问每个节点并对节点进行操作或处理。


   - 可以根据需要进行代码优化、转换以及添加新的语法等操作。

总结来说,构建 JavaScript AST 的过程主要包括词法分析、语法分析、抽象语法树构建、遍历分析和生成代码等步骤。构建 AST 可以帮助开发者更好地理解和处理 JavaScript 代码,实现静态分析、代码转换、优化等功能。

语法节点类型

在 JavaScript 的抽象语法树(AST)中,通常会包含多种不同类型的节点,每种节点代表着 JavaScript 代码中的不同语法结构。以下是一些常见的 JavaScript AST 节点类型:

1. **Program**:代表整个 JavaScript 程序,是 AST 的根节点。

2. **FunctionDeclaration**:代表函数声明。

3. **FunctionExpression**:代表函数表达式。

4. **VariableDeclaration**:代表变量声明。

5. **Identifier**:代表标识符,如变量名、函数名等。

6. **Literal**:代表字面量,如数字、字符串等。

7. **BinaryExpression**:代表二元表达式,如加法、减法等。

8. **UnaryExpression**:代表一元表达式,如取反、递增等。

9. **AssignmentExpression**:代表赋值表达式。

10. **ConditionalExpression**:代表条件表达式(三元运算符)。

11. **CallExpression**:代表函数调用表达式。

12. **MemberExpression**:代表成员表达式,如对象属性访问。

13. **ObjectExpression**:代表对象字面量。

14. **ArrayExpression**:代表数组字面量。

15. **BlockStatement**:代表代码块。

16. **IfStatement**:代表条件语句(if语句)。

17. **ForStatement**:代表for循环语句。

18. **WhileStatement**:代表while循环语句。

19. **ReturnStatement**:代表返回语句。

20. **TryStatement**:代表try-catch语句。

这些语法类型是ECMASCRIPT语法规则的基本单元,后续章节介绍语法树的变换操作都是对这些语句进行修改,然后组装成新的混淆后的语句

常见的 JavaScript 语法树分析引擎包括以下几个:

1. **Babel**:Babel 是一个广泛使用的 JavaScript 编译器,可以将现代 JavaScript 代码转换成向后兼容的代码。它使用了 Acorn 作为 JavaScript 解析器,并将解析后的代码转换成 AST 进行分析和转换。

2. **Esprima**:Esprima 是一个独立的、快速的 ECMAScript 解析器,用于将 JavaScript 代码解析成 AST,方便进行静态分析、代码转换等操作。Esprima 是一个流行的工具,被广泛用于 JavaScript AST 的构建。

3. **Esprima-FB**:Esprima-FB 是 Facebook 提供的修改版 Esprima 解析器,针对一些特定需求进行了优化和改进。它通常用于 Facebook 的一些开源工具和项目中。

4. **Acorn**:Acorn 是一个小巧、快速的 JavaScript 解析器,可将 JavaScript 代码解析成 AST。它被广泛用于构建 JavaScript AST,支持 ECMAScript 最新的标准,并提供了一些可选插件和选项。

5. **ESTree**:ESTree 定义了一个统一的 JavaScript AST 的规范,包括了节点类型、属性等内容,旨在使不同的 JavaScript AST 工具具备更好的兼容性。许多 JavaScript AST 工具都符合 ESTree 的规范,以便于不同工具之间的互操作性。

有了这些引擎,我们想做自己的代码混淆工具就简单的多了。关注我,后续介绍如何进行AST语法转换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值