https://bbs.pediy.com/thread-261800.htm这篇文章写的挺好,主要是看雪很少有这方面的文章,里面的FuckCr3函数中,有一段代码我感到很奇怪
__writecr3(NowCr3);
KeUnstackDetachProcess(a);
KeStackAttachProcess(FakeEproc, a);
__writecr3(vmm_cr3);
第一个问题,为什么要停止附加进程后再次附加,别人读我的进程要切换我的进程的cr3了,我直接把cr3赋给其他值不就可以了吗第二个问题,就算要停止附加,也要在guest机的线程里面停止,但是KeGetCurrentThread()获取的不是host机的线程吗,难道说host和guest在一个线程里?
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
111
萌克力 __writecr3(NowCr3); & ...
hzqst 在vmmhandler里面调kernel API尤其是涉及上下文切换、内存分配等高危API的,有一个算一个不用看全都是玩具,看个乐子就行,真上生产环境了你会发现除了你自己能用别人都是蓝屏。
sanqiu 我感觉不unstack,只切换cr3的话,应该也不会蓝屏吧,反而调用这三个API(包括Getxxx)会消耗性能
mataoyong 我试了一下vmmhandler里面切换进程会蓝屏。尝试了一下KPROCESS->DirectoryTableBase,然后用x64页表解析方式把虚拟地址对应到物理地址,直接对物理地址进行操作。不 ...