伪装“Mem Reduct”安装包的木马逆向分析报告
- 分析日期:2026-10-15
- 样本目录:
C:\Users\Wzz\Downloads\memreduct-setup\memreduct-setup - 分析工具:pefile / capstone(静态反汇编)、IDA MCP、自定义 Python 解密脚本
- 结论一句话:这是一款把微软正版签名程序当“外壳”、通过 DLL 侧加载释放并秘密安装 ScreenConnect(ConnectWise Control)远程控制后门的投毒安装包。
一、样本文件清单与哈希
| 文件 | 大小(字节) | 性质 |
|---|---|---|
memreduct-setup.exe |
75,968 | 正版微软签名程序(SQL Server Bootstrapper,被改名为安装器宿主) |
SqlSetupBootstrapper.dll |
19,982 | 恶意加载器(无签名,MinGW-w64 编译) |
redist\2022\mfcm140.dll |
6,737,920 | 加密载荷(前半),非合法 DLL |
redist\2022\mfcm140u.dll |
6,737,920 | 加密载荷(后半),非合法 DLL |
redist\2022\vcomp140.dll |
381,582 | 真正的 Mem Reduct 3.5.2 官方安装包(幌子) |
| (解密产物)MSI | 13,475,840 | 解密拼接得到的真实载荷 = ScreenConnect 客户端 MSI |
配套目录里还有大量微软正版 VC++ 运行库(msvcp140.dll、vcruntime140.dll、concrt140.dll、msvcp_win.dll、msvcrt.dll、ucrtbase.dll、msvcr120/msvcp120/vcomp120.dll 等),签名均为 Valid —— 作用有二:一是让整个包"看起来像个正常安装器",二是给侧加载的正版宿主程序提供真实依赖。
二、感染链总览
用户双击 memreduct-setup.exe
│
▼
[1] memreduct-setup.exe = 正版微软签名 SQL Server Bootstrapper
它本是 SQL Server 安装引导程序,导入 5 个 SqlSetupBootstrapper 函数;
由于该函数从“本地同目录”优先加载同名 DLL → 触发 DLL 侧加载 (DLL Side-Loading)
│
▼
[2] 同目录的 SqlSetupBootstrapper.dll(恶意)被加载,其 DllMain 直接启动恶意逻辑
│
▼
[3] 读取 redist\2022\mfcm140.dll + mfcm140u.dll(伪装成 VC 运行库)
两文件各 6.7 MB,实为同一份数据被切成两半,分别用 XOR 加密
│
▼
[4] 解密:逐字节 XOR,4 字节轮转密钥 [0x4E, 0x7A, 0xB3, 0xD1]
算法 d[i] = e[i] ^ key[i & 3] (字节 0 亦为 key[0]=0x4E)
两段拼接 → 得到完整 13.4 MB MSI
│
▼
[5] 落地:GetTempPathW → GetTempFileNameW(文件名前缀 "SC")→ 写入 %TEMP%\SCxxxx.TMP
│
▼
[6] 执行:调用 System32\msiexec.exe 以静默方式安装该 MSI(/qn /norestart)
│
▼
[7] MSI 安装 ScreenConnect 远控客户端(合法产品,被滥用为后门)
│
▼
[8] 善后:用 PowerShell 延迟 180 秒执行
Remove-Item -Force -LiteralPath '<自身路径>' → 删除安装包自身,反取证
同时 redist\2022\vcomp140.dll(真正的 Mem Reduct 3.5.2 官方安装包)被当作"正常的软件本体",用来向用户交代"这就是我下载的 Mem Reduct",掩盖真实目的。真正的 Mem Reduct 程序文件本身未被篡改,问题出在这个投毒分发包。
三、加载器 SqlSetupBootstrapper.dll 逆向细节
3.1 基本信息
- 镜像基址
ImageBase = 0x292D70000,入口点RVA = 0x12EF,DllMain 位于0x292D72258 - 编译器:MinGW-w64 / GCC 15.2.0(Brecht Sanders r7),非 MSVC —— 常见的“造假/免杀”选择
- 无数字签名、无版本资源
- 节区:
.text、.data、.rdata、.eh_fram、.pdata、.xdata、.bss、.edata、.idata、.tls、.reloc
3.2 导出函数是“空壳”
DLL 导出的 5 个函数与宿主 exe 导入名一一对应,但全部是桩函数(返回常量),只为满足正版宿主的导入需求、让侧加载"名正言顺":
| 导出名 | 地址 |
|---|---|
EnforceSetupPreReqs |
0x292D72270 |
IsLocalSetupAtHigherVersion |
0x292D72280 |
LaunchLocalSetup |
0x292D72290 |
LaunchManagedSetup |
0x292D722A0 |
ExecuteNativeSetupCleanUp |
0x292D722B0 |
真正的恶意逻辑不在导出里,而在 DllMain(0x292D72258) 中直接触发——这是恶意侧加载 DLL 的典型写法。
3.3 字符串混淆(XOR 0x5A)
样本几乎不使用明文 ASCII/宽字符,而是把宽字符串整段 逐字节 XOR 0x5A 存在 .rdata。静态解码后得到关键字符串:
| 偏移(RVA) | 解码结果 | 用途 |
|---|---|---|
0x50A0 |
-NoProfile -NonInteractive -WindowStyle Hidden -Command "Start-Sleep 180; Remove-Item -Force -LiteralPath '…' |
自删除(延迟 180 秒反取证) |
0x5180 |
\WindowsPowerShell\v1.0\powershell.exe |
执行自删除的进程路径 |
0x51D0 |
\msiexec.exe |
静默安装 MSI |
0x5200 |
redist\2022\vcomp140.dll |
幌子:真 Mem Reduct 安装包 |
0x5240 |
redist\2022\mfcm140u.dll |
加密载荷后半 |
0x5280 |
redist\2022\mfcm140.dll |
加密载荷前半 |
| (代码立即数) | C:\Windows\System32 |
拼接 msiexec/powershell 绝对路径 |
| (代码立即数) | " /i、/qn /norestart |
构造 msiexec 命令行 |
3.4 核心解密与落地函数
主逻辑集中在 0x292D7159B–0x292D7225D。关键调用序列:
- 路径构造:
lstrcpyW+lstrcatW拼接出redist\2022\mfcm140.dll、redist\2022\mfcm140u.dll的完整路径 - 打开/读取:
CreateFileW(0x80000000= GENERIC_READ)→ 得到句柄r14/rbp - 取大小:
GetFileSizeEx(r14,&size1)、GetFileSizeEx(rbp,&size2),total = size1 + size2 - 分配:
GetProcessHeap→HeapAlloc(heap, 0, total) - 读入:
ReadFile(file1)写入缓冲区前段,ReadFile(file2)写入缓冲区后段(两文件在内存中首尾拼接) - 解密:
- 对前半段(mfcm140):
d[0]=e[0]^0x4E;for i=1..n-1: d[i]=e[i]^key[i&3],key 表位于 RVA0x52AE- 对后半段(mfcm140u):首字节^=0x4E,余下用[rip+0x3925]处同一张 key 表循环 XOR - 密钥 4 字节 =4E 7A B3 D1,即等价于全程d[i] = e[i] ^ key[i & 3] - 落地:
GetTempPathW→GetTempFileNameW(…, 前缀 L"SC", …)→CreateFileW(0x40000000)→WriteFile写出%TEMP%\SCxxxx.tmp - 执行:通过动态解析的函数指针执行,并结合
C:\Windows\System32拼出msiexec.exe,以" /i <temp> /qn /norestart"静默安装 - 清理:调用
powershell.exe执行Start-Sleep 180; Remove-Item -Force -LiteralPath '<安装包路径>'实现自删除
注:载荷的关键信息并用 XOR 0x4E + 4 字节轮转密钥而非简单单字节,进一步体现了有意的免杀/混淆设计。
四、解密载荷分析:它到底是什么
把两段解密后按 前半 + 后半 拼接,输出 13,475,840 字节,结构为 OLE2 / 复合文件(Compound File Binary),文件头 D0 CF 11 E0 A1 B1 1A E1 —— 即 MSI 安装包。其目录表内的流名是 MSI 特有的编码形式(在编辑器里显示为似中文乱码,属正常现象)。
解析其内部流并提取字符串后,得到大量明确特征:
ScreenConnect.Client.dll
ScreenConnect.ClientService.dll
ScreenConnect.Core.dll
ScreenConnect.Windows.dll
ScreenConnect.WindowsClient.exe
ScreenConnect.WindowsFileManager.exe
ScreenConnect.WindowsBackstageShell.exe
ScreenConnect.WindowsCredentialProvider.dll
ScreenConnect.WindowsAuthenticationPackage.dll
ScreenConnect.InstallerActions.dll / ScreenConnect.InstallerActions!…
ConnectWiseControl
ScreenConnect Software / ScreenConnect Elevation
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" …
Microsoft.Deployment.WindowsInstaller.dll
SfxCA.pdb / wixca.dll / E:\delivery\Dev\wix37_public\build\ship\x86\SfxCA.pdb
结论:
- 该 MSI 是 ScreenConnect / ConnectWise Control 的“客户端(Client)”安装包(由 WiX 工具链构建,含 WiX 标准自定义动作
wixca.dll、SfxCA.dll)。 - ScreenConnect 是合法商业远程控制软件,但被攻击者广泛滥用为远控后门(RAT):装上后攻击者可在你不知情时远程查看屏幕、操控键鼠、传文件、开代理,权限通常等同本机用户,配合 UAC 提权后即为完全控制。
- 载荷中不包含任何 SRBMiner / 矿机 / 矿池 / WinRing0 特征 —— 说明这层"Mem Reduct 投毒包"投放的是远控后门,与之前清除的 SRBMiner 挖矿属于不同的一层恶意代码(很可能是同一投毒渠道里的复合投放,或不同批次)。
需要特别指出:远控后门在危害上远高于挖矿——挖矿只偷算力,远控可以偷数据、盗账号、横向渗透。
五、本机现状核查(定向检查,未做全盘扫描)
针对该后门是否已经在本机落地做了定向排查,结果全部为“无”:
| 检查项 | 结果 |
|---|---|
| 服务名/显示名含 ScreenConnect / ConnectWise | 无 |
| 进程名含 ScreenConnect / ConnectWise | 无 |
Program Files / Program Files (x86)\ScreenConnect Client (x86) |
不存在 |
ProgramData\ScreenConnect / ConnectWise Control 目录 |
不存在 |
| 卸载表(HKLM + WOW6432Node Uninstall) | 无相关项 |
MSI 产品码(HKLM\SOFTWARE\Classes\Installer\Products) |
无相关项 |
| 计划任务 / 注册表关键词 | 无 |
判断:本机未真正安装该 ScreenConnect 后门。 最可能是你没有执行 memreduct-setup.exe(或执行后被拦截),仅浏览/保留了该文件夹。
六、处置建议
- 立即删除投毒目录:整个
C:\Users\Wzz\Downloads\memreduct-setup(含子目录redist)直接删除,切勿再运行其中任何 exe。删除时直接删、不进回收站(如需要我可以代劳)。 - 软件来源整改:Mem Reduct 只从官方渠道获取(官网
https://www.henrypp.org/product/memreduct或 GitHubHenryPP/MemReduct);本次的盗版包已确认投毒,请避免再访问该类下载站。 - 密码安全:由于该样本意图安装远控(虽本机无残留),稳妥起见建议修改常用账号密码(邮箱、网银、常用网站)。
- 保留证据:若打算向平台/厂商反馈,保留本报告与样本哈希;如需,我可以把样本与其解密产物一起归档。
- 日常防护:以火绒(你当前主杀软)为主做一次快速查杀;之前 SRBMiner 已做彻底清除并封禁过 C2
84.247.176.79,两者相互独立,无需重复处理。
七、IOC(失陷指标)汇总
文件哈希(SHA256)
memreduct-setup.exe F0B332ED4FF4F4DDE04CF7463B6ABA23D8CD3198BD763A627C5C196C2D775760
SqlSetupBootstrapper.dll 55EA3647E0FC51083520BCFA6E229316A229DA6BA59E6CA22ACF85847AF7C234
mfcm140.dll FE9DAF07951E667BD9C53C334334314117B9438FF5C2D3C2EDEC806FD17DCA6E
mfcm140u.dll EC314F6F4CDAA05ED202DB7B2264F98FCE77A38EBF9EAFFD65539FB4946285CA
(解密 MSI) 64C415A2ABDB6008DE1BAF508D6122D1CF46B295C164441E93D294438F4743A2
行为特征
- 正版微软签名 exe(SQL Server Bootstrapper)旁挂同名恶意 DLL,触发侧加载
- 载荷以“VC 运行库名”
mfcm140.dll/mfcm140u.dll命名,实为加密数据 - 解密算法:字节级 XOR,轮转密钥
[0x4E,0x7A,0xB3,0xD1] - 落地文件名前缀
SC(%TEMP%\SC????.tmp),扩展名.tmp - 通过
msiexec /i … /qn /norestart静默安装,目标为 ScreenConnect Client - PowerShell
Start-Sleep 180; Remove-Item -Force -LiteralPath自删除
持久化/落地物(若被安装)
- 服务:ScreenConnect Client(服务名可能为
screenconnect.clientservice等) - 目录:
C:\Program Files (x86)\ScreenConnect Client*、C:\ProgramData\ScreenConnect* - 与远程 ScreenConnect 服务器建立出站长连接(在 MSI 内嵌配置/参数中指定服务器地址)
还没有评论,来抢沙发~