KeUserModeCallback用法详解(Ring0调用Ring3代码)
ring0调用ring3早已不是什么新鲜事,除了APC,我们知道还有KeUserModeCallback.其原型如下: 代码: NTSTATUS KeUserModeCallback ( IN ULONG ApiNumber, IN PVOID InputBuffer, IN ULONG InputLength, OUT PVOID *OutputBuffer, IN PULONG OutputLength ); 但是对于这个函数怎么用,很多人还不是很清楚,因为它未文档化,参数意义又比较晦涩,但是我们除了wrk中的源码可以参考,还有一些实例可供调试研究。所以,要搞清楚它的调用过程并不困难,但是需要一些基本的知识,比如系统调用和返回的过程(KiFastCallEntry,KiServiceExit等)。本文尽量不多谈这种过程转换的细节,而把主要注意力集中在传入的参数及调用过程,以灰盒的方式来分析它。 调试的例子是一个俄国佬的Ring0MessageBox,我自己也写过一份(其实就是逆的),放在看雪了,几乎完全一样。代码地址放在文后了,这东西以前发过一次,不过没讲原理. 有兴趣的可以下载回来扔到Vmware里,拿起调试器,一起来Debug~ 一、KeUserModeCallback的基础知识 我们都知道一个普通的系统调用,它的过程大概是这样的(以OpenProcess为例):