Babel - AST反混淆入门
2022-08-12 本文已影响0人
会爬虫的小蟒蛇
- 官网地址:https://www.babeljs.cn/
- 中文文档: https://www.babeljs.cn/docs/
- 反混淆(插件 )文档:https://github.com/jamiebuilds/babel-handbook/blob/master/translations/zh-Hans/plugin-handbook.md
- AST在线调试工具:https://astexplorer.net/
安装
npm init -y
npm install --save-dev @babel/core @babel/cli
如何出现安装报错,可以尝试将npm切换到v14.0.0版本
测试是否安装成功
// 创建 babelTest.js 文件
// 引入 babel 核心库
var babel = require("@babel/core")
// 需要转换的 js 代码
var code = "var a = 1"
// 转换
// 第一个参数是需要转换的js代码 第二个参数是转换配置 参考插件文档
var result = babel.transform(code, {ast: true});
console.log(result.ast.program.body);
// node .\babelTest.js 运行js文件
Ast替换
// 创建 read.js
var a = 1;
// 创建 run.js
// 将JS源码转换成语法树
var parser = require("@babel/parser");
// 为parser提供模板引擎
var template = require("@babel/template").default;
// 遍历AST
var traverse = require("@babel/traverse").default;
// 操作节点,比如判断节点类型,生成新的节点等
var t = require("@babel/types");
// 将语法树转换为源代码
var generator = require("@babel/generator").default;
// 操作文件 引入fs(file流)
var fs = require("fs");
// 读入待处理文件
var code = fs.readFileSync("./read.js", {
encoding: "utf-8"
});
// 转换为 ast
var ast = parser.parse(code);
// 需要遍历的类型
var traverses = {
// 参考官方文档的 types
VariableDeclarator(path){
path.node.init = t.stringLiteral("->> Str")
}
}
traverse(ast, traverses)
var gcode = generator(ast)
console.log(gcode)
// node .\run.js 运行run.js