首页
社区
课程
招聘
[分享]《Windows内核安全与驱动开发》试读抢先发 PDF下载
发表于: 2015-2-11 13:48 22418

[分享]《Windows内核安全与驱动开发》试读抢先发 PDF下载

2015-2-11 13:48
22418
Windows内核安全与驱动开发
(试读版)
说明

Windows内核安全与驱动开发-试读.pdf
本书系计划中的《天书夜读:从汇编语言到Windows编程》和《寒江独钓:Windows内核安全编程》各自第二版书稿重新编辑后,整合改名而成。因此实际上也是《天》与《寒》的第二版的合体。

相比两本前作,这本新书中修改了旧书中大量的错误、重写了部分章节,充实了更多更新的内容。总体而言更加全面,更加由浅入深,学习曲线更加平缓。全书分为基础、开发与高级三篇。一共三十章,800页。

本书即将由电子工业出版社出版,作者保留一切权利。本版本仅供读者试读用,禁止用于任何商业行为。本版本可以免费获取与传播,但必须保留其完整性。禁止修改后重新发布。禁止摘抄、使用本版本中部分或全部内容。

作者:谭文,陈铭霖,杨潇、邵坚磊、张佩、卢冠豪
建议反馈:任何建议可以联系作者QQ2252689525,或者到鱼C论坛(http://bbs.fishc.com/)置顶帖讨论。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (28)
雪    币: 340
活跃值: (739)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
鱼C论坛小甲鱼老师写在前面的话

有人说,学习编程的过程像极了武侠小说中武功的修炼。先是一招一式的学套路,逐步修炼内功心法,然后迈入武林,在自身的实践中逐渐领悟出习武的真谛。编程语言是基本的套路,不同门派的套路尽然不同。而数据结构,算法,微机原理,操作系统,内核开发则是内功心法。学套路不学内功,那只不过是花拳绣腿,学内功不学套路,则无处施展。

非常感谢谭文邀请我写几句。由于编写课件的需要,早在几年前就先后拜读过谭文的《天书夜读—从汇编语言到Windows内核编程》和《寒江独钓—Windows内核安全编程》。书中很多案例我都觉得很合适,都直接搬到教学当中。记得论坛上很多网友问我,学习完基本的编程语言之后,应该学习哪些内容呢?谭文的这两本书都在我的推荐书单中。只可惜后来他们告诉我这两本书已经不再继续出版了,甚是遗憾!当然,今天我能够在这里写这个序言,正是因为谭文跟我说,他将《天书夜读2》和《寒江独钓2》合并为本书:《Windows内核安全与驱动开发》

Windows内核安全与驱动开发的话题,通常都被认为是只有高手中的高手才会涉及的领域,甚至很多程序员都觉得Windows内核程序是非常神秘的东西。其实不难理解,由于大环境的影响,国内这方面的资料确实是寥寥无几,而真正优秀的书籍更是凤毛麟角。

谭文在现实中一直忙于各种各样的项目,每个项目都经历了“实现核心->功能开发->测试”这个过程,所以该书也是难能可贵地记录了作者的这些实战经验。本书中的案例并不是像很多学院派书籍一般,挖空心思的为一个知识点。

本书属于内功心法的学习范畴,其中的案例涉及病毒实时检测、防火墙、入侵检测、数据保护还原、数据即时备份、数据加密、数据防止泄密、反外挂等。推荐有C语言和汇编基础的朋友进行学习。本书还细心的为每个章节准备好练习题,通过这些练习,你可以迅速地进行自我检查并发现学习中的遗漏。

最后需要说的是,本书并非只是将《天书夜读2》和《寒江独钓2》单纯的进行合并出版。实质本书增加了不少新的知识,让读者从X86内核可以很好的过渡到时下流行的X64内核开发中。
2015-2-11 13:53
0
雪    币: 340
活跃值: (739)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
《寒江独钓》旧版序

大约在半年年前,谭文就和我谈过想写一本既能深刻介绍Windows内核架构,又能结合具体Windows驱动程序开发实例的书。那时候他的《天书夜读——从汇编语言到Windows内核编程》已经出版,《天书夜读》所涉及的内容很广,但就如同书名一样,它的内容不太适合刚刚涉猎Windows内核编程的程序员,反而更像一本供黑客学习的读物。书中翔实地介绍了很多反汇编的实战技巧,非常的精辟,但对于新手来说,容易对Windows内核编程产生畏惧感。

当我第一次读完《寒江独钓——Windows内核安全编程》的初稿时,我觉得本书非常适合Windows内核程序的入门。Windows内核程序一直被认为是只有高手才能涉及的领域,很多程序员对这种开发都觉得非常神秘。我觉得这是一种错觉,其中有一个很重要的原因就是国内很少出版这方面的书籍。这本书很好地弥补了这方面的空白,我相信大部分读者读完本书后,都会觉得Windows内核开发程序不再那么神秘。的确,微软自从Windows 2000版本以后,内核的架构变化不是很大。当然,这并不意味着你读完本书后,你就可以对内核开发游刃有余了,这需要你对每一个细节反复研究,并且多做试验。

编写Windows内核程序,就意味着这个程序可以执行任意指令,可以访问计算机所有的软件、硬件资源。因此,稍有不慎就有可能将系统变得不稳定。Windows的设计者设计了各种驱动模型或者框架,如NT式内核驱动模型、WDM框架和新推出的WDF框架。在这些模型框架下编程,就使内核编程变得简单,同样也降低了内核程序崩溃的机会。其实,Windows驱动程序员和黑客都在写内核程序,唯一不同的是驱动程序员按照微软设计的模型写程序,而黑客可以不按照这些框架写。Windows设计的这些框架,可以将操作系统的原理隐藏起来,只暴露一些接口,驱动程序员只要把这些接口写好就可以了。从这个角度看,驱动开发并不难,尤其是读完本书后,更会觉得不难了。但是想完成一些特殊的功能,如内核级隐藏进程等,Windows的这些框架就没什么用处了,程序员就需要对Windows内核有全面的了解,通过直接修改Windows内核来实现这些目的。往往黑客对这种技术乐此不疲,通过修改Windows内核,你会发现你的程序几乎无所不能。

编写内核程序是一件很痛苦的事情,回想起这些年学习内核程序开发的经历,真是感慨万千。就如同谭文所说:编写内核程序的人从某种程度讲是孤独的。当一个经验并不丰富的小程序员面对庞大复杂的并且不开源的Windows框架时,那是一种怎样的无助感啊!谭文是我比较钦佩的程序员之一,他对技术非常执着,并且精力充沛。内核程序的知识涉及面非常广,不同类别的内核程序差别也特别大,他几乎都有所涉猎。相信读者在读完这本书后,能对Windows内核开发有比较详细的了解,同时也能结合书中的实例写出很优秀的内核程序了。

                                                                                                                 张 帆
                                                                                                    2009年5月1日于北京
2015-2-11 14:27
0
雪    币: 340
活跃值: (739)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
第1章 内核上机指导



请注意,因为大部分Windows驱动程序都是内核驱动(Kernel Driver),所以本书中,不区分“驱动编程”与“内核编程”。同时,也不区分“内核模块”(Kernel Module)与“驱动程序”(Driver),这两个词汇都指本书中编译出的扩展名为“.sys”的可执行文件。

但是本书和一般“驱动开发”书籍不同的是,本书专注于较通用的内核程序的开发,并不介绍针对某种硬件,比如声卡、显卡、USB等的各种驱动程序的开发。

本书的许多内容涉及到各种不同的内核驱动程序,比如文件系统驱动(File System Driver)、存储设备驱动(Storage Driver)及网络驱动(Network Driver)。但是开发目的,并不是为了驱动某个硬件,而是在通用的Windows上实现某种功能。

Windows上内核(Kernel Model)编程和用户(User Model)应用编程有很多不同的地方。初次学习,很多读者会关心如何开始动手实践。为此本章专门讲述如何在Windows的PC上,下载和安装必要的工具,并动手开始内核编程。值得庆幸的是,在Windows上进行内核编程、编译、调试、安装、显示调试信息的全部必要工具(不包括为了编程方便而使用的Visual Studio),都是免费的,因此任何读者都可以在不花费任何金钱的情况下开始学习这一章节。

对实际上机暂时没有兴趣,或者已经做过驱动开发的读者,则可以跳过第1章。
上传的附件:
2015-2-11 14:30
0
雪    币: 340
活跃值: (739)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
1.1 下载和使用WDK

1.1.1 下载安装WDK

就像应用程序使用开发包SDK一样,内核编程使用“Windows Driver Kit”,简称WDK。WDK已经自带所有需要的头文件、库、C/C++语言及汇编语言的编译器与连接器,所以完全可以在不安装Visual Studio的情况下进行编程。只是工程管理会不太方便,读者可以使用记事本或者自己喜欢的其他文本编辑器进行编程。习惯使用Visual Studio的读者会感觉这很酷,因为只有传说中的骨灰级程序员才使用记事本编程。

建议读者下载一个能显示行号的文本编辑器。以便出现编译错误时能迅速找到错误。Linux爱好者当然可以直接用vim。

有些读者可能听说过DDK或者IFSDDK,但是那已经是历史了,请遗忘它。同时下面的描述也可能成为历史,所以请读者进入主页后应该随机应变。

首先请打开网页:
https://connect.microsoft.com/default.aspx

这个网页必须先登录。登录拦住了不少访客,有些访问者会以为是收费注册的,其实使用Windows Live账号就可以登录(即用MSN账号登录)。如果没有MSN账号,可以去免费注册一个。

有了Live账号之后,还必须用这个账号向Connect注册,才能下载WDK。用Live账号登录之后,下面出现“立即注册Connect!”链接。

注册很简单,只要填写名字、地区和邮箱就可以了。虽然要填写邮箱,但是笔者并没有去打开发送到邮箱中的文件,这个ID就直接可以下载了。笔者不确定是否真的如此,请读者自己尝试一下。

登录之后出现一个“配置控制面板”页面,但是笔者没有使用它,单击上面的“主页”链接,回到主页,能看见显示自己已经登录了。大致画面如图1-1所示。



请单击图中用圈圈住的“查看所有站点”。

下面就比较简单了,左边会显示类别,在类别中请选择“开发人员工具”。选择之后右边就有“Windows Driver Kit”可以下载,请按网页的提示逐步下载即可。这个开发包非常大,下载之后有几GB的内容。(注:最新版本的WDK已经缩减,只有几百兆了。)下载WDK之前请先根据此时页面的提示下载并安装FTM(File Transfer Manager),可以大大加快下载速度。

安装过程没有需要特别注意的地方,只有两点:

(1)安装到一个简单一点的路径,避免在特殊情况下需要配置路径时麻烦,比如C:\WinDDK。尤其要避免在路径上有空格,否则可能出现编译问题。
(2)一定要选择“完全安装”,否则可能错过一些代码例子。
上传的附件:
2015-2-11 14:32
0
雪    币: 163
活跃值: (677)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
6
谢谢分享,但是没有内容啊
2015-2-11 14:33
0
雪    币: 65
活跃值: (27)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
7
坐个沙发:)
2015-2-11 14:33
0
雪    币: 340
活跃值: (739)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
正在整理,陆续上试读内容哈
2015-2-11 15:00
0
雪    币: 340
活跃值: (739)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
1.1.2 编写第一个C文件
现在请打开记事本(或者读者喜欢的任何工具)来创建一个文件,我们把这个文件命名为first.c,以表示这是我们编写的第一个内核编程文件。在进行内核编程时,读者必须打开WDK的帮助。在WDK安装之后,单击“开始”菜单→“所有程序”,会发现增加了“Windows Driver Kits”和“Windows Driver Kits Documentation”两个子菜单。(注:最新版本这两个菜单已经合并为一个。)

