阅读:17602回复:89
filespy修改版(增加了tooflat的write和read)修订版
devia说filespy比sfilter稳定,
我移植了tooflat部分代码到filespy中,hook 了write 和read , 加密标记还没有处理好. 我抛块砖头,希望更多的同路人人加入到filespy模型中来 小结一下: 经过多日的努力,终于解决好了与杀毒软件冲突的问题,小结一下自己的一点体会: 1.经测试原始的Sfilter与FileSpy与杀毒软件不冲突; 2.tooflat的sfilter与杀毒软件冲突的几个地方: a.使用Zw****系列函数读取规则和加密标记; b.使用RtlInsertElementGenericTable相关的函数来存储文件上下文,具体是哪里引起的没有详细分析,我现在是自己构造hash来存储.存文件上下文指针和加密标记,保证了文件加密标记的持久性. 使用 KeAcquireSpinLock( &gHashLockTable[hashIndex], &oldIrql ); KeReleaseSpinLock( &gHashLockTable[hashIndex], oldIrql ); SfForwardIrpSyncronously,SfUpdateFileByFileObject 来同步文件上下文表,不要用 KeInitializeEvent(&Event, NotificationEvent, FALSE); KeWaitForSingleObject(&Event, Executive, KernelMode, FALSE, NULL); 来同步 3.tooflat的精华部分,除了devia说的write和read例程,他的SfIsFileNeedEncrypt,SfForwardIrpSyncronously,SfUpdateFileByFileObject也是相当经典的,其中SfForwardIrpSyncronously,SfUpdateFileByFileObject对更新和同步FileObject->FsContext是功不可末. 4.关于加密标记的选择,总得来说加密标记包括: a.外部加密标记法,如tooflat的加密标记文件,修改文件时间,加密文件数据库等 b.内部加密标记法;主要包括压缩法和扩展法(标记可以放文件头或者文件尾,也不排除放文件中间), 扩展法相对来说比较复杂,但是灵活性和通用性比较强,压缩法实现比较简单,稳定性比较好. 我个人是选择压缩法和修改文件时间法组合使用,这样一来可以避开很多烦恼来获得相对稳定的产品. 5.驱动层与应用层稳定快捷的消息机制也是我们向应用层借力的重要保障. 6.过滤模型选择我最终还是选择了filespy,它有很多优点. 7.挂载 WCHAR WebVolume[50] = L"\\Device\\WebDavRedirector\0"; WCHAR NetVolume[50] = L"\\Device\\LanmanRedirector\0"; if(!NT_SUCCESS(SpyStartLoggingDevice(WebVolume))) { KdPrint(("SFilter!加载Web磁盘失败!\n")); } else { KdPrint(("SFilter!加载Web磁盘成功!\n")); } if(!NT_SUCCESS(SpyStartLoggingDevice(NetVolume))) { KdPrint(("SFilter!加载网络磁盘失败!\n")); } else { KdPrint(("SFilter!加载网络磁盘成功!\n")); } |
|
最新喜欢:linshi... |
沙发#
发布于:2007-05-18 18:56
不错啦~
|
|
|
板凳#
发布于:2007-05-18 19:15
学习
|
|
地板#
发布于:2007-05-18 20:41
呵呵,代码写得比较乱,
周末加加班,争取把文件加密标识表做好,另外,也希望论坛上能看到更多关于filespy的讨论, sfilter和filemon可能真是一条不归之路. |
|
地下室#
发布于:2007-05-19 10:23
filespy sfilter都有其存在的理由~
至于filemon那个不是正规的玩意~ |
|
|
5楼#
发布于:2007-05-21 08:27
不错!
|
|
|
6楼#
发布于:2007-05-21 09:17
FileMon还是有很多代码值得参考的
在Filter里面用Hook这个词总觉得别扭 我的代码不和框架的代码混在一起,单独写,然后通过自己的BeforeXXX,AfterXXX的函数插入到各分派历程中,需要换个框架时,拷贝、粘贴分分钟就搞定了 |
|
|
7楼#
发布于:2007-05-21 09:57
请问devia, 你的filespy中是用 RtlLookupElementGenericTable 来存文件加密状态吗?
这种方法会不会导致与其他杀毒软件冲突? 正在犹豫用filespy自己的那个recordlist来存文件加密状态还是用RtlLookupElementGenericTable 来存>> |
|
8楼#
发布于:2007-05-21 12:52
引用第7楼lsxredrain于2007-05-21 09:57发表的 : 我试过这两种方法都很正常 |
|
|
9楼#
发布于:2007-05-21 13:09
谢谢
,那我还是把filespy中的recordlist屏敝掉算了,用tooflat的那个比较简单一些 |
|
10楼#
发布于:2007-06-01 11:53
请教lsxredrain 大哥:
我在Windows Driver Kits\WDK 6000\Build Environments\Windows XP\Windows XP x86 Checked Build Environment环境下,对您的filespy.rar 修改版进行build,可是出现错误,出现一个对话框:“Mincrosoft(R) NT Build Engine 遇到问题需要关闭。我们对此引起的不便表示抱歉。” 请问你的程序运行成功没有呢?应该怎样解决这个问题呢? 静候回复 |
|
11楼#
发布于:2007-06-01 13:08
我是在ifs2k3sp1+vc2003编译没有问题,程序运行也没有问题
|
|
12楼#
发布于:2007-06-01 17:31
namelookup.h文件没有????
|
|
13楼#
发布于:2007-06-04 12:51
lsxredrain 大哥:
向你求救了!小弟我现在用的是VC++6.0、Compuware DriverStudio3.2、DDK6000,可是我调试不出来啊。是在VC环境下用“DDK”build呢?还是用F7来build 呢?或者是在Windows Driver Kits\WDK 6000\Build Environments\Windows XP\Windows XP x86 Checked Build Environment环境下,对“filespy.rar 修改版”进行build呢? 能留一个您的电话号码电联吗?我很急啊!! |
|
14楼#
发布于:2007-06-04 14:02
原版的filespy能编译吗?
|
|
15楼#
发布于:2007-06-04 14:03
总算大家开始感兴趣filespy拉
|
|
16楼#
发布于:2007-06-04 14:23
原版的filespy能编译过
|
|
17楼#
发布于:2007-06-04 22:21
你把原版的包放一个上来,我比较一下wdk和ifs2k3sp1有什么差别?
|
|
驱动牛犊
|
18楼#
发布于:2007-06-04 22:49
学习
|
19楼#
发布于:2007-06-05 14:49
已经解决,是与sp1不同
|
|
上一页
下一页