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