首页
社区
课程
招聘
[原创]文件沙盘代码YasVps
发表于: 2009-12-10 12:49 18039

[原创]文件沙盘代码YasVps

2009-12-10 12:49
18039

之前计划写的沙盘系统,刚写好文件部分,也不算太完善,碰巧有人问起,遂贴上代码大家看去,你可以在此基础上完善之。 代码没什么WS技术,但做文件沙盘还是有不少问题的,需要的朋友可以下, 贴上主要头文件。基本代码是围绕这个头文件展开的。
#include <ntddk.h>

#pragma once

//        ucReseaon :
//
// Basic
//
#define YASVPS_CREATE_FILE     0x00

#define YASVPS_MOVE_FILE       0x01
#define YASVPS_REPLACE_FILE    0x02
#define YASVPS_RENAME_FILE     0x03
#define YASVPS_WRITE_FILE      0x04

//
//Option
//
#define YASVPS_SETFILE_BASICINFO 0x05
#define YASVPS_SETFILE_ENDINFO   0x06
#define YASVPS_SETFILE_POSINFO   0x07
#define YASVPS_SETFILE_SECINFO   0x08

//
//删除以存在文件时追踪,
//对已存在文件的删除是不可恢复的,所以这个链表跟进程的生命周期一样,而且只能添加节点不能删除。
//
typedef struct __YASVPS_DELETETRACE
{
        ULONG uPid;
        CHAR lpszDelFilePath[YASVPS_MAX_PATH];
        struct __YASVPS_DELETETRACE* lpNext;
}YASVPS_DELETETRACE;

//
//创建新文件时追踪,添加节点前,先判断文件是否 “删除文件追踪” 存在,若存在,则删除对应节点
//删除文件时,需要查找这个表的信息,如果发现删除的是自己创建的文件,则允许删除。并删除相关跟踪节点
//同样的任何修改文件也需要先找这张表
//外界不应该操作在YASVPS中运行进程创建的文件。
//

/*
dir 规则:
如果在枚举目录文件时, “删除以存在文件” 中有文件在对应的目录中。
如果在YASVPS_CREATEFILETRACE 没有相应节点,则过滤掉删除的文件,不显示
否则显示之
*/

/*
覆盖文件:
覆盖新创建文件: 直接允许
覆盖已存在文件: 相当于 删除原来存在的文件,再创建一个新的文件。
*/

/*
移动已存在文件: eg: c:\123.exe --->> c:\windows\123.exe  --->> c:\123.exe
相当于删除文件再创建文件。
*/

//
//修改以存在文件时追踪。删除下面匹配的文件时,相应节点也要删除。
//

typedef struct __YASVPS_CREATETRACE
{

        //
        //任何修改文件也需要先找这张表,再根据 ucReseaon 做相应的操作
        //

        struct __YASVPS_CREATETRACE* lpNext;
       
        ULONG uPid; //进程PID
        HANDLE hFile;
        PFILE_OBJECT lpFileObj; //保留

        /*
        ucReseaon :
        #define YASVPS_CREATE_FILE     0x00
        #define YASVPS_MOVE_FILE       0x01
    #define YASVPS_REPLACE_FILE    0x02
    #define YASVPS_RENAME_FILE     0x03
    #define YASVPS_WRITE_FILE      0x04
        */

        UCHAR ucReseaon;
       
        /*
        ucReseaon = YASVPS_CREATE_FILE
        eg:    lpszCreatePath : C:\123.exe
        重定向 lpszTracePath : C:\YasVPS\C:\123.exe
        之后 修改名字为 hello.exe 则 lpszCreatePath : C:\hello.exe
        对YASVPS_CREATE_FILE 文件的操作,都直接PASS, 删除文件时,需要删除lpszLinkPath,
        并删除对应YASVPS_CREATETRACE节点

    “外界不应该操作在YASVPS中运行进程创建的文件!!!!!”
        */

        //
        //重命名/移动文件/覆盖文件/创建后后新的路径
        //
        CHAR lpszNewPath[YASVPS_MAX_PATH];
        //
        //指向的原始路径, 当该文件被写时,这个地方为TMP文件,写的文件不能超过10M(*)
        //
        CHAR lpszLinkPath[YASVPS_MAX_PATH];
                                           
        //
        //下面的暂时保留,不支持,主要是从效率和节省内存考虑
        //
        /*        FILE_BASIC_INFORMATION stFileBasicInfo;
        FILE_END_OF_FILE_INFORMATION szFileEndInfo;
        */
}YASVPS_CREATETRACE, *PYASVPS_CREATETRACE;

