【发布时间】:2016-06-24 23:12:22
【问题描述】:
你可以使用 C# 调用另一个运行中的用 C/C++ 编写的进程内部的函数吗?
我知道您可以使用 C++ 来执行此操作,方法是注入一个 DLL,该 DLL 启动一个远程线程、侦听关联的按键并调用已定义签名和地址的所需函数。
C++ 到 C++ 教程在这里: http://www.codeproject.com/Articles/29527/Reverse-Engineering-and-Function-Calling-by-Addres#Applying
如果我没记错的话,我过去也读到过,您不能将托管 DLL (C#) 注入到非托管进程 (C++) 中。但也许存在另一种方式......
我想这样做的原因是对 PC 游戏进行逆向工程并用我熟悉的语言 C# 编写一些小技巧。
【问题讨论】:
-
这里还有一个教程:codeproject.com/Articles/607352/…
-
@GediminasMasaitis 不,示例中的代码可以完成所有工作。在目标进程中注入了一个 C/C++ 中的小库,它在目标进程中加载 CLR 主机,然后加载所需的 .NET dll。
-
@GediminasMasaitis 如果您查看最终图像,您会看到他们将托管 DLL 注入 Notepad++(不是用 .NET 编写的程序)
-
您必须非常了解 C++ 才能将 CLR 注入另一个进程,并且这样做不会造成太大损害。还有COM,Windows的汇编语言。最重要的是,要知道如何诊断故障并找到解决方法。并且会有将失败,托管代码喜欢抛出异常,而当这种情况发生在外部进程中时,不会有一个好的结局。只要你懂这门语言,还不如直接用它,完全跳过C#。
标签: c# c++ reverse-engineering interprocess