我需要在目标进程中挂钩特定的.NET函数。因此,我已经准备好注入C#Dll,但是一旦dll被加载,我就需要一种制作钩子的方法。
问题:在C#中没有dllmain之类的东西
解决方案:这是我尝试的方法> C# equivalent of DllMain in C (WinAPI)
我没有50个声望,所以我无法评论@mheyman答案。但是我按照他的建议做了所有事情,将所有内容编译到一个Dll中,然后将其注入到目标进程中。但它在以下级别受阻:
LaunchDll(dll, len, "MyNamespace.MyClass", "DllMain"); in dllmain.cpp
我走不远了,我得到了错误
此应用程序已请求运行时以 不寻常的方式。请与应用程序的支持团队联系以获取更多信息 信息
LaunchDll函数永远不会执行,并且如果我对其进行修改以使其立即返回,我仍然会得到相同的行为,这使我认为问题出在调用LaunchDll。
这是我从Visual Studio的即时调试器中获得的输出:
...
'target.exe'(Win32):已加载'C:\ Windows \ System32 \ api-ms-win-core-processthreads-l1-1-1.dll'。符号已加载。 'target.exe'(Win32):已加载'C:\ Windows \ System32 \ api-ms-win-core-file-l1-2-0.dll'。符号已加载。 'target.exe'(Win32):已加载'C:\ Windows \ System32 \ api-ms-win-core-timezone-l1-1-0.dll'。符号已加载。 'target.exe'(Win32):已加载'C:\ Windows \ System32 \ api-ms-win-core-file-l2-1-0.dll'。符号已加载。 'target.exe'(Win32):已加载'C:\ Windows \ System32 \ api-ms-win-core-synch-l1-2-0.dll'。符号已加载。 线程0xc27c已退出,代码为3(0x3)。线程0x828c具有 以代码3(0x3)退出。线程0xb47c已退出,代码为3 (0x3)。线程0xbce0已退出,代码3(0x3)。线程 0xb974已退出,代码为3(0x3)。线程0x68d4已退出 代码3(0x3)。线程0xc4e8已退出,代码3(0x3)。的 线程0xc748已退出,代码3(0x3)。线程0xc198具有 以代码3(0x3)退出。线程0xa708已退出,代码为3 (0x3)。线程0x8870已退出,代码为3(0x3)。线程 0xc02c已退出,代码为3(0x3)。线程0xc3fc已经退出 代码3(0x3)。线程0x995c已退出,代码为3(0x3)。的 线程0xb790已退出,代码为3(0x3)。线程0xb9b8具有 以代码3(0x3)退出。程序“ [47324] target.exe”已退出 代码为3(0x3)。
我将所有内容编译为发行版(谁知道吗?-_-),但没有任何变化
以下是配置文件的来源: https://wetransfer.com/downloads/c10aab5535121568ef185d3e1ca2193520190219015759/dd94c8 通过:LoaderDllSO
这是.NET Dll的代码:
namespace MyNameSpace {
public class MyClass {
public static void DllMain() {
string text1 = "random Text from .NET Dll \n ";
System.IO.File.WriteAllText(@"D:\\TestFromCSharp.txt", text1);
}
}
}