如何使用JavaScript混淆来躲避AV
字数 1169 2025-08-18 11:38:23
JavaScript混淆技术分析与反混淆方法
一、恶意JavaScript文件概述
该恶意JavaScript文件采用了多种高级混淆技术来躲避反病毒软件的检测,在VirusTotal平台上58种反病毒解决方案均未能检测到。文件特点:
- 使用Windows脚本主机系统组件支持运行
- 文件大小约1MB,远大于常见脚本
- 脚本内容看似乱码,实则精心设计
二、主要混淆技术分析
1. 非ASCII字符集混淆
脚本主体使用非ASCII码字符集:
- 混合ASCII和Unicode字符组成长字符串
- 包含西里尔字符示例:
ыNиpsфбm3nxsцвиеKEсыBLQBеnьVWC - 变量命名特征:可见变量名在"_"字符之后,如
var =[…]_0x5e24
反混淆方法:
- 识别并替换变量前缀
- 增强代码可读性
- 示例反混淆结果:
var A_0x5e24=['fromCharCode','function H2B([string]$s){$H=@();for ($i=0;$i -lt $s.Length;$i+=2){$H+=[Byte]::Parse($s.Substring($i,2),[System.Globalization.NumberStyles]::HexNumber);};return $H;};$_b=(get-itemproperty -path 'HKCU:\SOFTWARE\Microsoft\Run' -name 'Microsoft').Microsoft;
2. ASCII与十六进制混合编码
混淆特征:
- 代码中包含类似
0x270x200x5c的十六进制字符 - 需要转义并进行ASCII解码
解码对应关系:
0x27→ 单引号(')0x20→ 空格0x5c→ 反斜杠(\)
反混淆方法:
- 识别所有十六进制序列
- 转换为对应的ASCII字符
- 重建原始代码逻辑
3. 字符串分割与重组
攻击者将关键字符串分割为多个部分:
- 使用不同编码方式存储各部分
- 运行时动态重组
- 示例:用'$'字符和_b变量替换字符'5'
三、Payload提取与分析
1. 可执行文件特征
提取出的Payload特征:
- 前四个字符为"4D5A"(MZ头,Windows可执行文件标志)
- 实现持久化感染的注册表键:
HKCU\SOFTWARE\Microsoft\Run\Microsoft
2. 恶意软件类型
分析确认Payload为Remote Access木马变种:
- 命令控制服务器:
networklan[.]asuscomm[.]com - 属于RevengeRAT家族
四、反混淆实战步骤
1. 初步处理
- 统一字符编码为UTF-8
- 识别并标准化变量命名
- 提取所有十六进制编码部分
2. 代码重构
- 替换所有十六进制序列为对应字符
- 合并分割的字符串片段
- 重建控制流结构
3. 动态分析
- 在隔离环境中运行部分解码代码
- 监控注册表和文件系统变化
- 捕获网络通信特征
五、防御建议
1. 检测层面
- 监控异常大的JavaScript文件
- 检测非ASCII字符的异常使用
- 建立十六进制编码模式的特征库
2. 防护层面
- 限制WSH执行权限
- 监控关键注册表键值修改
- 实施多层沙箱分析机制
六、总结
该案例展示了现代恶意软件的高级混淆技术:
- 多层编码混淆有效规避静态检测
- 即使已知恶意软件变种,AV检测率仍可能很低
- 需要结合静态分析与动态行为检测
- 持续更新反混淆技术对抗新型混淆方法
通过深入分析此类技术,安全研究人员可以:
- 开发更有效的反混淆工具
- 改进检测算法
- 提升对新型攻击的响应能力