位置: IT常识 - 正文

深入学习 JavaScript 转译器 Babel ,AST还原混淆代码(java deep learning)

编辑:rootadmin
深入学习 JavaScript 转译器 Babel ,AST还原混淆代码 这里写目录标题介绍JavaScript 和 Babel 简介Babel 的历史和发展Babel 的优势和应用场景Babel 的原理和工作流程安装babel模块@babel/parser解析代码解析选项@babel/traversepath对象scope属性bindings对象@babel/generator@babel/types节点类型节点创建节点判断js代码常见混淆方式还原前还原后还原插件介绍JavaScript 和 Babel 简介

推荐整理分享深入学习 JavaScript 转译器 Babel ,AST还原混淆代码(java deep learning),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:深入理解java nio,深入理解java nio,深入理解java nio,深入理解java nio,深入学习习总书记系列讲话精神,深入理解java,深入理解java,深入学习习总书记系列讲话精神,内容如对您有帮助,希望把文章链接给更多的朋友!

JavaScript 是一种广泛应用于 Web 开发的脚本语言,它最初是由网景公司的 Brendan Eich 开发的。JavaScript 具有易学易用、灵活、动态等特点,它能够帮助开发者在 Web 应用中实现丰富的交互和动态效果。

然而,由于 JavaScript 的语法和特性不断更新,旧版的浏览器和环境可能无法完全支持新的 JavaScript 特性,这就使得开发者在编写 JavaScript 代码时需要考虑兼容性问题。为了解决这个问题,Babel 应运而生。

Babel 是一个 JavaScript 编译器,它可以将最新版本的 JavaScript 代码转换成向下兼容的代码,以便旧版的浏览器和环境可以运行。Babel 的转译过程是基于 AST(抽象语法树)的,它可以通过分析 AST 来理解源代码的结构和含义,然后进行相应的转换。

Babel 的使用非常灵活,可以通过命令行、Webpack、Rollup 等多种方式来集成到项目中。开发者可以根据自己的需求来配置 Babel,选择需要的插件和预设,从而实现对不同版本的 JavaScript 代码的转译。同时,Babel 还提供了许多插件和预设,可以实现更加复杂的转译和扩展功能,例如转译 JSX、ES6 模块化、装饰器等。

总之,Babel 是一个非常重要的 JavaScript 工具,它可以帮助开发者更加轻松地编写和维护兼容性更好的 JavaScript 代码,同时也为 JavaScript 社区的发展做出了重要贡献。

Babel 的历史和发展

Babel 诞生于 2014 年,最初的名字是 6to5,它的初衷是为了解决 JavaScript 新特性向下兼容的问题。当时,ES6 标准已经发布,但是很多浏览器和环境并不支持 ES6,这就使得开发者无法充分利用新特性。

6to5 利用了新的 JavaScript 特性,如箭头函数、模板字符串等,将其转换为旧的 ES5 代码,以便兼容性更广的浏览器和环境也能够运行。6to5 很快获得了广泛的关注和认可,它的开发者们决定将其更名为 Babel,并将其转变为一个更加通用的 JavaScript 编译器。

随着时间的推移,Babel 逐渐发展成为一个功能强大、灵活易用的 JavaScript 工具。除了对新特性的转译,Babel 还可以处理 TypeScript、Flow、JSX 等不同的 JavaScript 方言。同时,Babel 的插件系统也逐渐完善,开发者们可以自己编写插件来定制转译过程,或者使用现成的插件来实现更加复杂的功能。

2015 年,Babel 正式发布了 6.0 版本,这个版本带来了很多重要的变化,其中最显著的是支持了 ES6 的新语法和特性,这使得开发者可以更加方便地使用 ES6 来编写 JavaScript 代码。此后,Babel 还不断更新迭代,推出了支持 ES7、ES8 等新版本的 JavaScript 标准的转译,并增加了对一些实验性的 JavaScript 特性的支持。

目前,Babel 已经成为了 JavaScript 社区中最流行、最重要的工具之一,它对 JavaScript 的发展和演进做出了重要贡献。

