将.Net流程注入Unity流程

时间:2014-01-28 21:58:31

标签: c# .net unity3d

我想知道如何将C#DLL注入Unity进程。由于Unity拥有一个CLR(因为它运行单声道MSIL),我想我可以玩反射。

那么我如何将.NET DLL注入到.Net过程中,一旦我在那里,我可以做些什么呢?

例如。假设我有一个使用unity3d作为引擎的游戏,大部分代码都是用C#编写的(这无关紧要,因为统一似乎将unityscript编译为.net无论如何)。我想用我自己的代码扩展这个已编写的代码库。

通常在正常的本机进程中,您将开始反转代码,查找内存中出现的指针和数据结构,随时了解代码。然后在代码中编写相同的结构,获得对该进程内存的rwx访问(通常通过将dll注入到该进程中),然后进入城镇。

因为团结使用.net然而,我想知道是否有更好的方法。我想利用.net框架的反射功能。为此,我想我需要将我的代码注入统一过程。从那里我不知道工作流程可能是什么。

长话短说:我想注入一个DLL,用C#编写的有效负载(希望使用反射而不是指针)进入外部进程(我在编译时无法控制它),并且搞乱进程内部类和函数。

2 个答案:

答案 0 :(得分:0)

将DLL放入资产文件夹

Assets/Libs/MyLib.dll

打开任何CS文件,在MonoDevelop解决方案中添加引用。 当您退出MonoDevelop时,Unity将重新获取解决方案文件并导入dll的引用。 您现在可以正常使用您在MonoDevelop中编写的Unity代码中的库。 您的代码与System.IO等任何其他API之间没有区别。

注意.NET框架版本,不要混合代码。 为安全起见,请使用.NET 2.0。 ......等等......我不记得但 应该是2.0 ...不要引用我的话。

一旦你在那里,你可以正常地做一切。

答案 1 :(得分:0)

一个选项是.cctor函数(模块初始化程序),它不在程序集加载时运行,而是第一次调用到你的dll。

以前,我认为这是你最早可以使用的.net,但显然我错了:

有一个可怕的,讨厌的黑客让你在.net中运行DllMain - C# equivalent of DllMain in C (WinAPI)

肯定不是.net的创建者想要的东西。使用时要小心。

这会让你的代码运行,一旦进入,你可以像平常一样调用System.Reflection并做你想做的任何事情。