一个略绕的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
- Stage1:
- IP:
0x01 技术分析流程
1. 初始样本分析
- 文件信息:
- 编写语言:Delphi(含混淆)
- 加密数据:核心功能模块通过加密存储在样本中。
- 调试方法:
- 使用
x32dbg动态调试,配合IDR生成 MAP 文件辅助符号解析。 - 关键跳转:通过异常处理函数计算恶意代码地址(
0x0048BA44)。
- 使用
2. 反调试与反虚拟机
- 检测手段:
- 杀软进程检测:卡巴斯基、AVG、BitDefender、DwEngine。
- 调试器检测:
ZwQueryInformationProcess查询进程调试标志。- 检查 PEB
BeingDebugged位。
- 虚拟机检测:通过硬件特征(如厂商字符串、特定端口)识别虚拟环境。
3. 多阶段解密与加载
-
第一阶段(Delphi 样本):
- 解密 Shellcode:获取 API 地址表,构建功能调用。
- 解密资源数据:两次解密(异或或 AES)后得到 PE 文件。
- 进程替换(Process Hollowing):
CreateProcessW(..., CREATE_SUSPENDED, ...); // 创建挂起进程 ZwUnmapViewOfSection(); // 卸载原进程内存 NtCreateSection() + NtMapViewOfSection(); // 映射恶意PE到子进程 SetThreadContext() + ZwResumeThread(); // 恢复执行
-
第二阶段(UPX 加壳 PE):
- 脱壳后提取资源中的 C# 程序(
dump3.bin)。 - 手动加载 CLR 执行 C# 代码。
- 脱壳后提取资源中的 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:[AutoRun] open=malware.exe shell\open=恶意程序
- 释放文件:
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 的混淆技术、多阶段加载逻辑及对抗手段,适用于高级恶意软件分析课程教学。