首页
社区
课程
招聘
[原创]自己写的一款所谓的主动防御
发表于: 2012-2-5 17:02 28003

[原创]自己写的一款所谓的主动防御

2012-2-5 17:02
28003
2011年参赛用的。。。。写了4个月的晚上时间。。。很久没再修改了
      开始写这个程序的时候,其实才开始学驱动。。。。所以基础打得并不牢固,当时看了SSDT原理就直接连抄加改直接来了。地址有效性检测啦,同步什么的貌似都没有,不是计算机相关专业,时间有限,数据结构、算法都没学过,代码也不规范。。。。比较烂

环境:WIN XP  SP3   +     VC6  SP6

程序的思路:
        1、通过SSDT HOOK一些注册表操作函数、文件操作函数、进程线程操作函数并读取其操作值和进程PID
        2、在应用层  维护3个容器,分别存储一些 文件值、进程值、注册表敏感值,这些值通过采集一些常见病毒得到,提取   经常修改的注册表值、经常操作的文件目录、经常创建的进程等
        3、驱动层将PID和操作值发往应用层,应用层为每一个PID维护一个容器
   
        应用层调用Check_In_Vector(ProcessName,iPid,Type,String,Kind,PID); 为每一个PID填充以下结构:
               
struct Query_Pass
		{
			char ProcessName[256];
			int PID;                 //进程PID
			int TID;                 //线程TID
			int LoadDriver;           //是否加载驱动
			int CreateRemoteThread;   //是否创建远程线程
			int CreatePro;            //是否创建敏感进程
			int FileOperation;         //是否操作敏感文件夹
			int RegOperation;         //是否操作敏感注册表
			int ConnectInternet;
			char Pid[16];
			char Tid[16];
			BOOL IsMulware;
		};

        接着调用
            Check_PID_Operations(iPid);判断违规情况
        调用DealWithProcess(iPid,PID);对进程进行处理,当时时间有限,处理不好,结束进程和挂起进程都有问题

                最后显示警告对话框   Pro_Waring(iPid,PID);
       
        其他:
        扩展性不佳
       A、在驱动FakeFunction里面填充发往应用层的信息格式如下:                                       
                strcat(aPathName,"^^<>");
       
BOOL GoOrNot(char *fathername,char *procname,char *Pid) 
	{
		char buff[512] = {0};
		ULONG a;
		LARGE_INTEGER li;		li.QuadPart=-10000;
		KeWaitForSingleObject(&event,Executive,KernelMode,0,0);
		
		strcpy(buff,fathername);
		strcat(buff,procname);
		strcat(buff,Pid);
		strncpy(&output[8],buff,sizeof(buff));
		a = 1;
		memmove(&output[0],&a,4);
		while (1)
		{
			KeDelayExecutionThread(KernelMode,0,&li);
			memmove(&a,&output[0],4);
			if (!a)
			{
				break;
			}
		}
		memmove(&a,&output[4],4);
		KeSetEvent(&event,0,0);
		return a;
	}

       在应用层要分离这种特殊符号会很麻烦
B、而曾经尝试这种方式:
      
void ProGoOrNot(int kind,int type,int Pid,char *cPid,char *ProcessPath,char *Value1,char *Value2)
{
	PDEVICE_EXTENSION	deviceExtension;
	KdPrint(("ProGoOrNot"));
	deviceExtension=(PDEVICE_EXTENSION)g_pDriverObject->DeviceExtension;

	deviceExtension->kind=kind;
	deviceExtension->type=type;
	deviceExtension->Pid=Pid;
	strcpy(deviceExtension->cPid,cPid);
	strcpy(deviceExtension->Value1,Value1);
	strcpy(deviceExtension->Value2,Value2);
	strcpy(deviceExtension->ProcessPath,ProcessPath);
    KeClearEvent(ProAppEvent);
	KeSetEvent(deviceExtension->ProEvent,0,FALSE);
	KeClearEvent(deviceExtension->ProEvent);
	KeWaitForSingleObject(ProAppEvent,Executive,KernelMode,0,NULL);
	KeClearEvent(ProAppEvent);			
}

