-
-
[原创]新手分享_再谈FS寄存器
-
发表于:
2018-5-4 19:50
11864
-
1 2 | 历史:在80386及之后的处理器 又增加了两个寄存器 FS 寄存器和 GS寄存器
环境:win7 32位(单核) 工具 windbg 、OD
|
1 2 | 历史:在80386及之后的处理器 又增加了两个寄存器 FS 寄存器和 GS寄存器
环境:win7 32位(单核) 工具 windbg 、OD
|
1 2 | index TI RPL
00110 0 00
|
根据索引 找到 GDT 表中的内容
834093f3`4c003748
段描述符的结构在进行拆分 (在windbg可以使用 dg 命令 进行 查看 后来才看到)
最终找到 0环下 FS 指向的内容 那这个地址到底是什么呢?
我们先查看下 KPCR 结构的信息
看到之后 是不是很熟悉 ,这里正是 我们 0环下 FS 指向的内容
1 2 3 4 | 由于Windows需要支持多个CPU,
因此Windows内核中为此定义了一套以处理器控制区(Processor Control Region)
即KPCR为枢纽的数据结构, 使每个CPU都有个KPCR.
其中KPCR这个结构中有一个域KPRCB(Kernel Processor Control Block)结构, 这个结构扩展了KPCR. 这两个结构用来保存与线程切换相关的全局信息.
|
关于一些 重要的结构 都能在 KPCR 中找到
1 2 3 4 | 由于Windows需要支持多个CPU,
因此Windows内核中为此定义了一套以处理器控制区(Processor Control Region)
即KPCR为枢纽的数据结构, 使每个CPU都有个KPCR.
其中KPCR这个结构中有一个域KPRCB(Kernel Processor Control Block)结构, 这个结构扩展了KPCR. 这两个结构用来保存与线程切换相关的全局信息.
|
关于一些 重要的结构 都能在 KPCR 中找到
0环下的 基本了解差不多了 那再看下 3环 下的 FS 3B
在OD 中 我们 看到 是指向 7FFDF000 ,那我们拿 3B 去拆分
1 2 | index TI RPL
111(7) 0 11(3)
|
在找到 描述符 时 拆分 会发现 基地址 全是 0
这是为什么呢 ? 因为 微软 在 winXP sp3 之后 对 TEB 进行了随机化 机制处理 , 所以是无法 用 选择子 去找gdt 表找描述符
不过我们在 3 环下 通过windbg查看 结果是正确的
这里验证下 3环fs 指向 TEB
现在 我们知道了 FS 在3环和 0环指向的内容 ,不过 0环和3环的FS 值是不同的 在哪里改变的呢?
1 2 3 4 | 在老式的cpu 上 应用程序从3环进入0环是通过中断门 在IDT的0x2E位置
而当时程序的入口为_KiSystemService()
而在之后出现了新的进入0环的方法 sysenter 快速系统调用
与新的入口 KiFastCallEntry()
|
那就看一下 KiFastCallEntry 到底干了些什么?
1 2 3 4 5 6 7 8 9 10 | nt!KiFastCallEntry:
83e470c0 b923000000 mov ecx,23h
83e470c5 6a30 push 30h
83e470c7 0fa1 pop fs
83e470c9 8ed9 mov ds,cx
83e470cb 8ec1 mov es,cx
83e470cd 648b0d40000000 mov ecx,dword ptr fs:[40h]
83e470d4 8b6104 mov esp,dword ptr [ecx+4]
83e470d7 6a23 push 23h
83e470d9 52 push edx
|
可以看到 在刚进入 函数 就对 fs 进行赋值 那再哪 给还原回去了?
0环下的 基本了解差不多了 那再看下 3环 下的 FS 3B
在OD 中 我们 看到 是指向 7FFDF000 ,那我们拿 3B 去拆分
1 2 | index TI RPL
111(7) 0 11(3)
|
在找到 描述符 时 拆分 会发现 基地址 全是 0
这是为什么呢 ? 因为 微软 在 winXP sp3 之后 对 TEB 进行了随机化 机制处理 , 所以是无法 用 选择子 去找gdt 表找描述符
不过我们在 3 环下 通过windbg查看 结果是正确的
1 2 | index TI RPL
111(7) 0 11(3)
|
在找到 描述符 时 拆分 会发现 基地址 全是 0
这是为什么呢 ? 因为 微软 在 winXP sp3 之后 对 TEB 进行了随机化 机制处理 , 所以是无法 用 选择子 去找gdt 表找描述符
不过我们在 3 环下 通过windbg查看 结果是正确的
这里验证下 3环fs 指向 TEB
[招生]科锐逆向工程师培训(2025年3月11日实地,远程教学同时开班, 第52期)!
最后于 2018-5-15 22:53
被Cestlavie呀编辑
,原因: