首页
社区
课程
招聘
[原创]MiniFilter的SandBox
发表于: 2013-4-8 18:47 15915

[原创]MiniFilter的SandBox

2013-4-8 18:47
15915
一段自己写的MiniFilter版本的SandBox源码,供于研究。感谢麦洛克菲的王康安老师。

支持夸全盘。 详情看附件。

FLT_PREOP_CALLBACK_STATUS
SimRepPreCreate (
    __inout PFLT_CALLBACK_DATA Cbd,
    __in PCFLT_RELATED_OBJECTS FltObjects,
    __out PVOID *CompletionContext
    )
{

	PFLT_FILE_NAME_INFORMATION nameInfo = NULL;
    UNICODE_STRING fileName; //The open name from the end of the volume name to the end.
	UNICODE_STRING newFileName={0}; //The output file name.
  //  UNICODE_STRING matchFileName; //The string we use to do the prefix comparison.
	HANDLE pid;
	int dwCreate;
	int dwAccess;
	NTSTATUS status;
	FLT_PREOP_CALLBACK_STATUS callbackStatus;
	WCHAR* pTemStr=NULL;

    UNREFERENCED_PARAMETER( CompletionContext );
        
	PAGED_CODE();  
    

	status = STATUS_SUCCESS;
    callbackStatus = FLT_PREOP_SUCCESS_NO_CALLBACK;- default is no post op callback
    newFileName.Buffer = NULL;
    newFileName.Length = newFileName.MaximumLength = 0;
    
    
	pid=PsGetCurrentProcessId();

	if (g_Pid!=pid &&  g_Pid1!=pid ) 
		goto SimRepPreCreateCleanup;

    ASSERT( Cbd->Iopb->MajorFunction == IRP_MJ_CREATE ||
            Cbd->Iopb->MajorFunction == IRP_MJ_NETWORK_QUERY_OPEN );

   
    if (FlagOn( Cbd->Iopb->OperationFlags, SL_OPEN_PAGING_FILE )) {

        goto SimRepPreCreateCleanup;
    }

    if (FlagOn( Cbd->Iopb->TargetFileObject->Flags, FO_VOLUME_OPEN )) { 

        goto SimRepPreCreateCleanup;

    }
 
    status = FltGetFileNameInformation( Cbd,
                                        FLT_FILE_NAME_OPENED |
                                        FLT_FILE_NAME_QUERY_ALWAYS_ALLOW_CACHE_LOOKUP,
                                        &nameInfo );
    if (!NT_SUCCESS( status )) {


        goto SimRepPreCreateCleanup;
    }


    
    status = FltParseFileNameInformation( nameInfo );
    if (!NT_SUCCESS( status )) {
    
    
        goto SimRepPreCreateCleanup;
    }
	
	dwAccess = Cbd->Iopb->Parameters.Create.SecurityContext->DesiredAccess;
	dwCreate = (Cbd->Iopb->Parameters.Create.Options >> 24) & 0x000000ff; 
	  
	pTemStr=ExAllocatePool(PagedPool,MAX_PATH*2);
	if(pTemStr==NULL)
		goto SimRepPreCreateCleanup;

	//如果是创建新的文件到路径下面
	if(
		(dwCreate == FILE_CREATE) ||
		(dwCreate == FILE_OPEN_IF) ||
		(dwCreate == FILE_OVERWRITE_IF) ||
		(dwCreate == FILE_SUPERSEDE)||
		(dwCreate == FILE_SUPERSEDE)
	  )
	{
		RtlZeroMemory(pTemStr,MAX_PATH*2);
		RtlCopyMemory(pTemStr,FltObjects->FileObject->FileName.Buffer,FltObjects->FileObject->FileName.Length);
		if(MyStrStr(pTemStr,L"JLUZH_Box")) // 吉林大学珠海学院的简称
			goto SimRepPreCreateCleanup;

		newFileName.Buffer=ExAllocatePool(PagedPool,MAX_PATH*2);
		newFileName.Length=0;
		newFileName.MaximumLength=MAX_PATH*2;

		if(newFileName.Buffer==NULL)
			goto SimRepPreCreateCleanup;


		RtlZeroMemory(newFileName.Buffer,MAX_PATH*2);
		RtlUnicodeStringCbCopyStringN(&newFileName,MBOX_PATH,sizeof(WCHAR)*wcslen(MBOX_PATH));
		//判断盘符

		RtlZeroMemory(pTemStr,MAX_PATH*2);
		RtlCopyMemory(pTemStr,nameInfo->Volume.Buffer,nameInfo->Volume.Length);

		if(MyStrStr(pTemStr,L"Device\\HarddiskVolume1"))//用于学习用,所以定死2个盘符
			RtlUnicodeStringCbCatStringN(&newFileName,L"\\C",sizeof(WCHAR)*wcslen(L"\\C")+sizeof(WCHAR));
		else
			RtlUnicodeStringCbCatStringN(&newFileName,L"\\D",sizeof(WCHAR)*wcslen(L"\\C")+sizeof(WCHAR));
		//创建文件夹
		if(!MyStrStr(pTemStr,L""))
		{
			WCHAR *Path=NULL;
			Path=ExAllocatePool(PagedPool,MAX_PATH*2);
			if(Path==NULL)
				goto SimRepPreCreateCleanup;
			RtlZeroMemory(Path,MAX_PATH*2);

			RtlCopyMemory(Path,nameInfo->ParentDir.Buffer,nameInfo->ParentDir.Length);
			CreateDirectry(newFileName.Buffer,Path,FltObjects->Instance,FltObjects->Filter);//这很重要吧
			ExFreePool(Path);
			Path=NULL;
		}
		RtlUnicodeStringCbCatN(&newFileName,&(FltObjects->FileObject->FileName),FltObjects->FileObject->FileName.Length);
		status = Globals.ReplaceFileNameFunction( Cbd->Iopb->TargetFileObject,
			newFileName.Buffer,
			newFileName.Length );
		if ( !NT_SUCCESS( status )) {

			DebugTrace( DEBUG_TRACE_REPARSE_OPERATIONS | DEBUG_TRACE_ERROR,
				("[SimRep]: SimRepPreCreate -> Failed to allocate string for file %wZ (Cbd = %p, FileObject = %p)\n",
				&nameInfo->Name,
				Cbd,
				FltObjects->FileObject ));
			goto SimRepPreCreateCleanup;
		}

		//
		//  Set the status to STATUS_REPARSE
		//
		status = STATUS_REPARSE;
		DebugTrace( DEBUG_TRACE_REPARSE_OPERATIONS | DEBUG_TRACE_REPARSED_OPERATIONS,
			("[SimRep]: SimRepPreCreate -> Returning STATUS_REPARSE for file %wZ. (Cbd = %p, FileObject = %p)\n"
			"\tOpenedFileName =  %wZ\n"
			"\tNewName = %wZ\n",
			&fileName, Cbd, FltObjects->FileObject,
			&nameInfo->Name,
			&newFileName) );
		goto SimRepPreCreateCleanup;
	}


SimRepPreCreateCleanup:
    
    //
    //  Release the references we have acquired
    //    

    SimRepFreeUnicodeString( &newFileName );
    
    if (nameInfo != NULL) {

        FltReleaseFileNameInformation( nameInfo );
    }

    if (status == STATUS_REPARSE)
	{
        //
        //  Reparse the open
        //
        Cbd->IoStatus.Status = STATUS_REPARSE;
        Cbd->IoStatus.Information = IO_REPARSE;
        callbackStatus = FLT_PREOP_COMPLETE;        
    }   
    else if (!NT_SUCCESS( status )) {
        //
        //  An error occurred, fail the open
        //
        DebugTrace( DEBUG_TRACE_ERROR,
                    ("[SimRep]: SimRepPreCreate -> Failed with status 0x%x \n",
                    status) );
            
        Cbd->IoStatus.Status = status;
        callbackStatus = FLT_PREOP_COMPLETE;
    }

    DebugTrace( DEBUG_TRACE_ALL_IO,
                ("[SimRep]: SimRepPreCreate -> Exit (Cbd = %p, FileObject = %p)\n",
                 Cbd,
                 FltObjects->FileObject) );

    return callbackStatus;

}

