文章目录

  • 什么是 AST
  • AST 在编译中的位置
    • 词法分析
    • 语法分析
    • 代码生成
  • Babel 简介
    • @babel/core
    • @babel/parser
    • @babel/generator
    • @babel/traverse
    • @babel/types
  • 常见混淆还原
    • 字符串还原
    • 表达式还原
    • 删除未使用变量
    • 删除冗余逻辑代码
    • switch-case 反控制流平坦化
  • 参考资料
  • END

什么是 AST

AST(Abstract Syntax Tree),中文抽象语法树,简称语法树(Syntax Tree),是源代码的抽象语法结构的树状表现形式,树上的每个节点都表示源代码中的一种结构。语法树不是某一种编程语言独有的,JavaScript、Python、Java、Golang 等几乎所有编程语言都有语法树。

小时候我们得到一个玩具,总喜欢把玩具拆解成一个一个小零件,然后按照我们自己的想法,把零件重新组装起来,一个新玩具就诞生了。而 JavaScript 就像一台精妙运作的机器,通过 AST 解析,我们也可以像童年时拆解玩具一样,深入了解 JavaScript 这台机器的各个零部件,然后重新按照我们自己的意愿来组装。

AST 的用途很广,IDE 的语法高亮、代码检查、格式化、压缩、转译等,都需要先将代码转化成 AST 再进行后续的操作,ES5 和 ES6 语法差异,为了向后兼容,在实际应用中需要进行语法的转换,也会用到 AST。AST 并不是为了逆向而生,但做逆向学会了 AST,在解混淆时可以如鱼得水。

AST 有一个在线解析网站:https://astexplorer.net/ ,顶部可以选择语言、编译器、是否开启转化等,如下图所示,区域①是源代码,区域②是对应的 AST 语法树,区域③是转换代码,可以对语法树进行各种操作,区域④是转换后生成的新代码。图中原来的 Unicode 字符经过操作之后就变成了正常字符。

语法树没有单一的格式,选择不同的语言、不同的编译器,得到的结果也是不一样的,在 JavaScript 中,编译器有 Acorn、Espree、Esprima、Recast、Uglify-JS 等,使用最多的是 Babel,后续的学习也是以 Babel 为例。

AST 在编译中的位置

在编译原理中,编译器转换代码通常要经过三个步骤:词法分析(Lexical Analysis)、语法分析(Syntax Analysis)、代码生成(Code Generation),下图生动展示了这一过程:

词法分析

词法分析阶段是编译过程的第一个阶段,这个阶段的任务是从左到右一个字符一个字符地读入源程序,然后根据构词规则识别单词,生成 token 符号流,比如 isPanda('

逆向进阶,利用 AST 技术还原 JavaScript 混淆代码相关推荐

  1. 爬虫 JavaScript 逆向进阶!利用 AST 技术还原混淆代码

    这是「进击的Coder」的第 617 篇技术分享 作者:K 小哥 来源:K 哥爬虫 " 阅读本文大概需要 47 分钟. " 目录 文章较长,可作为 AST Babel 入门手册,强 ...

  2. 新的云威胁!黑客利用云技术窃取数据和源代码

    新的云威胁!黑客利用云技术窃取数据和源代码 本文作者:Zhuolin, 转载请注明来自FreeBuf.COM Zhuolin 2023-03-01 14:16:53 41733 一个被称为 " ...

  3. 【JavaScript 逆向】AST 技术反混淆

    前言 通过浏览器工具可以清楚的看到网站正在运行的 HTML 和 JavaScript 代码,所以对 JavaScript 代码进行混淆处理是一些网站常用的反爬措施,例如下文介绍到的字符串混淆.控制流平 ...

  4. AST还原技术专题:一键处理obfuscator混淆代码后的扫尾工作

    使用obfuscator工具生成混淆代码 1.打开混淆工具的在线地址: https://obfuscator.io/ 2.代码混淆前如下,如图所示: 3.点击 Obfuscate 按钮,将示例代码进行 ...

  5. 第27讲:令人抓狂的 JavaScript 混淆技术

    我们在爬取网站的时候,经常会遇到各种各样类似加密的情形,比如: 某个网站的 URL 带有一些看不懂的长串加密参数,想要抓取就必须要懂得这些参数是怎么构造的,否则我们连完整的 URL 都构造不出来,更不 ...

  6. JavaScript 混淆技术

    根据JShaman(JShaman是专业的JavaScript代码混淆加密网站)提供的消息,JavaScript混淆技术大体有以下几种: 变量混淆 将带有JS代码的变量名.方法名.常量名随机变为无意义 ...

  7. 技术分享:几种常见的JavaScript混淆和反混淆工具分析实战【转】

    信息安全常被描述成一场军备竞赛,白帽与黑帽,渗透测试者与黑客,善与恶,本文将聚焦这场永无止境决斗中的一个小点. HTML5 & JS 应用中充满着对输入进行验证/注入的问题,需要开发人员始终保 ...

  8. AST实战|免安装一键还原ob混淆详细使用教程

    关注它,不迷路. 本文章中所有内容仅供学习交流,不可用于任何商业用途和非法用途,否则后果自负,如有侵权,请联系作者立即删除! 一.环境安装 在nodejs官网下载最新稳定版并安装: 下载地址: htt ...

  9. 技术分享:几种常见的JavaScript混淆和反混淆工具分析实战

    信息安全常被描述成一场军备竞赛,白帽与黑帽,渗透测试者与黑客,善与恶,本文将聚焦这场永无止境决斗中的一个小点. HTML5 & JS 应用中充满着对输入进行验证/注入的问题,需要开发人员始终保 ...

最新文章

  1. HASH算法不是加密算法
  2. python 爬虫 使用requests设置代理
  3. 噬血代码进不了游戏_玩家认可,二次元魂类游戏,《噬血代码》在三个方面做出了差异化...
  4. erlang mysql连接超时_Erlang数据库-(一)Erlang与Mysql的连接
  5. 分布式锁防止订单重复提交_防止表单重复提交看这里!!!
  6. Java导入sql失败_java – 在hibernate中导入import.sql失败
  7. webpack打包后引用cdn的js_手摸手 Webpack 多入口配置实践
  8. windows7用VMware workstation安装ubuntu server 16.04 虚拟机
  9. selenium调用浏览器进行抓取页面
  10. 201671010415+词频统计软件项目报告
  11. 360度评估前HR必须掌握的优劣势
  12. java条形码识别_java openCV 识别条形码
  13. 清风数学建模笔记——Excel画图保姆级教学
  14. redis+spring 整合
  15. 数据结构之树之不同种类篇
  16. 获取当前所在地的天气
  17. linux 自己做桌面,自己动手量身定做Linux系统的桌面
  18. 防止SYN泛洪攻击 开启路由器的TCP拦截
  19. 分享到 Line 會遇到的問題整理
  20. 量化回测框架Backtrader【3】-核心概念Lines

热门文章

  1. 新品上市调查方案-调查内容及执行设计
  2. 微信小程序开发之天气预报,调用百度天气接口,显示温馨提示和之后的天气
  3. 货拉拉NLP算法实习生面试
  4. 使用ios越狱时,安装越狱插件一系列问题---持续更新
  5. 分治算法——乒乓球比赛日程问题
  6. tar解压单个文件到特定目录_Linux解压文件到指定目录
  7. javascript points
  8. CRM开发要点(五)
  9. 景兴纸业和机器人概念_机器人相关股票有哪些?机器人概念股票龙头一览
  10. 数据中台总领数字化转型?明略科技提出不一样的方法论