选择“Windows Driver Kits Documentation”下面的子菜单来打开帮助。在使用任何一个函数之前,请在帮助里查询这个函数是否存在、使用的环境要求及输入/输出。

因为这不是应用程序编程,所以所有的Win32 API函数都不能使用;部分C Runtime函数也不能使用,但是文档中说明的函数则都可以使用。本书将在文档中有说明的且在内核下调用的System Routine称为内核API函数,以便和Win32 API函数区分。

我们编写first.c内容如下:

///
/// @file first.c

/// @author crazy_chu

/// @date2008-11-1

///



#include <ntddk.h>

// 提供一个Unload函数只是为了让这个程序能动态卸载,方便调试
VOID DriverUnload(PDRIVER_OBJECT driver)
{

        // 但是实际上我们什么都不做,只打印一句话
        DbgPrint("first: Our driver is unloading…\r\n");
}

// DriverEntry,入口函数。相当于main。

NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path)

{

        // 这是内核模块的入口,可以在这里写入我们想写的东西
      
       // 笔者在这里打印一句话。因为“Hello,world”常常被高手耻笑,所以
     
      // 打印一点别的
      
      DbgPrint("first: Hello, my salary!");
    
     // 设置一个卸载函数,便于这个函数退出

    driver->DriverUnload = DriverUnload;
    return STATUS_SUCCESS;
}


