最近我一直在阅读有关 DLL 注入的文章,我对它们理解得相当好。
但是,我不明白的是为什么首先实现了 CreateRemoteThread、WriteProcessMemory(能够写入另一个进程的内存)和 VirtualAllocEx(能够在另一个进程的上下文中分配内存)等 API地方。
对此类 API 的最初需求是什么?只是好奇。
最近我一直在阅读有关 DLL 注入的文章,我对它们理解得相当好。
但是,我不明白的是为什么首先实现了 CreateRemoteThread、WriteProcessMemory(能够写入另一个进程的内存)和 VirtualAllocEx(能够在另一个进程的上下文中分配内存)等 API地方。
对此类 API 的最初需求是什么?只是好奇。
WriteProcessMemory
是为需要安全写入进程内存的 ring3 调试器而设计的,最常见的是用于INT 3
断点或用户提供的内存编辑。
同样,CreateRemoteThread
也可以用于调试目的,但是,MSDN 可以启发我们CreateRemoteThread
更多:
此函数的常见用途是将线程注入到正在调试的进程中以发出中断。但是,不建议使用这种方法,因为额外的线程会使调试应用程序的人感到困惑,并且使用这种技术有几个副作用:
- 它将单线程应用程序转换为多线程应用程序。
- 它改变了进程的时序和内存布局。
- 它导致调用进程中每个 DLL 的入口点。
IIRCCreateRemoteThread
也被调试器用来挂钩应用程序本机预期处理程序,通常由 设置SetExceptionHandler
,这需要从目标进程调用,因为处理程序存储在 PEB 中。
VirtualAllocEx
这就是windows虚拟内存系统的运作方式,它需要一个上下文来分配,无论是在当前进程、子进程还是远程进程中。VirtualAlloc
事实上,它只不过是 Ex 变体的传递包装器,它只是传递一个特殊的常量,指示要使用的调用者进程的句柄。