文章目录

  • 什么是 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. 利用反射自己写的一个ModelHelper类
  2. AI当道,媒体会被机器牵着鼻子走?
  3. 《OpenGL ES 2.0游戏开发(上卷):基础技术和典型案例》一6.6 本章小结
  4. React Ways1——函数即组件
  5. Linux 定时任务crontab_014
  6. 【Linux网络】Linux Socket编程 TCP协议
  7. HBase停止集群报错,pid: No such file or directory
  8. JavaScript --- 解析Cookie
  9. Linux 线程如何实现同步与互斥
  10. 在线CSV转SQL工具
  11. 2021-08-01创建查询关键字及数据类型
  12. 区块链 以太坊 合约 创建、执行 详解
  13. steam服务器102修复,steam平台102代码错误怎么办 解决steam错误代码102图文教程
  14. 磨刀不误砍柴工(一)-高效的第一步
  15. 解决WARN Establishing SSL connection without servers identity verification is not recommended问题
  16. matlab中设x=zsin3x,三阶偏导数设e的sin(2x+3y)次方,求Z的三阶偏导数是多少?
  17. Application的启动流程
  18. 分享自己的页游运维架构
  19. Dream Chaser
  20. sanity测试_使用Sanity CLI可以做的5件事

热门文章

  1. 内网xshell传输文件命令_Xshell 上传文件到服务器 以及常用的lunix 命令
  2. Azure机器学习——计算目标03:使用 Azure机器学习工作室配置计算目标
  3. OpenGL函数思考-glOrtho
  4. appcode打开workspace无法找到xcodeproj项目文件问题的解决方法
  5. TinyMCE使用指导
  6. 2022官方公布福伦王土拨鼠全世界碳纤维公路自行车品牌排行榜
  7. bat文件获取当前目录
  8. CanHack 2022:加拿大中学生网络安全挑战赛
  9. 初级运维工程师面试题
  10. stoi()函数的使用