初探 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)
相关推荐
程序员大阳7 小时前
副队长JavaScript教程(66)-本地存储实战:待办事项网页的开发
javascript·json·实战·待办事项·本地存储·案例
Dream-Y.ocean8 小时前
鸿蒙PC平台逻控 PLC 编辑器适配实战:基于 Electron 壳方案的纯 JavaScript 梯形图编程与仿真引擎开发
javascript·编辑器·harmonyos
nice_lcj5208 小时前
ThreadLocal 入门:它是怎么隔离数据的、为什么会导致内存泄漏
java·开发语言·后端·面试·并发编程·内存泄漏·threadlocal
紧跟先前的步伐8 小时前
Go AI Agent 实战 28|Agent 的预算、超时与停止条件
开发语言·人工智能·后端·ai·golang
bksczm9 小时前
InnoDB 行格式详解:DYNAMIC / COMPACT / COMPRESSED / REDUNDANT
java·开发语言·数据库
春涧草茶10 小时前
慢就是快16-1协程
开发语言·前端·python
前端小D10 小时前
JS核心底层
前端·javascript
Dovis(誓平步青云)10 小时前
启元 T1 Pro 人机相声搭档:语音-触摸双通道的启元机器人节奏引擎设计
开发语言·前端·javascript·microsoft·交互
做科研的周师兄10 小时前
【R语言实战】MixSIAR 氢氧同位素水源解析全流程:从混合空间校验到贝叶斯 MCMC 收敛诊断(后附完整代码)
java·大数据·开发语言
codeejun11 小时前
每日一Go·MySQL-11、覆盖索引 & 回表原理
javascript·数据库·mysql