这种新颖的方式通过滥用 ApcRoutine 和 SystemArgument[0-3] 参数来使用 NtQueueApcThreadEx,传入一个随机的 pop r32; ret gadget,可用于隐蔽的代码注入。在此 PoC 中,该 gadget 是从 ntdll.dll 内存区域中随机挑选的、与特定模式匹配的 gadget。这意味着该 gadget 会 返回到 shellcode 中。
ntdll.dll 内,从匹配 IMAGE_SCN_CNT_CODE 和 IMAGE_SCN_MEM_EXECUTE 的 PE 节中寻找一个随机 gadget。NtQueueApcThreadEx 调用, = 随机选择的 gadget 地址, = 指向 shellcode 的指针ApcRoutineSystemArgumentNtQueueApcThreadEx 会强制将 IP 指向 gadget ntdll.dll!<random pop r32; ret>,并返回到 SystemArgument1在 ntdll.dll 内部有数百个可用的 gadget(至少在我构建的版本中如此)——这使得该技术很难被检测到。
在检查该调用时,与传统的 APC 注入不同,ApcRoutine 仅指向 ntdll.dll 内部一个合法地址。

这可能会有点难以检测。在检查对 NtQueueApcThreadEx 的调用时,检查是否有任何参数指向可执行内存。另一个可能的检测途径是检查 ApcRoutine 是否指向 ntdll 内的地址——不过这很可能会触发大量误报。
此技术最初详细描述于 Avast 的 Raspberry Robin 分析报告中,见此处。