1.什么是系统调用系统调用是从用户模式过渡到内核模式的标准方式 。它们是现代版的软件中断,速度更快 。
系统调用接口极其复杂,但由于大部分内容与我们的工作无关,我只想做一个较高层次的总结 。在大多数情况下,你并不需要深入了解它是如何工作的,就可以使用这些技术,但了解一下还是有帮助的 。
在 windows 中,内核有一张允许从用户模式调用的函数表 。这些函数有时被称为系统服务、本地函数或 Nt 函数 。它们是以 Nt 或 Zw 开头的函数,位于 ntoskrnl.exe 中 。系统服务表称为系统服务描述符表,简称 SSDT 。
要从用户模式调用系统服务 , 必须执行系统调用 , 通过 syscall 指令完成 。应用程序将系统服务 ID 保存在 eax 寄存器中,以此告诉内核要调用哪个系统服务 。系统服务 ID(通常称为系统服务号、系统调用号或简称 SSN)是该函数在 SSDT 中的索引项 。因此 , 将 eax 设置为 0 将调用 SSDT 中的第一个函数,1 将调用第二个函数,2 将调用第三个函数,依此类推...
查询结果如下:entry = nt!KiServiceTable+(SSN * 4) 。
syscall 指令会使 CPU 切换到内核模式并调用系统调用处理程序,该程序会从 eax 寄存器中获取 SSN 并调用相应的 SSDT 函数 。
假设一个应用程序调用 kernel32.dll 中的 OpenProcess() 函数来打开一个进程的句柄 。
文章插图
图片
正如你所看到的 , 该函数的真正作用是调用位于 ntdll.dll 中的 NtOpenProcess() 。现在,让我们来看看 NtOpenProcess() 的逻辑 。
文章插图
图片
在 NtOpenProcess() 中 , 几乎没有任何代码 。这是因为与所有以 Nt 或 Zw 开头的函数一样 , NtOpenProcess() 实际上位于内核中 。这些函数的 ntdll(用户模式)版本只是执行系统调用来调用其内核模式对应函数,这就是为什么它们经常被称为系统调用存根 。
在我们的例子中,NtOpenProcess 的 SSN 是 0x26,但这个数字会随着 Windows 版本的变化而变化,所以不要指望它对你来说也是一样的 。从简化的高层视图来看 , 调用流程大致如下:
文章插图
图片
下面是关于 x86 系统调用流程的更详细概述:
文章插图
图片
注意:在用户模式下,函数的 Nt 和 Zw 版本完全相同 。在内核模式下,Zw 函数的运行路径略有不同 。这是因为 Nt 函数是为从用户模式调用而设计的,因此要对函数参数进行更广泛的验证 。
2.EDR和用户模式钩子自 2005 年微软推出内核补丁保护(又称 PatchGuard)以来 , 许多对内核的修改现在都被阻止了 。以前,安全产品通过挂钩 SSDT 从内核内部监控用户模式调用 。由于所有 Nt/Zw 功能都是在内核中实现的 , 因此所有用户模式调用都必须通过 SSDT,并因此受到 SSDT 挂钩的影响 。补丁防护使 SSDT 钩子成为禁区,因此许多 EDR 钩子转向挂钩 ntdll 。
文章插图
图片
由于 SSDT 存在于内核中,因此用户模式应用程序无法在不加载内核驱动程序的情况下干扰这些钩子 。现在,钩子被放置在用户模式下 , 与应用程序并存 。
那么,用户模式钩子是什么样的呢?
文章插图
图片
要挂接 ntdll.dll 中的函数,大多数 EDR 只需用 jmp 指令覆盖函数代码的前 5 个字节 。jmp 指令会将代码执行重定向到 EDR 自身 DLL(会自动加载到每个进程中)中的某些代码 。CPU 被重定向到 EDR 的 DLL 后,EDR 可以通过检查函数参数和返回地址来执行安全检查 。一旦 EDR 完成检查,它就可以通过执行覆盖指令恢复 ntdll 调用,然后跳转到钩子(jmp 指令)之后的 ntdll 位置 。
文章插图
图片
在上例中,NtWriteFile 被挂钩 。绿色指令是 NtWriteFile 的原始指令 。NtWriteFile 的前 3 条指令已被 EDR 的钩子(将执行重定向到 edr.dll 中名为 NtWriteFile 的函数的 jmp)覆盖 。每当 EDR 想要调用真正的 NtWriteFile 时,它会执行 3 条被覆盖的指令 , 然后跳转到挂钩函数的第 4 条指令,完成系统调用 。
推荐阅读
- 《未成年人网络保护条例》正式施行 《蛋仔派对》成网易“未成年人模式”试点产品
- 王者荣耀觉醒装备合成,王者荣耀觉醒模式怎么开
- 电脑上怎么查看宽带密码,华为手机怎么查电脑的宽带用户名和密码
- 华为手机如何调整单手操作模式
- 海贼无双4怎么添加2p,海贼无双3怎么双人玩双人模式加入方法
- win0电脑如何添加用户帐户
- 华为如何移除管控中心,华为平板如何解除管控模式
- 赛博朋克2077是什么意思,赛博朋克2077直播模式什么意思
- 手机怎么退出开发者选项,手机怎么把开发者模式选项关闭呢
- 手机屏幕太大单手不好操作怎么办?教你一键改成小屏模式,真实用