狐白小刺客 发表于 2021-5-25 17:03

大佬进来!!!

首先来看看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-25 17:18

本帖最后由 狐白小刺客 于 2021-5-26 10:28 编辑

17点17分 在win10重现了下 发现成功了
确实走的是KiInvalidOpcodeFault 并且捕获到了异常 不过是有几率的 这又是什么原因呢

0×Ret 发表于 2021-5-25 22:28

狐白 就是大佬了。我们都望尘莫及的了。

封情 发表于 2021-5-27 08:05

最佳答案就是我了!

李沉舟 发表于 2021-6-9 04:26

不是大佬,就蹭蹭,不进去看了😅
页: [1]
查看完整版本: 大佬进来!!!