C# 如何共享流程?
我怎样才能依偎在另一个过程中?比如,共享另一个进程的名称?所以,如果我的应用程序是griddemo.exe,并且我想紧贴在explorer.exe中,这可能吗?只需从kernel32阅读有关CreateRemoteThread()的内容。方向对吗?是否存在安全/UAC问题?如果您的意思是将代码注入另一个进程,那么dll注入是一种技术:C# 如何共享流程?,c#,winapi,processor,C#,Winapi,Processor,我怎样才能依偎在另一个过程中?比如,共享另一个进程的名称?所以,如果我的应用程序是griddemo.exe,并且我想紧贴在explorer.exe中,这可能吗?只需从kernel32阅读有关CreateRemoteThread()的内容。方向对吗?是否存在安全/UAC问题?如果您的意思是将代码注入另一个进程,那么dll注入是一种技术: 多年没有这样做了,所以不确定现代MS Windows操作系统(即XP后)对此会有多满意。如果您的意思是将代码注入另一个进程,那么dll注入就是一种技术: 多年
多年没有这样做了,所以不确定现代MS Windows操作系统(即XP后)对此会有多满意。如果您的意思是将代码注入另一个进程,那么dll注入就是一种技术:
多年没有这样做了,所以不确定现代MS Windows操作系统(即XP后)对此会有多满意。DLL注入是进行此操作的传统方法。这是相当棘手的,尤其是因为病毒扫描器对这种做法不屑一顾。因此,即使你让它工作,诺顿/迈克菲可能会阻止你-或阻止你在未来 DLL注入的一种简单方法是。请注意,Microsoft保留删除此功能的权利(将来可能会这样做) Microsoft批准的实现DLL注入的方法是许可
请注意,必须根据CLR 4.0版或更高版本构建DLL,才能安全地执行DLL注入,因为这是第一个在proc中并行支持的版本。DLL注入是执行此操作的传统方法。这是相当棘手的,尤其是因为病毒扫描器对这种做法不屑一顾。因此,即使你让它工作,诺顿/迈克菲可能会阻止你-或阻止你在未来 DLL注入的一种简单方法是。请注意,Microsoft保留删除此功能的权利(将来可能会这样做) Microsoft批准的实现DLL注入的方法是许可
请注意,您的DLL必须根据CLR 4.0或更高版本构建,才能安全地执行DLL注入,因为这是第一个在proc中并行支持的版本。首先,很抱歉,但我的答案将与其他答案一样长 多年以来,我一直在不同版本的操作系统(从windows NT 4.0到windows 7)中使用DLL注入,我对任何病毒扫描程序(包括不同版本的Norton和McAfee)都没有任何问题。因此,在这方面,我不同意斯蒂芬·克利里(见他的答案) 使用
CreateRemoteThread()
实际上只是其中一种方法AppInit_DLLs是另一种方式。两者各有优缺点。AppInit_DLL的主要优点是可以在任何进程中简单地插入DLL。AppInit_DLLs方法的主要缺点如下:
DllMain
内部或DLL的任何依赖项DLL中的错误)会使许多当前未知的进程崩溃DllMain
内部,您应该非常小心,因为它将在User32.dll完全初始化之前被调用。因此,可以在DLL的DllMain
内部使用的安全DLL是Kernel32.DLLCreateRemoteThread()
可以在进程中启动额外的线程。CreateRemoteThread()
的主要问题是其lpStartAddress
参数必须是来自远程进程的地址。因此,必须使用函数OpenProcess
、VirtualAllocEx
和WriteProcessMemory
将一些信息写入目标进程的内存中。要打开进程,必须启用调试权限。如果只想在目标进程内部执行2+2操作,可以将相应的二进制代码直接复制到目标进程中。所有真正有趣的工作都可以通过使用一些Windows API来完成。所以大部分人不会复制代码。而不是在目标进程内部调用加载库(“MyPath\\MyDll.dll”)。由于LoadLibrary
的原型与CreateThread
的ThreadProc
的原型相同,因此可以将LoadLibrary
作为CreateRemoteThread()的ThreadProc
调用。这种方式的名称为“DLL注入”
我建议您仅在确实需要时使用此DLL注入。如果目标应用程序有其他方式(如插件)在进程内加载DLL,则应使用这种方式,而不是DLL注入
有了DLL注入的工作示例后,您将不得不解决一些一般性问题。这些问题您在第一时间看不到,但在长期使用应用程序后,您将看到其重要性:
在使用CreateRemoteThread()
之前,您应该找到目标进程已经运行的时刻
在调用CreateRemoteThread()
之前,目标应用程序必须已经初始化。因此,您不应该过早地使用CreateRemoteThread()
。对于explorer.exe,您可以从运行注册表项启动小触发器程序。目前explorer.exe已为DLL注入做好充分准备
您应该考虑64位版本的Windows
不要忘记在目标进程内部重新定位DLL。请注意,DLL可以在目标进程中的另一个地址加载,就像在进程中一样。大多数情况下,选择它是一个好主意