在应用层也好提取,但是使用了CString类使得程序死卡死,不知为何,MessageBox测试也很卡
while (::WaitForSingleObject(hProcessEvent, INFINITE)==WAIT_OBJECT_0)
	{
		DWORD	dwRet;
		BOOL	bRet;
		bRet = ::DeviceIoControl(
							FileMon.hDriver,
							IOCTL_GET_RING0_INFO,
							NULL,
							0,
							&callbackinfo,
							sizeof(callbackinfo)+64,
							&dwRet,
							NULL);

		if (bRet)
		{
			MessageBox(0,"删除文件 ","",MB_OK);     这里会很卡,半天不弹出来
			//MessageBox(0,callbackinfo.Value1,"",MB_OK);
			//MessageBox(0,callbackinfo.cPid,"",MB_OK);
			//MessageBox(0,callbackinfo.ProcessPath,"",MB_OK);
		}

2、进行了一些进程关联处理,比如A调用B加载驱动,可以选择同时结束A和B

3、还有一个修改于寒江独钓的TDI驱动,用于记录网络行为,但是时间有限,最后没有加入规则当中

4、1、驱动卸载蓝屏BUG未解决
     2、未对Esc按键进行屏蔽,可能导致程序退出而驱动未卸载
5、效果如下






6、源文件
可执行程序.rar
源代码.rar

7、界面的点滴变化
界面.pdf

[课程]Android-CTF解题方法汇总!

上传的附件:
收藏
免费 6
支持
分享
最新回复 (40)
雪    币: 219
活跃值: (38)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
观摩 赞扬!~~~
2012-2-5 17:40
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
看看!!!!!!!!!!!!!1
2012-2-5 17:50
0
雪    币: 25
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
牛逼就算楼主写的在烂也是我等菜鸟膜拜的对象
2012-2-5 18:26
0
雪    币: 79
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
又一个精华!正在写此类东西,真好楼主源码贡献了,十分感谢!
2012-2-5 18:42
0
雪    币: 12
活跃值: (767)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
又是一个牛逼的人
2012-2-5 19:39
0
雪    币: 693
活跃值: (108)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
7
多谢分享,学习了
2012-2-5 20:10
0
雪    币: 1015
活跃值: (235)
能力值: ( LV12,RANK:440 )
在线值:
发帖
回帖
粉丝
8
多谢楼主的分享!
2012-2-5 21:53
0
雪    币: 358
活跃值: (662)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
9
不错,支持一下...
2012-2-5 23:00
0
雪    币: 862
活跃值: (329)
能力值: ( LV9,RANK:165 )
在线值:
发帖
回帖
粉丝
10
试过的评价一下?好像有那么点用
2012-2-6 15:45
0
雪    币: 101
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
能否将这个主动防御 对抗游戏驱动保护
2012-2-6 21:00
0
雪    币: 862
活跃值: (329)
能力值: ( LV9,RANK:165 )
在线值:
发帖
回帖
粉丝
12
这个做不到,因为驱动只是SSDT  HOOK了几个函数,连自我保护什么的都没有,主要防御策略放在应用层了
2012-2-6 21:19
0
雪    币: 244
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
楼主写这个主动防御需要学哪些知识?你学过什么?
2012-2-7 00:16
0
雪    币: 862
活跃值: (329)
能力值: ( LV9,RANK:165 )
在线值:
发帖
回帖
粉丝
14
写这个的时候学过MFC、C++,刚开始接触驱动编程,大一学过 老谭的C
2012-2-7 08:37
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
点<查询进程记录> 出来后关闭。然后再点出来,就出现Debug Assertion Failed!
2012-2-7 09:39
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
还是要支持一下。感谢提供源码~
2012-2-7 09:40
0
雪    币: 585
活跃值: (568)
能力值: ( LV13,RANK:290 )
在线值:
发帖
回帖
粉丝
17
支持下。。。。。。。。。。。。。。。
2012-2-7 10:24
0
雪    币: 862
活跃值: (329)
能力值: ( LV9,RANK:165 )
在线值:
发帖
回帖
粉丝
18
你不是按Esc关闭的吧?这个,Bug很多。。。。见谅哈
2012-2-7 16:50
0
雪    币: 100
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
向楼主学习。
2012-2-7 22:21
0
雪    币: 108
活跃值: (87)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
最重要的可能是里面的算法和思路。
2012-2-8 10:57
0
雪    币: 76
活跃值: (55)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
有信心学习驱动了
2012-2-8 14:37
0
雪    币: 243
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
不错,不过最后那个PDF有点标题了...
2012-2-9 01:06
0
雪    币: 274
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
支持,向楼主学习
2012-2-9 13:50
0
雪    币: 33
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
刚刚接触 有点困难~~~
2012-2-9 17:48
0
雪    币: 544
活跃值: (264)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
25
LZ跟我一样,对函数的返回值从不判断。。
2012-2-9 18:57
0
游客
登录 | 注册 方可回帖
返回
//