(46)分析 INT 0x2E 和 sysenter

news/2024/10/15 14:39:43/

一、回顾

上次课我们学习了3环进0环的两种方式,分别是中断门和快速调用,如果CPU支持快速调用,那么_KUSER_SHARED_DATA 结构体的 SystemCall 属性指向的函数是 KiFastSystemCall;如果不支持,那么SystemCall 指向的函数是KiIntSystemCall。

执行 KiFastSystemCall,则使用快速调用的方式进0环;
执行 KiIntSystemCall,则使用中断门的方式进0环。

共同点是都要给0环提供新的CS,SS,EIP,ESP,只是提供的方式不同。中断门的CS,EIP从IDT表里获取,SS,ESP从TSS表里获取;快速调用的CS,EIP,ESP从MSR寄存器获取,SS是CS+8计算得到,至于MSR寄存器里的值,则是系统启动时就已经填好。

所以快速调用比中断门快就快在,快速调用不需要访问内存,而中断门需要读TSS和IDT表。

这节课,我们来详细分析 INT 2E 和 sysenter 做了哪些工作。

二、分析 INT 0x2E

KiIntSystemCall 触发了 2E 中断。用windbg看看2E号中断的中断门描述符,2E 右移3位(或者乘8)得到 0x170,加上 r idtr获取的IDT基址,可以计算出 2E号中断对应的描述符:8053ee00`0008e481

kd> r idtr
idtr=8003f400
kd> dq 8003f400+170
8003f570  8053ee00`0008e481 80548e00`00081780

在这里插入图片描述

拆分中断门描述符,可以得到新的CS是0008(系统代码段),EIP是 8053e481,这个是内核模块的 KiSystemService 函数。

kd> u 8053e481
nt!KiSystemService:
8053e481 6a00            push    0
8053e483 55              push    ebp
8053e484 53              push    ebx
8053e485 56              push    esi
8053e486 57              push    edi
8053e487 0fa0            push    fs
8053e489 bb30000000      mov     ebx,30h
8053e48e 668ee3          mov     fs,bx

接下来查看 TSS 表,首先看看tr寄存器的值,是0x28,然后看看TSS描述符:

kd> dq 8003f000
8003f000  00000000`00000000 00cf9b00`0000ffff
8003f010  00cf9300`0000ffff 00cffb00`0000ffff
8003f020  00cff300`0000ffff 80008b04`200020ab

TSS描述符是 80008b04`200020ab

在这里插入图片描述

所以TSS的地址就是 80042000,dd看一下:

kd> dd 80042000
80042000  0c458b24 8054acf0 8b080010 758b0855

所以ESP0 = 8054acf0, SS0 = 0010。

三、分析 sysenter

sysenter 是从 MSR 寄存器里读取 CS0,ESP0,EIP0,而SS0是通过CS0+8计算得来。我们可以用 rdmsr 指令在windbg里查看 MSR 寄存器,也可以用 wrmsr 修改MSR寄存器。

MSR地址
IA32_SYSENTER_CS174H
IA32_SYSENTER_ESP175H
IA32_SYSENTER_EIP176H

查看 CS,ESP,EIP

kd> rdmsr 174
msr[174] = 00000000`00000008
kd> rdmsr 175
msr[175] = 00000000`f8ac2000
kd> rdmsr 176
msr[176] = 00000000`8053e540

其中,EIP是 KiFastCallEntry 函数:

kd> u 8053e540
nt!KiFastCallEntry:
8053e540 b923000000      mov     ecx,23h
8053e545 6a30            push    30h
8053e547 0fa1            pop     fs
8053e549 8ed9            mov     ds,cx
8053e54b 8ec1            mov     es,cx
8053e54d 8b0d40f0dfff    mov     ecx,dword ptr ds:[0FFDFF040h]
8053e553 8b6104          mov     esp,dword ptr [ecx+4]
8053e556 6a23            push    23h

四、总结

API通过中断门进0环:

1)  固定中断号为0x2E
2)  CS/EIP由门描述符提供   ESP/SS由TSS提供
3)  进入0环后执行的内核函数:NT!KiSystemService

API通过sysenter指令进0环:

1)  CS/ESP/EIP由MSR寄存器提供(SS是算出来的)
2)  进入0环后执行的内核函数:NT!KiFastCallEntry

int 0x2e 和 sysenter 指令进0环后,分别调用了两个函数 KiSystemService 和 KiFastCallEntry。

下一篇博客,我将逆向分析 KiSystemService 和 KiFastCallEntry 这两个函数。


http://www.ppmy.cn/news/158583.html

相关文章

邮件发送-》http://service.mail.qq.com/cgi-bin/help?subtype=1id=28no=1001256

昨天使用发送邮件报了一个错 http://service.mail.qq.com/cgi-bin/help?subtype1&&id28&&no1001256 主要是这句话: 然后我登录企业邮箱发现提醒我邮箱的域名解析有问题,然后我就想起来了,原来我前些天看域名解析不爽&#x…

CodeForces 545E Paths and Trees(最短路)

题目链接:http://codeforces.com/problemset/problem/545/E 题意:给一张无向联通图,让你用最短路去生成一颗最小生成树,并输出用到的边的编号 思路:在spfa的时候就可以更新记录用到哪些边了,在拥有多种最短…

关于联想Thinkpad E450 系列笔记本电脑独立显卡不能工作的解决方案(蓝屏/卡顿/掉帧)

联想Thinkpad E450因为主板问题,在运行一段时间的独立显卡后(通常是在玩游戏调用独显运行时),会在游戏中出现突然掉帧的现象,而后退出游戏在正常的电脑使用过程中也会出现经常蓝屏,黑屏等现象,使…

解决服务器空间满/var/lib/docker/overlay2占用很大,千万慎用 docker system prune -a清理 mongodb等数据库容器及镜像可能被删,找回恢复数据

项目场景: 服务器空间满,想清理一下。发现是docker太大,/var/lib/docker/overlay2占用很大49G,网站也访问不了,mongodb前一天也停了。用这个清理docker system prune -a,结果把数据库的镜像及容器全删了。…

报错TypeError: Cannot read properties of undefined (reading ‘_normalized‘)

vue-router.esm.js?8c4f:1000 Uncaught (in promise) TypeError: Cannot read properties of undefined (reading ‘_normalized’) at normalizeLocation (vue-router.esm.js?8c4f:1000) at Object.match (vue-router.esm.js?8c4f:1586) at VueRouter.match (vue-router.es…

ldslite是什么启动项_最流氓的软件可以流氓到什么程度?

鲁大师吧 有个台式电脑,所有软件都是正版,但是总会弹出来xx资讯还有xx广告。 有次弹窗之后查了一下文件所在位置,是一个叫ldslite的文件夹,在c盘program file(x86)里面。 寻思着删除整个文件夹就可以了,但是却告诉我没…

联想E540笔记本电脑拆键盘、换键盘

我的联想ThinkPad E540键盘坏了几个按键,按下去没有反应。在京东第三方买了一个新的原装键盘,自己把它给换上去。 下图中,几个涂红色的按键是坏的,编程的时候特别不方便。 第一步:在电脑背面卸掉几个螺丝 因为键盘上也…

ThinkpadE450 Win8改Win7 BIOS设置图解

最近E450c卖的挺火的,3000多大洋买个Thinkpad笔记本配置很不错了!大家都知道Win8不好用,兼容性不行,win7相对于笔记本来说操作简单,易用性强!所以下面我就来教大家如何将ThinkpadE450c的笔记本预装原装Win8…