1

最近我一直在阅读有关 DLL 注入的文章,我对它们理解得相当好。

但是,我不明白的是为什么首先实现了 CreateRemoteThread、WriteProcessMemory(能够写入另一个进程的内存)和 VirtualAllocEx(能够在另一个进程的上下文中分配内存)等 API地方。

对此类 API 的最初需求是什么?只是好奇。

4

1 回答 1

4

WriteProcessMemory是为需要安全写入进程内存的 ring3 调试器而设计的,最常见的是用于INT 3断点或用户提供的内存编辑。

同样,CreateRemoteThread也可以用于调试目的,但是,MSDN 可以启发我们CreateRemoteThread更多:

此函数的常见用途是将线程注入到正在调试的进程中以发出中断。但是,不建议使用这种方法,因为额外的线程会使调试应用程序的人感到困惑,并且使用这种技术有几个副作用:

  • 它将单线程应用程序转换为多线程应用程序。
  • 它改变了进程的时序和内存布局。
  • 它导致调用进程中每个 DLL 的入口点。

IIRCCreateRemoteThread也被调试器用来挂钩应用程序本机预期处理程序,通常由 设置SetExceptionHandler,这需要从目标进程调用,因为处理程序存储在 PEB 中。

VirtualAllocEx这就是windows虚拟内存系统的运作方式,它需要一个上下文来分配,无论是在当前进程、子进程还是远程进程中。VirtualAlloc事实上,它只不过是 Ex 变体的传递包装器,它只是传递一个特殊的常量,指示要使用的调用者进程的句柄。

于 2011-11-15T06:47:36.463 回答