AST混淆与解混淆笔记:逗号表达式混淆

本文介绍了如何使用Babel库对JavaScript代码进行混淆,将返回语句转化为逗号表达式,以增加代码阅读难度。同时,也展示了如何通过Babel的traverse功能进行解混淆的过程。
摘要由CSDN通过智能技术生成

本文主要是作者记笔记为主,温故而知新,记录混淆和解混淆的代码,后期可能会更新文章细节
以以下代码为例:

function test(a, b){
	const c = "123";
	a = a + 1 // a
	a = a + 2
	a = a * 1234
	a = a.toString()
	a = a.substring(0, 3)
	b = a + "00"
	return b;
}
test(2)
console.log(test(1))

首先导入库

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;

const jscode = fs.readFileSync("./test2.js", {
    encoding: "utf-8"
});
let ast = parser.parse(jscode);

本次就是将return语句增加改为逗号表达式,来混淆部分阅读逻辑

// 混淆代码,转为逗号表达式混淆
const obcommafun ={
    FunctionDeclaration(path){
        let block = path.node.body
        let statements = block.body
        douhao = []

        path.traverse({
            ExpressionStatement(path){
                douhao.push(path.node.expression)
                path.remove()
            }
        })
        let last = statements[statements.length - 1]
        let last_ret = types.ExpressionStatement(last.argument).expression
        douhao.push(last_ret)
        let seq = types.sequenceExpression(douhao)


        let ret = types.returnStatement(seq)
        console.log(generator(ret).code)
        // 替换原来的函数体
        path.traverse({
            ReturnStatement(path){
                path.replaceWith(ret)
                path.stop()
            }
        })

    }
}
traverse(ast, obcommafun)

混淆后代码如下:

function test(a, b) {
  const c = "123";
  // a
  return a = a + 1, a = a + 2, a = a * 1234, a = a.toString(), a = a.substring(0, 3), b = a + "00", b;
}
test(2);
console.log(test(1));

还原混淆的代码如下:

// 混淆代码,转为逗号表达式混淆(解混淆)
const obcommafun = {
    ReturnStatement(path) {
        // 找到return的逗号表达式语句
        path.traverse({
            SequenceExpression(path2) {
                let exps = path2.node.expressions
                console.log(111)
                        last_ret = exps[exps.length - 1]
                last_ret = types.ReturnStatement(last_ret)
                block = []
                for(let i = 0; i < exps.length - 1; i++){
                    block.push(types.ExpressionStatement(exps[i]))
                }
                block.push(last_ret)
                block = types.BlockStatement(block)
                path.replaceWith(block)

            }
        })

    }
}
traverse(ast, obcommafun)
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
安装AST混淆的具体步骤如下: 1. 首先,下载并安装Java开发工具包(JDK)。AST混淆工具是基于Java的,所以您需要先安装JDK并将其配置到系统环境变量中。 2. 下载并安装AST混淆工具。您可以在AST混淆工具的官方网站或代码托管平台上找到安装包,并按照提供的指示进行安装。 3. 打开AST混淆工具的安装目录,并找到主程序的可执行文件。 4. 配置AST混淆工具。在主程序的安装目录中,找到配置文件并打开它。根据您的需求,配置文件中的选项包括输入文件路径、输出文件路径、混淆算法选择等。根据您的实际需求,修改这些选项。 5. 使用AST混淆工具进行混淆。在命令行或终端中导航到AST混淆工具的安装目录,并执行主程序的可执行文件。根据您在配置文件中设置的选项,输入需要混淆的文件路径,并选择适当的混淆算法。然后,执行混淆命令。 6. 等待混淆过程完成。根据您需要混淆的文件大小和复杂性,混淆过程可能需要一些时间。请耐心等待,直到混淆过程完成。 7. 检查混淆结果。混淆工具通常会生成一个混淆后的文件,并将其保存到您在配置文件中指定的输出路径中。您可以打开该文件以查看混淆结果,并验证其有效性。 总之,安装AST混淆工具的过程大致分为下载安装、配置选项、执行混淆命令和检查结果等步骤。请按照以上步骤操作,以完成安装和使用AST混淆工具。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码王吴彦祖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值