资源简介

现在很多做透明加解密的初学者都比较困惑,不知从何下手,我也是如此,从什么都不会开始,慢慢肯文件系统内幕,到OSR上面请教,四个月的时间还是收获颇丰。其实真正研究以后会发现,很多都是体力活,要不断的去跟踪文件的操作流程。在这里发一个基于minifilter的透明加解密的驱动源码仅供大家参考,其中也实现了对文件标识的处理,文件标识放在文件尾部。算是抛砖引玉吧。坦白的说,这个代码并不稳定(偶尔与norton杀毒软件会有冲突),但是我觉得整个流程是正确的,可能有些细节还没有考虑清楚,我觉得对初学者还是有一定帮助吧,当然大虾们可以跳过,呵呵。另外,有关加解密算法的代码由于不是我写的,也不好公开,所以我把相关代码用“\\\”给注释掉了(但没有去掉),请大家见谅,不过不会对整个流程产生影响。大家可以重点看一下各个派遣函数的实现。 欢迎大家拍砖,觉得有点意思就顶一下啊,在看代码的过程中如果有什么好的建议,也希望能告诉我。 最后非常感谢XiangXiangRen,zzbwang,neak47等网友在这段时间内对我的帮助。XiangXiangRen的书以及zzbwang的帖子对我完成这项工作有很大的帮助和参考价值,在此谨与大家分享。 编译环境:WDK6001.18002 XP x86 PS: 您可以将附件中的代码进行修改和转发,但转发时请注明出处。 http://bbs.driverdevelop.com/htm_data/39/1001/119736.html

资源截图

代码片段和文件信息

#include “cache.h“
#include “file.h“

void Cc_ClearFileCache(PFILE_object Fileobject BOOLEAN bIsFlushCache PLARGE_INTEGER FileOffset ULONG Length)
{
BOOLEAN PurgeRes ;
BOOLEAN ResourceAcquired = FALSE ;
BOOLEAN PagingIoResourceAcquired = FALSE ;
PFSRTL_COMMON_FCB_HEADER Fcb = NULL ;
LARGE_INTEGER Delay50Milliseconds = {(ULONG)(-50 * 1000 * 10) -1};
IO_STATUS_BLOCK IoStatus = {0} ;

if ((Fileobject == NULL))
{
return ;
}

    Fcb = (PFSRTL_COMMON_FCB_HEADER)Fileobject->FsContext ;
if (Fcb == NULL)
{
return ;
}

Acquire:
FsRtlEnterFileSystem() ;

if (Fcb->Resource)
ResourceAcquired = ExAcquireResourceExclusiveLite(Fcb->Resource TRUE) ;
if (Fcb->PagingIoResource)
PagingIoResourceAcquired = ExAcquireResourceExclusive(Fcb->PagingIoResourceFALSE);
else
PagingIoResourceAcquired = TRUE ;
if (!PagingIoResourceAcquired)
{
if (Fcb->Resource)  ExReleaseResource(Fcb->Resource);
FsRtlExitFileSystem();
KeDelayExecutionThread(KernelModeFALSE&Delay50Milliseconds);
goto Acquire;
}

if(Fileobject->SectionobjectPointer)
{
IoSetTopLevelIrp( (PIRP)FSRTL_FSP_TOP_LEVEL_IRP );

if (bIsFlushCache)
{
CcFlushCache( Fileobject->SectionobjectPointer FileOffset Length &IoStatus );
}

if(Fileobject->SectionobjectPointer->ImageSectionobject)
{
MmFlushImageSection(
Fileobject->SectionobjectPointer
MmFlushForWrite
) ;
}

if(Fileobject->SectionobjectPointer->DataSectionobject)

PurgeRes = CcPurgeCacheSection( Fileobject->SectionobjectPointer
NULL
0
FALSE );                                                    
}
                                      
IoSetTopLevelIrp(NULL);                                   
}

if (Fcb->PagingIoResource)
ExReleaseResourceLite(Fcb->PagingIoResource );                                       
if (Fcb->Resource)
ExReleaseResourceLite(Fcb->Resource );                     

FsRtlExitFileSystem() ;
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件         13  2010-01-18 14:39  encryption_on-the-fly\Build.txt

     文件       2015  2010-01-18 14:07  encryption_on-the-fly\engine\cache.c

     文件        222  2010-01-18 10:36  encryption_on-the-fly\engine\cache.h

     文件       3498  2010-01-18 14:36  encryption_on-the-fly\engine\common.h

     文件       5759  2010-01-18 14:08  encryption_on-the-fly\engine\ctx.c

     文件       1186  2010-01-18 14:04  encryption_on-the-fly\engine\ctx.h

     文件       2481  2010-01-18 11:55  encryption_on-the-fly\engine\engine.inf

     文件        266  2009-08-19 09:48  encryption_on-the-fly\engine\engine.rc

     文件      14969  2010-01-18 14:09  encryption_on-the-fly\engine\file.c

     文件       3744  2010-01-18 10:38  encryption_on-the-fly\engine\file.h

     文件     121786  2008-01-19 13:16  encryption_on-the-fly\engine\fltKernel.h

     文件       1975  2010-01-18 14:35  encryption_on-the-fly\engine\key.c

     文件        528  2010-01-18 14:06  encryption_on-the-fly\engine\key.h

     文件      74208  2010-01-18 14:33  encryption_on-the-fly\engine\main.c

     文件       9158  2010-01-18 10:43  encryption_on-the-fly\engine\main.h

     文件        399  2009-10-11 09:40  encryption_on-the-fly\engine\makefile

     文件       4882  2010-01-18 14:10  encryption_on-the-fly\engine\message.c

     文件        861  2010-01-18 10:56  encryption_on-the-fly\engine\message.h

     文件      20007  2010-01-18 10:53  encryption_on-the-fly\engine\process.c

     文件       2227  2010-01-18 10:44  encryption_on-the-fly\engine\process.h

     文件        324  2010-01-18 10:31  encryption_on-the-fly\engine\sources

     目录          0  2010-01-18 14:39  encryption_on-the-fly\engine

     文件        944  2010-01-18 11:18  encryption_on-the-fly\include\error.h

     文件       3700  2010-01-18 14:06  encryption_on-the-fly\include\interface.h

     文件       1835  2010-01-18 10:41  encryption_on-the-fly\include\iocommon.h

     目录          0  2010-01-18 14:37  encryption_on-the-fly\include

     目录          0  2010-01-18 14:39  encryption_on-the-fly

----------- ---------  ---------- -----  ----

               276987                    27



............此处省略0个文件信息

评论

共有 条评论