PYASVPS_CREATETRACE VpsAddCreateTraceNode( );
PYASVPS_CREATETRACE VpsIsFileRedirect( CHAR* lpszNewPath );
PYASVPS_CREATETRACE VpsIsFileRedirect_2(IN CHAR* lpszLinkPath );
PYASVPS_CREATETRACE __VpsGetRedirectInfo( CHAR* lpszDirPath , IN OUT CHAR* lpszFileName);

BOOLEAN  VpsExaPath(PSTR szFilePath,PSTR szFileName,PSTR szFileDir,PSTR szFileExtName);
BOOLEAN  VpsExaDirPath(PSTR szFilePath,PSTR szFileDir);


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 7
支持
分享
最新回复 (17)
雪    币: 1491
活跃值: (985)
能力值: (RANK:860 )
在线值:
发帖
回帖
粉丝
2
谢谢共享。。。
2009-12-10 13:07
0
雪    币: 180
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
   今天都疯了  全看到些头绪都没有的文章
唉,菜得太离谱了
2009-12-10 13:38
0
雪    币: 203
活跃值: (47)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
能不能介绍下这东西干什么用的?
2009-12-10 14:14
0
雪    币: 364
活跃值: (152)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
5
嘿嘿~
2009-12-10 14:21
0
雪    币: 169
活跃值: (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
不错不错~
2009-12-10 15:09
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
7
你这个不如SandBoxie~
2009-12-11 17:44
0
雪    币: 220
活跃值: (12)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
老V介绍一下 sandboxie的实现原理吧 ?
2009-12-12 10:26
0
雪    币: 220
活跃值: (12)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
老V介绍一下 sandboxie的实现原理吧 ?
2009-12-12 10:33
0
雪    币: 284
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
V校有 SandBoxie 的源代码。。哈哈
2009-12-12 10:37
0
雪    币: 11198
活跃值: (158)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
同感啊。
2009-12-12 22:05
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
12
sandboxie下开个explorer,在windows文件夹下新增几个文件,然后刷新可以看见。
其他多数产品是看不到的,能访问但是列出不了(以前checkSandBox的方法就是先创建一个.EXE到Windows下,然后列出Windows下的EXE,发现没有,这个是sandbox.对于SandBoxie只能创建文件,然后打开文件,再查询文件全路径(ZwQueryObject大法))。
2009-12-13 11:11
0
雪    币: 2307
活跃值: (1013)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
13
只能说360应该还没有写出来... ...
2009-12-13 11:15
0
雪    币: 581
活跃值: (149)
能力值: ( LV12,RANK:600 )
在线值:
发帖
回帖
粉丝
14
这个文件过滤沙盘。。。选择HOOK FSD DISPATCH。。处理上比较麻烦。。 重定位,也处理了显示问题。。。比如重命名是能即时显示的,建文件也可以。。但删除文件可能由于SHXXX得问题有不人性化,,大家可以处理也应该不难。。主要是SHELL进程注册了ShChangeNotify
  代码我觉得还是蛮容易理解,我都加了注释
2009-12-13 14:28
0
雪    币: 235
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
15
sysnap大牛
总是放好东西
学习,争取追上大牛
2009-12-14 12:56
0
雪    币: 266
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
mark一下
2010-9-9 14:50
0
雪    币: 1359
活跃值: (520)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
关注一下 。。。。
2011-3-17 16:14
0
雪    币: 62
活跃值: (72)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
18
关注一下。。。。mark
2011-3-18 12:42
0
游客
登录 | 注册 方可回帖
返回
//