当前位置: 首页 > article >正文

AST解混淆

示例: 智慧树
将混淆js复制保存到en.js文本中,语言选择JavaScript。
通过对文件分析得出

_0x1e77这个函数就是这个混淆JS 加密字符串的解密函数

折叠所有视图(ctrl+0)
在这里插入图片描述
未格式化的解密函数复制出来到ob.js文件中

const fs = require("fs");
const esprima = require("esprima");  // ECMAScript(JavaScript) 解析架构,主要用于多用途分析。
const estraverse = require("estraverse");  // 语法树遍历辅助库(提供了两个静态方法,estraverse.traverse 和 estraverse.replace,前者单纯遍历AST的节点,通过返回值控制是否继续遍历到叶子结点; 而 replace 方法则可以在遍历的过程中直接修改 AST,实现代码重构功能。)
const escodegen = require("escodegen"); // AST的 ECMAScript(JavaScript) 代码生成器
const iconv = require("iconv-lite");

//读取加密混淆的执行函数js
var content = fs.readFileSync('./en.js',{encoding:'binary'});
var buf = new Buffer.from(content,'binary');
var code = iconv.decode(buf,'utf-8');

//将混淆后的执行函数JS转换为AST
var ast = esprima.parse(code);


//解密函数(未格式化)




//字符串解密
var ast = esprima.parse(code);
ast = estraverse.replace(ast,{
    enter: function (node) {
        if(node.type == 'CallExpression' &&
            node.callee.type == 'Identifier' &&
            node.callee.name == '_0x7969' &&
            node.arguments[0].type == 'Literal')
        {   if(node.arguments.length == 1){
                var val = _0x7969(node.arguments[0].value);
                return {
                    type: esprima.Syntax.Literal,
                    value: val,
                    raw: val
                }
        }else{
            if(node.arguments.length == 2){
                var val = _0x7969(node.arguments[0].value, node.arguments[1].value);
                return {
                    type: esprima.Syntax.Literal,
                    value: val,
                    raw: val
                }
            }
        }

        }
    }
})
code = escodegen.generate(ast)
console.log(code)
try{
    var a =fs.writeFileSync('./de.js', code)
    console.log(a)
  //文件写入成功。
} catch (err) {
  console.error(err)
}

注意替换字符串解密中的解密函数名
运行ob.js得到解混淆后的js代码
发生错误时可以尝试删除


http://www.kler.cn/a/7808.html

相关文章:

  • SpringBoot开发——整合AJ-Captcha实现安全高效的滑动验证码
  • FreeRTOS的列表与列表项
  • 深入探索 React Hooks:原理、用法与性能优化全解
  • 无人机应用场景:石油管道巡检技术详解
  • vue2使用 <component> 标签动态渲染不同的表单组件
  • 相机光学(四十)——2x2 Adjacent Pixel Binning
  • mysql双游标嵌套循环
  • 开源Icon大合集
  • .net特性(个人笔记)
  • WRF-cmaq模式
  • Qt——实现一个简单的获取文件信息的dialog
  • 蓝易云:Linux系统命令-ls命令详细介绍.系列【9】
  • Java练习题
  • 华为OD机试-投篮大赛-2022Q4 A卷-Py/Java/JS
  • Windows编程基础
  • 基于SpringBoot+Vue家乡特色推荐系统
  • 获得lazada商品详情 API
  • 4.5-4.6学习总结
  • 详细分析国外主机的性能和稳定性如何?
  • 医疗串口屏有哪些特性?
  • 异步线程池 CompletableFuture 异步编排 【下篇】
  • 高程实验5 素数
  • 制造业短视频标题文案写作技巧
  • 测试碎碎念:selenium
  • sql语法:详解DDL
  • 【云原生】Kubernetes(k8s)之容器的探测