Babel 的优势和应用场景

帮助解决兼容性问题:Babel 可以将最新版本的 JavaScript 代码转换为向下兼容的代码,以便旧版的浏览器和环境可以运行。这就帮助开发者解决了兼容性问题,使得开发者可以更加放心地使用最新的 JavaScript 特性来编写代码。

提高开发效率:Babel 可以自动化地将新版本的 JavaScript 代码转换为向下兼容的代码,使得开发者可以更加专注于编写高质量的代码,而不需要考虑兼容性问题。这就大大提高了开发效率。

支持多种 JavaScript 方言:除了处理标准的 JavaScript 代码,Babel 还可以处理 TypeScript、Flow、JSX 等不同的 JavaScript 方言。这就使得 Babel 成为了一个通用的 JavaScript 工具,能够应对各种不同的应用场景。

插件系统功能强大:Babel 的插件系统非常灵活,可以自定义转译规则,也可以添加新的语法和特性。这就使得开发者可以根据自己的需求来配置 Babel,选择需要的插件和预设,实现对不同版本的 JavaScript 代码的转译。

基于以上优势,Babel 的应用场景非常广泛,下面列举几个典型的应用场景:

在前端开发中,Babel 可以帮助开发者更加方便地使用最新的 JavaScript 特性来编写代码,同时保证兼容性。例如,在使用 React 开发 Web 应用时,Babel 可以将 JSX 转换为 JavaScript 代码。

在 Node.js 开发中,Babel 可以帮助开发者使用最新的 JavaScript 特性和方言,例如使用 TypeScript 来编写 Node.js 应用程序。同时,Babel 还可以将 Node.js 应用程序打包成支持多种环境的代码。

深入学习 JavaScript 转译器 Babel ,AST还原混淆代码(java deep learning)

在开发工具中,Babel 可以作为编译器使用,例如将 JavaScript 代码转换为 ES5 或 ES6 代码。同时,Babel 还可以作为 Webpack 等构建工具的插件,用于处理 JavaScript 代码的转译和打包。

Babel 的原理和工作流程

Babel 的原理主要分为三个步骤:

解析(Parsing):Babel 首先会将 JavaScript 代码解析成抽象语法树(AST)。这个过程可以通过使用 Babylon 解析器或者其他支持解析 JavaScript 代码的解析器来完成。解析的结果是一个包含 JavaScript 代码的 AST。

转换(Transformation):在转换阶段,Babel 将会遍历 AST,对 AST 中的节点进行修改或者删除,并生成新的 AST。这个过程中,可以使用 Babel 插件来添加新的语法或者修改现有的语法。例如,可以使用 @babel/plugin-transform-arrow-functions 插件将 ES6 的箭头函数转换为 ES5 的函数表达式。

生成(Code Generation):在代码生成阶段,Babel 会将生成的新 AST 转换回 JavaScript 代码,并输出到指定的文件中。这个过程中,Babel 会根据需要进行缩进和格式化,并且会将新生成的 JavaScript 代码与原始代码进行比较,以便调试和测试。

安装babel模块

逆向解混淆,主要用到 Babel 的以下几个功能包,本文也仅介绍以下几个功能包:

