0%
毅种循环

模块 22 - Payload 混淆 - MACFuscation

恶意软件开发课程 - Payload 混淆 - MACFuscation


模块 22 - Payload 混淆 - MACFuscation#

[!IMPORTANT] 本知识库声明

本知识库由本人整理自互联网 MalDev Academy 泄露资源,并由本人手动翻译为中文,过程中增加了大量关键技术提示实践心得

  1. 内容完整性:并未修改任何核心代码与技术逻辑,仅做汉化与注释加强。
  2. 版权归属:原始知识产权归原作者/官方所有。
  3. 支持正版:本仓库仅供内部学习交流,如果您有经济能力,请务必支持正版课程
  4. 权利申诉:如相关内容侵犯了您的权益,请联系我,我将立即核实并删除。

Payload 混淆 - MACFuscation#

简介#

本模块将介绍另一种类似于 IPv4/IPv6fuscation 的混淆技术,但该技术会将 shellcode 转换为 MAC 地址(Media Access Control Address,媒体访问控制地址)。

💡 初学者提示:什么是 MAC 地址?

MAC 地址是网络设备的物理地址,就像你家的门牌号一样。格式通常是 6 个十六进制数字对,用连字符或冒号分隔:

  • 示例: 00-1A-2B-3C-4D-5E00:1A:2B:3C:4D:5E
  • 每台电脑的网卡、路由器、手机等都有自己独特的 MAC 地址
  • 因为 MAC 地址在网络配置中非常常见,所以用它来伪装 shellcode 不会引起怀疑

MACFuscation 实现#

MACFuscation 的实现与前一个模块中的 IPv4/IPv6fuscation 类似。MAC 地址由 6 个字节组成,因此 shellcode 应该是 6 的倍数,如果不满足该要求,同样可以进行填充。

💡 初学者提示:MACFuscation vs IPv4/IPv6Fuscation 对比

特性IPv4IPv6MAC
每组字节数4166
生成的字符串示例252.72.131.228FC48:83E4:…FC-48-83-E4-F0-E8
数组长度(276字节shellcode)69 个元素17-18 个元素46 个元素
隐蔽性⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
代码体积中等最小中等偏小

如何选择?

  • IPv4: 最常见,最不引人注意,但数组较长
  • IPv6: 数组最短,但在真实程序中较少见
  • MAC: 折中方案,在网络相关程序中很常见

📚 知识扩展:MAC 地址在实际程序中的应用

许多合法程序都会处理 MAC 地址:

  • 网络管理工具(查看连接设备)
  • VPN 客户端(绑定 MAC 地址)
  • 网络监控软件(追踪设备)
  • 许可证验证系统(基于 MAC 地址授权)

因此,在你的恶意软件中出现 MAC 地址字符串是完全正常的,不会引起防病毒软件的怀疑。这就是 MACFuscation 的隐蔽性所在!

去混淆 MACFuscation Payload#

去混淆过程将逆转混淆过程,允许 MAC 地址生成字节,而不是使用字节生成 MAC 地址。执行去混淆需要使用 NTDLL API 函数 RtlEthernetStringToAddressA。此函数将 MAC 地址从字符串表示转换为其二进制格式。

💡 初学者提示:去混淆过程详解

MACFuscation 的去混淆过程与 IPv4/IPv6 基本相同:

  1. 获取转换工具: 找到 RtlEthernetStringToAddressA 函数
  2. 计算原始大小: MAC 地址数量 × 6 字节 = shellcode 总大小
  3. 分配内存: 为还原后的 shellcode 分配空间
  4. 循环转换:
    • “FC-48-83-E4-F0-E8” → [FC, 48, 83, E4, F0, E8] 六个字节
    • 写入缓冲区并移动指针 6 字节
  5. 返回结果: 完整的原始 shellcode

就像把一串用特殊格式包装的珠子,一个个拆开包装,恢复原样!

下图显示去混淆过程成功运行。

图片
图片


🎯 总结#

在本模块中,我们学习了:

  1. MACFuscation 概念: 将 shellcode 字节转换为 MAC 地址格式的混淆技术
  2. 混淆实现: 每 6 个字节生成一个 MAC 地址(格式: XX-XX-XX-XX-XX-XX
  3. 去混淆实现: 使用 RtlEthernetStringToAddressA API 将 MAC 地址还原为原始字节
  4. 实用性: MAC 地址在网络程序中很常见,具有良好的隐蔽性

💡 关键要点

  • MAC 地址由 6 字节组成,shellcode 必须是 6 的倍数
  • 使用连字符(-)分隔的十六进制格式
  • RtlEthernetStringToAddressA 是 Windows 官方 API,使用它不会引起怀疑
  • 相比 IPv4,数组长度适中;相比 IPv6,在实际程序中更常见

📚 混淆技术对比总结

混淆方法字节/元素优势劣势
IPv4Fuscation4最常见,隐蔽性最佳数组较长
IPv6Fuscation16数组最短,代码体积小较少见,可能引起注意
MACFuscation6平衡的选择没有明显劣势

🎯 实战建议

  • 网络工具: 如果你的恶意软件伪装成网络工具,优先选择 MACFuscation
  • 通用场景: IPv4Fuscation 是最保险的选择
  • 体积优先: 如果需要减小二进制体积,选择 IPv6Fuscation
  • 多层防护: 可以先加密,再进行混淆,提供双重保护

📚 下一步学习

下一个模块将介绍 UUIDFuscation,这是另一种基于 UUID(通用唯一识别码)的混淆技术,在 Windows 程序中极为常见!