前言
提这一章节主要讲述在ring3环境下,如何调用Nt系列内核API函数,封装将直接调用这些函数,可以很轻松的绕过一次常规API钩子处理,同时在后续的专栏中,将逐步部分引用并介绍。
由于本人水平有限,下列部分翻译不准确望不惜纠正,不胜感激!
一、什么是Windows Native API
微软并没有公开所有原生 API,ntoskrnl.exe 中就有很多只提供给内核态使用的函数。
Windows系统中大部分用户模式下的服务是在ntdll.dll中实现的,因为Native API接口函数相当于是走到了内核的大门,因为它们已经是在ring3环境下最接近内核部分了。
Nt/Zw系列这些函数是 ntdll.dll 和 ntoskrnl.exe 中声名的系统调用函数,通过 ntdll.dll 从用户模式调用,这两种前缀的对应函数一般来说功能完全一样,都会进入内核态并通过 SSDT 调用来调用 ntoskrnl.exe 中对应的函数。
用户模式:
Nt/Zw二者没有任何区别,通过设置系统服务表中的索引和在堆栈中设置参数,经由SYSENTER指令进入内核态