系列的最后一篇演示如何通过调试手段摘除 QQ 过滤驱动设置的事件通知 CallBack。
内核中有几个全局的数组用来存放这些事件通知 CallBack 的指针,第一个就是nt!PspCreateProcessNotifyRoutine,
当有进程被创建时,该数组中的函数指针就会依次被调用,与此类似,当有线程被创建时,nt!PspCreateThreadNotifyRoutine
数组中的函数指针就被调用;nt!PspLoadImageNotifyRoutine中的回调则是在有内核模块加载时被调用。
驱动程序通过向这些数组中加入 CallBack 指针,就能够监控相应的事件。
首先来看下哪些驱动程序正在监控系统范围的进程创建事件:
从上图您可以看到,QQFrmMgr.sys 中有一个例程正在监视着进程创建事件。除此之外的其它内核模块都是合法的,比如
“avkmgr”与“avdevprot”是安装德国小红伞反病毒软件时,附带安装的两个内核模式驱动程序,它们注册了各自的回调在
监控着进程创建事件,这是实现 Real-Time Protection 用到的系统底层机制之一;“tcpip”不用我说各位也知道,它是
Windows 内核网络栈的主要实现模块之一:
注意,系统最多支持注册 8 枚事件回调指针,nt!PspCreateProcessNotifyRoutineCount存储当前注册的回调指针数量,如下图,
这个全局变量的值与第一张图片中的事件回调指针枚数一致:
现在,我们尝试从中摘除 QQFrmMgr.sys 的监控例程:
使用类似的手段,检查 QQFrmMgr.sys 有没有监控线程创建与内核模块加载事件:
您看,这家伙监控的地方还真不少,为的就是保护它自己免受其它恶意软件攻击!或许你会好奇:图中的“XLGuard”是啥东
东?
它就是在安装“迅雷”(一种基于 BitTorrent 协议的 P2P 下载/分享软件)时,一并安装的内核模式驱动程序之一,如下图:
从名称中的“Guard”来看,应该也是用来保护迅雷自身组件的——现在的软件都比女性还懂得怎么保护自己呢!
你可以使用前述的方法来阻止 QQFrmMgr.sys 监控线程创建与内核模块加载事件——就布置成家庭作业吧!
———————————————————————————————————————————————————
写到这里,本系列算是大致功德圆满了。。。。还记得上一篇我抱怨说“!chkimg”调试器扩展命令不能用吗?
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2018-7-2 17:34
被shayi编辑
,原因: