亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? listprocess.c

?? 使用內核方法檢測隱藏的進程
?? C
字號:
//Author :n0bele
//Homepage: www.antiprotect.com

#include <ntddk.h>
#include <windef.h>
#include "ListProc.h"


WCHAR gDeviceName[]=L"\\Device\\proclistdrv";
WCHAR gDosDeviceName[]=L"\\??\\proclistdrv";

//_OBJECT_HEADER結構以及基于該結構實現從對象(體)指針獲得對象(頭)指針的宏
typedef struct _OBJECT_HEADER {
    union {
        struct {
            LONG PointerCount;
            LONG HandleCount;
        };
        LIST_ENTRY Entry;
    };
    POBJECT_TYPE Type;
    UCHAR NameInfoOffset;
    UCHAR HandleInfoOffset;
    UCHAR QuotaInfoOffset;
    UCHAR Flags;

    union {
        //POBJECT_CREATE_INFORMATION ObjectCreateInfo;
        PVOID QuotaBlockCharged;
    };

    PSECURITY_DESCRIPTOR SecurityDescriptor;

    QUAD Body;
} OBJECT_HEADER, *POBJECT_HEADER;

#define OBJECT_TO_OBJECT_HEADER(obj)         CONTAINING_RECORD( (obj), OBJECT_HEADER, Body )
//系統偏移量(因系統而異,可使用Windbg查詢)
#define TYPE 0X08               //_OBJECT_HEADER中的偏移
#define NEXTFREETABLEENTRY 0X04 //_HANDLE_TABLE_ENTRY中的偏移
#define OFFSET_EPROCESS_IMAGENAME 0x0
#define OFFSET_EPROCESS_PID       0x1
#define OFFSET_EPROCESS_FLAGS     0x2
ProcessInfo *head,*p;

//聲明函數
NTSTATUS DriverEntry(IN PDRIVER_OBJECT		DriverObject,IN PUNICODE_STRING		RegistryPath);

// 啟用應用層訪問支持
NTSTATUS
ProcCreateClose (
    IN PDEVICE_OBJECT   DeviceObject,
    IN PIRP             Irp
);

// 接受來自應用層的控制
NTSTATUS
ProcDeviceControl (
    IN PDEVICE_OBJECT   DeviceObject,
    IN PIRP             Irp
);
VOID Unload(IN PDRIVER_OBJECT		DriverObject);
ULONG GetCidAddr();
ULONG GetProcessType();
VOID IsValidProcess();
VOID RecordInfo(ULONG i);
DWORD	GetPlantformDependentInfo(DWORD	eprocessflag);
//DriverEntry函數定義
NTSTATUS DriverEntry(IN PDRIVER_OBJECT		DriverObject,IN PUNICODE_STRING		RegistryPath)
{
	UNICODE_STRING DeviceName;
	UNICODE_STRING DosDeviceName;
	NTSTATUS Status;
	PDEVICE_OBJECT pDeviceObject=NULL;

	DriverObject->DriverUnload=Unload;

  	DriverObject->MajorFunction[IRP_MJ_CREATE]         = ProcCreateClose;
	DriverObject->MajorFunction[IRP_MJ_CLOSE]          = ProcCreateClose;	 
	DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = ProcDeviceControl;

	RtlInitUnicodeString(&DeviceName,gDeviceName);
	RtlInitUnicodeString(&DosDeviceName,gDosDeviceName);
	IoCreateDevice(DriverObject,0,&DeviceName,FILE_DEVICE_UNKNOWN,0,FALSE,&pDeviceObject);
	pDeviceObject->Flags|=DO_BUFFERED_IO;
	Status = IoCreateSymbolicLink(&DosDeviceName,&DeviceName);
	if(Status)
		DbgPrint("IoCreateSymbolicLink Return %0x\n",Status);

	IsValidProcess(); 
	return TRUE;
}

//Unload函數定義
VOID Unload(IN PDRIVER_OBJECT		DriverObject)
{
	DbgPrint("unload!");
}