上面的DriverEntry是每个内核模块的入口,在加载这个模块时被系统进程System调用一次。在其中我们设置了DriverUnload的函数指针,这样这个模块可以被动态地卸载(这将方便我们调试程序);如果没有设置DriverUnload函数指针,则一个内核模块一旦被加载就不能卸载了。

现在请先建立新目录first,然后把first.c文件保存在此目录下,下面我们就介绍编译的方法。
2015-2-11 15:15
0
雪    币: 340
活跃值: (739)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
1.1.3 编译一个工程

前面已经建立了工程first,虽然这个工程只有一个first.c文件作为代码文件。现在必须在这个目录下增加两个文件,以便WDK的build工具可以build它。其中一个文件的名字必须为makefile,这个文件的内容很无聊,永远也不需要改动,内容如下:

    !IF 0

    Copyright (C) Microsoft Corporation, 1999 - 2002

    Module Name: 

        makefile. 

    Notes: 

        DO NOT EDIT THIS FILE!!!   Edit .\sources. if you want to add a new source 

        file to this component.   This file merely indirects to the real make file that is 

        shared by all the components of Windows NT (DDK) 

    !ENDIF 

    !INCLUDE $(NTMAKEENV)\makefile.def


如果读者不想自己写这个文件,那么请到WDK的src目录下随便寻找一个例子,然后拷贝一个出来。大部分例子的makefile都和这个一样。

