Hagrid29/PELoader

GitHub: Hagrid29/PELoader

一个集成了多种 shellcode 注入技术的 PE 加载器,用于在 Windows 环境下隐蔽执行加密的 PE 文件。

Stars: 449 | Forks: 65

# PELoader PELoader 实现了多种 shellcode 注入技术,并使用 [libpeconv](https://github.com/hasherezade/libpeconv) 库来加载加密的 PE 文件,而不是将 shellcode 注入到远程线程中。 已实现以下技术: - Module Stomping (LoadLibrary) - Module Stomping (NtMapViewOfSection) ([PoC](https://github.com/hasherezade/module_overloading)) - Transacted Hollowing ([PoC](https://github.com/hasherezade/transacted_hollowing)) - Ghostly Hollowing ([PoC](https://github.com/hasherezade/transacted_hollowing#ghostly-hollowing)) - Herpaderply Hollowing([PoC](https://github.com/Hagrid29/herpaderply_hollowing)) - NtMapViewOfSection (RWX-RW-RX) - NtAllocateVirtualMemory (RW-RX) 致谢:我的大部分工作基于 @hasherezade 的 [PoC](https://github.com/hasherezade/) 脚本。 ## 测试 PELoader 在安装了 Cortex XDR / SentinalOne / Windows Defender / CrowdStrike 的 Windows 10 上进行了测试,其中 Windows Defender / CrowdStrike 检测到了 Transacted Hollowing 技术。每种技术的特征使用 @forrest-orr 的内存扫描工具 [Moneta](https://github.com/forrest-orr/moneta) 进行了测试。 **Module Stomping (LoadLibrary)** 调用 LoadLibrary 加载合法的 DLL。用 payload 覆盖 DLL。 优点 - payload 以 MEM_IMAGE 形式映射,对于 EXE 或 DLL 看起来是合法的 - 伪装成合法的 DLL - 节以原始访问权限映射(无 RWX) ![cdll](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/7b1c9db6f9121602.png) **Module Stomping (NtMapViewOfSection)** 调用 NtCreateSection 为合法的 DLL 创建文件映射对象 (PAGE_READONLY),并调用 NtMapViewOfSection 将其映射到当前进程。用 payload 覆盖该 DLL。 优点 - payload 以 MEM_IMAGE 形式映射,对于 EXE 或 DLL 看起来是合法的 - 伪装成合法的 DLL - 节以原始访问权限映射(无 RWX) - 未连接到模块列表(对 Module32First/Module32Next 不可见) 缺点 - 未连接到模块列表(在下方 Moneta 的扫描结果中检查 "Missing PEB module") ![mdll](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/100f599752121604.png) 参考 @hasherezade 的 [PoC](https://github.com/hasherezade/module_overloading)。 **Transacted Hollowing** Process Hollowing 和 Process Doppelgänging 的混合体。在 NTFS 事务中创建“不可见”文件并将 payload 写入该文件。将节映射到当前进程并执行。 优点 - Payload 以 MEM_IMAGE 形式映射 - 节以原始访问权限映射(无 RWX) - 不需要虚拟文件存在 缺点 - 如果存在 TxF 活动监控则会被检测到 ![txf](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/f18a89d332121607.png) **Ghostly Hollowing** Process Hollowing 和 Process Ghosting 的混合体。创建处于删除待定状态的文件并将 payload 写入该文件。将节映射到当前进程并执行。 优点 - Payload 以 MEM_IMAGE 形式映射 - 节以原始访问权限映射(无 RWX) - 避免“System Idle Process”没有任何映像路径(进程幽灵化的 IOC) 缺点 - 在磁盘上创建了虚拟文件 ![ghost](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/fdd64526a1121609.png)参考 @hasherezade 的 [PoC](https://github.com/hasherezade/transacted_hollowing)。 **NtMapViewOfSection (RWX-RW-RX)** 调用 NtCreateSection 创建内存节 (RWX)。调用 NtMapViewOfSection 将视图映射到当前进程 (RWX)。调用 VirtualProtect 将保护属性更改为 RW。将 shellcode 复制到映射的节。将保护属性更改为 RX 并执行。 优点 - Payload 以 MEM_MAPPED 形式映射,以避免恶意软件中常见的 MEM_PRIVATE 缺点 - 在初始阶段将内存页设置为 RWX 保护 - 具有 RX 保护的异常映射 EXE 内存 ![map](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/7970bdbfe5121610.png) **NtAllocateVirtualMemory (RW-RX)** 调用 NtAllocateVirtualMemory 分配内存 (RW)。将 shellcode 复制到内存。将保护属性更改为 RX 并执行。 优点 - 避免 RWX 内存页 缺点 - 将 shellcode 分段到具有私有类型 MEM_PRIVATE 的内存页 - 具有 RX 保护的异常私有 EXE 内存 ![priv](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/bac04c3bb6121614.png) ## 用法 **AES 加密 Payload** 使用 [pe_to_shellcode](https://github.com/hasherezade/pe_to_shellcode) 将 PE 文件转换为 shellcode,并使用 PELoader 进行加密 ``` cmd> .\pe2shc.exe mimikatz.exe Reading module from: mimikatz.exe [WARNING] This is a console application! The recommended subsystem is GUI. [+] Saved as: mimikatz.shc.exe cmd> set hagrid=enc mimikatz.shc.exe cmd> .\PELoader.exe argument: enc mimikatz.shc.exe Encrypting File ``` **PE 执行** 将参数设置为环境变量 "hagrid" 并执行 PELoader ``` cmd> set hagrid=cdll mimikatz.shc.exe.enc cmd> .\PELoader.exe version argument: cdll mimikatz.shc.exe.enc Classic DLL Hollowing [*] target dll: C:\WINDOWS\system32\aadtb.dll [*] implant dll: mimikatz.shc.exe.enc [*] Loading the DLL (using LoadLibary, classic DLL hollowing)... [*] Overwriting the mapping [*] Module Overloading finished... [*] Executing Implant's Entry Point: 7ff8cf9d7578 [*] Executing Implant as EXE .#####. mimikatz 2.2.0 (x64) #19041 Aug 10 2021 17:19:53 .## ^ ##. "A La Vie, A L'Amour" - (oe.eo) ## / \ ## /*** Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com ) ## \ / ## > https://blog.gentilkiwi.com/mimikatz '## v ##' Vincent LE TOUX ( vincent.letoux@gmail.com ) '#####' > https://pingcastle.com / https://mysmartlogon.com ***/ mimikatz(commandline) # version mimikatz 2.2.0 (arch x64) Windows NT 10.0 build 19043 (arch x64) msvc 150030729 207 mimikatz # ``` ## 改进 - @forrest-orr 在这篇[文章](https://www.forrest-orr.net/post/masking-malicious-memory-artifacts-part-iii-bypassing-defensive-scanners)中对 shellcode 植入的变体进行了详细比较 - @dglenx 将该概念移至远程进程注入,并在这篇[文章](https://www.secforce.com/blog/dll-hollowing-a-deep-dive-into-a-stealthier-memory-allocation-variant/)中提出了几种解决 IOC 的方法 ## 参考 * https://github.com/hasherezade/libpeconv * https://github.com/hasherezade/module_overloading * https://github.com/hasherezade/transacted_hollowing * https://www.forrest-orr.net/post/masking-malicious-memory-artifacts-part-iii-bypassing-defensive-scanners * https://www.secforce.com/blog/dll-hollowing-a-deep-dive-into-a-stealthier-memory-allocation-variant/
标签:Conpot, DLL劫持, DLL注入, DNS 反向解析, EDR绕过, Ghostly Hollowing, Herpaderping, libpeconv, NtMapViewOfSection, OpenAI, PE加载器, Shellcode注入, SSH蜜罐, Transacted Hollowing, Windows安全, 中高交互蜜罐, 免杀技术, 内存扫描, 内存欺骗, 内存规避, 安全测试, 恶意软件开发, 攻击性安全, 暴力破解检测, 流量审计, 端点可见性, 进程注入, 进程镂空, 道德黑客, 高交互蜜罐