AST 语法树

博客介绍了Babel的安装,通过npm install --save-dev @babel/core @babel/cli @babel/preset-env命令可完成。还给出了Babel插件指南、使用示例及手册等资源。此外,提及JavaScript混淆与逆向中AST节点类型名词基础,以及利用AST技术还原混淆代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



Babel 中文文档 | Babel中文网 · Babel 中文文档 | Babel中文网 (babeljs.cn)

创建一个文件夹  安装

 npm install --save-dev @babel/core @babel/cli @babel/preset-env

解释:Babel插件指南_gcc_front的博客-优快云博客

示例:babel 插件的使用 - 简书 (jianshu.com)

手册:babel-handbook/translations/zh-Hans/README.md at master · jamiebuilds/babel-handbook · GitHub

名词解释: JavaScript 混淆与逆向必读之 AST 节点类型名词基础-优快云博客

序号类型原名称中文名称描述
1Program程序主体整段代码的主体
2VariableDeclaration变量声明声明一个变量,例如 var let const
3FunctionDeclaration函数声明声明一个函数,例如 function
4ExpressionStatement表达式语句通常是调用一个函数,例如 console.log()
5BlockStatement块语句包裹在 {} 块内的代码,例如 if (condition){var a = 1;}
6BreakStatement中断语句通常指 break
7ContinueStatement持续语句通常指 continue
8ReturnStatement返回语句通常指 return
9SwitchStatementSwitch 语句通常指 Switch Case 语句中的 Switch
10IfStatementIf 控制流语句控制流语句,通常指 if(condition){}else{}
11Identifier标识符标识,例如声明变量时 var identi = 5 中的 identi
12CallExpression调用表达式通常指调用一个函数,例如 console.log()
13BinaryExpression二进制表达式通常指运算,例如 1+2
14MemberExpression成员表达式通常指调用对象的成员,例如 console 对象的 log 成员
15ArrayExpression数组表达式通常指一个数组,例如 [1, 3, 5]
16NewExpressionNew 表达式通常指使用 New 关键词
17AssignmentExpression赋值表达式通常指将函数的返回值赋值给变量
18UpdateExpression更新表达式通常指更新成员值,例如 i++
19Literal字面量通常指字符串型的字面量
20BooleanLiteral布尔型字面量布尔值,例如 true false
21NumericLiteral数字型字面量数字,例如 100
22StringLiteral字符型字面量字符串,例如 vansenb
23SwitchCaseCase 语句通常指 Switch 语句中的 Case

爬虫 JavaScript 逆向进阶!利用 AST 技术还原混淆代码_VIP_CQCRE的博客-优快云博客

### AST语法树前端开发中的应用 #### 使用方法 抽象语法树AST)是源代码的抽象语法结构的一种树状表示形式[^3]。这种表示方式使得开发者可以更加直观地理解程序逻辑,并且便于自动化工具处理代码。 对于前端开发而言,构建AST的过程通常分为两个阶段:首先是词法分析,即将输入的字符序列分解为有意义的标记;其次是语法分析,在此期间会依据编程语言定义的一组规则来组合这些标记形成一棵树形的数据结构——即抽象语法树[^1]。 一旦获得了AST之后,就可以利用它来进行多种操作: - **静态分析**:检查潜在错误或不符合编码标准的地方而不需执行实际运行时环境下的测试; - **性能优化**:识别冗余计算或者低效算法模式并给出改进建议; - **自动重构**:安全地修改现有代码而不会改变其行为特性; - **代码转换**:将一种版本的语言特征迁移到另一种较新/旧的标准上。 #### 工具支持 为了方便地创建和操纵JavaScriptAST,社区提供了多个强大的库: - `Esprima`用于生成基于ECMAScript标准的精确语法树实例[^2]。 ```javascript const esprima = require('esprima'); let code = 'var answer = 42;'; let syntaxTree = esprima.parseScript(code); console.log(JSON.stringify(syntaxTree, null, 4)); ``` - `Estraverse`允许遍历整个AST节点集合并对特定类型的节点实施自定义变换逻辑。 ```javascript const estraverse = require('estraverse'); // 假设已经有一个名为syntaxTree的对象作为入口参数传入... estraverse.replace(syntaxTree, { enter(node){ if (node.type === 'Literal') node.value *= 2; } }); ``` - `Escodegen`可以从给定的AST重新生成可读性强的人类友好型源码字符串。 ```javascript const escodegen = require('escodegen'); // 继续沿用之前经过改造后的syntaxTree变量... let regeneratedCode = escodegen.generate(syntaxTree); console.log(regeneratedCode); // 输出更新过的内容 ``` 以上三个库共同构成了完整的解决方案链路,让开发者能够在不同层次上高效地管理和维护复杂的Web应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值