PlugX样本分析
字数 5143 2025-08-06 23:10:24

PlugX木马样本分析教学文档

0x01 样本基本信息

  • 样本类型:WinRAR自解压文件(SFX)
  • 文件组成:
    • mcs.exe:加载器
    • mcutil.dll:二级加载器
    • mcutil.dllsys:包含实际PlugX木马的shellcode

0x02 样本特点

  1. 隐蔽性设计

    • 采用多层加载机制(mcs.exe → mcutil.dll → mcutil.dllsys)
    • shellcode添加花指令混淆和加密处理
    • API通过GetProcAddress动态加载
    • 重要数据额外加密
  2. 持久化机制

    • 创建服务实现持久化
    • 复制文件到系统目录并设置为隐藏属性
  3. 隐蔽执行

    • 注入正常进程(wmplayer.exe或svchost.exe)
    • 使用互斥量防止多开
  4. 通信加密

    • 与C&C服务器通信数据使用流密码加密

0x03 详细执行流程

1. 初始加载阶段

  1. 自解压文件执行后启动mcs.exe
  2. mcs.exe加载同目录下的mcutil.dll
  3. mcutil.dll的DllMain函数调用偏移0x10B0处的函数

2. 代码注入技术

  1. 检查当前日期(不小于2014年1月2日)
  2. 获取LoadLibraryW返回地址
  3. 修改内存页权限为PAGE_EXECUTE_READWRITE
  4. 计算偏移并修改返回地址为jmp指令(0xE9)
  5. 跳转到mcutil.dll偏移0x1000处的函数

3. Shellcode加载与解密

  1. 读取mcutil.dllsys文件内容到内存
  2. 执行包含花指令的shellcode
  3. 解密shellcode偏移0x203处(长度0x1AB5D)的数据
  4. 解密后可见实际指令

4. PE文件释放与加载

  1. sub_241函数处理参数数组:

    • 参数1:shellcode起始地址
    • 参数2:shellcode长度(0x1d09d)
    • 参数3:DLL压缩数据地址
    • 参数4:压缩数据长度(0x1a63e)
    • 参数5:重要数据密文地址
    • 参数6:密文长度(0x2540)
  2. 使用RtlDecompressBuffer解压LZ格式数据

  3. 修复PE头("MZ"和"PE"标志)

  4. 内存中重建DLL:

    • 段映射
    • 基址重定位
    • 导入表处理
  5. 转入DLL入口点

5. 配置数据解密

  1. 加密数据位于DLL偏移0x26470
  2. 流加密,初始key为前4字节
  3. 解密内容包含:
    • C&C服务器域名和端口
    • 服务名称等持久化配置
  4. 临时字符串使用后立即清除

0x04 持久化与隐蔽技术

1. 权限提升

  1. 获取SeDebugPrivilege和SeTcbPrivilege权限
  2. 检查UAC状态,绕过保护:
    • 释放辅助DLL
    • 注入msiexec.exe进程
    • 利用migwiz工具提权
    • 替换dwmapi.dll实现高权限重启

2. 文件部署

  1. 创建隐藏目录:
    • Windows 7: C:\ProgramData\IcdSysSvc
  2. 复制三个样本文件
  3. 设置系统和隐藏属性

3. 持久化机制

  1. 首选方案:创建服务
    • 服务名:IcsSysSvc
    • 启动类型:自启动
  2. 备选方案:注册表启动项
    • 路径:HKCU\Software\Microsoft\Windows\CurrentVersion\Run
    • 键名:IcdSysSvc
    • 值:C:\ProgramData\IcdSysSvc\mcs.exe

4. 进程注入

  1. 目标进程:
    • wmplayer.exe
    • svchost.exe
  2. 注入解密后的shellcode
  3. 终止其他木马进程:
    • 检查互斥量存在性
    • TerminateProcess(ExitCode=1223)

0x05 C&C通信分析

1. C&C服务器列表

序号 域名 端口
1 facebook[.]controlliamo[.]com 80
2 hpservice[.]homepc[.]it 443
3 dsf14sdf23edfewfewfe[.]com 80
4 sdfsewd3fw3dsad[.]com 443

2. 通信报文格式

  1. 结构:

    • 16字节首部
    • 数据区(最大0xF000)
  2. 首部字段:

    • code_num:功能标识
    • size:低16位=处理后长度,高16位=原始长度

3. 数据处理逻辑

根据code_num的第28-29位决定处理方式:

位值 处理方式
0 LZ压缩 + 流加密
1 仅流加密
2 仅LZ压缩
3 不处理

4. 远控指令集

