伪装“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。关键调用序列:

  1. 路径构造:lstrcpyW + lstrcatW 拼接出 redist\2022\mfcm140.dll、redist\2022\mfcm140u.dll 的完整路径
  2. 打开/读取:CreateFileW(0x80000000 = GENERIC_READ)→ 得到句柄 r14/rbp
  3. 取大小:GetFileSizeEx(r14,&size1)、GetFileSizeEx(rbp,&size2),total = size1 + size2
  4. 分配:GetProcessHeap → HeapAlloc(heap, 0, total)
  5. 读入:ReadFile(file1) 写入缓冲区前段,ReadFile(file2) 写入缓冲区后段(两文件在内存中首尾拼接)
  6. 解密: - 对前半段(mfcm140):d[0]=e[0]^0x4E;for i=1..n-1: d[i]=e[i]^key[i&3],key 表位于 RVA 0x52AE - 对后半段(mfcm140u):首字节 ^=0x4E,余下用 [rip+0x3925] 处同一张 key 表循环 XOR - 密钥 4 字节 = 4E 7A B3 D1,即等价于全程 d[i] = e[i] ^ key[i & 3]
  7. 落地:GetTempPathW → GetTempFileNameW(…, 前缀 L"SC", …) → CreateFileW(0x40000000) → WriteFile 写出 %TEMP%\SCxxxx.tmp
  8. 执行:通过动态解析的函数指针执行,并结合 C:\Windows\System32 拼出 msiexec.exe,以 " /i <temp> /qn /norestart" 静默安装
  9. 清理:调用 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(或执行后被拦截),仅浏览/保留了该文件夹。


六、处置建议

  1. 立即删除投毒目录:整个 C:\Users\Wzz\Downloads\memreduct-setup(含子目录 redist)直接删除,切勿再运行其中任何 exe。删除时直接删、不进回收站(如需要我可以代劳)。
  2. 软件来源整改:Mem Reduct 只从官方渠道获取(官网 https://www.henrypp.org/product/memreduct 或 GitHub HenryPP/MemReduct);本次的盗版包已确认投毒,请避免再访问该类下载站。
  3. 密码安全:由于该样本意图安装远控(虽本机无残留),稳妥起见建议修改常用账号密码(邮箱、网银、常用网站)。
  4. 保留证据:若打算向平台/厂商反馈,保留本报告与样本哈希;如需,我可以把样本与其解密产物一起归档。
  5. 日常防护:以火绒(你当前主杀软)为主做一次快速查杀;之前 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 内嵌配置/参数中指定服务器地址)