对于JS,python这类语言在执行的时候都会有一个类似如下的过程:

词法分析--》生成语法树--》编译--》执行

对于JS来说,分析他的语法树就更加容易了,因为他有封装好的库,可以帮助我们方便的提取出来语法树。

要分析它首先得有他的开发环境:

1.安装nodejs,

2.安装VS code,方便调试代码

首先要知道下面两个模块:

https://github.com/jquery/esprima  可以将源码提取成语法树
https://github.com/estools/escodegen 语法树还原为源码
具体用法看下面代码:

3.打开VS code ,创建一个nodejs应用,如下:

控制台初始化,生成一个package.json。

4.然后继续安装esprima 和 escodegen。

5.新建index.js文件,test.js 文件,生成test的语法树。

编写index脚本,如下,调试下可以看到语法树已经生成,具体esprima的用法网上有很多,我这里把它转成json,然后看一下它的结构。

然后在线解析一下,清晰多了,整个语法树分为4个模块,也就是4个小的语法树,

具体对照着test看一下应该就非常清晰了。

6.语法树还原成脚本代码。

下图中很明显ast已经被还原成代码了。

7.利用。

在我们抽取出来ast模块后就可以有一些其他的操作了,可以对语法树的一些结构进行替换,修改等,然后就可以进行代码混淆以及函数抽取等等操作了。

抽取JS语法树的基本模块相关推荐

  1. 抽象语法树 c语言,一个简单的例子看懂抽象语法树的魔力

    在计算机科学中,抽象语法树(Abstract Syntax Tree,AST),或简称语法树(Syntax tree),是源代码语法结构的一种抽象表示.它以树状的形式表现编程语言的语法结构,树上的每个 ...

  2. Java解析SQL生成语法树_Atitit.sql ast 表达式 语法树 语法 解析原理与实现 java php c#.net js python...

    Atitit.sql ast 表达式 语法树 语法 解析原理与实现java php c#.net js python 1.1.Sql语法树ast如下图锁死 2.SQL语句解析的思路和过程 2.1.le ...

  3. 应用ast抽象语法树修改js函数

    原理:AST抽象语法树 目标:在每一个函数里面插入一个console.log()把函数传入的全部参数输出出来 关于:本文章是在基于我的个人理解且怕忘记知识所记录下来的给自己看并且分享自己的一个心得,文 ...

  4. js foreach用法_使用 nodejs 写爬虫(一): 常用模块和 js 语法

    本篇是使用 nodejs 写爬虫系列教程的第一篇, 介绍了使用 nodejs 写爬虫过程中常用的模块和一些必须掌握的 js 语法 <!-- more --> 常用模块 常用模块有以下几个: ...

  5. AST(抽象语法树)实战入门:js逆向中滑块加密if语句转化

    概述:AST 抽象语法树 实战 入门 案例 js逆向 js滑块 js加密 极验 瑞数 阿里滑块 5秒盾 ​引言: AST算得上是高端技能.如果把爬虫技能分为初中高三个阶段的话.常规的JS逆向找找参数, ...

  6. JS实现AST抽象语法树问题

    前端中的AST抽象语法树问题 四则运算 正则表达式 词法分析 语法分析 完整代码 github地址: https://github.com/feddiyao/Frontend-05-Template/ ...

  7. 抽象语法树在 JavaScript 中的应用

    抽象语法树是什么 在计算机科学中,抽象语法树(abstract syntax tree 或者缩写为 AST),或者语法树(syntax tree),是源代码的抽象语法结构的树状表现形式,这里特指编程语 ...

  8. 123. 精读《用 Babel 创造自定义 JS 语法》

    1 引言 在写这次精读之前,我想谈谈前端精读可以为读者带来哪些价值,以及如何评判这些价值. 前端精读已经写到第 123 篇了,大家已经不必担心它突然停止更新,因为我已养成每周写一篇文章的习惯,而读者也 ...

  9. 模块加载及第三方包:Node.js模块化开发、系统模块、第三方模块、package.json文件、Node.js中模块的加载机制、开发环境与生产环境、cookie与session

    1.Node.js模块化开发 1.1 JavaScript开发弊端 JavaScript 在使用时存在两大问题,文件依赖和命名冲突. 1.2 软件中的模块化开发 一个功能就是一个模块,多个模块可以组成 ...

最新文章

  1. BigDecimal divide方法结果为无限小数问题
  2. Sicily 1694. Spiral
  3. SAP UI5列表的排序
  4. C++:画数组元素直方图
  5. Jupyter Notebook的三大短板,都被这个新工具补齐了
  6. 搜索——二分搜索实现及细节
  7. PHP程序的常见漏洞攻击分析
  8. 防不胜防 这些游戏被外挂活生生地毁了
  9. 13.2-“制作一款私有IAP串口下载小工具”之串口IAP的通信协议设计
  10. python绘制地图地图cartopy_python Cartopy的基础使用详解
  11. 安装linux系统提示acpi,ACPI引起linux系统无故重启
  12. Linux下scp的用法
  13. JavaScript5:常用DOM操作
  14. Last_Error: Slave SQL thread retried transaction 10 time(s) in vain, giving up. Consider raising the
  15. 大数据治理关键技术解析
  16. 二十六、rosbag功能包
  17. 2022双11/双十一天猫喵果总动员/京东穿行寻宝一键完成,自动任务脚本软件,分享源码学习
  18. Debian中文环境配置及几种中文编码的探究(From: 天马行空)
  19. 微信小程序和H5之间互相跳转、互相传值
  20. 互联网早报:抖音上线外放音量过高提醒功能、5G消息或于10月中下旬全国试商用

热门文章

  1. 中秋节静态HTML网页作业作品 大学生中秋网页设计制作成品 简单DIV CSS布局网站
  2. svn 代码迁移到git
  3. gazebo中导入DAE文件
  4. Django学习——1.创建第一个项目
  5. 金蝶EAS,GUI客户端,编辑界面常用方法,框架方法示例
  6. C语言编程>第十一周 ⑤ 请编写一个函数,用来删除字符串中的所有空格。
  7. 这个“安装 macOS xxx“应用程序副本已损坏,不能用来安装 macOS
  8. Flink新特性之非对齐检查点(unaligned checkpoint)简介
  9. 人机交互是为了解决计算机的,人机交互与交互设计有什么区别
  10. 编程实现输入两个正整数m和n,求其最大公约数和最小公倍数