//通過搜索PsLookupProcessByProcessId函數,獲取PspCidTable的地址
ULONG GetCidAddr()
{
	PUCHAR addr;
	PUCHAR p;
	UNICODE_STRING          pslookup;	
	ULONG cid;
	
	RtlInitUnicodeString (&pslookup,
		L"PsLookupProcessByProcessId");	
		addr = (PUCHAR) MmGetSystemRoutineAddress(&pslookup);//MmGetSystemRoutineAddress可以通過函數名獲得函數地址
		for (p=addr;p<addr+PAGE_SIZE;p++)
		{
			if((*(PUSHORT)p==0x35ff)&&(*(p+6)==0xe8))
			{
				cid=*(PULONG)(p+2);
				return cid;
				break;
			}
		}
		return 0;
}

//通過當前進程獲取進程對象的類型指針
ULONG GetProcessType()
{
	ULONG eproc;
	ULONG type;
	ULONG total;
	eproc=(ULONG)PsGetCurrentProcess();//PsGetCurrentProcess獲取當前活動進程的地址,實際上就是對象(體)指針
	eproc=(ULONG)OBJECT_TO_OBJECT_HEADER(eproc);
	type=*(PULONG)(eproc+TYPE);
	return type;
}

//判斷是否是進程對象,是則記錄,不是則放棄
VOID IsValidProcess()
{
	ULONG PspCidTable;
	ULONG TableCode;
	ULONG table1,table2;
	ULONG object,objectheader;
	ULONG NextFreeTableEntry;
	ULONG processtype,type;
	ULONG flags;
	ULONG i;
	PspCidTable=GetCidAddr();
	processtype=GetProcessType();
	if(PspCidTable==0)
	{
		return ;
	}
	else
	{
		//TableCode的最后兩位在XP中決定了句柄表的層數
		TableCode=*(PULONG)(*(PULONG)PspCidTable);
		if((TableCode&0x3)==0x0)
		{
			table1=TableCode;
			table2=0x0;
		}
		if((TableCode&0x3)==0x1)
		{
			TableCode=TableCode&0xfffffffc;
			table1=*(PULONG)TableCode;
			table2=*(PULONG)(TableCode+0x4);
		}
		//對cid從0x0到0x4e1c進行遍歷
		for(i=0x0;i<0x4e1c;i++)
		{
			if(i<=0x800)
			{	
				if(MmIsAddressValid((PULONG)(table1+i*2)))
				{
					object=*(PULONG)(table1+i*2);
					if(MmIsAddressValid((PULONG)(table1+i*2+NEXTFREETABLEENTRY)))
					{
						NextFreeTableEntry=*(PULONG)(table1+i*2+NEXTFREETABLEENTRY);
				    	if(NextFreeTableEntry==0x0)//正常的_HANDLE_TABLE_ENTRY中NextFreeTableEntry為0x0
						{
					    	object=((object | 0x80000000)& 0xfffffff8);//轉換為對象(體)指針
		    		    	objectheader=(ULONG)OBJECT_TO_OBJECT_HEADER(object);//獲取對象(頭)指針
			    	    	if(MmIsAddressValid((PULONG)(objectheader+TYPE)))
							{
					        	type=*(PULONG)(objectheader+TYPE);
				            	if(type==processtype)
								{
						    		flags=*(PULONG)((ULONG)object+GetPlantformDependentInfo(OFFSET_EPROCESS_FLAGS));
						    		if((flags&0xc)!=0xc)
						    		RecordInfo(object);//flags顯示進程沒有退出
								}
							}
						}
					}
				}
			}
			else
			{
				if(table2!=0)
				{
					if(MmIsAddressValid((PULONG)(table2+(i-0x800)*2)))
					{
						object=*(PULONG)(table2+(i-0x800)*2);
						if(MmIsAddressValid((PULONG)((table2+(i-0x800)*2)+NEXTFREETABLEENTRY)))
						{
							NextFreeTableEntry=*(PULONG)((table2+(i-0x800)*2)+NEXTFREETABLEENTRY);
					    	if(NextFreeTableEntry==0x0)
							{
					    		object=((object | 0x80000000)& 0xfffffff8);
					        	objectheader=(ULONG)OBJECT_TO_OBJECT_HEADER(object);
					        	if(MmIsAddressValid((PULONG)(objectheader+TYPE)))
								{
					            	type=*(PULONG)(objectheader+TYPE);
				                	if(type==processtype)
									{	
							    		flags=*(PULONG)((ULONG)object+GetPlantformDependentInfo(OFFSET_EPROCESS_FLAGS));
							    	    if((flags&0xc)!=0xc)
							        	RecordInfo(object);
									}
								}
							}
						}
					}
				}
			}
		}
	}
}

