初探 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)
相关推荐
为何创造硅基生物8 小时前
C语言 结构体内存对齐规则(通俗易懂版)
c语言·开发语言
吃好睡好便好8 小时前
在Matlab中绘制横直方图
开发语言·学习·算法·matlab
星寂樱易李8 小时前
iperf3 + Python-- 网络带宽、网速、网络稳定性
开发语言·网络·python
仰泳之鹅8 小时前
【C语言】自定义数据类型2——联合体与枚举
c语言·开发语言·算法
之歆9 小时前
DAY_12JavaScript DOM 完全指南(二):实战与性能篇
开发语言·前端·javascript·ecmascript
Maimai108089 小时前
React如何用 @microsoft/fetch-event-source 落地 SSE:比原生 EventSource 更灵活的实时推送方案
前端·javascript·react.js·microsoft·前端框架·reactjs·webassembly
candyTong9 小时前
Claude Code 的 Edit 工具是怎么工作的
javascript·后端·架构
cen__y10 小时前
Linux12(Git01)
linux·运维·服务器·c语言·开发语言·git
AI人工智能+电脑小能手10 小时前
【大白话说Java面试题 第65题】【JVM篇】第25题:谈谈对 OOM 的认识
java·开发语言·jvm
社交怪人10 小时前
【算平均分】信息学奥赛一本通C语言解法(题号2071)
c语言·开发语言