简介
使用通知的方式只能在进程创建的时候注入,而我们想注入一个已经运行的进程时,
可以使用与应用层类似的,申请注入shellcode的内存,并创建线程来运行的方式。
这里参照 Blackbone 的部分代码进行修改:https://github.com/DarthTon/Blackbone
工作原理
推荐的方法是获取SSDT表,找到 NtCreateThreadEx 函数来创建线程。在64位系统中获取SSDT的方法,
通常是搜索特征码,可以从 Blackbone 中查看,这里暂不讨论。另外 RtlCreateUserThread 函数也
可以创建线程,但好像还涉及 PrevMode 等信息,虽然测试未出现蓝屏现象,这种方法待议。
参见: https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/previousmode
| 1 | NTSTATUS NTAPI RtlCreateUserThread( | 
这里使用 在内核中获取进程的DLL和导出函数(1) 文章中获取的 WinExec 导出函数为例
| 1 | // 以调用WinExec函数为目标生成的ShellCode | 
调用的函数如下所示
| 1 | NTSTATUS InjectExplorerProcess(IN PCCHAR RunCmd) |