Windows操作系统中驱动程序和内核的关系

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

217

2010年5月刊

计算机教学信息化

信息与电脑

China Computer&Communication

应用程序若想直接对系统的硬件资源进行访问,必须要借助于相应的设备驱动程序。因为Windows 操作系统为了保护系统的稳定性、安全性是不允许应用程序直接访对系统的硬件资源进行访问的。驱动程序运行于Ring0环境下,它具有对系统全部资源的访问权以及管理权。这就意味着内核驱动可以对所有的系统资源进行访问,可对所有的内存空间进行读取,并且也被允许执行CPU 的特权指令。

一、驱动程序

(一)对驱动程序的分类1、事件方式(VxD )

应用程序创建一个事件的句柄,称为Ring3句柄。因为虚拟设备驱动程序使用的是事件的句柄,所以需要创建Ring0句柄

2、事件方式(WDM )

首先,应用程序先创建一个事件,将该事件句柄传递给设备驱动程序,然后创建一个辅助线程,这是边等着事件的有信号状态边自己做着其它事情。

3、异步I/O 方式

应用程序先调用CreateFile ()函数加载设备驱动程序。4、异步过程调用(APC )

应用程序先用CreateFile ()函数动态加载设备驱动程序,接着定义一个回调函数backFunc (),并将回调函数的地址&backFunc ()作为参数,通过DeviceIoControl ()传送给设备驱动程序。

5、消息方式

应用程序调用CreateFile ()函数动态加载虚拟设备驱动程序。当加载成功后,通过对DeviceIoControl ()函数的调用将窗体句柄传送给VxD ,VxD 利用这个句柄向窗体发消息。

(二)线程调度

线程调度在windows 系统中分为三条主要的调度链表,分别为:KiWaitOutListhead ,KiWaitInListHead ,KiDispatcherReadyListHead 。这三条有两条是阻塞链,另一条为就绪链表。若线程获得cpu 执行的时候,系统则分配一个时间片给线程。若发生一次时钟中断则从所分配的时间片上减掉一个时钟中断的值。如果此值小于零那么就证明标识时间片用完了。则这个线程根据自身的优先级载入到相应的就绪队列末尾。KiDispatcherReadylListHead 是一个数组链的开始端,在windows2000中它含有32个队列,这32个队列分别对应32个优先级。

二、关于Hook内核函数(KiReadyThread)的检测进程

1、Hook 内核函数的通用方法

当我们要对目标函数进行拦截的时候,只需把原函数前五个字节的机器代码修改为一个JMP XXXXXXXX (XXXXXXXX 是距自己的

Hook 函数的偏移量)就可以了。同时并保存修改前的5个字节。当跳入原函数时,将这5个字节恢复即可。

char JmpMyCode []={

0xE9,0x00,0x00,0x00,0x00};//E9对应JMP 偏移量指令。

*((ULONG*)(JmpMyCode+1))=(ULONG )MyFunc-(ULONG )OrgDestFunction-5;//得到偏移量。

memcpy (OrgCode ,(char*)OrgDestFunction ,5);//保存原来的代码。

memcpy ((char*)OrgDestFunction ,JmpMyCode ,5);//覆盖前一个命令作为一个跳转指令。

Mov[esp],retaddr ?;将目标函数的返回地址用自己代码空间的返回地址替换,使其返回后能继续接手处理。当实现了Hook 之后,再调用原来函数时(Jmp_OrgDestFunction ),此时所寄存器的值及堆栈信息与没Hook 的时候一样。在返回到系统的时候(jmpds :_OrgRet ),此时的堆栈信息与寄存器的值同没有hook 的时候也是一样。也就是说中间hook 层对下面与上面都是透明的。

2、对隐藏进程检测

当进入K i R e a d y T h r e a d 时,e c x 指向T h r e a d 。因此可以hook KiReadyThread 然后用ecx 的值得到当前线程的进程信息。KiReadyThread 没被ntosknrl.exe 导出,则通过硬编码来。在2000Sp4中地址为0x8043141f 。

Hook 的方法都是相同的,只有hook 过后才能得到线程或是进程的ETHREAD 或者是EPROCESS 结构头地址。

以上对驱动程序进行的阐述,以及对内核级别进程隐藏以及侦测做的一个总结,并给出了核心代码,通过对系统底层分析可以很好的了解病毒技术,为从事信息安全方面研究做一些准备。

参考文献:

[1] 林少丹. 浅析基于LINUX 的嵌入式系统驱动程序设计[J].中国高新技术企业,2008(24).

[2] 丁晓波.LINUX2.6内核设备驱动程序架构研究[J].软件导刊,2007(23).

[3] 刘巍. Windows CE 操作系统下EZ-USB 设备驱动程序的设计与实现[J].计算机系统应用,2009(3).

[4] 丁亮,谢玉强,舒辉.Windows 操作系统下内核级Rootkitss 隐蔽技术研究[J].计算机工程与设计,2007(19).

[5] 朱政洪.Windows 操作系统驱动程序浅析[J].信息网络安全,2009(12).

Windows操作系统中驱动程序和内核的关系

王坤 鲁东大学,山东烟台 264045

摘要:设备驱动程序是Windows 操作系统中对硬件进行操纵的最底层软件接口。本文对驱动程序进行了阐述,并选用了信息对抗技术中的关于Windows 内核级病毒隐藏技术以及反病毒侦测技术作为议题进行了详细的讨论。

关键词:Windows 操作系统;驱动程序;内核

中图分类号:TP316 文献标识码:A 文章编号:1003-9767(2010)05-0217-01

相关文档
最新文档