初探 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)
相关推荐
牛奔4 小时前
Go 如何打印调试深层或嵌套的结构体
开发语言·后端·golang
geovindu4 小时前
go: Iterative Algorithms
开发语言·后端·算法·golang·迭代算法
学逆向的4 小时前
汇编——JCC指令
开发语言·汇编·网络安全
mayaairi5 小时前
JS循环语句深度解析:嵌套for、while与do...while
开发语言·前端·javascript
To_OC5 小时前
啃完流式输出:从一个卡顿的 LLM 接口开始,我搞懂了数据流到底怎么 “流”
前端·javascript·llm
kite01216 小时前
Go语言Map深度解析与最佳实践
开发语言·后端·golang
l156469487 小时前
突围!图文混合知识库难以解析,Kimi-K3 原生视觉架构深耕知识工作,DMXAPI 统一接口,缩短项目开发周期
java·大数据·开发语言
charlie1145141918 小时前
现代C++工程实践 WeakPtr 实战(三):WeakPtrFactory 与「最后成员」惯用法
开发语言·c++·开源项目·现代c++
海上彼尚9 小时前
Nodejs也能写Agent - 22.LangGraph篇 - 上下文工程
前端·javascript·人工智能·langchain·node.js
IT小盘9 小时前
04-大模型流式输出原理-SSE与Python实现
开发语言·网络·人工智能·python