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