首页
社区
课程
招聘
vt接管#PF异常时出错,wrmsr,接着系统崩溃
2023-5-4 15:00 5762

vt接管#PF异常时出错,wrmsr,接着系统崩溃

2023-5-4 15:00
5762


在进行接管#PF异常时,出现了问题。

在关闭  Execption Bitmap.#PF 位后,wrmsr处理函数正常工作。


【注】测试时,我并没有置位 use_msr_bitmaps。这样一来,vmm将会接管所有读写msr的操作。

如果置位use_msr_bitmaps的话,在没有设置MSR_BITMAP时也可以正常工作,测试将接收不到任何读写msr的操作?但是出现了以下问题。

--------------------------------------------------



当我开启VT时,正常的wrmsr可以正确处理。



但是随后出现了wrmsr的参数非常奇怪,接着系统崩溃。




我查了Intel手册,并没有涉及此编号的msr寄存器。。。


希望大牛指点!



[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
点赞0
打赏
分享
最新回复 (13)
雪    币: 12837
活跃值: (8998)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
hzqst 3 2023-5-4 15:13
2
0
所以你接管那些msr干嘛?
雪    币: 2467
活跃值: (4040)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
ALwalker 2023-5-4 16:06
3
0
hzqst 所以你接管那些msr干嘛?
我置位use_msr_bitmaps,照样会出现上图奇怪的msr寄存器编号导致系统崩溃
雪    币: 12837
活跃值: (8998)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
hzqst 3 2023-5-4 16:28
4
0
你既然要用msrbitmaps你就把MSR_BITMAP好好填上啊,不该捕获的填0,该捕获的填1就完事了
雪    币: 2467
活跃值: (4040)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
ALwalker 2023-5-4 16:34
5
0
问题是出现系统崩溃时的msr参数很奇怪,没有这个编号吧?
雪    币: 2847
活跃值: (2572)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xxxark 2023-5-4 17:17
6
0
这应该是hyperv用保留msr来通信,而且还有https://www.unknowncheats.me/forum/3425463-post15.html
雪    币: 2467
活跃值: (4040)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
ALwalker 2023-5-4 17:26
7
0
是否出现该报错取决于我是否接管#PF异常
雪    币: 1641
活跃值: (3601)
能力值: (RANK:15 )
在线值:
发帖
回帖
粉丝
はつゆき 2023-5-4 18:55
8
0
这些属于Synthetic MSR,MSR访问是否造成的vmexit,取决于index是否在合法范围内,0~0x1FFF,0xC0000000~0xC0001FFF之间,如果不在这个区间内,直接产生vmexit,否则取决于bitmap。
雪    币: 1641
活跃值: (3601)
能力值: (RANK:15 )
在线值:
发帖
回帖
粉丝
はつゆき 2023-5-4 18:57
9
0
Synthetic MSR是提供给虚拟机使用的,不止Hyper-v,Vmware或者Kvm都有自己的。
雪    币: 2467
活跃值: (4040)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
ALwalker 2023-5-4 19:34
10
0
当我开启拦截 #PF 并 设置 PFEC_MASK & PFEX_MATCH 时可以规避掉一些#PF,并且此时并不会出现上边的奇怪msr编号(此时虽然设置了use_msr_bitmaps,但是没有填充 MSR_BITMAP)。这却决于我所设置的过滤规则,比如0x15,用户态的代码引发的缺页异常。
雪    币: 2467
活跃值: (4040)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
ALwalker 2023-5-4 19:41
11
0
ALwalker 当我开启拦截 #PF 并 设置 PFEC_MASK & PFEX_MATCH 时可以规避掉一些#PF,并且此时并不会出现上边的奇怪msr编号(此时虽然设置了use_msr_bitmaps,但是 ...
如果过滤规则过于放松,仍然会引发上述的问题;再者,如果不设置#PF并不会出现上述问题 。感觉是 #PF 拦截引起的,但是又不知道原因。
如果不设置MSR_BITMAP,即该域全部为0,就是在 0-0x1fff, 0xc0000000-0xc000001fff 任何对msr的读写都不会产生 vm-exit?
雪    币: 1641
活跃值: (3601)
能力值: (RANK:15 )
在线值:
发帖
回帖
粉丝
はつゆき 2023-5-4 19:59
12
0
ALwalker 如果过滤规则过于放松,仍然会引发上述的问题;再者,如果不设置#PF并不会出现上述问题 。感觉是 #PF 拦截引起的,但是又不知道原因。 如果不设置MSR_BITMAP,即该域全部为0,就是在 0-0 ...
msr bitmap可以控制这个范围内的访问是否vmexit,这个范围外的是必然产生vmexit。
雪    币: 4
活跃值: (439)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lgjlps 2023-5-5 08:14
13
0
你这多半是PF处理部分的问题,好好检查一下寄存器的保存和恢复,以及注入时类型和RIP。
雪    币: 12
活跃值: (209)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
clestor 2023-5-5 13:42
14
0
__forceinline bool IsMicrosoftSyntheticMsr(UINT64 Msr) { return (Msr >> 30) == 1; }
这个只有在虚拟机下才会传递,自己的VM遇到这个VmExit后直接交给上层VMM处理就行。实机的话可以注入个#GP之类的
游客
登录 | 注册 方可回帖
返回