Tor*_*bio 5 c# c++ hook dll-injection
所以,我有一个用C#编写的可执行文件,我没有它的源代码,但是我用IDA对它进行了反汇编,它给了我很多面向对象的程序集.
我做了注入一个.dll到另一个.exe文件.exe文件,我已经注入这个新的C++ DLL到C#.exe文件,没有问题,DllMain是因为所谓的等等...
但是当我将这个DLL注入到用C++创建的普通.exe文件中时,我可以使用其内存地址调用.exe中的函数,我可以在IDA上使用它.
问题是,面向对象的程序集在其功能上没有地址,即使函数名称被反汇编也是如此.
那么,有什么办法可以用我在C#.exe文件上注入的DLL来调用这个函数吗?
如果可能的话,有没有办法可以使用C#.exe文件中声明的命名空间及其所有函数和变量,甚至是私有的?
示例反汇编代码:
.namespace MyCSharpApp
{
.class public auto ansi Test extends [mscorlib]System.Object
{
.field public value class [Microsoft.Xna.Framework]Microsoft.Xna.Framework.Vector2 pos
.field public int32 foo
....
Run Code Online (Sandbox Code Playgroud)
你正在尝试做一些棘手的事情,而我不太清楚它是什么。从你的描述来看,至少有四件事:
其中一些您可以控制(即源代码),而另一些则不能。
您想要使用一个称为“注入”的过程来更改您无法控制的模块,以调用您可以控制的模块。为了做到这一点,您使用的工具要求您在进程的地址空间中有一个非托管入口点。
如果您通过非托管模块获得了您想要的结果,那么您所需要做的就是编写一个新的混合模式模块(您显然可以控制该模块)来调用您无法控制的托管 DLL。现在,您实际上拥有了一个非托管 DLL(用于导出目的),并且它被托管的问题已经消失。
要从新的非托管包装器模块调用托管代码,您可以使用这篇介绍性文章中描述的技术:
基本上,您需要一个 C++/CLI 项目来引用您的黑盒托管 DLL 并调用它并导出一个非托管入口点,您可以为注入“获取地址”。搜索会给你带来更多的想法。
最后,您可以private使用此方法调用托管 DLL(您无法控制的)中的方法吗?不,不是直接。然而,它是一个托管 DLL,因此它必须有一些 public对任何人有用的入口点,并且您可以调用它们。如果这还不够,您可以使用 C++/CLI 的反射来调用私有方法并访问私有成员。