大佬进来!!!
首先来看看SYSCALL这个指令 在AMD上是怎么工作的SYSCALL 0F 05 Call operating system可以看到 如果没有SCE标志,那么就会产生一个#UD异常
然后看看这个标志
图中所说的是 MST_IA32_EFER在window里就是 0xC0000080
然后尝试清SCE标志
然后在windowx64系统工作 正常来说 CPU遇到异常会到IDT里分发异常
可是在调试过程中没有发现经过#UD 而是没有谁去接管这个异常(无虚拟化环境),造成虚拟机卡死
然后有没有可能走IDT里 却不分发异常,如果分发了异常那么就是蓝屏 (还是说走到了NMI中断里)
参考:AMD64 Architecture Programmer’s Manual, Volumes 1-5, 40332, 24592, 24593, 24594, 26568, 26569
还有一个问题,也就是所谓检测无痕MSR_LSTAR HOOK
mov ecx, 0C0000084h rdmsr
push rdx
push rax
and eax, 0FFFFFEFFh
wrmsr
pushfq or qword ptr, 100h
popfq
syscall
这代码你能看出什么呢?
首先修改SFMASK MSR,在保存原来的MSR值,在将SFMASK 的第七位复位,在设置TF单步,那么正常来说SYSCALL 会走到kisystemcall64里 然后就检测到了(当然如果不设置MSR 那么SYSCALL指令会将TF复位)
那么问题来了 在新win10上 PatchGuard利用这个检测,如果自己调用 则也会造成上面卡死虚拟机,有没有可能是在IDT1里检测是否是PG调用的呢
本帖最后由 狐白小刺客 于 2021-5-26 10:28 编辑
17点17分 在win10重现了下 发现成功了
确实走的是KiInvalidOpcodeFault 并且捕获到了异常 不过是有几率的 这又是什么原因呢
狐白 就是大佬了。我们都望尘莫及的了。 最佳答案就是我了! 不是大佬,就蹭蹭,不进去看了😅
页:
[1]