前    言

    Windows是庞大复杂的系统。由于Windows并不公开源代码,我们在调试程序的时候,往往就调到自己未知的领域去了。没有C代码,只能看到令人眼花缭乱的汇编指令和机器码。我曾对它们望而生畏,敬而远之。尤其在这个黑客、破解、病毒、木马横行的时代,如果作为安全软件的开发者,同样不能期盼病毒的作者提供可以阅读的高级语言代码。
    如果那些东西,也和C语言一样亲切易懂,那多么好啊!这样的话,即便是Windows这样庞大复杂而且封闭的系统,或者是再诡异和隐蔽的破坏技术,至少只要我愿意去探索,对我来说就不再有秘密可言。
    其实这个梦想并非不切实际。既然我们能读懂C代码,何以就不能读懂汇编呢?很多高手眼中,机器指令和C代码一样熟悉。
    这本书并没有系统地介绍Windows系统底层。但是我尝试寻找正确的方法和手段,为读者打开Windows底层知识宝库的大门,使读者可以在其中自由阅读,自己去获取所需知识。
    本书强调汇编语言的应用。虽然没有像指令手册那样罗列所有指令的细节,但是让读者在实践中熟悉实用的汇编指令。我一般把汇编语言用于调试和理解程序,在写代码时应用较少。但是汇编是了解没有代码的二进制代码的基础。
    这里着重于Windows内核编程,包括WDK、WinDbg的使用,但是Windows内核开发体系庞大复杂,这方面已经有很多的经典书籍可以阅读。在这里我只提到了简单、实用和必要的部分。
    对于安全软件的开发者,尤其是有兴趣在Windows系统下开发反病毒软件的内核驱动读者,会学到基础的研究方法。
    由于这一切都从阅读和理解机器指令出发,所以名为“天书夜读”。
     “天书夜读”是通向软件底层技术的一个大门与捷径。这里涉及的每个方面的技术,无论是CPU底层架构与机器指令、汇编语言、Windows内核编程、软件逆向工程还是软件调试,无一不是入门艰难的技术,许多技术者在开始时就被汗牛充栋的庞杂资料吓倒。用一条简洁明确的线,把它们串联起来,使读者可以从最基础入门,循序渐进地接触到高深的技术,并应用于实际。避免一开始就面对浩瀚的文档资料而茫然不知如何入手,也不知如何学以致用,这就是我写这本书的目的。
    本书正文的内容是从读者很可能已经遗忘的汇编语言的基础指令开始,介绍C语言与汇编指令的关系,为阅读用C语言编写的Windows内核做准备。然后开始讲解Windows内核的C语言编程的基础。让读者能熟悉使用C语言开发Windows内核程序。接着指导读者进行内核的开发和调试环境的配置,并进行了一系列的尝试:阅读Windows内核的部分实现代码,并尝试自己去实现它。与此同时,产生了修改已有内核的需求。于是接下来介绍了机器码指令和汇编语言的关系,以及能够解读机器码的反汇编引擎,并以此为基础,介绍了进行Windows内核Hook开发的方法。之后是Windows内核Hook的一个利用:我们举出了一个防止病毒木马感染的安全防毒软件的例子。在此之后,简要介绍了更深层次的病毒与安全的对抗:Rootkit与HIPS。最后是一些防止代码与技术被阅读者“偷学”的章节。
    相信读者读完此书,无论是对汇编语言的掌握,还是Windows编程的技术,以及对Windows系统的了解和调试程序、查找修正故障的能力,都会得到一个飞跃式的提高。
谭 文
2008年4月2日


返回