首页| 论坛| 搜索| 消息
主题:多层嵌套的Python远控木马,从伪装到上线的完整链条
z3960发表于 2026-05-09 06:53
shell Add-MpPreference -ExclusionPath 'C:'
将 C: 整个盘符加入 Defender 排除路径。


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

修改注册表键值:注册表路径值名设为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)


关键辅助函数
函数地址功能sub_18000110C检测 360tray.exe 进程sub_180001280检查持久化是否已设置sub_180001428通过 RPC 创建计划任务sub_180001560禁用 UAC(修改 3 个注册表值)sub_18000163CPowerShell 关闭 Defendersub_180001344读取 base32.pyc 到可执行内存并执行sub_1800011A8创建 KOOK.lnk 快捷方式sub_18000105CCOM 接口操作(防火墙相关)
第九~十层: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 基本信息
项目内容提取文件名rat.dll大小288 KB架构AMD64 PE32+ (DLL)导出函数run (RVA 0x11800)编译器MSVC (含 Dinkumware STL, C++ 异常处理)时间戳0x69BFC7DE
类结构 (RTTI)
类名功能CManager主管理器,命令调度中心CLoginManager登录管理,会话建立与认证CTcpSocketTCP 传输通道CUdpSocketUDP/KCP 传输通道CArqSessionT基于 KCP 的可靠 UDP 传输会话CBuffer数据缓冲区CImage / Gdiplus Bitmap屏幕截图处理
导出函数 run 分析 (RVA 0x11800)
调用 GetComputerNameW 获取计算机名创建互斥量 GlobalMutex_ 防止重复运行检测火绒杀软: GetFileAttributesA("C:Program FilesHuorongSysdiagbinHipsDaemon.exe")通过 DNS-over-HTTPS 解析 C2 地址: https://223.5.5.5/resolve?name=fachuoifachuoi.com&type=A解析成功: 使用返回的 IP解析失败: 回退到硬编码地址 43.154.90.28创建主线程 StartAddress


主线程 StartAddress (0x180011070)
提权:OpenProcessToken + AdjustTokenPrivileges → 获取 SeDebugPrivilegeNtSetInformationProcess(ProcessBreakOnTermination=1) → 防止进程被任务管理器终止初始化延迟: 从配置读取延迟秒数可选线程:sub_180009790: 进程守护线程(监控注入的 svchost.exe,若退出则重新注入)sub_180009190: SeDebugPrivilege 提权 + NtSetInformationProcess初始化传输对象:CTcpSocket (0x18 字节): TCP 传输通道CUdpSocket (0x368 字节): KCP/UDP 传输通道连接循环:交替使用两组 C2 配置每 200 次尝试后切换到备用地址连接成功后进入命令处理循环
C2 通信协议
项目详情主 C2 地址43.154.90.28(腾讯云)备用 C2 解析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 字节):数据收集方式IP 地址列表gethostname + gethostbyname + inet_ntoa空闲时间GetLastInputInfo + GetTickCount主机名gethostname硬件信息GetCurrentHwProfileW (GUID)CPU 核心数GetNativeSystemInfo磁盘/内存GetDiskFreeSpaceExW + GlobalMemoryStatusExGPU/显示器DXGI CreateDXGIFactory 枚举适配器和分辨率前台窗口标题GetForegroundWindow + GetWindowTextWOS 架构GetNativeSystemInfo (x86/x64)当前进程路径GetProcessImageFileNameW系统目录GetSystemDirectoryW区域设置GetLocaleInfoW版本号硬编码 "1.0"安装时间time64 + tick count 计算
C2 命令表 (sub_18000D390)
命令 ID功能详细说明0x00插件管理按名称匹配加载/卸载/更新模块,通过名称比对查找已加载插件0x01安装插件接收插件数据,存入注册表 HKCUConsole1,启动插件执行线程0x02断开重连销毁当前 socket 连接,触发重连循环0x03交互会话开启交互式会话模式0x04屏幕截图通过 DXGI + GDI+ 截取屏幕,返回图像数据0x05文件管理远程文件浏览器,支持浏览/上传/下载/删除等操作0x06交互终端启动命令行 shell,支持实时交互0x07设置标签设置 GROUP 或 REMARK 标识(区分受害者)0x08远程命令执行执行指定命令0x09心跳返回字节 0x150x0A截屏(带参数)指定宽高的屏幕截图0x0B清除事件日志清除 Application、Security、System 三类 Windows 事件日志0x0C触发异常调用 TopLevelExceptionFilter 测试异常处理0x0D退出进程ExitProcess(0)0x0E注销ExitWindowsEx(EWX_LOGOFF)0x0F重启ExitWindowsEx(EWX_REBOOT)0x10关机ExitWindowsEx(EWX_SHUTDOWN)0x11切换传输模式TCP ↔ UDP/KCP 模式切换0x12更新 C2 配置解析 p1/o1/t1 ~ p3/o3/t3 三组备份地址,存入注册表 HKCUConsoleIpDate0x13反向连接启动新的反向连接会话到指定地址0x64存储标记写入 HKCUConsoleIpDatespecial0x65删除标记删除 IpDatespecial 注册表值0xC9交互模式切换开启/关闭交互式会话0xCA发送确认发送确认字节 (0xCB)
键盘记录模块 (sub_1800119B0 + sub_180011DC0)

初始化 (sub_1800119B0)
获取 %LOCALAPPDATA% 路径创建日志文件: %LOCALAPPDATA%DisplaySessionContainers.log创建互斥量保护日志文件访问检查日志文件大小,超过 50MB (0x3200000) 则删除初始化 DirectInput8 (DirectX 输入系统)设置键盘设备: 60 键缓冲区,数据格式 c_dfDIKeyboard设置合作级别: DISCL_BACKGROUND | DISCL_NONEXCLUSIVE(后台静默记录)获取 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 变化:格式化并发送剪贴板内容到 C2CloseClipboard()// 键盘状态轮询DirectInput.GetDeviceData(24 bytes per event)解析 102 个虚拟键码查表转换 scancode → 字符(含 Shift/CapsLock 状态处理)累积按键到缓冲区// 发送按键数据if 缓冲区非空:发送到
下一页上一页  (2/5)
回帖(3):
3 # huwg
05-09 12:32
谢谢分享
2 # huwg
05-09 12:32
了解一次
1 # huwg
05-09 12:32
来看看看

全部回帖(3)»
最新回帖
收藏本帖
发新帖