嘿嘿,IDA初学 ,俺在CodeProject上下了份从内核启动一个R3程序的例子.想学下逆向,于是直接拿IDA看了下这个sys:KernelExec.sys,注释了一下,终于明白了这个驱动的作用啦:

从内核启动一个R3程序.大致是遍历EPROCESS找到explorer.exe, 在其中找到一个alertable的线程,插个用户APC. 这个用户APC就是简单调用WinExec去执行一个指定的程序, 期间要在内核中attach到explorer.exe进程中,为My_Func分配一个MDL,然后映射到explorer.exe的虚拟进程空间中.返回时APC就可以执行啦.

不过这个sys好像有点儿毛病, 它简单的设置ApcState.UserApcPending = TRUE, 好像不调用KeForceResumeThread的话APC不会执行,俺电脑上一直就没有出效果o(*.*)O

哈哈,原来逆向蛮好玩儿的(俺还没还原成C代码,不算逆向 ).

btw: 好像真正的在内核中启动一个R3程序,MS是要拦截掉_KiSystemService,在里面jmp到我们指定的代码处,一般是找kernel32.dll的空隙插, 找到CreateProcessA的地址,弄到kernel32.dll在内存中的空隙里, 然后再XXX就产生了一个R3程序.... 嘿嘿,学习学习 ~~

上传的附件 KernelExec_idb.rar [解压密码:pediy]