前言
Windows是当前主流的闭源操作系统,从第一个NT内核的Windows 2000至今,已经有20年左右的历史。在这漫长的20年内,为了满足日益变化的业务需求,以及应对不断升级的安全挑战,Windows操作系统内核一直不断升级与完善,其主要表现是内核中增加了新的逻辑模块与安全机制,其中最为典型的是64位的Windows操作系统内核对比32位内核增加了“Patch Guard”模块,这个模块的主要作用是检查内核是否被第三方内核模块“污染”,目的是防止病毒木马使用内核挂钩或劫持的技术篡改内核。新的安全机制往往会对安全开发者带来一定的影响,其原因是一些软件过度依赖系统未公开的底层技术,而正确的做法是开发者需紧密依赖系统提供的公开机制,利用可利用的机制完成相同的功能,这要求开发者对整个Windows内核机制有深入的理解。作者编写本书的目的之一,正是希望读者能对Windows内核有更全面、更深入的认识。
本书的前身是《Windows内核编程与驱动开发》,本书在前者的基础上,删除了部分过时的章节,重写了大部分基础章节并新增了部分当前较为热门的技术,同时为了使本书内容更为聚焦,删除了与Windows内核关联性不强的内容。
本书面向的人群主要有以下几类。
●有一定C语言基础,有兴趣了解Windows内核的读者。
●有一定C语言基础,并且希望从事Windows内核开发的读者。
●有一定基础的Windows内核开发者,有意愿进一步提高的读者。
本书共分为三篇。第一篇为基础篇(第1章~第6章),从初学者的角度出发,介绍Windows内核的基本概念、开发环境的搭建、系统机制以及内核编程的技巧。第1章与第2章是本书最为基础的部分,介绍了内核编程的基本概念与开发环境搭建,初学者应该首先学习这部分内容。第3~第5章重点介绍了系统的常用机制,这些机制的使用会贯穿本书所有章节,掌握这些常用机制是内核开发者最基本的要求。第6章介绍了内核编程的注意事项与技巧,这些注意事项与技巧可以帮助初学者少走弯路,快速入门。
第二篇为过滤篇(第7章~第18章),是本书的核心内容,由易到难详细介绍了Windows系统的过滤机制。首先以最简单的串口过滤驱动开始,剖析了一个过滤驱动的最基本要素,然后分别介绍了键盘过滤、磁盘过滤、文件过滤以及网络过滤。对于网络过滤,本篇从不同的网络层次与角度介绍了TDI、WFP以及NDIS等机制。本篇内容涵盖了目前Windows系统绝大部分主流的过滤技术。
第三篇为应用篇(第19章~第23章),结合前两篇的知识点,本篇综合介绍了Windows安全领域所需的其他技术,通过对本篇的学习,读者将会发现安全技术并不局限于系统提供的现成机制。本篇选取了目前主流安全软件所使用到的典型技术,深入浅出,首先介绍了CPU的基本知识点,然后基于上述知识点,第20章重点介绍了Windows下的挂钩技术,挂钩技术常被用于安全软件的检测、审计、拦截等技术;第22章和第23章从守护的角度,为读者介绍了自我保护技术。
笔者拥有十余年的Windows开发经验,主导过数据安全、主机安全、服务器安全等项目,涉及To C(面向消费者群体)和To B(面向企业用户群体)行业,深知Windows内核的复杂性,由于行业的特殊环境,To C和To B的内核技术方案选型不尽相同,因为不同的用户群体,其主机上软件存在参差不齐的同类安全软件,安全软件之间也存在大量的兼容性问题,这些问题的引入使得原本并不简单的内核编程更为复杂化。记得有很多读者问过我一个相同的问题:如何编写一个稳定的内核模块。这个问题其实没有标准答案,以笔者的经验来看,读者首先应该养成良好的编程习惯,然后深入理解系统的各种安全机制以及拦截方法,在编写代码时,请思考如下几个问题:①这句代码是否会被其他软件拦截导致失败;②这句代码是否会触发一些第三方的回调函数;③这句代码失败后应该怎么处理。本书在为读者介绍技术的同时,也为读者介绍了笔者的内核开发心得体会与技巧,希望这些体会与技巧可以为读者带来更多的思考。内核编程类似于武林秘籍的内功修炼,需要时间沉淀,并非一蹴而就,请读者赋予更多的耐心,“成功之道,贵在坚持”。
写作是一项工作量巨大而繁杂的工作,而对于技术书籍来说更是如此。由于我个人工作的缘故,写作只能在晚上或周末进行,有时为了整章内容的思路连贯而需要挑灯夜战,通宵达旦。一路走来,感谢我的父母、妻子和女儿,在每天有限的时间里,我需要投入更多的时间精力专注在写作上而缺少对他们的陪伴,尤其是我的女儿淇淇,在深感愧疚的同时,也感谢他们的理解与支持。
感谢我的挚友黄瀚,在本书写作过程中一直支持我,并为我提供了大量的技术性资源。感谢电子工业出版社的李冰老师和冯琦老师,她们的编辑工作确保了书本所有文字内容严谨与通畅。
感谢“安全圈”内朋友们的支持,尤其感谢数篷科技的科学家吴烨、CTO杨一飞以及架构师王柏达,他们在工作中为我提供大量的帮助。感谢上一本书籍热心的读者,他们反馈的问题更好地完善了本书的内容。
最后,希望本书能为“安全圈”内的读者或者即将进入“安全圈”的读者带来更大的收获。
陈铭霖
2020年1月于深圳