Multithreading 在Delphi中,使用CreateRemoteThread将代码注入另一个进程的正确方法是什么?

Multithreading 在Delphi中,使用CreateRemoteThread将代码注入另一个进程的正确方法是什么?,multithreading,delphi,winapi,ipc,Multithreading,Delphi,Winapi,Ipc,我读到sysinernals使用CreateRemoteThread将ExitProcess注入另一个进程以终止它。这是真的吗?如果是,有人能告诉我如何在我的Delphi应用程序中实现它吗?我想终止启动我的应用程序的进程。您在这里提出的问题在这篇博文中得到了回答: 这包括Delphi源代码。出于某种原因,代码启用了SE_DEBUG_NAME特权,这是不必要的 这种方法的难点在于在目标应用程序中定位ExitProcess的地址。本文中的代码假设它与您自己的流程中的地址相同。这很可能是真的,但并不总

我读到sysinernals使用CreateRemoteThread将ExitProcess注入另一个进程以终止它。这是真的吗?如果是,有人能告诉我如何在我的Delphi应用程序中实现它吗?我想终止启动我的应用程序的进程。

您在这里提出的问题在这篇博文中得到了回答:

这包括Delphi源代码。出于某种原因,代码启用了SE_DEBUG_NAME特权,这是不必要的

这种方法的难点在于在目标应用程序中定位ExitProcess的地址。本文中的代码假设它与您自己的流程中的地址相同。这很可能是真的,但并不总是如此。例如,如果您的进程是64位进程,而目标进程是32位进程,那么它就不是真的。或者如果目标进程的基址不允许内核32在其首选地址加载

另一个问题是,如果您的进程是32位的,而目标进程是64位的。在这种情况下,我相信CreateRemoteProcess技巧完全失败了


总之,我会使用TerminateProcess。

你在这里问的问题在这篇博文中得到了回答:

这包括Delphi源代码。出于某种原因,代码启用了SE_DEBUG_NAME特权,这是不必要的

这种方法的难点在于在目标应用程序中定位ExitProcess的地址。本文中的代码假设它与您自己的流程中的地址相同。这很可能是真的,但并不总是如此。例如,如果您的进程是64位进程,而目标进程是32位进程,那么它就不是真的。或者如果目标进程的基址不允许内核32在其首选地址加载

另一个问题是,如果您的进程是32位的,而目标进程是64位的。在这种情况下,我相信CreateRemoteProcess技巧完全失败了


总之,我会使用TerminateProcess。

1。获取另一个进程的PID。2.调用OpenProcess以获取进程句柄。传递CreateRemoteThread文档中指定的访问标志。3.调用CreateRemoteThread,在目标进程地址空间中传递ExitProcess的地址。这是个棘手的部分。不管怎样,这都是毫无意义的。打电话给TerminateProcess。@DavidHeffernan我只是想让黑客们头疼。调用TerminateProcess将很容易被拦截。你不同意吗?这容易吗?为什么它比阻塞远程线程更容易?黑客是从哪里来的?此外,没有真正的证据表明Process Explorer使用CreateRemoteThread。一个博客上随机出现的家伙说他怀疑这一点,你就把它当作事实。不,我认为黑客仍然会入侵你的应用程序。不管你做什么,如果这样做有价值的话,你会被黑客攻击。只是要确保你不会让你的诚实客户的生活尴尬。如果不阻止黑客攻击,同时赶走那些付钱给你的客户,那就没有意义了!1.获取另一个进程的PID。2.调用OpenProcess以获取进程句柄。传递CreateRemoteThread文档中指定的访问标志。3.调用CreateRemoteThread,在目标进程地址空间中传递ExitProcess的地址。这是个棘手的部分。不管怎样,这都是毫无意义的。打电话给TerminateProcess。@DavidHeffernan我只是想让黑客们头疼。调用TerminateProcess将很容易被拦截。你不同意吗?这容易吗?为什么它比阻塞远程线程更容易?黑客是从哪里来的?此外,没有真正的证据表明Process Explorer使用CreateRemoteThread。一个博客上随机出现的家伙说他怀疑这一点,你就把它当作事实。不,我认为黑客仍然会入侵你的应用程序。不管你做什么,如果这样做有价值的话,你会被黑客攻击。只是要确保你不会让你的诚实客户的生活尴尬。如果不阻止黑客攻击,同时赶走那些付钱给你的客户,那就没有意义了!唯一的问题是,正如预期的那样,当启用UAC时,它需要提升才能正确运行,这可能是SE_DEBUG_NAME部分。就在昨天,我编写了一个Delphi应用程序,它调用CreateRemoteThread,在没有提升的情况下工作得非常好。也许不需要那条线;-。这是我昨天问的一个问题:唯一的问题是,正如预期的那样,当UAC启用时,它需要提升才能正确运行,这可能是SE_DEBUG_名称部分。就在昨天,我编写了一个Delphi应用程序,它调用CreateRemoteThread,在没有提升的情况下工作得非常好。也许不需要那条线;-。我注意到了,一切都很顺利。这是我昨天问的一个问题: