0%
毅种循环

模块 68 - Syscalls - 重构映射注入

恶意软件开发课程 - Syscalls - 重构映射注入


模块 68 - Syscalls - 重构映射注入#

Syscalls - 重构映射注入#

简介#

在本模块中,我们将使用直接系统调用(Direct Syscalls)重新实现之前讨论过的 映射注入 (Mapping Injection) 技术。我们将把核心的 WinAPI 替换为它们对应的系统调用版本:

系统调用参数详解#

1. NtCreateSection#

这是 CreateFileMapping 的底层版本。

NTSTATUS NtCreateSection(
  OUT PHANDLE             SectionHandle,          // 接收节对象句柄的指针
  IN ACCESS_MASK          DesiredAccess,          // 访问权限(如 SECTION_ALL_ACCESS)
  IN POBJECT_ATTRIBUTES   ObjectAttributes,       // 设为 NULL
  IN PLARGE_INTEGER       MaximumSize,            // 节的最大大小(Payload 大小)
  IN ULONG                SectionPageProtection,  // 内存保护属性
  IN ULONG                AllocationAttributes,   // 分配属性(如 SEC_COMMIT)
  IN HANDLE               FileHandle              // 设为 NULL(表示使用页文件)
);
c

💡 初学者提示:LARGE_INTEGER

MaximumSize 使用的是 LARGE_INTEGER 结构。在注入 Payload 时,你只需要初始化它的 LowPart(低位部分)为 Payload 的大小。

2. NtMapViewOfSection#

这是 MapViewOfFile 的底层实现,用于将“节”映射到进程的内存空间。

NTSTATUS NtMapViewOfSection(
  IN HANDLE               SectionHandle,      // 由 NtCreateSection 创建的句柄
  IN HANDLE               ProcessHandle,      // 目标进程句柄(自己或远程进程)
  IN OUT PVOID            *BaseAddress,       // 接收映射后的基地址
  // ... 其他参数 ...
  IN OUT PSIZE_T          ViewSize,           // 映射的大小(会自动向上取整为 4096 的倍数)
  IN SECTION_INHERIT      InheritDisposition, // 子进程继承属性(通常选 ViewUnmap)
  // ...
  IN ULONG                Protect             // 内存保护属性
);
c

关键概念:InheritDisposition#

该参数决定了该内存视图是否会分享给未来创建的子进程:

  1. ViewShare:分享。
  2. ViewUnmap:不分享。

实战方案 A:动态调用 (GetProcAddress)#

我们可以通过手动加载 ntdll.dll 并解析地址来调用这些函数。但这无法绕过 EDR 的用户态 Hook。

实战方案 B:SysWhispers3 (间接系统调用)#

推荐使用 SysWhispers3 生成间接系统调用代码,以规避 EDR 监控。

命令示例: python syswhispers.py -m jumper_randomized -f NtCreateSection,NtMapViewOfSection,NtUnmapViewOfSection,NtClose,NtCreateThreadEx -o SysWhispers

实战方案 C:地狱之门 (Hell’s Gate)#

我们同样可以扩充地狱之门的 VX_TABLE 结构。通过 Djb2 哈希动态解析 NtCreateSection 等函数的 SSN 特征码。

⚠️ 重要提醒:清理与延时#

在注入代码中,我们通常会在 Payload 执行完后调用 NtUnmapViewOfSectionNtClose 进行清理。


🎯 总结#

在本模块中,我们学习了:

  1. 映射转换:明确了文件映射技术在内核层对应的 Section(节)对象操作。
  2. 跨进程内存共享:理解了如何通过 SectionHandle 在本地和远程进程间同时“挂载”同一块内存。
  3. 隐蔽性提升:结合之前的 Syscalls 绕过技术,使得 Mapping Injection 这一本就很隐蔽的技术变得更加难以被发现。

📚 下一步学习

下一个模块将探讨 Syscalls - Reimplementing APC Injection。我们将重构另一种极具杀伤力的注入技术:APC 注入!