安装 Babel:运行以下命令安装 Babel 及其相关模块:这里安装了 @babel/core 和 @babel/cli 两个模块,@babel/core 是 Babel 工具链的核心模块,@babel/cli 是 Babel 命令行工具,可以在命令行中直接使用 Babel 进行代码转译等操作。npm install @babel/core @babel/cli --save-dev安装 Babel 解析器:Babel 使用解析器将 JavaScript 代码转换为抽象语法树(AST),以便进行后续的转换操作。运行以下命令安装 Babel 解析器:npm install @babel/parser --save-dev安装 Babel 转换器:Babel 使用转换器对 AST 进行转换操作,可以添加、删除、替换、修改节点等。@babel/traverse 是 Babel 提供的 AST 转换工具,运行以下命令进行安装:npm install @babel/traverse --save-dev安装 Babel 代码生成器:Babel 将转换后的 AST 重新生成 JavaScript 代码,以便进行后续的编译和执行。@babel/generator 是 Babel 提供的 AST 代码生成器,运行以下命令进行安装:npm install @babel/generator --save-dev安装 @babel/types 模块,可以使用 npm 或 yarn 命令进行安装:npm install @babel/types安装完成后,可以在项目中使用这些模块进行 JavaScript 代码的转译、解析和生成等操作。例如,以下代码演示了使用 Babel 解析器将一个字符串解析成 AST,并使用 Babel 代码生成器将 AST 转换成 JavaScript 代码:需要注意的是,Babel 的使用需要一定的编程经验和 AST 知识,因此建议在学习 Babel 之前先掌握 JavaScript 和 AST 的相关知识。const babelParser = require('@babel/parser');const babelGenerator = require('@babel/generator').default;const code = 'const a = 1;';const ast = babelParser.parse(code);//将代码解析成ast语法树const output = babelGenerator(ast, { /* options */ }, code);console.log(output.code); // 输出转换后的代码:const a = 1;@babel/parser解析代码

@babel/parser 模块提供了一个名为parse()的函数,用于将 ECMAScript 代码解析成 AST。该函数接受两个参数:

code:需要解析的代码,一个字符串。

options:解析选项,一个对象。

例如,以下代码可以解析一个简单的 ECMAScript 代码片段,并打印出 AST:

const { parse } = require('@babel/parser');const code = 'const x = 1 + 2;';const ast = parse(code);console.log(JSON.stringify(ast, null, 2));解析选项

@babel/parser 模块的parse()函数可以接受一个选项对象作为第二个参数,用于指定解析器的行为。常用的选项包括:

sourceType:指定代码的来源类型,可以为 “script” 或 “module”。默认为 “script”。

plugins:指定解析器使用的插件列表,一个数组。默认为空数组。

ranges:是否在 AST 节点中包含节点位置信息,一个布尔值。默认为 false。

locations:是否在 AST 节点中包含源代码位置信息,一个布尔值。默认为 false。

onComment:指定解析器在解析注释时执行的回调函数,一个函数。默认为 null。

例如,以下代码可以使用 sourceType 选项将代码解析为 ES6 模块:

const { parse } = require('@babel/parser');const code = 'export const x = 1;';const ast = parse(code, { sourceType: 'module' });

在这个例子中,我们使用 parse() 函数解析一个 ES6 模块,将 sourceType 选项指定为 "module"。

@babel/traverse

@babel/traverse 是一个用于对抽象语法树(AST)进行递归遍历和更新的工具库,它可以通过访问和修改 AST 节点来实现代码转换。

下面是一个简单的示例代码,其中包含了使用 @babel/parser 将 JavaScript 代码解析为 AST,并使用 @babel/traverse 对 AST 进行遍历和更新的过程。

const parser = require('@babel/parser');const generator= require('@babel/generator').defaultconst traverse = require('@babel/traverse').default;// 将 JavaScript 代码解析为 ASTconst ast = parser.parse(` const double = x => x * 2; const result = double(3);`);// 遍历 AST,并对所有函数调用进行修改traverse(ast, { CallExpression(path) { // 如果当前节点表示一个函数调用 if (path.node.callee.name === 'double') { // 将函数名修改为 triple path.node.callee.name = 'triple'; // 将函数调用的参数修改为原参数的两倍 path.node.arguments[0] = { type: 'NumericLiteral', value: path.node.arguments[0].value * 2, }; } },});// 将修改后的 AST 转换回 JavaScript 代码const code =generator(ast).code;console.log(code);

在这个示例代码中,我们首先使用 @babel/parser 将 JavaScript 代码解析为 AST,然后使用 @babel/traverse 对 AST 进行递归遍历,并对所有函数调用进行修改。具体来说,我们将函数 double 的名称修改为 triple,并将函数调用的参数修改为原参数的两倍。最后,我们使用 @babel/generator 将修改后的 AST 转换回 JavaScript 代码,并输出转换后的代码。

