看了一周的《Windows防火墙与网络封包截获技术》,也没看出所以然。于是就想着把DDK中的passthru的源程序安装下看看,到底底层抓包是啥样子的。
想法是很简单的,首先是如何编译这个驱动程序,那本书上没怎么写,因为书上附带的关盘是编译好了的sys文件。既然不知道如何编译就去驱网上搜罗了下几年的帖子,只有些零星的碎语。
不过这些只言片语都是很有用的,最后琢磨到如何使用DDK自带的工具编译这些源程序。编译步骤如下:
1、点击“开始->所有程序->Development Kits->windows DDK 2600->bulid environment ->winXP Checked Build Environment”
调试完成后,如果编译最终使用的驱动程序,第一项可以更改为:
“开始->所有程序->Development Kits->windows 2000 DDK->Free Build Environment”
2、这时会出现cmd窗口,用cd命令进入你要编译的目录中。键入build -cZ命令,系统就可以编译检查模式的驱动程序。
这时在D:\Program Files\WINDDK\2600\src\network\ndis\passthru\driver这个目录下,会看到两个inf文件----netsf.inf和netdf_m.inf,后来问了下驱动达人才知道这两个inf前者对应sys文件,后者对应dll文件。
本以为编译完成了,就可以考虑安装了,首先考虑的是如何安装。《Windows防火墙和网络封包》这本书对于安装驱动的方法更是看不懂,现在想想是明白了许多,对于一次没有装驱动的人来说就不应该那么教。
随便在驱网上找了一个QQ问了下那哥们:知道使用bindview工具可以按照驱动程序。于是使用同样的方法编译了D:\Program Files\WINDDK\2600\src\network\config\bindview
执行bindview.exe如下图:
点击install,如下图在弹出的对话框中选择service安装
在选择网络服务框中选择从硬盘安装
这时点击确定后会有出现问题,系统提示缺少必要得passthru.dll。我仔细查看了下个个文件夹,还是没有这个dll,还是去驱网找原因。看到05年的一个帖子的回帖这么说:
“我们用passthru的代码,对接收数据报的部分做了修改。然后,我们用DDK自带的builder工具来编译。我一般是用开始菜单中DDK程序组中的Free Build Environment,到passthru目录下执行build -cz来编译passthru,得到passthru.sys文件,然后再到NTDDK\src\network\config\filter目录下,执行build -cz来得到sfilter.dll,然后再加上passthru目录下的netsf.inf和netsf_m.inf,一共四个文件。这样,驱动安装所需要的文件就全了。
打开网络属性,添加服务,找到passthru目录下,安装,弹出没有数字签名的警告,不理,继续安装,最后,你会发现,网络属性中增加了一个名为Sample Filter的组件,同时,硬件管理器中的网卡下增加了一个Sample Filter Miniport的设备。如果你已经到了这里,并且系统没有出现蓝屏和死机,那么恭喜你,你已经成功地安装上了中间层驱动,并且已经发挥包过滤作用了。”
可是我仔细检查了下我的DDK文件夹,根本就没有src\network\config\filter这个目录,莫非这就的DDK装错了,或者我用的xp版的ddk与NTddk不一样??
我把问题丢到了驱动个网络安全这个群里,得到了证实XPDDK的确没有那个文件夹,NT和2000DDK都有的。晕哦。不知道自己的这个dll要从哪弄到了。群里有人提议,修改inf文件,对于我这个的菜鸟修改inf还是不敢擅自的。多亏了phoenix兄,他告诉我XPDDK在passthru目录里还有一个文件夹notifyob,这个passthru.dll就存在在这个目录中。果然编译得到此dll。
紧接着就是按刚才安装sys的方法安装,先安装inf 然后是dll 然后是另一个inf 最后装sys文件。而且并没有出现蓝屏和死机的现象,大功告成。在本地连接的属性里看到多了一个PassthruDriver的选项,想卸载的时候,可以直接卸载的。
测试的时候,使用Driver Studio自带的DriverMonitor或者dbgview.exe,然后通过访问网上邻居访问其他计算机,这时会有调试信息输出到界面上的。
整个编译安装测试的过程比较复杂,特别是对于初学者的我来说,我就像小白一样被这个驱动玩着,过不了我也要玩他像玩小白一样。嘿嘿。在此特别感谢phoenix、永远和Drizzle。