__ .__ _____ __ __ .__ __
_____ / |_||/ __ ____/ | | | _||/ |
_ \ __ \ \ \ \ \ _/ _\ \ | |/ / \
/ __ | | /| | | || | / __ \ _| | | <| || |
( /| || |||__| (___ /___ >| ||_ __||__|
/ / / /
恶意内存痕迹生成工具包 v1.0 | Forrest Orr | 2020
必需
--alloc-type {dll-map-hollow|dll-load-hollow|txf-dll-map-hollow|private|mapped}
可选
--payload-file <路径> --payload-type {PE|shellcode} --exec-method {create-thread|call|ep-jmp-hook} --stealth {wipe-headers|mirror-headers|rw-rx|dotnet|moat|peb-img-base} --moat-size <大小> --hollow-dll-file <路径>
--payload-file 包含用作植入物的 shellcode 或 PE 的文件。如果用户未提供,仍会分配指定区域类型,但不会植入任何代码。 --payload-type 指定有效载荷文件中存储的代码类型。必须为 shellcode 或 MZ PE。如果指定了有效载荷文件,则需要此参数。 --alloc-type 创建用于保存有效载荷植入物的动态内存的方式。
dll-map-hollow 从 System32 中的 DLL 生成的映像节区视图。
dll-load-hollow 通过 LoadLibrary 从 System32 加载的 DLL。
txf-dll-map-hollow 从 System32 中已植入有效载荷的事务性 DLL 生成的映像节区视图。
private 通过 NtAllocateVirtualMemory 分配的私有内存区域。
mapped 从 Windows 页面文件派生的节区的映射视图。
--exec-method 在指定内存区域植入有效载荷代码后调用该代码的方法。
create-thread 使用 CreateThread API 执行有效载荷。
call 使用常规 CALL 汇编指令执行有效载荷。
ep-jmp-hook 通过进程 EXE 入口点的内联 JMP 执行有效载荷。
--stealth 对分配区域的可选混淆。
wipe-headers 将内存中有效载荷的 PE 头部覆盖为 0。仅对 PE 有效载荷有效。
mirror-headers 在使用有效载荷 PE 文件植入已掏空的 DLL 后,保留该 DLL 的原始 PE 头部。仅对使用映像区域类型的 PE 有效载荷有效。
rw-rx 不直接以 +RWX 权限分配植入区域,而是先以 +RW 分配,然后设置为 +RX。仅对私有和映射区域类型有效。
dotnet 在掏空操作期间仅选择具有 .NET 头部的 DLL。仅对映像区域类型有效。
moat 在分配区域中 shellcode 之前用 0 预填充。默认使用 1MB 填充。不适用于带有掏空 DLL 的 shellcode 植入物。不能与 TxF 分配类型一起使用。
peb-img-base 更新 PEB 中的映像基址字段,使其指向新分配的区域。
--moat-size 在有效载荷植入物之前生成的数据护城河大小。仅当指定了 moat 隐藏选项时才需要。默认大小为 1MB。 --hollow-dll-file 手动指定用于掏空分配类型的 DLL 路径。未指定时,将从 Windows 目录或其子文件夹中随机选择一个合适的 DLL。
示例
在映射的 32 位 DLL 映像的 .text 节中创建一个 32 位 shellcode 植入物,并使用 CALL 指令执行它:
ArtifactsKit32.exe --payload-type shellcode --payload-file Payloads\MsgboxShellcode32.bin --alloc-type dll-map-hollow
在 +RWX 映射页面文件内存区域中,从其分配基址偏移 +1MB 处创建一个 64 位 shellcode 植入物,并使用 KERNEL32.DLL!CreateThread API 执行它:
ArtifactsKit64.exe --payload-type shellcode --payload-file Payloads\MsgboxShellcode64.bin --alloc-type mapped --stealth moat
在 32 位 DLL 映像的映射映像内存上创建一个 32 位 PE 植入物,同时保留其原始头部,并使用 CALL 执行有效载荷 PE 的 IMAGE_OPTIONAL_HEADER.AddressOfEntryPoint:
ArtifactsKit32.exe --payload-type pe --payload-file Payloads\TestExe32.exe --alloc-type dll-map-hollow --stealth mirror-headers
在修改后的 64 位 DLL TxF 节的映射映像内存中创建一个 64 位 PE 植入物(即幻影 DLL 掏空),并使用来自工件父进程 IMAGE_OPTIONAL_HEADER.AddressOfEntryPoint 的 JMP 钩子执行其 IMAGE_OPTIONAL_HEADER.AddressOfEntryPoint:
ArtifactsKit64.exe --payload-type pe --payload-file Payloads\TestExe64.exe --alloc-type txf-dll-map-hollow --exec-method ep-jmp-hook