我想使用以下原生API:
NtOpenProcess
NtOpenThread
NtReadVirtualMemory
NtWriteVirtualMemory
PsCreateSystemThread
KiAttachProcess
是否可以从托管C#代码中挂钩这些API?如果是这样,有人可以举例说明如何做到这一点吗?
答案 0 :(得分:0)
您可以在声明之前使用原始参数声明NtOpenProcess,然后声明DllImport(“kernel32.dll”)(您可以将此方法用于任何dll /过程组合)。
就像这样:
[DllImport("kernel32.dll")]
internal static extern int NtOpenProcess(IntPtr32 arguments...);
这是一个explanation on MSDN。
更新:实际上你想要做的是从C#开始,但是在C ++的帮助下。如果要拦截来自其他程序的API调用,更简单的方法是用C ++编写API拦截代码(使用本机Windows功能),然后将{C ++ DLL} DllImport
编写到C#应用程序中,只进行函数调用来自C#代码。