Windows CreateRemoteThread、WriteProcessMemory、VirtualAllocEx——为什么要使用它们?

Windows CreateRemoteThread、WriteProcessMemory、VirtualAllocEx——为什么要使用它们?,windows,winapi,visual-c++,win32-process,Windows,Winapi,Visual C++,Win32 Process,最近我一直在阅读有关DLL注入的文章,我对它们相当了解 然而,我不明白的是,为什么像CreateRemoteThread、WriteProcessMemory(能够写入另一个进程的内存)和VirtualAllocEx(能够在另一个进程的上下文中分配内存)这样的API首先被实现 这种API最初的需求是什么?只是好奇。WriteProcessMemory是为需要安全写入进程内存的ring3调试器设计的,最常见的是用于INT 3断点或用户提供的内存编辑 同样地,CreateRemoteThread也可

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

然而,我不明白的是,为什么像CreateRemoteThread、WriteProcessMemory(能够写入另一个进程的内存)和VirtualAllocEx(能够在另一个进程的上下文中分配内存)这样的API首先被实现


这种API最初的需求是什么?只是好奇。

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

同样地,
CreateRemoteThread
也可以用于调试目的,但是,MSDN可以在
CreateRemoteThread
方面给我们更多的启示:

此函数的一个常见用途是将线程注入进程 正在调试以发出中断。然而,这一用途并非如此 推荐,因为额外的线程会让人困惑 调试应用程序时,使用 这项技术:

  • 它将单线程应用程序转换为 多线程应用程序
  • 它会更改的时间和内存布局 这个过程
  • 它导致调用中每个DLL的入口点 这个过程
IIRC,
CreateRemoteThread
也被调试器用来钩住应用程序本机预期处理程序,通常由
SetExceptionHandler
设置,当处理程序存储在PEB中时,需要从目标进程调用


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

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

同样地,
CreateRemoteThread
也可以用于调试目的,但是,MSDN可以在
CreateRemoteThread
方面给我们更多的启示:

此函数的一个常见用途是将线程注入进程 正在调试以发出中断。然而,这一用途并非如此 推荐,因为额外的线程会让人困惑 调试应用程序时,使用 这项技术:

  • 它将单线程应用程序转换为 多线程应用程序
  • 它会更改的时间和内存布局 这个过程
  • 它导致调用中每个DLL的入口点 这个过程
IIRC,
CreateRemoteThread
也被调试器用来钩住应用程序本机预期处理程序,通常由
SetExceptionHandler
设置,当处理程序存储在PEB中时,需要从目标进程调用

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