您好,欢迎访问三七文档
I驱动程序设计基础本文档又看雪软件安全论坛提供专题负责人:CCDeath参与人员:sislcb、vbcs、qqeleven、xhackx、火影、猪头三[开题]目前还没有独立驱动专业,很多人都是自学。写专题可以使所学知识系统化,规范化,运用起来思路清晰。写代码,刚开始尽量多写。代码能看懂并不能代表就能写,就像有看过windows部分源代码,不一定就能写出一个windows出来。代码有时候看比较简单的,但还需在键盘敲一下:-)。编码使要越写越深入,越写越规范。是个量变达到质变的过程。[经历]我有幸能在trw2000刘涛涛那边工作过二十几天,以下都是只从技术角度去看一切的。代码要写的漂亮,不能随便浪费一个字节。精确的是到字节,不是随便定义int类型。个人感觉刘涛涛很有勤奋精神。他挖第一桶金的时候,可以连续工作一个月,赚了十万,头酸背痛的。是个善于学习的人,也能快速移植别人的想法,会做笔记,会思考。虽然现在离开,出来到其他公司一直深受到他的影响。[结尾]其实IT行业,不是很幸苦,就是有时候觉得工资不高而已。驱动有时候可以用IDA逆微软dll,看一下微软写的。驱动专题还有很多不完善的地方,需要每个人动起手来,写写。相信你,你会越写越漂亮的:-)[思路]先用三个小专题介绍驱动流程,再用三个小专题介绍驱动程序是如何与应用程序进行通信的。然后分析一个经典驱动源码,最后再写监控程序。CCDeath2008.4.11II目录由此开始...................................................................................................................................1真正的驱动入门(一)...........................................................................................................4驱动开发和调试的环境设置.................................................................................................10inf文件的编写.......................................................................................................................16驱动动态加载.........................................................................................................................19WDM驱动中使用DeviceIoControl,CreateFile...................................................................28WDM驱动程序使用BufferI/O,Direct,Neither模式传递数据(修正版)..............................37驱动和应用层的异步通信.....................................................................................................50真正的驱动入门(二).........................................................................................................55filedisk源码分析....................................................................................................................66偶写的Ring0监控程序PRMonitor源代码(ddk+sdk)..........................................................70驱动程序中几个常见例程(读书笔记)..................................................................................71过滤驱动中创建IRP时IO堆栈单元的细节处理................................................................751由此开始一、三个专题驱动整个入门流程内容列表流程一.配置VC++、不同操作系统对应的DDK、虚拟机VMWare,安装调试器SofticeorWinDbg;流程二.编译第一个最简单的Hello程序(DDK环境、VC+DDK环境都可),并用监视器观察输出结果..流程三.编写*.inf文件,进行手工安装到电脑上,并设备管理器进行观察.[单独出来专题,可使用流程六]流程四.编写一个自动加载驱动程序、卸载驱动程序的应用程序。[单独出来专题,可使用流程六]流程五.设置好调试器,特别是WinDbg双机调试通过com1端口。下载好符号表,转换格式,进行源码调试。Softice调试器,如果是XP系统,请下载补丁.流程六.提供一个快捷方式解决流程三.四途径,不够建议多多使用上面,多多了解计算机。装一个DirverStudio3.2,只是用里面的快捷工具,如EzDriverIntaller、DriverMonitor。任务:通过流程一、二、六、五可以直接完成任务。但是如果你想知道更多就按照流程一、二、三、四、五、六.来完成。总成果:心中有整个流程思想,编写第一个HelloWorld驱动程序,踏进驱动之门。[课题3.1]驱动整个入门流程之流程一、二、六、五课题要求:配置VC++、不同操作系统对应的DDK、虚拟机VMWare,安装调试器SofticeorWinDbg;成果3.1:编写得到第一个HelloWorld驱动程序相关解决方案:驱动开发和调试环境的设置(由qqeleven完成)=48220真正的驱动入门(—)[附小程序代码](由ccdeath完成)=56192[课题3.2]驱动整个入门流程之流程三课题要求:相信你3.1课题没问题吧,编译好驱动为*.sys。安装*.inf,接着用设备管理器进行观察。介绍*inf格式及如何编写成果3.2:编写得到一个简单HelloWorld的*.inf相关解决方案:inf文件的编写(由sislcb完成)=57571[课题3.3]驱动整个入门流程之流程四课题要求:相信你3.1课题没问题吧,这个应用程序可以是控制台或者是Win32程序,2打开服务管理之类,创建服务。能够把编译好的驱动程序,加载、卸载测试一下,在监视器进行观察.成果3.3:编写得到一个快捷加载、卸载驱动程序的应用程序相关解决方案:驱动整个入门流程之流程四--驱动动态加载(由sislcb完成)=57265二.三个专题WDM驱动程序与应用程序之间的通信通信一.理解驱动程序基本框架,特别同步、IRP请求包这部分.通信二.应用程序可以分为:古老控制台main()、win32SDK程序、win32MFC框架,只需完成其中一个即可。通信三.驱动程序获取数据缓冲区三种方式:METHOD_BUFFERED,METHOD_IN(OUT)_DIRECT,METHOD_NEITHER;通信四.通信方式DeviceIoControl、事件通知(针对win32)等.通信五.调试、运行、观察结果任务:这个是在驱动整个入门流程基础上进行深化。总成果:从一到二是一个跨越式进步,通信实例程序。Fight![课题3.4]WDM驱动程序与应用程序之间的通信二课题要求:会使用DeviceIoControl访问,解决CreateFile问题,寻找桥梁-设备接口GUID。古老控制台main()、win32SDK程序、win32MFC框架,只需完成其中一个即可。成果3.4:编写得到一个测试程序框架,main()、win32SDK、win32MFC相关解决方案:WDM驱动中使用DeviceIoControl,CreateFile(由火影完成)=57948[课题3.5]WDM驱动程序与应用程序之间的通信三课题要求:对控制命令,还有文件包含路径不要出错。驱动程序获取数据缓冲区三种方式:METHOD_BUFFERED,METHOD_IN(OUT)_DIRECT,METHOD_NEITHER;成果3.5:编写得到一个驱动程序,能够分别把这三中获取数据方法。相关解决方案:WDM驱动程序使用BufferI/O,Direct,Neither模式传递数据(由火影完成)=58251[课题3.6]WDM驱动程序与应用程序之间的通信四课题要求:通信方式DeviceIoControl异步、事件通知(针对win32)等,有可能还需要用到自旋锁.成果3.6:编写得到一个驱动程序,能够满足其中一种方式就可以了。相关解决方案:驱动和应用层的异步通信(由sislcb完成)=59015真正的驱动入门(二)[附2个源代码](由CCDeath完成)3=56313三.filedisk源码分析[课题3.7]filedisk源码分析课题要求:分析出应用层和核心层的整体框架思路成果3.7:filedisk源码分析相关解决方案:filedisk源码分析(由ccdeath完成)=57129四.Ring0级监控程序[课题3.8]Ring0监控程序PRMonitor源代码(ddk+sdk)课题要求:通过ssdthook实现对进程创建,注册表修改和内核模块加载的监控相关解决方案:偶写的Ring0监控程序PRMonitor源代码(ddk+sdk)(由xhackx完成)=55092五.学习驱动碰到难题解决经验与学习笔记分享[课题3.*]总结课题要求:亲身感受相关解决方案:驱动程序中几个常见例程[读书笔记](由vbcs完成)=57881过滤驱动中创建IRP时IO堆栈单元的细节处理(由猪头三完成)=60278六.经典驱动代码发布区课题要求:注明版权信息,还有链接信息相关解决方案:一份虚拟光驱的源码(由vbcs提供)=57486七.驱动资源发布区codeproject驱动教程谢谢jingru提供=63331待续...可以涉及网络驱动、文件系统过滤驱动、**驱动等领域是不是越来越
本文标题:驱动程序设计基础
链接地址:https://www.777doc.com/doc-3272272 .html