CreateRemoteThread,WriteProcessMemory,VirtualAllocEx - 为什么要使用它们?

时间:2011-11-15 06:39:57

标签: windows winapi visual-c++ win32-process

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

然而,我不明白的原因是为什么API,例如CreateRemoteThread,WriteProcessMemory(能够写入另一个进程的内存)和VirtualAllocEx(能够在另一个进程的上下文中分配内存)首先。

此类API的原始需求是什么?好奇。

1 个答案:

答案 0 :(得分:4)

WriteProcessMemory是针对需要安全编写进程内存的ring3调试器而制作的,最常用于INT 3断点或用户提供的内存编辑。

沿着同一行,CreateRemoteThread也可以用于调试目的,但是,MSDN可以在CreateRemoteThread更多地启发我们:

  

此功能的一个常见用途是将一个线程注入进程   正在调试以发出中断。但是,这种用途不是   建议,因为额外的线程让人困惑   调试应用程序,有几个副作用使用   这种技术:

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

IIRC,调试器还使用CreateRemoteThread来挂钩通常由SetExceptionHandler设置的应用程序本机预期处理程序,这需要在处理程序存储在PEB中时从目标进程调用。

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