另外,还需要一个名字为SOURCES的文件,这个文件的内容关系到这个模块要编译哪些文件,以及编译出来的.sys文件的名字。举例内容如下:

    TARGETNAME=first 

    TARGETTYPE=DRIVER

    SOURCES=first.c


其中TARGETNAME表示名字,编译出来之后,模块的名字为first.sys;SOURCES表示要编译的.c文件(对于初学者,必须提醒一点,不要加入.h文件,因为.h是被包含在.c文件中编译的),如果.c文件有多个,请用空格分隔。

下面请从“开始”菜单中打开WDK的build环境配置,如图1-2所示。

从“开始”菜单中选择“所有程序”,然后选择“Windows Driver Kits”→WDK的版本(这里“WDK 6001 18001”)→“Build Enviroments”→“Windows XP”→“Launch Windows XP x86 Checked Build Enviroment”。

出现一个控制台,这个控制台已经配置好编译环境。现在输入cd命令,进入我们先前建立的first目录;进入之后,输入build命令。笔者这里编译的结果如图1-3所示。

现在编译结束,first.sys出现在\first\objchk_wxp_x86\i386下。这个文件并不像普通exe文件一样可以直接双击执行,它需要一个安装工具进行安装。下面讲解如何安装并运行它。
上传的附件:
2015-2-11 15:21
0
雪    币: 52
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
SOURCES表示要编译的.c文件,这句话是错的
2015-2-11 16:26
0
雪    币: 6895
活跃值: (3181)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
试读这么发,是不是太乱了?
2015-2-11 17:12
0
雪    币: 3366
活跃值: (1363)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
13
还是PDF比较直观一些呐。
鱼C论坛 小甲鱼已经发过PDF链接了。。 http://pan.baidu.com/s/1pJ6vQaB
2015-2-11 19:38
0
雪    币: 244
活跃值: (454)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
博文观点又来抢我的最后一年压岁钱了。。。
2015-2-11 21:44
0
雪    币: 340
活跃值: (739)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
我上传了PDF的试读,大家去下载吧
2015-2-12 09:39
0
雪    币: 7092
活跃值: (2993)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
看起来舒服多了~~~~~~~~~~~~~
2015-2-12 09:52
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
沙发,感谢分享。
2015-2-12 12:59
0
雪    币: 2063
活跃值: (1752)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
《Windows内核安全与驱动开发》具体什么时间出版啊
2015-2-19 15:11
0
雪    币: 11
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
出版后请发个帖~第一时间购买收藏哈哈
2015-2-21 20:03
0
雪    币: 1994
活跃值: (1526)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
20
看来wowocock说的没错啊,老狂灰常“爱”出书!
2015-2-27 09:29
0
雪    币: 79
活跃值: (59)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
什么时候会上市?
2015-3-1 08:55
0
雪    币: 60
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
感觉还不错,坐等出版
2015-3-2 11:18
0
雪    币: 626
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
看看  了解一下  感谢分享
2015-3-2 14:39
0
雪    币: 27
活跃值: (127)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
24
一本书6位作者
2015-3-2 15:17
0
雪    币: 190
活跃值: (84)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
希望本书能尽快出版。
2015-3-10 00:47
0
游客
登录 | 注册 方可回帖
返回
//