2026 年 9 月,某 QQ 编程技术交流群(195 人)中,用户 上传了一个名为 "寒霜破甲1.1.zip" 的压缩包(145.61MB,14 次下载),声称可破甲 Cursor GPT-6.0





实际上,该压缩包释放的 cursor.exe(191 KB)是一个 银狐(Silver Fox)远控木马加载器,伪装成 Cursor 程序图标,落地路径为:
受害者双击后,木马隐藏控制台窗口,在后台完成:
任务管理器启动项中出现的 "Msdnloader" 条目即为该木马的持久化痕迹。
攻击链时间线:
时间
事件
2026-09-12
木马编译(内嵌 build date: 2026.9.12)
2026-09-12
"Te amo" 在 QQ 群上传 rar 压缩包
2026-09-18 20:39
cursor.exe 落地到受害者 Temp\HotWater 目录
2026-10-01
分析时 C2 端口仍开放,但控制端已下线
属性
值
文件名
cursor.exe(原始名: 远控样本.exe)
大小
195,584 字节 (191 KB)
MD5
4c905d4637b5fdf61f0abd33927b1ac5
SHA256
8bf4356b94909590ed12cbfc8841d3b504eab07b22274a1cd79e3cf601e8dd55
CRC32
0x9020B8B
架构
x64 PE (IMAGE_FILE_MACHINE_AMD64)
编译器
MSVC (PlatformToolset v143 / VS 2022)
链接库
CRT 静态链接,WS2_32.dll / USER32 / ADVAPI32 / WINMM / KERNEL32
入口点
start (0x140006304) → _tmainCRTStartup → wmain
ImageBase
0x140000000
ImageSize
0x37000 (225 KB)
PE 节表:
节名
虚拟地址
原始大小
内容
.text
0x1000
0x11000
代码段,全部恶意逻辑
.rdata
0x12000
0x4C00
导入表 / vtable / 常量
.data
0x17000
0x2000
加密配置 blob + 全局变量
.pdata
0x1D000
0xE00
异常处理表
.rsrc
0x1E000
0x16800
图标资源 (6个图标,伪装 Cursor)
.reloc
0x35000
0x600
重定位表
无 overlay(文件末尾无附加数据),无嵌入 payload——此样本是纯 loader,二阶段 payload 从 C2 下发或注册表缓存读取。
截至分析时(2026-10-01),该样本在 50+ 引擎中仅 2 个检出,国内主流杀软(360、火绒、瑞星、金山)全部漏报。



手法
实现细节
隐藏窗口
ShowWindow(GetConsoleWindow(), SW_HIDE) 用户看不到任何界面
反调试
TopLevelExceptionFilter 中 IsDebuggerPresent() 检测,有调试器则不写 dump
崩溃转储
DbgHelp.dll!MiniDumpWriteDump 写 !analyze -v-YYYYMMDD-HHMMSS.dmp,供攻击者远程诊断
动态 API
进程注入用的 7 个 kernel32 API 全部通过索引+栈上拼字符串+GetProcAddress 解析,IAT 中不可见
配置混淆
配置串以 wcsrev() 整体反转存储,所有注册表键名 / 值名栈上拼装,静态扫描无法提取字符串
内存擦除
Payload 执行后用 buf[i] = i ^ 0xA5 覆写原始内存,另起线程 200ms 后二次覆写
InstallPersistence_RunKey (0x140003EC0) 在 g_PersistenceFlag_s9 == 1 时执行:
注册表键名通过栈上 DWORD 数组拼装宽字符,尽管不是传统加密,但静态字符串搜索无法命中。任务管理器启动项可见条目名称可能显示为 "Msdnloader" 或文件名本身。

持久化函数:栈上拼装 Run 键路径 + WinHostSvc 值名
样本仅导入 WS2_32.dll(原始 socket),不使用 HTTP。网络行为特征:
配置存储在 .data 段全局变量 g_ConfigBlob_Reversed(VA 0x140017080,0x7D0 字节),以 UTF-16LE 宽字符串整体反转 形式存储。这不是传统加密,但足以让静态字符串搜索完全失效。
解密流程 (DecryptAndParseConfig, 0x140003AB4):

配置解密函数:wcsrev + 按 k7:/m3:/n8: 等 key 逐条提取
文件中原始字节(反转前):
wcsrev() 后的明文:
键
全局变量
值
含义
k7
g_C2_HostA_k7
106.55.224.100
主 C2 IP(腾讯云)
m3
g_C2_PortStrA_m3
8083
主 C2 端口
n8
g_C2_EnableA_n8
1
启用标志
k8
g_C2_HostB_k8
127.0.0.1
备用 C2(占位)
m4
g_C2_PortStrB_m4
8888
备用端口
n9
g_C2_EnableB_n9
1
启用标志
k9
g_C2_HostC_k9
127.0.0.1
第三 C2(占位)
m5
g_C2_PortStrC_m5
80
第三端口
n0
g_C2_EnableC_n0
1
启用标志
r2
g_InitDelaySec_r2
1
初始延迟(秒)
r3
g_ReconnectDelaySec_r3
1
重连间隔(秒)
r4
g_GroupName_r4
默认
分组/战役标签
r5
g_Version_r5
1.0
版本号
r6
g_BuildDate_r6
2026.9.12
编译日期
r7
g_Flag_r7
0
标志位
s7
g_ProcessHollowFlag_s7
0
0=反射加载, 1=进程镂空
s9
g_PersistenceFlag_s9
1
1=写 Run 注册表自启动
C2WorkerThread 无限循环中:
双向统一格式,每个 TCP 帧结构如下:
连接时由客户端生成 10 字节 key,服务端从第一个帧的 [4:14] 读取:
DeriveFrameTail6Bytes (0x1400013E8):
XorKeyDerive_AddConst91 (0x140001000) 返回 (byte + 91) & 0xFF。
Keystream 生成规则:
前 7 字节的 key 参与循环,加解密对称(异或)。


CmdHandler_DispatchPayload (0x140002920) 根据解密后 payload 第一字节分发:

命令字节
含义
处理
0xB1
心跳
直接返回
0x65 (101)
查询缓存
读 HKCU\QkNetK1\1,匹配则执行缓存,否则发 'r' 请求
其他
payload 下发
头 0xA44B 存元数据,其余为 PE body,缓存到注册表后执行
样本本身 不包含内嵌 payload,二阶段 PE 文件通过 C2 TCP 通道下发,或从注册表缓存 HKCU\QkNetK1\1 读取。
CmdHandler_LoadAndExecutePayload (0x140002644) 的完整逻辑:
步骤 1: 配置注入
步骤 2A: 进程镂空(g_ProcessHollowFlag_s7 == 1 时)
ProcessHollowing_InjectTracerpt (0x140002300):
Payload 加载主逻辑:搜索 qklogintagx1 → patch 配置 → 注入/反射加载

进程镂空:动态解析 7 个 API → 创建 tracerpt.exe → 注入 → ResumeThread

反射 PE 加载器:验证 MZ/PE/AMD64 → 映射节区 → 重定位 → IAT → DllMain


传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!!
最后于 8小时前
被音混不散编辑
,原因: