首页
论坛
课程
招聘
[原创]Windows内核逆向-----<中断处理 从硬件机制到用户驱动接管(上)>
2021-11-20 17:20 15673

[原创]Windows内核逆向-----<中断处理 从硬件机制到用户驱动接管(上)>

2021-11-20 17:20
15673

算是介绍

本文主要描述 win10_x64 + IA32-E 的中断处理流程 从I/O APIC开始 至调用用户注册的 ISR 函数被调用结束 ,分为上下两篇
本章为上篇 主要描述 硬件机制
下篇 主要逆向 win10_x64 对中断的处理过程

 

会用到的东西:Win10_x64 + Windbg + IDA + Xp源代码 + Intel手册
二本 大三 水平有限 还请各位前辈多多指点

算是正文

CPU相关知识:

APIC(Advanced Programmable Interrupt Controller)

用于在多核心环境下处理中断而引入。

 

由两个组件构成 : APIC = I/O APIC + Local APIC

 

I/O APIC : 收集设备发来的中断,在此处建立中断请求于向量号的对应关系,分发中断请求至 Local APIC。

 

Local APIC : 每个核心存在一个,接收 I/O APIC 发来中断(此时已确定了中断向量号)并在合适的时机(优先级机制)将其提交给CPU,提供IPI(Inter-Processor Interrupt)核心间中断功能。

 

架构图如下
图片描述

配置 local APIC

根据intel手册描述 存在两种方案: (win10_x64 采用第二种方案)
1) 通过 写IA32_APIC_BASE MSR寄存器,将其寄存器空间映射至内存,访问内存,进行配置。
2)通过读写MSR寄存器的方式对APIC提供的功能进行配置(所有配置均通过写MSR寄存器完成配置)。

优先级机制(Task and Processor Priorities)

local APIC 中 的 TPR(Task-Priority Register)寄存器 用于描述此local APIC 所属核心的当前的中断优先级,windows 内核中的 IRQL 机制的主要 功能 在 x86架构下依赖读写此寄存器实现,为了加快访问速度,在IA32-E模式下,TPR[7:4]被映射为Cr8寄存器,软件通过设置当前中断优先级(通过读写Cr8)来阻塞中断。
图片描述
图片描述
PPR(Processor-Priority Register)为只读寄存器 PPR[7:4] 等价于TPR[7:4] ,在local APIC中将中断发送给处理器前会通过读此寄存器的值决定是否打断处理器的执行流(投递中断),这也是系统在高IRQL不会被第IRQL中断的原因。
图片描述
图片描述

IDT 表 由硬件到软件:

在 local APIC 向处理器 提交一个中断请求后,处理器会以其中断向量号为下标在中断向量表(IDT)中索引对应的中断处理例程,在栈中压入部分当前线程上下文后,跳转至系统的中断例程进行处理。下文描述相关设施。
(为了叙述简单忽略由IST 位引起的自动栈切换)

1)IDTR 寄存器

指出中断向量表的位置 (PG使用重新加载IDT表的方式使内核调试器无法处理调试相关的中断)
图片描述

2)LIDT 指令

用于设置 IDTR寄存器的值
图片描述

3)中断描述符

用于给出一个中断处理例程的地址,和其栈地址(间接指出),
每个可用的中断号对应一个,由操作系统构造并写入IDT表中说明了,一个由local APIC 投递的中断,被CPU收到时,应该跳转到的中断处理程序的位置,以及栈的位置。
图片描述

4)中断向量号的分配

0-21 号中断 :用于对CPU中产生的异常的处理
22-31 号中断 :被intel保留,无法被使用
31-255 号中断 : 由系统自行分配
图片描述

5)如何根据一个中断向量号找到一个中断描述符的细节

图片描述

6)中断后的栈

在CPU收到local APIC 投递的中断后会自动(无需OS代码参与)在栈中压入以下内容,其意义为保存当正在执行的线程的部分上下文,操作系统接管后,会保存所有的线程上下文。

7)软件接管

压入部分线程上下文后,CPU 的 RIP 寄存器被设置为中断描述符中所指出的中断处理例程的值,至此由 I/O APIC 发出的中断请求被软件接管。

根据上文所述目前的中断处理流程为:

1
I/O APIC -> Local APIC -> IDT -> 系统的中断处理例程

有关 I/O APIC 的内容 (如何建立中断请求于向量号的对应关系)在整理后补充
下篇吃完饭再写


【公告】看雪团队招聘安全工程师,将兴趣和工作融合在一起!看雪20年安全圈的口碑,助你快速成长!

最后于 2021-11-20 17:36 被小白养的菜鸡编辑 ,原因:
收藏
点赞1
打赏
分享
最新回复 (2)
雪    币: 1297
活跃值: 活跃值 (1143)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
~时光荏苒 活跃值 2021-11-20 17:47
2
0
先占个位置!
雪    币: 364
活跃值: 活跃值 (1782)
能力值: ( LV3,RANK:35 )
在线值:
发帖
回帖
粉丝
ookkaa 活跃值 2021-11-20 18:15
3
0
mark
游客
登录 | 注册 方可回帖
返回