阅读:17930回复: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")); } |
|
最新喜欢:![]() |
沙发#
发布于:2011-05-10 15:25
怎么论坛总是提示附件不存在啊~
想学习一下楼主都有困难啊! |
|
|
板凳#
发布于:2011-03-28 11:41
能把源码发给我一份么,急,谢谢!!!邮箱:gaobenaaa@hotmail.com
QQ:275927950 |
|
地板#
发布于:2009-12-18 15:50
有源码。真是好人。。。。
|
|
地下室#
发布于:2009-11-26 15:53
谢谢楼主分享 大家共同研究 共同进步
|
|
5楼#
发布于:2008-10-27 15:36
授益了~~
顶~~ |
|
6楼#
发布于:2008-09-18 17:12
赞一下
|
|
|
7楼#
发布于:2008-09-05 08:53
很想学习呀,但是怎么那么难呀!有点想放弃了!
![]() |
|
8楼#
发布于:2008-08-29 23:02
下载学习..
前面学习过FILTER....FILEMON 再来看看这个版本 |
|
|
9楼#
发布于:2008-04-29 17:45
别人说filespy 稳定,你就认为稳定?
其实我倒不觉得,sfilter我看也能做出比较稳定的驱动,而且已经用在商业产品上,因此,不要人云亦云,其实, 跟杀毒软件的冲突问题,倒不是你提倒的用什么互斥、信号量、什么乱七八燥的这些导致,导致这方面冲突的问题非常多,比如微软本身的一些问题(层次结构导致)、机会锁等,非常多,都可能导致冲突,因此,要做做一个稳定的过滤驱动,非常的难,更不是由于哪个框架好,就行,我个人觉得,跟框架没有什么太大的关系,只要你符合微软规定的WDM 等就行。 |
|
10楼#
发布于:2008-04-29 17:25
卖什么关子啊
把什么修改后的代码也给大家看看? |
|
11楼#
发布于:2008-04-28 00:14
看一下,谢谢!!
|
|
12楼#
发布于:2008-02-01 15:31
lsxredrain 大大您好:
假设我在 C:\ 有一个文件檔 : 12345678.txt , 其内文资料亦为 “12345678” 有两个问题想请教: 1. 在下载您的filespy.c 之 sfRead() 中, 有一行如下: Irp->UserBuffer = MmGetMdlVirtualAddress(Irp->MdlAddress); 为何我用 KdPrint (("SfRead : Irp->UserBuffer ->%s \n",(char *)Irp->UserBuffer)); 无法在dbgview 看见内文数据, 还是我需要在其它地方再加入 KdPrint 才可以正确看到内文数据 “12345678” (*注 DebugFlags 己设定正确, 可以在 dbgview 中看见其它的讯息 , 如 “SFilter!SfCreate : c:\12345678.txt” … ) 2.为何我已使用filespyinstall.cmd 加载 filespy , 并在命令列输入 /a c: (加入 c:(driver) 作监控), 并输入 /g (执行) , 然后我点击 c:\12345678.txt , 进入Notepad 并更改内文(改为 "123456”)最后存档, 但是当我离开 Notepad 后即退出 filespy 的监控 (> exit) , 且离开 filespy (filespyuninstall.cmd) ,但事后再打开 c: \12345678.txt 却发现原先存盘的内文并无任何改变(原明文 "123456”) , 可是在存档时不是应该被加密过了,且找不到任何加密的檔头或檔尾,好像并没有加密的动作发生,不知那里的动作有误. 以上是我在测试 filespy修改版(增加了tooflat的write和read)修订版) 源码所发生的问题,烦请 lsxredrain 大大或其它先进不吝给予小弟一些指教, 谢谢!! |
|
13楼#
发布于:2007-12-19 16:00
把透明搞到inline hook的程度也没有办法~~
现在通过iofcalldriver hook和inline hook ps/ioGetXXX,替换currentprocess和currentthread的盗取者2.0已经出现了~~~ 盗取者 1.0 ,通过对winword.exe进程注入stXXXX(随机数).dll来盗取doc文件,并mail到指定邮箱 |
|
|
14楼#
发布于:2007-12-18 17:54
最近,一个叫“FSD INLINE HOOK”的名词常常被提到,而且多数时候是和病毒、流氓软件一起被提到。很多朋友搞不清楚,究竟什么是“FSD INLINE HOOK”呢?笔者就来详细介绍一下这个东东。
一、先讲讲车匪路霸 在讲FSD INLINE HOOK之前,先来看看“车匪路霸”。所谓“车匪路霸”,就是在某条路上设一个点,对每个经过的车辆都“打劫一番”,“此路是我开,要过就留下买路钱”。甚至有时候他们打劫了你,还不放人过去,而让你原路折回。 当然,还有一些车匪路霸更恐怖——他们直接将路截断,然后把路的开口处挖出一条经过自己设置的收费站的小道,然后在收费站的出口处再回到你应该走的大路上。你想到达目的地,必须先去绕小道去缴费,否则你无法到达目的地。 二、FSD INLINE HOOK是最狠的车匪路霸 HOOK就是操作系统中的“车匪路霸”,它最常用的手段就是进行数据过滤,跟要你“留下买路钱”一样。而FSD INLINE HOOK更狠,它使用更加特殊的手段,让程序以非正常流程运行,从而达到数据过滤的目的,就像上面描述的后面一种车匪路霸。 那么,到底FSD INLINE HOOK狠在哪里呢? 其一,它的隐蔽性非常高,非专业人士很难发现它的存在。也就是说,这是一个非常具有“反侦破能力”的“车匪路霸”。本来程序员是可以用一种叫“FSD Filter Driver”(文件系统过滤驱动)的专用接口来代替它的,但正是因为这一接口容易被发现、饶过甚至是被摘除掉,所以他们才使用FSD INLINE HOOK的。 小提示: FSD Filter Driver是正常软件常用的技术,例如杀毒软件、文件加密、数据备份软件等。由于这些软件也会对系统进行一些底层操作,所以难免会用到这样的技术。这就跟公路上有“车匪路霸”,也有正规的“收费站”一样,同样是“收买路钱”,但一个是正当、有序的,一个却是乱来的。 其二,它的稳定性差、危险性高。FSD INLINE HOOK对操作系统硬件平台、系统文件具有高度的依赖性,使得其异常危险。如果系统稍有变化可能就导致不兼容,使程序无法运行甚至直接导致系统崩溃(蓝屏)。在开发人员看来,这叫“稍错一个bit都会导致系统bsod(Blue Screen Of Death)。” 正是由于FSD INLINE HOOK狠,流氓软件开发者就很喜欢它。我们总结这两点可以看出,前一点是针对那些反流氓软件的——隐蔽性强就意味着查杀起来相当困难;而后一点则是针对用户电脑的——如果你的系统发生一些变化,系统就会出现问题,甚至是蓝屏死机,这对用户的危害极大。 三、车匪路霸和它的同伙 前面我们提了FSD INLINE HOOK,它具有隐蔽、手段狠毒、不稳定等特点,属于“黑社会性质”的车匪路霸。实际上它还有一个“同伙”,叫“函数地址替换”,不过这个显然比较温柔些,更安全,不容易引起BSOD。这个“函数地址替换”是流氓软件经常用到的方法,很多大家很熟悉的流氓软件都用到了这一技术。 对比这两种技术,两者都可以改变用户的初衷,都不是“好鸟”,但他们还是有区别的:“函数地址替换”的隐蔽性比较差,它是一个函数组,任何人都可以用正常手段访问它,所以很容易就被检测工具检测出来了;而FSD INLINE HOOK则纯粹是一个非常危险的东西了,而且非常隐蔽。目前应用了FSD INLINE HOOK技术的流氓软件非常少,而用到这一技术的病毒倒是挺多。 小提示: 由于微软并没有对外公布FSD INLINE HOOK技术的任何接口文档说明,并明确告知开发者使用正规编程接口,因此,FSD INLINE HOOK很少被用在商业软件中,国内尚未有任何一款商业软件使用此技术。使用这种技术的多数都是病毒、木马、Rootkit程序等恶意软件,如MM@Rootkit.Drop.gy,I-Worm@MM.Trojan.Downloader.zp等。 试想,如果流氓软件都采用这种技术的话,那么网络将会怎样? |
|
15楼#
发布于:2007-12-18 15:57
![]() inline hook fsd做透明,很xxxxx |
|
|
16楼#
发布于:2007-12-18 12:51
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")); } |
|
17楼#
发布于:2007-10-28 20:07
蹦回来又看了一下~Cache还真是....
|
|
|
18楼#
发布于:2007-08-21 16:59
TTTTTTTTTTTTTTTTKS
|
|
19楼#
发布于:2007-08-20 16:19
不错。谢谢
|
|
上一页
下一页