初探 AST 解混淆

AST 解混淆 分析在线网址:

https://www.astexplorer.net/

下载解析库:

npm install @babel/core

javascript 复制代码
const fs = require('fs')

// 解析
const parser = require("@babel/parser")
// 遍历
const traverse = require("@babel/traverse").default
// 类型判断
const types = require("@babel/types")

// 解完混淆后, 生成反混淆后的代码
const generator = require("@babel/generator").default

// 读取被混淆的文件
let jsCode = fs.readFileSync("encode.js", {encoding: "utf-8"});

// 解析成 AST
let ast = parser.parse(jsCode)

// 编写插件
plugs = {
    BinaryExpression(path) {
        let {left, operator, right} = path.node;

        if(types.isLiteral(left) && operator === "+" && types.isLiteral(right)){
            let newValue = left.value + right.value;

            // 创建新的节点
            let newNode = types.NumericLiteral(newValue);
            // 替换原有节点
            path.replaceWith(newNode)
        }
    }
}


// 遍历ast节点
traverse(ast, plugs)

// 生成新代码
let {code} = generator(ast)

console.log(code)
相关推荐
Dylan的码园6 小时前
多线程的创建与管理
java·开发语言·多线程
今心上6 小时前
关于json的理解测试!!
开发语言·json
SuperEugene6 小时前
字符串处理实战:模板字符串、split/join、正则的 80% 用法
前端·javascript·面试
枫叶丹46 小时前
【Qt开发】Qt界面优化(六)-> Qt样式表(QSS) 伪类选择器
c语言·开发语言·c++·qt
NaCl鱼呜啦啦6 小时前
static 实例 vs 单例模式
开发语言·单例模式
Highcharts.js7 小时前
图表学习|基于highcharts创建子弹图表,以及子弹图的应用与扩展设计
javascript·信息可视化·highcharts·图表开发·子弹图表·kpi图
0 0 07 小时前
CCF-CSP 34-2 矩阵重塑(其二)(reshape2)【C++】考点:矩阵转置模拟
开发语言·c++·算法·矩阵
一叶之秋14127 小时前
窗口基石:掌控 Qt 界面的无限形态
开发语言·qt
马猴烧酒.7 小时前
【JAVA算法|hot100】堆类型题目详解笔记
java·开发语言·笔记
天一生水water7 小时前
LangChain的智能体教程
开发语言·人工智能·langchain·php·智慧油田