位置: 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)(圣托里尼岛具体位置)

  • 为什么IPC设备的监控画面图像是翻转的(ipc设备是什么意思)

    为什么IPC设备的监控画面图像是翻转的(ipc设备是什么意思)

  • 苹果手机怎么删除下载过的软件记录(苹果手机怎么删除app和卸载app的区别)

    苹果手机怎么删除下载过的软件记录(苹果手机怎么删除app和卸载app的区别)

  • oppofindx2pro有几种颜色(oppofindx2pro有多强)

    oppofindx2pro有几种颜色(oppofindx2pro有多强)

  • xr支持北斗导航功能吗(苹果xr可以用北斗导航)

    xr支持北斗导航功能吗(苹果xr可以用北斗导航)

  • oppo手机如何拍黑白照片(oppo手机如何拍全景照片)

    oppo手机如何拍黑白照片(oppo手机如何拍全景照片)

  • QQ资料辅助验证一直错误(qq资料辅助验证什么意思)

    QQ资料辅助验证一直错误(qq资料辅助验证什么意思)

  • 淘宝直播预告过了时间怎么办(淘宝直播间预告)

    淘宝直播预告过了时间怎么办(淘宝直播间预告)

  • 收款二维码怎么弄(收款二维码怎么打印)

    收款二维码怎么弄(收款二维码怎么打印)

  • 录屏时声音有回声怎么办(录屏声音有回声怎么解决)

    录屏时声音有回声怎么办(录屏声音有回声怎么解决)

  • 抖音限赞是什么意思(抖音限赞一天了还点不了赞是不是要到夜里十二才能恢复)

    抖音限赞是什么意思(抖音限赞一天了还点不了赞是不是要到夜里十二才能恢复)

  • 移动卡突然一直无服务(移动卡突然一直无服务是怎么回事)

    移动卡突然一直无服务(移动卡突然一直无服务是怎么回事)

  • 小米10电池可以用多久(小米10电池可以换8035毫安电池吗)

    小米10电池可以用多久(小米10电池可以换8035毫安电池吗)

  • ipad2019可以用鼠标吗(ipad2018可以用鼠标吗?)

    ipad2019可以用鼠标吗(ipad2018可以用鼠标吗?)

  • 数据压缩会造成音频质量下降吗(数据压缩会造成什么影响)

    数据压缩会造成音频质量下降吗(数据压缩会造成什么影响)

  • 手机天气不显示怎么办(手机天气不显示温度)

    手机天气不显示怎么办(手机天气不显示温度)

  • 电视机怎么看爱奇艺(电视机怎么看爱奇艺会员)

    电视机怎么看爱奇艺(电视机怎么看爱奇艺会员)

  • 华为荣耀20怎么插耳机(华为荣耀20怎么刷机)

    华为荣耀20怎么插耳机(华为荣耀20怎么刷机)

  • qq被举报了怎么办(qq被人举报成功会怎样)

    qq被举报了怎么办(qq被人举报成功会怎样)

  • vivox6支持红外线吗(vivox6有没有红外)

    vivox6支持红外线吗(vivox6有没有红外)

  • 小米8se怎么设置铃声(小米8se怎么设置门禁卡功能)

    小米8se怎么设置铃声(小米8se怎么设置门禁卡功能)

  • 飞行模式微信计步数吗(飞行模式微信会记录步数吗)

    飞行模式微信计步数吗(飞行模式微信会记录步数吗)

  • 不知道就OUT了!Linux桌面领域7大趋势(不知道哟)

    不知道就OUT了!Linux桌面领域7大趋势(不知道哟)

  • YOLOv5图像分割中的NMS处理(yolov3图像识别)

    YOLOv5图像分割中的NMS处理(yolov3图像识别)

  • db_load命令  加密信息并生成数据库文件(db2diag命令)

    db_load命令 加密信息并生成数据库文件(db2diag命令)

  • 并入房屋价值的土地是否交房产税?
  • 印花税计入税金及附加还是应交税费
  • 进项税额转出时点
  • 交强险怎么查
  • 分期付款进项税额怎么算
  • 年终奖报表怎么做
  • 应收账款贷方余额重分类到哪
  • 手撕汽车票在哪里弄到
  • 建筑业异地预缴增值税流程
  • 房地产企业营销设施建造费包括哪些
  • 物业公司销售门禁卡属于什么收入
  • 缴纳城建税会计分录怎么做账
  • 退款扣除的手续费怎么查
  • 工程交税必须在工程地点交吗
  • gdp等于消费加储蓄加税收
  • 增值税返还收入冲减进项税
  • 竹笋属于什么税目类别
  • 运输公司购买机票怎么买
  • 不同行业的单位名称
  • 工程收入怎么算
  • 进项税额转出会计分录月末如何结转
  • 免税的发票可以用来抵税吗
  • 二手车销售统一专票哪里开
  • 已使用固定资产出售增值税
  • 发票过期未认证怎么办
  • 油漆的消费税
  • 销售商品包安装如何确认收入
  • mac怎么调整网页大小
  • windows10如何开启vt
  • 应收账款周转率高说明
  • 农业生产用水水资源税
  • clipbrd.exe是什么意思
  • 货物退回的会计处理
  • 补充养老保险费扣除限额
  • 无形资产摊销会影响利润吗
  • 土地增值税清算扣除项目
  • 门面出租赚钱吗
  • 新会计准则关于公司装修费
  • 科大讯飞语音识别主要产品
  • 筹建期的财务费用计入
  • 筹建期工会经费怎么算
  • 应付职工薪酬住房公积金怎么算
  • python如何开发系统
  • 为什么出台农产品质量安全法
  • 开增值税专票要交税吗
  • 公司财务报表中不设其他综合收益项目可以吗
  • 未认证key
  • 冲回多提的坏账准备会计分录
  • 税法中特许权费包括哪些
  • 成本法长期股权投资初始成本确认
  • 增值税进项税额转出的情况有哪些
  • 在产品占用资金属于资产还是负债
  • 现金支付现金股利
  • 购进农产品抵扣的税率
  • 劳务成本如何核算
  • 金税盘技术维护费可以抵扣吗
  • mysql的zip包怎么安装
  • 设置密码保护的pdf怎么转word
  • 电脑主机windows 7
  • win7怎么删除桌面图标
  • win7系统换桌面
  • ubuntu安装指南
  • 如何限制网速不让孩子玩游戏
  • win10周年版
  • win8.1系统如何升级到win11
  • 铁嘴啥意思
  • 只有一行的矩阵的逆矩阵
  • Qt Quick + OpenGL + Bullet初次测试
  • JavaScript事件代理和委托详解
  • unity2.5d游戏地图处理
  • unity每秒执行一次
  • 安卓底层重写
  • unity3d移动代码
  • js dom操作方法
  • 江苏国税电子税务局打印控件
  • 山东省2023年医改方案
  • 深圳市税务网上注销流程图
  • 国税发2014年39号
  • 汽车票换票需要手续费吗
  • 税务稽查查哪些
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设