一个略绕的NjRat 样本简析
字数 1765 2025-08-07 08:22:31

NjRat 样本分析与技术解析


0x00 样本概述

  • 类型:NjRat 远控木马(Delphi + C# 混合编写)
  • 特点:多阶段加载、反调试/反虚拟机、进程替换(Process Hollowing)、资源加密
  • IOC
    • IP: 115.186.136.237:5555
    • MD5:
      • Stage1: c006bf6b9e1fc1fc9f7d8206c94ef424
      • Stage2: 21df60db9211654e785ffbb2d742cc11
      • Stage3: 7b2da42826ada69f800559e7e4ca7376

0x01 技术分析流程

1. 初始样本分析
  • 文件信息
    • 编写语言:Delphi(含混淆)
    • 加密数据:核心功能模块通过加密存储在样本中。
  • 调试方法
    • 使用 x32dbg 动态调试,配合 IDR 生成 MAP 文件辅助符号解析。
    • 关键跳转:通过异常处理函数计算恶意代码地址(0x0048BA44)。
2. 反调试与反虚拟机
  • 检测手段
    • 杀软进程检测:卡巴斯基、AVG、BitDefender、DwEngine。
    • 调试器检测
      • ZwQueryInformationProcess 查询进程调试标志。
      • 检查 PEB BeingDebugged 位。
    • 虚拟机检测:通过硬件特征(如厂商字符串、特定端口)识别虚拟环境。
3. 多阶段解密与加载
  1. 第一阶段(Delphi 样本)

    • 解密 Shellcode:获取 API 地址表,构建功能调用。
    • 解密资源数据:两次解密(异或或 AES)后得到 PE 文件。
    • 进程替换(Process Hollowing)
      CreateProcessW(..., CREATE_SUSPENDED, ...); // 创建挂起进程
      ZwUnmapViewOfSection();                    // 卸载原进程内存
      NtCreateSection() + NtMapViewOfSection();  // 映射恶意PE到子进程
      SetThreadContext() + ZwResumeThread();     // 恢复执行
      
  2. 第二阶段(UPX 加壳 PE)

    • 脱壳后提取资源中的 C# 程序(dump3.bin)。
    • 手动加载 CLR 执行 C# 代码。
  3. 第三阶段(C# 远控模块)

    • 功能通过 dnSpy 分析,主要逻辑包括:
      • 键盘记录(记录窗口标题与按键)。
      • 持久化(注册表、自启动目录)。
      • 横向移动(通过 USB 传播 autorun.inf)。

0x02 核心功能实现

  • 远控功能

    • 命令列表
      命令 功能
      CAP 屏幕截图
      un 卸载/重启样本
      key 键盘记录
    • 数据回传:发送系统信息至 C2(115.186.136.237:5555)。
  • 持久化

    • 复制自身到 %Temp% 和开始菜单。
    • 注册表键:HKCU\Software\Microsoft\Windows\CurrentVersion\Run
  • USB 传播

    • 释放文件:
      • [USB]\<随机名>.exe
      • [USB]\autorun.inf
        [AutoRun]
        open=malware.exe
        shell\open=恶意程序
        

0x03 关键技术点总结

  1. 多阶段加载
    • 通过异常处理、资源解密、进程替换实现隐蔽加载。
  2. 反分析
    • 动态解密 + 多态代码(避免静态分析)。
    • 调试器/虚拟机检测增加分析难度。
  3. 进程替换(Process Hollowing)
    • 经典技术,但结合 Delphi 与 C# 混合编程较少见。
  4. C# 反射加载
    • 资源中的 PE 通过 CLR 动态加载,规避文件落地检测。

0x04 检测与防御建议

  • 检测指标
    • 进程行为:父进程创建挂起子进程并修改内存。
    • 网络连接:频繁连接固定 IP 的 5555 端口。
    • 注册表修改:自启动项添加异常路径。
  • 防御措施
    • 禁用 USB 自动运行。
    • 监控 CreateProcessCREATE_SUSPENDED 标志。
    • 沙箱检测异常解密行为。

0x05 参考工具

  • 静态分析:IDA Pro + IDR(Delphi 反编译)。
  • 动态分析:x32dbg + MAP 文件。
  • .NET 分析:dnSpy。
  • 行为监控:Process Monitor + Wireshark。

通过本案例可深入理解 NjRat 的混淆技术、多阶段加载逻辑及对抗手段,适用于高级恶意软件分析课程教学。

NjRat 样本分析与技术解析 0x00 样本概述 类型 :NjRat 远控木马(Delphi + C# 混合编写) 特点 :多阶段加载、反调试/反虚拟机、进程替换(Process Hollowing)、资源加密 IOC : IP: 115.186.136.237:5555 MD5: Stage1: c006bf6b9e1fc1fc9f7d8206c94ef424 Stage2: 21df60db9211654e785ffbb2d742cc11 Stage3: 7b2da42826ada69f800559e7e4ca7376 0x01 技术分析流程 1. 初始样本分析 文件信息 : 编写语言:Delphi(含混淆) 加密数据:核心功能模块通过加密存储在样本中。 调试方法 : 使用 x32dbg 动态调试,配合 IDR 生成 MAP 文件辅助符号解析。 关键跳转:通过异常处理函数计算恶意代码地址( 0x0048BA44 )。 2. 反调试与反虚拟机 检测手段 : 杀软进程检测 :卡巴斯基、AVG、BitDefender、DwEngine。 调试器检测 : ZwQueryInformationProcess 查询进程调试标志。 检查 PEB BeingDebugged 位。 虚拟机检测 :通过硬件特征(如厂商字符串、特定端口)识别虚拟环境。 3. 多阶段解密与加载 第一阶段(Delphi 样本) : 解密 Shellcode:获取 API 地址表,构建功能调用。 解密资源数据:两次解密(异或或 AES)后得到 PE 文件。 进程替换(Process Hollowing) : 第二阶段(UPX 加壳 PE) : 脱壳后提取资源中的 C# 程序( dump3.bin )。 手动加载 CLR 执行 C# 代码。 第三阶段(C# 远控模块) : 功能通过 dnSpy 分析,主要逻辑包括: 键盘记录(记录窗口标题与按键)。 持久化(注册表、自启动目录)。 横向移动(通过 USB 传播 autorun.inf )。 0x02 核心功能实现 远控功能 : 命令列表 : | 命令 | 功能 | |-------|--------------------------| | CAP | 屏幕截图 | | un | 卸载/重启样本 | | key | 键盘记录 | 数据回传 :发送系统信息至 C2( 115.186.136.237:5555 )。 持久化 : 复制自身到 %Temp% 和开始菜单。 注册表键: HKCU\Software\Microsoft\Windows\CurrentVersion\Run 。 USB 传播 : 释放文件: [USB]\<随机名>.exe [USB]\autorun.inf : 0x03 关键技术点总结 多阶段加载 : 通过异常处理、资源解密、进程替换实现隐蔽加载。 反分析 : 动态解密 + 多态代码(避免静态分析)。 调试器/虚拟机检测增加分析难度。 进程替换(Process Hollowing) : 经典技术,但结合 Delphi 与 C# 混合编程较少见。 C# 反射加载 : 资源中的 PE 通过 CLR 动态加载,规避文件落地检测。 0x04 检测与防御建议 检测指标 : 进程行为:父进程创建挂起子进程并修改内存。 网络连接:频繁连接固定 IP 的 5555 端口。 注册表修改:自启动项添加异常路径。 防御措施 : 禁用 USB 自动运行。 监控 CreateProcess 的 CREATE_SUSPENDED 标志。 沙箱检测异常解密行为。 0x05 参考工具 静态分析:IDA Pro + IDR(Delphi 反编译)。 动态分析:x32dbg + MAP 文件。 .NET 分析:dnSpy。 行为监控:Process Monitor + Wireshark。 通过本案例可深入理解 NjRat 的混淆技术、多阶段加载逻辑及对抗手段,适用于高级恶意软件分析课程教学。