下面这个示例,它演示了如何使用 @babel/traverse 对 JavaScript 代码进行转换,将 var 关键字替换成 const 关键字。

const parser = require('@babel/parser');const traverse = require('@babel/traverse').default;const generator = require('@babel/generator').default;const code = ` var a = 1; var b = 2; var c = a + b;`;// 将 JavaScript 代码解析为 ASTconst ast = parser.parse(code);// 遍历 AST,并将所有 var
本文链接地址:https://www.jiuchutong.com/zhishi/290726.html 转载请保留说明!

上一篇:顶会查找论文的网址和检索方法(论文可查)

下一篇:圣托里尼岛上的伊亚镇,希腊 (© Zebra-Studio/Shutterstock)(圣托里尼岛具体位置)

  • 业务招待费和广告费扣除标准
  • 弹性预算列表式如何计算
  • 公司购车需要公章吗
  • 供应商属于应收账款吗
  • 水利建设基金一定要交吗
  • 住宿费电子发票样式
  • 事业单位法人证书查询
  • 2019未达起征点免税分录
  • 管理费用福利费和应付职工薪酬福利费区别
  • 建筑企业异地预交税款如何处理
  • 从业人数和资产总额是灰色
  • 营业外收入包括其他业务收入吗
  • 成品盘盈盘亏的会计分录
  • 以汽车出资
  • 公户转私户的钱几天能到账
  • 其他应收款余额在贷方,怎么填资产负债表
  • 净残值可以随意更改吗
  • 特许权使用费如何确认收入
  • 私募基金管理人a向投资者推介私募产品,不合规
  • 私人转公账可以开发票吗
  • 核定征收营业范围
  • 技术培训费发票怎么开
  • 当月发的奖金怎么扣个税
  • 小企业长期待摊费用包括哪些
  • 家政公司可以开专票吗
  • 产品研发费用属于固定成本吗
  • 基础研究投入费用包含工资吗
  • 冲减材料成本
  • 如何增强无线网卡的接收能力
  • 预付账款为什么是资产
  • 周转材料属于什么会计分录
  • 对公帐户收款
  • 马尔堡酒庄
  • php获取本机ip地址
  • mysql_escape_string()函数用法分析
  • vmware虚拟机安装在移动硬盘
  • 【Pytorch深度学习50篇】·······第六篇:【常见损失函数篇】-----BCELoss及其变种
  • 如何取消axios请求
  • pyqt5如何安装
  • 公司是否可以开具在职证明
  • 一般纳税人销售自己使用过的汽车
  • 在建工程明细科目有土地使用权摊销吗
  • 社保缴费基数是怎么确定的
  • 房租押金不退还的账务怎么处理
  • 小企业需要做计算机吗
  • mysql中的索引有
  • mysql proxy问题的解决方法
  • 企业所得税免征和不征税区别
  • 用于福利费的增值税账务处理
  • 机关单位工会经费的来源
  • 接受母公司捐赠现金分录
  • t3怎么查资产负债表
  • 企业职工福利费使用范围和标准
  • 个人生产经营所得
  • 增值税达不到税负怎么办
  • 开办费账务处理实操案例
  • 支付宝可以对公账户转账吗怎么转
  • 亏损企业所得税汇算清缴后调减
  • 购入无形资产属于资产吗
  • 公开发行企业债券,发行人累计债券余额
  • 修改mysql配置的两种方法
  • freebsd软件包
  • 脱机文件怎么办
  • 如何知道文件的解压密码
  • linux 图形
  • Win10开机提示黑屏字母
  • win7系统安全软件
  • win10预览版和正式版区别
  • cocos2d怎么用
  • python给定某数字a
  • linux自启命令
  • jquery.form.js下载
  • JavaScript事件类型中UI事件详解
  • Material Design:利用RecyclerView CardView实现新闻卡片样式
  • 重庆国税电子税务登录
  • 医院网上预约号怎么取消
  • 山东省地方税务局公告2018年第6号
  • 辽宁省大连市地震
  • 招投标文件未规定怎么办
  • 消费税的纳税人是买方还是卖方
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设