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内核, 云资产清单, 回调函数注入, 恶意代码执行, 恶意软件技术, 用户态内核态, 白帽子, 端点可见性, 系统调用挂钩, 绕过检测, 进程注入, 逆向工程, 高级持续性威胁