simrep的框架,怎么运行,看相关文档。

[课程]FART 脱壳王!加量不加价!FART作者讲授!

上传的附件:
收藏
免费 6
支持
分享
最新回复 (24)
雪    币: 134
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
学习了,对我有很大参考价值。Thanks.
2013-4-8 20:46
0
雪    币: 485
活跃值: (78)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
3
好东西感谢分享!!!!!!
2013-4-8 21:15
0
雪    币: 284
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
mark.mark.
2013-4-8 21:28
0
雪    币: 74
活跃值: (703)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
果断mark,感谢分享
2013-4-8 21:29
0
雪    币: 65
活跃值: (402)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
6
果断支持一个
2013-4-8 22:12
0
雪    币: 796
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
7
mark留名,。
2013-4-9 10:44
0
雪    币: 71
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
谢谢分享

3q
2013-4-9 11:44
0
雪    币: 12
活跃值: (767)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
cool man
2013-4-9 12:46
0
雪    币: 207
活跃值: (26)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
刚好毕业设计需要~Thx
2013-4-9 13:23
0
雪    币: 112
活跃值: (56)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
11
我的本科毕业设计也是这个。。。
2013-4-9 13:54
0
雪    币: 579
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
谢谢楼主。
2013-4-9 14:33
0
雪    币: 243
活跃值: (169)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
好东西,下个看看
2013-4-9 16:16
0
雪    币: 11
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
thx for share...
2013-4-9 16:43
0
雪    币: 66
活跃值: (830)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
mark ...
2013-4-9 20:55
0
雪    币: 93908
活跃值: (200199)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
16
Thanks for share.
2013-4-9 22:12
0
雪    币: 575
活跃值: (38)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
大概看了下,就处理的Create部分,其实离Sandbox还很远,目录枚举,文件或目录的删除等等等,还有好多工作要做,继续努力
2013-4-10 14:57
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
18
3年前写过一个sandboxie,后来没时间弄了也就不搞了。
记得写过一个xp的demo,翻了翻硬盘,居然找到了,呵呵



http://hi.baidu.com/proteinbox/item/4c4d7cf6eab19702c6dc45c9
上传的附件:
2013-4-10 18:45
0
雪    币: 575
活跃值: (38)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
ProteinBox是sudami的马甲???晕了
2013-4-10 19:01
0
雪    币: 112
活跃值: (56)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
20
说明,是bin文件。。。
2013-4-10 19:05
0
雪    币: 97
活跃值: (141)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
21
sudami,又出现了。很长时间消失了似得
还在360?
2013-4-11 12:04
0
雪    币: 400
活跃值: (632)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
22
吉珠的么?..........................
2013-4-11 23:46
0
雪    币: 49
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
问题解决了 我也修改下留言
支持下分享
2013-6-2 21:54
0
雪    币: 112
活跃值: (56)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
24
呵呵 。是呀,学生阶段,也只能拿出这个了。你有什么高级货吗?
2013-6-6 09:07
0
雪    币: 437
活跃值: (78)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
支持一下
2013-6-8 10:06
0
游客
登录 | 注册 方可回帖
返回
//