code_num 功能描述
0 连接通知
1 获取主机信息
3 执行指令
5 卸载木马
6 发送当前配置
7 更新配置
0x2000 锁屏
0x2001 注销
0x2002 重启
0x2005 消息弹框
0x3000 获取磁盘信息
0x3001 列举目录
0x3002 递归列举目录
0x3004 读取文件
0x3007 写入文件
0x300A 创建目录
0x300C 创建进程
0x300D 文件操作(复制/移动/重命名/删除)
0x300E 设置环境变量
0x4000 屏幕截图相关
0x4100 屏幕截图相关
0x4200 屏幕截图相关
0x5000 获取进程列表
0x5001 获取进程模块
0x5002 终止进程
0x6000 枚举服务
0x6001 修改服务设置
0x6002 启动服务
0x6003 控制服务
0x6004 删除服务
0x7002 创建远程shell
0x7100 创建远程shell
0x9000 枚举注册表键
0x9001 创建注册表键
0x9002 删除注册表键
0x9003 复制注册表键
0x9004 枚举注册表值
0x9005 查询注册表值
0x9006 删除注册表值
0x9007 设置注册表值
0xA000 枚举网络连接
0xA001 管理网络连接
0xB000 端口映射
0xC000 SQL管理
0xC001 SQL管理
0xC002 SQL管理
0xD000 获取TCP连接信息
0xD001 获取UDP端口信息
0xD002 设置TCP连接状态
0xE 发送键盘记录

0x06 检测指标(IOC)

  1. 文件哈希:

    • MD5: 31d0e421894004393c48de1769744687
  2. C&C域名:

    • facebook[.]controlliamo[.]com
    • hpservice[.]homepc[.]it
    • dsf14sdf23edfewfewfe[.]com
    • sdfsewd3fw3dsad[.]com
  3. 持久化路径:

    • C:\ProgramData\IcdSysSvc\
  4. 服务名称:

    • IcsSysSvc
  5. 注册表项:

    • HKCU\Software\Microsoft\Windows\CurrentVersion\Run\IcdSysSvc

0x07 分析技巧总结

  1. 多层加载分析:

    • 跟踪每个组件的加载顺序和传递参数
  2. 动态解密技术:

    • 识别流加密模式
    • 跟踪内存解密过程
  3. 进程注入检测:

    • 监控wmplayer.exe和svchost.exe的异常行为
  4. 网络通信分析:

    • 识别LZ压缩+流加密的通信模式
    • 监控可疑域名连接
  5. 持久化检测:

    • 检查系统隐藏目录中的可疑文件
    • 监控服务创建和注册表修改