//使用單向鏈表記錄進程信息
VOID RecordInfo(ULONG i)
{
	ProcessInfo *r;
	if(head==NULL)
	{
		if((head=(ProcessInfo *)ExAllocatePool(NonPagedPool,sizeof(ProcessInfo)))==NULL)
		{
			return;
		}
		head->addr=0x0;
	}
	if (head->addr==0x0)
	{
		head->addr=i;
		p=head;
	}
	else
	{
		if((r=(ProcessInfo *)ExAllocatePool(NonPagedPool,sizeof(ProcessInfo)))==NULL)
		{
			return;
		}
		p->next=r;
		r->addr=i;
		r->next=NULL;
		p=r;
	}
}
///////////////////////////////////////////////////////////////////////////////
// ProcCreateClose
// 接受應用層調用
//
NTSTATUS 
ProcCreateClose(
	IN PDEVICE_OBJECT DeviceObject,
	IN PIRP Irp
	)
{	
	DbgPrint(" Create or Close ok...\n");
	Irp->IoStatus.Status = STATUS_SUCCESS;
	Irp->IoStatus.Information = 0;
	IoCompleteRequest(Irp,IO_NO_INCREMENT);
	return STATUS_SUCCESS;
}

///////////////////////////////////////////////////////////////////////////////
// ProcDeviceControl
// 應用程序控制位置
//
NTSTATUS
ProcDeviceControl (
    IN PDEVICE_OBJECT   DeviceObject,
    IN PIRP             Irp
    )
{   
	PIO_STACK_LOCATION  io_stack;
    NTSTATUS            status;

    io_stack = IoGetCurrentIrpStackLocation(Irp);

 	if (io_stack->MajorFunction==IRP_MJ_DEVICE_CONTROL) 
	{
		switch (io_stack->Parameters.DeviceIoControl.IoControlCode)
		{
		case IOCTL_GETPROC_LIST:
			{
				ProcessInfo* pi = (ProcessInfo*) Irp->AssociatedIrp.SystemBuffer;
				ProcessInfo* q;  
				int j = 0;
				//獲取進程的ID和進程名
				for (p=head;p;p=p->next)
				{
					p->pid=*(int *)(p->addr+GetPlantformDependentInfo(OFFSET_EPROCESS_PID));
    				strcpy(p->name,(UCHAR *)(p->addr+GetPlantformDependentInfo(OFFSET_EPROCESS_IMAGENAME)));
				}
				for(p=head;p;p=p->next)
				{
					ProcessInfo* pnext;
					pi->addr = p->addr;
					RtlCopyMemory(pi->name, p->name, 16);
					pi->pid = p->pid;				
					if(p->next)
						pnext = (++pi);
					else 
						pnext = NULL;
					pi->next = pnext;
					pi = pnext;
				}
				//釋放鏈表
				p=head;
				q=p->next;
				while(q!=NULL)
				{
					ExFreePool(p);
					p=q;
					q=p->next;
				}
				ExFreePool(p);
			}
			return STATUS_SUCCESS;
		}
	}
	return STATUS_SUCCESS;
}
DWORD	GetPlantformDependentInfo(DWORD	eprocessflag)
{
	DWORD current_build;
	DWORD ans = 0;

	PsGetVersion(NULL, NULL, &current_build, NULL); 

	switch(eprocessflag){
		case OFFSET_EPROCESS_IMAGENAME:
			if (current_build ==  2195) //2000
			{

				ans = 0x1FC;
			}
			if (current_build ==  2600) //XP
			{
				ans = 0x174;

			}
			if (current_build ==  3790) //2003
			{
				ans = 0x164;    
			}
			break;
		case OFFSET_EPROCESS_PID:
			if (current_build ==  2195) //2000
			{

				ans = 0x09c;
			}
			if (current_build ==  2600) //XP
			{
				ans = 0x084;

			}
			if (current_build ==  3790) //2003
			{
				ans = 0x94; 
			}
			break;
		case OFFSET_EPROCESS_FLAGS:
//			if (current_build ==  2195) //2000
//			{
//2000下貌似沒有這個標志,反正我是沒找到
//				ans = 0x09c;      
//			}
			if (current_build ==  2600) //XP
			{
				ans = 0x248;

			}
			if (current_build ==  3790) //2003
			{
				ans = 0x240; 
			}
			break;
		default:
			break;
	}

	return ans;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美高清激情brazzers| 日本aⅴ免费视频一区二区三区| 一区av在线播放| 久久99精品久久久久久国产越南 | 国产精品三级久久久久三级| 亚洲国产成人av| 成人爱爱电影网址| 日韩视频在线永久播放| 亚洲成人av免费| 一本久久综合亚洲鲁鲁五月天 | 成人黄色一级视频| 久久蜜桃香蕉精品一区二区三区| 亚洲国产乱码最新视频| 91免费看片在线观看| 国产女主播在线一区二区| 日本午夜一本久久久综合| 在线免费观看视频一区| 中文字幕一区二区三区不卡| 国产一区二区三区久久久 | 在线观看精品一区| 国产精品电影院| 高清久久久久久| 久久久久国产精品麻豆ai换脸| 午夜精品一区在线观看| 欧美日韩国产欧美日美国产精品| 亚洲免费视频成人| 色婷婷综合激情| 一区二区三区日韩欧美精品| 色综合久久中文字幕| 国产精品久久久久久久久久免费看 | 国产老肥熟一区二区三区| 日韩限制级电影在线观看| 免费成人美女在线观看.| 欧美日韩国产色站一区二区三区| 亚洲高清在线视频| 欧美日韩大陆一区二区| 午夜激情久久久| 欧美一级xxx| 精品一区二区三区在线播放视频 | 欧美日韩美女一区二区| 亚洲成人av在线电影| 在线播放国产精品二区一二区四区 | 狠狠狠色丁香婷婷综合久久五月| 日韩免费福利电影在线观看| 国产一区二区看久久| 中文字幕欧美激情一区| 色综合av在线| 亚洲成人精品影院| 日韩精品一区二区在线| 国产精品主播直播| 亚洲欧洲在线观看av| 色婷婷精品久久二区二区蜜臀av | 91精品国产一区二区三区| 裸体在线国模精品偷拍| 国产亚洲va综合人人澡精品| 91美女在线看| 日本在线不卡一区| 国产婷婷色一区二区三区| 日韩精品国产欧美| 久久久国产精品麻豆| 色婷婷久久久综合中文字幕| 奇米精品一区二区三区在线观看一| 欧美精品一区二区三区四区 | 久久国产精品无码网站| 综合色中文字幕| 51久久夜色精品国产麻豆| 国产成人精品aa毛片| 亚洲一区二区视频在线观看| 欧美哺乳videos| 91老司机福利 在线| 奇米综合一区二区三区精品视频| 国产无一区二区| 欧美另类高清zo欧美| 国v精品久久久网| 日本不卡视频在线| 亚洲天堂福利av| 2017欧美狠狠色| 欧洲精品中文字幕| 国产成人综合网| 午夜伦欧美伦电影理论片| 日本一二三四高清不卡| 日韩欧美国产系列| 日本久久一区二区三区| 国产在线播精品第三| 午夜精品福利久久久| 欧美激情在线看| 精品日韩一区二区三区| 欧美亚洲免费在线一区| 成人h动漫精品| 国产高清亚洲一区| 日韩主播视频在线| 一区二区三区四区不卡在线| 国产精品毛片无遮挡高清| 日韩精品在线一区二区| 欧美日韩一卡二卡| 97aⅴ精品视频一二三区| 成人一道本在线| 国产黄人亚洲片| 久久av资源站| 美腿丝袜一区二区三区| 婷婷丁香久久五月婷婷| 亚洲资源在线观看| 亚洲三级电影网站| 亚洲欧洲日韩av| 中文字幕乱码亚洲精品一区| 久久视频一区二区| 久久一区二区三区国产精品| 日韩精品影音先锋| 精品国产一区二区三区忘忧草| 欧美日韩在线播| 欧美性大战久久久| 欧美人与性动xxxx| 91麻豆精品国产综合久久久久久| 欧美图片一区二区三区| 欧美日韩久久久久久| 欧美日韩一区成人| 91精品久久久久久久99蜜桃| 欧美一区二区久久| 日韩精品中文字幕在线不卡尤物| 91麻豆精品国产91久久久久久 | 国产精品伦理在线| 国产精品三级在线观看| 亚洲三级久久久| 亚洲国产日韩一区二区| 天天操天天干天天综合网| 亚洲国产va精品久久久不卡综合 | 欧美日韩激情一区| 91麻豆精品国产91久久久更新时间| 欧美日韩激情在线| 欧美成人性福生活免费看| 久久夜色精品一区| 日韩毛片精品高清免费| 亚洲男同性恋视频| 日日骚欧美日韩| 精品在线播放免费| 成人激情午夜影院| 欧美在线|欧美| 日韩免费看的电影| 国产精品久久久久影院| 亚洲亚洲精品在线观看| 美女视频黄久久| 丁香五精品蜜臀久久久久99网站| 色综合久久中文字幕综合网| 7777女厕盗摄久久久| 国产三级精品三级| 亚洲一区影音先锋| 国产精品一线二线三线| 色中色一区二区| 精品国产一区二区三区不卡| 国产精品国产馆在线真实露脸 | 大陆成人av片| 欧美无乱码久久久免费午夜一区| 日韩一区二区在线观看视频播放| 国产日韩欧美在线一区| 亚洲主播在线播放| 国产成a人亚洲精品| 欧美日本在线一区| 亚洲欧美在线高清| 美腿丝袜亚洲综合| 一本大道av一区二区在线播放| 欧美一级精品在线| 亚洲精品一二三| 国产精品系列在线观看| 在线电影院国产精品| 综合电影一区二区三区| 国产综合久久久久久鬼色 | 日韩电影一区二区三区| 99久久精品国产麻豆演员表| 日韩三级视频在线观看| 亚洲一区在线观看网站| 成人综合日日夜夜| 日韩欧美一区二区在线视频| 亚洲美女少妇撒尿| 成人免费高清视频在线观看| 日韩三级精品电影久久久| 亚洲成人免费视频| 在线免费观看不卡av| 国产精品美女久久久久久久| 国产伦精品一区二区三区视频青涩| 欧美在线三级电影| 亚洲精品日韩综合观看成人91| 国产精品资源在线观看| 精品欧美乱码久久久久久1区2区| 亚洲乱码国产乱码精品精小说| 国产精品系列在线播放| 久久综合九色综合欧美98| 秋霞av亚洲一区二区三| 69堂精品视频| 亚洲777理论| 538prom精品视频线放| 天天色天天操综合| 欧美日韩色一区| 视频一区欧美日韩| 欧美色国产精品| 视频一区二区国产| 欧美精品xxxxbbbb| 美女久久久精品| 欧美岛国在线观看| 国产一区二区导航在线播放| xfplay精品久久|