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