紫水晶编程技术论坛 - 努力打造成全国最好的编程论坛

 找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 361|回复: 11

《WIN64驱动教程》补充[20]:MSR HOOK的实现

[复制链接]

854

主题

3481

帖子

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

Rank: 125Rank: 125Rank: 125Rank: 125Rank: 125

积分
36100
发表于 2014-8-29 01:24:17 | 显示全部楼层 |阅读模式
作者:Tesla.Angela

MSR HOOK是一种比较罕见的HOOK了,网上甚至少有提及。这里我必须普及一下关于MSR的知识。MSR直译叫做“模块指定寄存器”,这是一组特殊的寄存器,它不能通过MOV指令进行读写,而必须用专门的指令:RDMSR和WRMSR。这种寄存器甚至没有名称,只有代号,但是部分MSR里却记录了重要的内容,比如KiFastCallEntry的函数地址(WIN64上不叫这个名字,但是用途相同)。众所周知,KiFastCallEntry是RING3进入RING0的关口,是一个“一夫当关万夫莫开”的位置,而这个地址,系统就是通过RDMSR获取的。所以如果修改了特定寄存器(WIN32是0x176,WIN64是0xC0000082)里的内容,那么就能劫持这个入口。内核重载让RING3程序无视内核HOOK,根本点就在这里。所以MSR HOOK的本质就是使用WRMSR来修改特定MSR的内容。但是这个这么重要的位置,PATCHGUARD当然是不会放过的。在WIN64上修改关键MSR的值会导致蓝屏。如果用VT技术,拦截RDMSR指令,返回代理函数的地址,就能绕过PG实现类似SSDT HOOK的效果了。当然,要实现用VT框架来拦截MSR,就是另外一个故事了。
游客,如果您要查看本帖隐藏内容请回复

0

主题

49

帖子

0

精华

钻石会员

Rank: 6Rank: 6

积分
2911
发表于 2014-8-29 18:41:32 | 显示全部楼层
来莫拜下。。。

0

主题

18

帖子

0

精华

铂金会员

Rank: 5

积分
2252
发表于 2014-10-13 15:52:17 | 显示全部楼层
这是32位代码吧,,,,,,

854

主题

3481

帖子

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

Rank: 125Rank: 125Rank: 125Rank: 125Rank: 125

积分
36100
 楼主| 发表于 2014-10-16 08:44:54 | 显示全部楼层
ugvjewxf 发表于 2014-10-13 15:52
这是32位代码吧,,,,,,

32、64全兼容。网上那些渣牛的代码才是只支持XP32的!!!

0

主题

37

帖子

0

精华

铜牌会员

Rank: 2Rank: 2

积分
61
发表于 2024-1-3 08:07:23 | 显示全部楼层
学习了

1

主题

62

帖子

0

精华

铜牌会员

Rank: 2Rank: 2

积分
99
发表于 2024-1-6 16:09:17 | 显示全部楼层
看看怎么个操作

8

主题

76

帖子

0

精华

钻石会员

Rank: 6Rank: 6

积分
4115
发表于 2024-1-9 17:17:29 | 显示全部楼层
抄一抄

0

主题

47

帖子

0

精华

贵宾会员

Rank: 2Rank: 2

积分
89
发表于 2024-1-26 23:35:10 | 显示全部楼层
2024补充学习

5

主题

120

帖子

0

精华

铜牌会员

Rank: 2Rank: 2

积分
173
发表于 2024-1-27 11:58:00 | 显示全部楼层
我来学习

5

主题

120

帖子

0

精华

铜牌会员

Rank: 2Rank: 2

积分
173
发表于 2024-1-27 11:59:31 | 显示全部楼层
基本原理
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

手机版|Archiver|紫水晶工作室 ( 粤ICP备05020336号 )

GMT+8, 2024-4-28 18:19 , Processed in 0.029494 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表