000nico/instrumentation-callback-injection

GitHub: 000nico/instrumentation-callback-injection

一种利用 NtSetInformationProcess 设置进程仪表化回调来在远程进程中执行 shellcode 的注入技术,绕过传统执行原语检测。

Stars: 1 | Forks: 0

# PICII 🕳️ ### 进程仪表化回调注入 PICII 是一种 shellcode 注入技术,利用 `NtSetInformationProcess` 和 `_PROCESS_INSTRUMENTATION_CALLBACK_INFORMATION` 在远程进程中执行任意 shellcode——无需使用 `CreateThread` 或任何标准执行原语。 ## 工作原理 🧠 `NtSetInformationProcess` 允许您更改进程的行为,在底层设置内部结构。 通过使用 `_PROCESS_INSTRUMENTATION_CALLBACK_INFORMATION`,我们告诉系统:*“在这个进程从系统调用返回之前,先执行这个”*——而*“这个”*就是我们的 shellcode。 这也就是所谓的 **Nirvana Hook**——一种介于用户态和内核态之间的技术。本不该从用户态访问的黑暗力量,但它确实可以。 ``` process syscall └─ kernel handles it └─ before returning to usermode → executes our callback 🪝 └─ our shellcode runs └─ returns to normal execution flow ``` ## 架构 🏗️ PICII 在目标进程中使用两个独立的内存分配: - **Wrapper** — 一个小的 ASM 存根,用于保存寄存器、调用 payload、恢复上下文,然后通过 `jmp r10` 正确返回 - **Payload** — 您的 shellcode Wrapper 地址被注册为 Nirvana 回调。它内部调用 payload。 ## 使用方法 🚀 ``` PICII::inject(HANDLE handle, size_t size, unsigned char* payload, unsigned int length, bool debug) ``` ## 使用方法 🚀 ``` PICII::inject( HANDLE handle, size_t size, unsigned char* payload, unsigned int length, void* structPointer, size_t structSize, BYTE* pattern, unsigned int patternSize, bool debug ); ``` | 参数 | 描述 | |---|---| | `handle` | 目标进程的句柄 | | `size` | 为 payload 分配的内存大小(`0x1000`、`0x2000`)| | `payload` | 要注入的 shellcode | | `length` | payload 的字节大小 | | `structPointer` | 复制到远程进程中的结构的指针 | | `structSize` | 结构的大小 | | `pattern` | payload 中要替换为结构地址的字节模式 | | `patternSize` | 模式的大小 | | `debug` | `true` 启用输出,`false` 静默运行 | ``` // example HANDLE handle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid); // example structure MyStruct data = { ... }; // placeholder pattern inside payload BYTE pattern[] = { 0xDE, 0xAD, 0xBE, 0xEF }; PICII::inject( handle, 0x1000, bin_payload, bin_payload_len, &data, sizeof(data), pattern, sizeof(pattern), true ); ``` 清理方法: ``` PICII::exit(handle, true); ``` ## 要求 ⚠️ - 必须以 **管理员** 身份运行(提权) - 需要 `SeDebugPrivilege` 才能 hook 远程进程 - 目标进程必须是 **x64** ## 声明 🛡️ - https://www.riskinsight-wavestone.com/en/2023/10/process-injection-using-ntsetinformationprocess/ - 本项目仅用于 **安全研究和 EDR/防病毒开发**。请在受控环境中使用。
标签:APT技术, Nirvana Hook, NtSetInformationProcess, Process Instrumentation, Shellcode注入, SSH蜜罐, Windows内核, 云资产清单, 回调函数注入, 恶意代码执行, 恶意软件技术, 用户态内核态, 白帽子, 端点可见性, 系统调用挂钩, 绕过检测, 进程注入, 逆向工程, 高级持续性威胁