PlugX木马样本分析教学文档 0x01 样本基本信息 样本类型:WinRAR自解压文件(SFX) 文件组成: mcs.exe:加载器 mcutil.dll:二级加载器 mcutil.dllsys:包含实际PlugX木马的shellcode 0x02 样本特点 隐蔽性设计 : 采用多层加载机制(mcs.exe → mcutil.dll → mcutil.dllsys) shellcode添加花指令混淆和加密处理 API通过GetProcAddress动态加载 重要数据额外加密 持久化机制 : 创建服务实现持久化 复制文件到系统目录并设置为隐藏属性 隐蔽执行 : 注入正常进程(wmplayer.exe或svchost.exe) 使用互斥量防止多开 通信加密 : 与C&C服务器通信数据使用流密码加密 0x03 详细执行流程 1. 初始加载阶段 自解压文件执行后启动mcs.exe mcs.exe加载同目录下的mcutil.dll mcutil.dll的DllMain函数调用偏移0x10B0处的函数 2. 代码注入技术 检查当前日期(不小于2014年1月2日) 获取LoadLibraryW返回地址 修改内存页权限为PAGE_ EXECUTE_ READWRITE 计算偏移并修改返回地址为jmp指令(0xE9) 跳转到mcutil.dll偏移0x1000处的函数 3. Shellcode加载与解密 读取mcutil.dllsys文件内容到内存 执行包含花指令的shellcode 解密shellcode偏移0x203处(长度0x1AB5D)的数据 解密后可见实际指令 4. PE文件释放与加载 sub_ 241函数处理参数数组: 参数1:shellcode起始地址 参数2:shellcode长度(0x1d09d) 参数3:DLL压缩数据地址 参数4:压缩数据长度(0x1a63e) 参数5:重要数据密文地址 参数6:密文长度(0x2540) 使用RtlDecompressBuffer解压LZ格式数据 修复PE头("MZ"和"PE"标志) 内存中重建DLL: 段映射 基址重定位 导入表处理 转入DLL入口点 5. 配置数据解密 加密数据位于DLL偏移0x26470 流加密,初始key为前4字节 解密内容包含: C&C服务器域名和端口 服务名称等持久化配置 临时字符串使用后立即清除 0x04 持久化与隐蔽技术 1. 权限提升 获取SeDebugPrivilege和SeTcbPrivilege权限 检查UAC状态,绕过保护: 释放辅助DLL 注入msiexec.exe进程 利用migwiz工具提权 替换dwmapi.dll实现高权限重启 2. 文件部署 创建隐藏目录: Windows 7: C:\ProgramData\IcdSysSvc 复制三个样本文件 设置系统和隐藏属性 3. 持久化机制 首选方案:创建服务 服务名:IcsSysSvc 启动类型:自启动 备选方案:注册表启动项 路径:HKCU\Software\Microsoft\Windows\CurrentVersion\Run 键名:IcdSysSvc 值:C:\ProgramData\IcdSysSvc\mcs.exe 4. 进程注入 目标进程: wmplayer.exe svchost.exe 注入解密后的shellcode 终止其他木马进程: 检查互斥量存在性 TerminateProcess(ExitCode=1223) 0x05 C&C通信分析 1. C&C服务器列表 | 序号 | 域名 | 端口 | |------|-----------------------------------|------| | 1 | facebook[ .]controlliamo[ . ]com | 80 | | 2 | hpservice[ .]homepc[ . ]it | 443 | | 3 | dsf14sdf23edfewfewfe[ . ]com | 80 | | 4 | sdfsewd3fw3dsad[ . ]com | 443 | 2. 通信报文格式 结构: 16字节首部 数据区(最大0xF000) 首部字段: code_ num:功能标识 size:低16位=处理后长度,高16位=原始长度 3. 数据处理逻辑 根据code_ num的第28-29位决定处理方式: | 位值 | 处理方式 | |------|--------------------------| | 0 | LZ压缩 + 流加密 | | 1 | 仅流加密 | | 2 | 仅LZ压缩 | | 3 | 不处理 | 4. 远控指令集 | code_ num | 功能描述 | |----------|----------------------------------------| | 0 | 连接通知 | | 1 | 获取主机信息 | | 3 | 执行指令 | | 5 | 卸载木马 | | 6 | 发送当前配置 | | 7 | 更新配置 | | 0x2000 | 锁屏 | | 0x2001 | 注销 | | 0x2002 | 重启 | | 0x2005 | 消息弹框 | | 0x3000 | 获取磁盘信息 | | 0x3001 | 列举目录 | | 0x3002 | 递归列举目录 | | 0x3004 | 读取文件 | | 0x3007 | 写入文件 | | 0x300A | 创建目录 | | 0x300C | 创建进程 | | 0x300D | 文件操作(复制/移动/重命名/删除) | | 0x300E | 设置环境变量 | | 0x4000 | 屏幕截图相关 | | 0x4100 | 屏幕截图相关 | | 0x4200 | 屏幕截图相关 | | 0x5000 | 获取进程列表 | | 0x5001 | 获取进程模块 | | 0x5002 | 终止进程 | | 0x6000 | 枚举服务 | | 0x6001 | 修改服务设置 | | 0x6002 | 启动服务 | | 0x6003 | 控制服务 | | 0x6004 | 删除服务 | | 0x7002 | 创建远程shell | | 0x7100 | 创建远程shell | | 0x9000 | 枚举注册表键 | | 0x9001 | 创建注册表键 | | 0x9002 | 删除注册表键 | | 0x9003 | 复制注册表键 | | 0x9004 | 枚举注册表值 | | 0x9005 | 查询注册表值 | | 0x9006 | 删除注册表值 | | 0x9007 | 设置注册表值 | | 0xA000 | 枚举网络连接 | | 0xA001 | 管理网络连接 | | 0xB000 | 端口映射 | | 0xC000 | SQL管理 | | 0xC001 | SQL管理 | | 0xC002 | SQL管理 | | 0xD000 | 获取TCP连接信息 | | 0xD001 | 获取UDP端口信息 | | 0xD002 | 设置TCP连接状态 | | 0xE | 发送键盘记录 | 0x06 检测指标(IOC) 文件哈希: MD5: 31d0e421894004393c48de1769744687 C&C域名: facebook[ .]controlliamo[ . ]com hpservice[ .]homepc[ . ]it dsf14sdf23edfewfewfe[ . ]com sdfsewd3fw3dsad[ . ]com 持久化路径: C:\ProgramData\IcdSysSvc\ 服务名称: IcsSysSvc 注册表项: HKCU\Software\Microsoft\Windows\CurrentVersion\Run\IcdSysSvc 0x07 分析技巧总结 多层加载分析: 跟踪每个组件的加载顺序和传递参数 动态解密技术: 识别流加密模式 跟踪内存解密过程 进程注入检测: 监控wmplayer.exe和svchost.exe的异常行为 网络通信分析: 识别LZ压缩+流加密的通信模式 监控可疑域名连接 持久化检测: 检查系统隐藏目录中的可疑文件 监控服务创建和注册表修改