寒江独钓:Windows内核安全编程
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

前言

本书是一本专门介绍实时扫描的防毒软件、虚拟磁盘、硬盘还原、硬盘加密、文件系统保护、文件透明加密、防火墙、密码输入保护等软件的Windows内核模块的具体实现方法的编程技术书。本书的目的是使读者能够用C语言编写这些核心模块。

大学的时候,在Windows平台上我最初学的是VB,然后是Delphi。我的感觉是,无论想实现任何功能,都早已有工具的开发者给我们准备了良好的接口和文档,让我们学习和使用都非常的方便。因此觉得自己已经学到了终点。如果仅从“能实现功能”的角度讲,我没有必要再学习了,剩下的事情,只是去很舒适地使用那些接口就可以了。那又何必再学习Windows编程呢?

工作之后遇到了障碍。我的第一个任务是实现一个网络的虚拟磁盘。我虽然自以为无所不能,但是也找不到在Windows系统里增加一个虚拟磁盘的API在哪里。我每天都在使用虚拟光驱、杀毒软件、防火墙,但是我从未想过它们如何实现。不是因为我懂,而是因为我自以为任何功能的实现一定是简单而舒适的,等需要的时候再去研究,绝不会有什么困难。

但是实际编码的时候才明白:良好的接口、舒适的编码过程,绝对不是天生之道。天地万物自混沌而起,那些美好的表面,不过是在残酷的现实上重重包裹的包装纸罢了。

一辆新车的表面自然光彩照人,操作接口也人性而美好。但是一旦需要打开车身去修理内部某根漏油的管子,就没有那么容易和舒适了。造成这种情况,绝不是Windows的底层开发者们天生没有美学观念。那些多年积累和维护着并不断改进的无数行代码,已经是人类工程史上的奇迹了。如今要打开它的外壳去肆意修理,当然不是一件轻松的事情。

但这正是Windows内核编程的魅力所在。

只有极少的程序员会需要参与微软的Windows内核开发,也只有极少的读者会自己试图从头开发一个类Windows的操作系统内核(有这方面兴趣的读者,建议参考开源项目ReactOS)。单纯地讲解Windows内核编程对大多数读者都没有意义。但是,信息安全类的软件是内核编程的极好的应用实例。病毒实时监控、防火墙、入侵检测、数据保护还原、数据即时备份、数据加密、数据防止泄密、反外挂等,都不同程度地涉及到内核编程;或者,内核编程可以让它们工作得更好。这些就是本书的内容,因此本书的副标题为“Windows内核安全编程”。“寒江独钓”则表明了这个领域的寒冷与寂寥。

本书和《天书夜读——从汇编语言到Windows内核编程》的不同之处在于:《天书夜读》一书介绍的是自己调试Windows内核、获取知识、解决问题的技巧。因此《天书夜读》一书介绍的内容大部分是没有文档可循的,容易走火入魔。

本书则基本上介绍的是正统的内核编程技术,是微软在内核编程中给信息安全软件开发者提供的相关接口的大集合,是名门正派的技术,不沾邪气。一个好的内核程序员,“正邪兼修”是有必要的。

本书既适合于有志于成为软件程序员的学生使用,也适合于希望加强自己的技术实力的Windows程序员阅读,同时更适合于从事信息安全行业的Windows软件的开发者作为手头参考。

本书对改善病毒横行的网络现状也有一定益处。虽然无助于劝说那些孜孜不倦的病毒开发者们弃恶从善,但是至少有助于他们提高技术素养,学会更认真地编写程序,以免总是写出导致程序崩溃和系统蓝屏的代码,影响无辜者的正常工作。

本书假定读者了解C语言,能理解C语言的基本语法,并且学习过操作系统、计算机网络和数据结构的基础知识。一般来说,如果读者听说过“进程”、“文件系统”、“中断”、“TCP协议”、“以太网包”、“链表”、“哈希表”、“加密算法”这些名词,则足够阅读此书了。

有些读者可能会关心作为一个程序员的就业前景。这也是我非常关心的一个问题。我曾经在杭州的核新软件公司为证券营业部开发防火墙和虚拟磁盘,一共3年的时间;后来在日电卓越软件(北京)的上海分公司开发部信息安全开发课工作了3年。我认识的业界朋友们,大多在赛门铁克、趋势、瑞星、EMC、华赛这样的公司就职。现在是我工作的第7个年头了,我在Intel在上海的紫竹中心参与动态二进制翻译项目。最有价值的是,我参与的每一个项目都让我学习到更多的知识,面对许多前所未有的考验,每一步都让人充满了精神上的成就感。

本书的读者未来很可能会从事底层编码的工作,而不是一个上层的设计和管理人员。从事底层编码的程序员,常常被同事称为“牛人”。这个牛人不是“牛皮哄哄的人”的意思,而是“像牛一样辛苦工作的人”的意思。想从事这个行业的读者,我抄我的前同事钱铮最喜欢的一首古诗《代牛言》献给您:

渴饮颍水流,饿喘吴门月。黄金如可种,我力终不竭。

谭文

2009年1月1日