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

使用ast解ob混淆时关于types的总结

在AST解OB混淆过程中,@babel/types模块(简称types)是核心操作工具,以下是典型应用场景及具体代码示例:


一、字符串解密场景

场景:OB混淆常将字符串存储为十六进制或Unicode编码,需还原为明文
types应用

traverse(ast, {// 遍历Literal节点替换加密字符串Literal(path) {if (path.node.extra?.raw) {// 将\x68\x65转为明文"he"const decodedValue = decodeHexString(path.node.extra.raw);path.replaceWith(types.stringLiteral(decodedValue)); // }}
});

通过types.stringLiteral直接生成明文字符串节点替换加密节点。


二、大数组元素还原

场景:混淆代码将关键字符串存储在大数组中,通过索引调用
types应用

const arrayMap = new Map(); // 存储数组变量名与值的映射
traverse(ast, {VariableDeclarator(path) {if (path.node.init?.elements) {arrayMap.set(path.node.id.name, path.node.init.elements.map(e => e.value)); // }},MemberExpression(path) {if (path.node.object.type === "Identifier" && arrayMap.has(path.node.object.name)) {const index = path.node.property.value;const realValue = arrayMap.get(path.node.object.name)[index];path.replaceWith(types.valueToNode(realValue)); // }}
});

通过types.valueToNode将数组索引引用直接替换为实际值。


三、控制流反扁平化

场景:混淆代码将逻辑拆分为多个switch-case块
types应用

traverse(ast, {SwitchCase(path) {const testValue = path.node.test.value;const consequent = path.node.consequent;if (types.isReturnStatement(consequent[0])) { // // 提取真实逻辑代码替换switch结构path.parentPath.replaceWithMultiple(consequent);}}
});

使用types.isReturnStatement判断节点类型,直接替换控制流结构。


四、函数调用间接化处理

场景:通过中间变量调用关键函数
types应用

traverse(ast, {CallExpression(path) {if (types.isIdentifier(path.node.callee, {name: "_0x5e920f"})) { // // 解析加密函数参数并替换为实际值const args = path.node.arguments.map(arg => evalNode(arg));path.replaceWith(types.stringLiteral(decryptFunc(args))); // }}
});

通过types.isIdentifier精准定位加密函数调用节点。


五、数值常量折叠优化

场景:将运算表达式(如1+2)替换为计算结果
types应用

traverse(ast, {BinaryExpression(path) {if (types.isNumericLiteral(path.node.left) && types.isNumericLiteral(path.node.right)) { // const result = eval(`${path.node.left.value}${path.node.operator}${path.node.right.value}`);path.replaceWith(types.numericLiteral(result)); // }}
});

通过types.numericLiteral生成计算结果节点。


对比总结(核心方法应用)

功能方法示例典型场景
节点替换replaceWith(types.xxx)字符串解密、控制流还原
类型判断types.isIdentifier/isLiteral加密函数定位
值转换types.valueToNode数组元素替换
表达式构造types.binaryExpression运算折叠优化
动态节点生成types.stringLiteral明文替换加密内容

参考来源
通过合理组合这些方法,可系统化解构OB混淆的字符串加密、数组索引、控制流混淆等特征。

http://www.xdnf.cn/news/2089.html

相关文章:

  • leetcode刷题日记——简化路径
  • AI与思维模型【79】——煤气灯效应
  • 深入解析Mlivus Cloud核心架构:rootcoord组件的最佳实践与调优指南
  • 【金仓数据库征文】交通行业的国产化数据库替换之金仓数据库KingbaseES应用实践
  • 【风控】稳定性指标PSI
  • 基于STM32、HAL库的MAX31865模数转换器ADC驱动程序设计
  • 消息队列mq在Mlivus Cloud向量数据库中的关键配置与最佳实践
  • C++智能指针概念理解的面试题
  • window.location.href的用法
  • 基于 Netmiko 的网络设备自动化操作
  • 《逐梦九天:中国航天编年史》
  • QT文本框(QTextEdit)设置内容只可复制粘贴
  • C++:继承机制详解
  • Cursor 配置 MCP Tool
  • 写在后面的话
  • yolo常用操作(长话短说)热力图,特征图,结构图,训练,测试,预测
  • 打开Qt应用程序以控制台
  • Linux基础篇、第四章_02磁盘及分区管理fdisk 和 gdisk
  • 厚铜PCB打样全流程解析:从文件审核到可靠性测试的关键步骤
  • Python的库
  • Hbase集群管理与实践
  • C语言——字串处理
  • 什么是快应用
  • STM32 I2C总线通信协议
  • 遥感金融风险监管:技术革新与实践探索
  • Java—— 常见API介绍 第五期
  • cursor 提示词和规则
  • 基于SpringBoot+Vue实现停车场管理系统
  • sync.Cond条件变量:使用场景与范例
  • Centos 7 ssh连接速度慢(耗时秒+)