AST反混淆

AST简介:原理解析:JS 代码是如何被浏览器引擎编译、执行的?_js 编译解析?.-CSDN博客

AST在线解析AST explorer 左边是代码右边是树状结构,上方选择js和@bable/parser

JS实现:安装包npm install @babel/core --save

Babel官网Babel 是什么? · Babel 中文文档 | Babel中文网 (babeljs.cn)

1. 节点树字段解释

  1. type: 表示当前节点的类型,我们常用的类型判断方法,就是判断当前的节点是否为某个类型。
  2. start: 表示当前节点的起始位。
  3. end: 表示当前节点的末尾。
  4. loc : 表示当前节点所在的行列位置,里面也有start与end节点,这里的start与上面的start是不同
    的,这里的start是表示节点所在起始的行列位。置,而end表示的是节点所在末尾的行列位置。
  5. errors:是File节点所特有的属性,可以不用理会。
  6. program:包含整个源代码,不包含注释节点。
  7. comments:源代码中所有的注释会在这里显示

2. Babel使用

  1. @babel/core :Babel 编译器本身,提供了 babel 的编译 API;
  2. @babel/parser :将 JavaScript 代码解析成 AST 语法树;
  3. @babel/traverse :遍历、修改 AST 语法树的各个节点;
  4. @babel/generator :将 AST 还原成 JavaScript 代码;
  5. @babel/types :判断、验证节点的类型、构建新 AST 节点等。

2.1 parser使用

const parse = require('@babel/parser')

jscode = `var a = "\u0068\u0065\u006c\u006c\u006f\u002c\u0041\u0053\u0054";`
let ast = parse.parse(jscode)
console.log(JSON.stringify(ast, null, '\t'));

2.2 traverse使用

  • path.node :表示当前path下的node节点
  • path.toString() :当前路径所对应的源代码
  • path.parentPath :用于获取当前path下的父path,多用于判断节点类型
  • path.container :用于获取当前path下的所有兄弟节点(包括自身)
  • path.type :获取当前节点类型
  • path.get(”) :获取path的子路径
  • path.replaceWith(newNode):(单)节点替换函数
  • path.replaceWithMultiple(ArrayNode);多节点替换函数

2.3 generator使用

生成还原后的js代码

// 删除所有注释,其他选项可到官网查询
const {code} = generator(ast,opts = {"comments":false});

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