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

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

?? processenum.c

?? 使用內核方法檢測隱藏的進程
?? C
?? 第 1 頁 / 共 2 頁
字號:
//Author  :n0bele
//HomePage:www.antiprotect.com


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

///////////////////////////不同的windows版本下面的偏移值不同

#define  EPROCESS_SIZE       0x0 //EPROCESS結構大小
#define  PEB_OFFSET          0x1
#define  FILE_NAME_OFFSET    0x2
#define  PROCESS_LINK_OFFSET 0x3
#define  PROCESS_ID_OFFSET   0x4
#define  EXIT_TIME_OFFSET    0x5

#define  OBJECT_HEADER_SIZE  0x018
#define  OBJECT_TYPE_OFFSET  0x008
////////////////////////// 

#define PDE_INVALID 2 
#define PTE_INVALID 1 
#define VALID 0 


Processinfo* pProcessPtr = NULL;
int nProcessCount = 0;

ULONG     pebAddress;         //PEB地址的前半部分
PEPROCESS pSystem;            //system進程
ULONG     pObjectTypeProcess; //進程對象類型

ULONG   VALIDpage(ULONG addr) ;  //該函數直接復制自 Ring0下搜索內存枚舉隱藏進程
BOOLEAN IsaRealProcess(ULONG i); //該函數復制自 Ring0下搜索內存枚舉隱藏進程
VOID    WorkThread(IN PVOID pContext);
//ULONG   GetPebAddress();          //得到PEB地址前半部分
VOID    EnumProcess();            //枚舉進程
VOID    ShowProcess(ULONG pEProcess); //顯示結果
DWORD	GetPlantformDependentInfo(DWORD	eprocessflag);
#define SYSNAME    "System"
ULONG	ProcessNameOffset = 0; //進程名偏移量
ULONG   GetProcessNameOffset();
BOOLEAN GetProcess(PCHAR Name);

void EnumProcess2();

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

NTSTATUS SafePsEnumCreate(IN PDEVICE_OBJECT DeviceObject,IN PIRP Irp);
NTSTATUS SafePsEnumClose(IN PDEVICE_OBJECT DeviceObject,IN PIRP Irp);

NTSTATUS
MyDeviceControl (
    IN PDEVICE_OBJECT   DeviceObject,
    IN PIRP             Irp );

/////////////////////////////////////////////////////////
VOID    OnUnload(IN PDRIVER_OBJECT DriverObject)
{
	NTSTATUS status;
	UNICODE_STRING DosDeviceName;
	RtlInitUnicodeString(&DosDeviceName,gDosDeviceName);
	if(DriverObject->DeviceObject)
		IoDeleteDevice(DriverObject->DeviceObject);
	status = IoDeleteSymbolicLink(&DosDeviceName);
	if(status)	
		DbgPrint("IoDeleteSymbolicLink Return %0x\n",status);	

	if (pProcessPtr)
	{
		ExFreePool(pProcessPtr);
	}
}

/////////////////////////////////////////////////////////
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegistryPath)
{
	HANDLE hThread; 
	UNICODE_STRING DeviceName;
	UNICODE_STRING DosDeviceName;
	PDEVICE_OBJECT pDeviceObject=NULL;
	NTSTATUS Status;
 
	pSystem    = PsGetCurrentProcess();
//	pebAddress = GetPebAddress();
    pebAddress = 0x7FFD0000;       //取了一個通用的低位地址
	ProcessNameOffset = GetProcessNameOffset();
 
	pObjectTypeProcess = *(PULONG)((ULONG)pSystem - OBJECT_HEADER_SIZE +OBJECT_TYPE_OFFSET);  

	DbgPrint("type: %d \n", pObjectTypeProcess);


	DriverObject -> DriverUnload = OnUnload;
	DriverObject->MajorFunction[IRP_MJ_CREATE]         = SafePsEnumCreate;
	DriverObject->MajorFunction[IRP_MJ_CLOSE]          = SafePsEnumClose;
	DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = MyDeviceControl;

	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);
	
	nProcessCount = 0;
	// 測試固定獲取最大為1024
	pProcessPtr =  ExAllocatePoolWithTag(NonPagedPool, 1024*sizeof(Processinfo), 'HpcM');

	return STATUS_SUCCESS;
}

/////////////////////////////////////////////////////////
NTSTATUS SafePsEnumCreate(IN PDEVICE_OBJECT DeviceObject,IN PIRP Irp)
{	
 	Irp->IoStatus.Status = STATUS_SUCCESS;
	Irp->IoStatus.Information = 0;
	IoCompleteRequest(Irp,IO_NO_INCREMENT);
	return STATUS_SUCCESS;
}

/////////////////////////////////////////////////////////
NTSTATUS SafePsEnumClose(IN PDEVICE_OBJECT DeviceObject,IN PIRP Irp)
{
 	Irp->IoStatus.Status = STATUS_SUCCESS;
	Irp->IoStatus.Information = 0;
	IoCompleteRequest(Irp,IO_NO_INCREMENT);
	return STATUS_SUCCESS;
}

/////////////////////////////////////////////////////////
/*
ULONG  GetPebAddress()
{
	ULONG Address;
	PEPROCESS pEProcess;

	//由于system進程的peb總是零 我們只有到其他進程去找了
	pEProcess = (PEPROCESS)((ULONG)((PLIST_ENTRY)((ULONG)pSystem + PROCESS_LINK_OFFSET))->Flink - PROCESS_LINK_OFFSET);
	Address   = *(PULONG)((ULONG)pEProcess + PEB_OFFSET);

	return (Address & 0xFFFF0000);  
}
*/
///////////////////////////////////////////////////////
VOID EnumProcess()
{
	ULONG  uSystemAddress = (ULONG)pSystem;
	ULONG  i;
	ULONG  Address;
	ULONG  ret;

	nProcessCount = 0;
 
	for(i = 0x80000000; i < uSystemAddress; i += 4) {//system進程的EPROCESS地址就是最大值了
		
		ret = VALIDpage(i); 

		if (ret == VALID) { 
		 
			Address = *(PULONG)i;
			if (( Address & 0xFFFF0000) == 0x7FFD0000) {//每個進程的PEB地址都是在差不多的地方,地址前半部分是相同的       
				
				if(IsaRealProcess(i)) { 
				
					ShowProcess(i - GetPlantformDependentInfo(PEB_OFFSET)); 

					i += GetPlantformDependentInfo(EPROCESS_SIZE);                
				} 
			} 
		}
		else if(ret == PTE_INVALID) { 
			
			i -=4; 
			i += 0x1000;//4k 
		}
		else { 

		  i-=4; 
		  i+= 0x400000;//4mb 
		} 
	}

 	ShowProcess(uSystemAddress);//system的PEB總是零 上面的方法是枚舉不到的 不過我們用PsGetCurrentProcess就能得到了
}

/////////////////////////////////////////////////////////
VOID    ShowProcess(ULONG pEProcess)
{
	PLARGE_INTEGER ExitTime;
	ULONG PID;
	PUCHAR pFileName;
	
	ExitTime = (PLARGE_INTEGER)(pEProcess + GetPlantformDependentInfo(EXIT_TIME_OFFSET));  

	if(ExitTime->QuadPart != 0) //已經結束的進程的ExitTime為非零	
		return ;

	PID = *(PULONG)(pEProcess + GetPlantformDependentInfo(PROCESS_ID_OFFSET));
	pFileName = (PUCHAR)(pEProcess + GetPlantformDependentInfo(FILE_NAME_OFFSET));

 	pProcessPtr[nProcessCount].pEProcess = pEProcess;
	pProcessPtr[nProcessCount].PId = PID;
	strcpy(pProcessPtr[nProcessCount].Name, pFileName);	 

	nProcessCount++;
}

/////////////////////////////////////////////////////////////
ULONG VALIDpage(ULONG addr) 
{ 
	ULONG pte; 
	ULONG pde; 

	pde = 0xc0300000 + (addr>>22)*4; 
	if((*(PULONG)pde & 0x1) != 0){ 
	//large page 
	if((*(PULONG)pde & 0x80) != 0){ 
		return VALID; 
	} 
	pte = 0xc0000000 + (addr>>12)*4; 
	if((*(PULONG)pte & 0x1) != 0){ 
		return VALID; 
	}else{ 
		return PTE_INVALID; 
	} 
	} 
	return PDE_INVALID; 
} 

////////////////////////////////////////////////////////////////
BOOLEAN IsaRealProcess(ULONG i) 
{ 
	NTSTATUS STATUS; 
	PUNICODE_STRING pUnicode; 
	UNICODE_STRING Process; 
	ULONG pObjectType; 
	ULONG ObjectTypeAddress; 

	if (VALIDpage(i- GetPlantformDependentInfo(PEB_OFFSET)) != VALID){ 
		return FALSE; 
	} 

	ObjectTypeAddress = i - GetPlantformDependentInfo(PEB_OFFSET) - OBJECT_HEADER_SIZE + OBJECT_TYPE_OFFSET ;

	if (VALIDpage(ObjectTypeAddress) == VALID){ 
		pObjectType = *(PULONG)ObjectTypeAddress; 
	}else{ 
		return FALSE; 
	} 

	if (pObjectTypeProcess == pObjectType){ //確定ObjectType是Process類型
		return TRUE; 
	} 
	return FALSE; 
} 
////////////////////////////////////////////////////////////////////
#define		DWORD	unsigned long

NTSTATUS
MyDeviceControl (
    IN PDEVICE_OBJECT   DeviceObject,
    IN PIRP             Irp
    )
{

    PIO_STACK_LOCATION  io_stack;
    NTSTATUS            status;

	Irp->IoStatus.Information = 0;
    io_stack = IoGetCurrentIrpStackLocation(Irp);

	if (io_stack->MajorFunction==IRP_MJ_DEVICE_CONTROL) 
	{
		switch (io_stack->Parameters.DeviceIoControl.IoControlCode)
		{
		case IOCTL_GETPROCESSPTR:
			{
			 	EnumProcess();
			//	EnumProcess2();
				RtlCopyMemory((unsigned char*)Irp->UserBuffer, (unsigned char*)&nProcessCount, sizeof(DWORD));
				RtlCopyMemory((unsigned char*)Irp->UserBuffer+sizeof(DWORD), (unsigned char*)pProcessPtr, nProcessCount*sizeof(Processinfo));
				Irp->IoStatus.Information = nProcessCount*sizeof(Processinfo)+sizeof(DWORD);
			}
		}
	}
	Irp->IoStatus.Status = STATUS_SUCCESS;
	IoCompleteRequest(Irp, IO_NO_INCREMENT);
	return STATUS_SUCCESS;
}

//---------------------------------------------------------------------- 
// 
// GetProcessNameOffset 
// 
// In an effort to remain version-independent, rather than using a 
// hard-coded into the KPEB (Kernel Process Environment Block), we 
// scan the KPEB looking for the name, which should match that 
// of the GUI process 
// 
//---------------------------------------------------------------------- 
ULONG GetProcessNameOffset() 
{ 
    PEPROCESS       curproc; 
    int             i; 
    DbgPrint(("GetProcessNameOffset\n")); 
    curproc = PsGetCurrentProcess(); 

    // 
    // Scan for 12KB, hopping the KPEB never grows that big! 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区剧情av在线| 精品在线一区二区三区| 国产视频不卡一区| 日韩精品在线一区二区| 欧美一级片在线| 日韩欧美一区在线| 欧美精品一区二区精品网| 日韩一级片在线播放| 日韩欧美电影一区| 欧美大胆人体bbbb| 国产日产精品一区| 亚洲色大成网站www久久九九| 中文字幕日韩欧美一区二区三区| 国产欧美一区二区精品婷婷| 一区二区中文字幕在线| 一区二区不卡在线播放| 三级精品在线观看| 久久99精品一区二区三区三区| 国内精品第一页| va亚洲va日韩不卡在线观看| 色视频一区二区| 欧美狂野另类xxxxoooo| 精品欧美一区二区在线观看| 国产片一区二区| 亚洲国产精品久久久久秋霞影院| 日本欧美肥老太交大片| 国产精品一区二区在线播放| 一本色道综合亚洲| 欧美成人三级在线| 国产精品久久久99| 欧美a一区二区| 成人av资源网站| 91精品国产入口| 中文字幕人成不卡一区| 亚洲va韩国va欧美va| 国产乱码字幕精品高清av| 色噜噜狠狠色综合欧洲selulu| 91麻豆精品国产91久久久久 | 欧美日韩大陆一区二区| 久久综合狠狠综合| 亚洲在线一区二区三区| 国产综合久久久久久鬼色 | 精品久久久久久久久久久久久久久 | 一本大道av伊人久久综合| 精品精品欲导航| 伊人婷婷欧美激情| 国产成人在线色| 91精品国产色综合久久不卡电影| 国产女同性恋一区二区| 蜜桃一区二区三区在线| 欧美亚洲另类激情小说| 国产精品免费丝袜| 国产精品综合视频| 91精品国产乱| 亚洲大片免费看| 一本一道综合狠狠老| 国产亚洲精品aa| 黑人巨大精品欧美一区| 91精品国产麻豆| 日本特黄久久久高潮| 欧美午夜电影在线播放| 国产精品久久看| 国产精品一线二线三线精华| 精品奇米国产一区二区三区| 日韩成人伦理电影在线观看| 在线观看精品一区| 亚洲精品免费播放| 99国产欧美另类久久久精品| 久久久久99精品一区| 国产在线不卡视频| 久久久久久久久久久久电影 | 亚洲在线观看免费视频| 色综合一区二区| 中文字幕亚洲不卡| 色偷偷88欧美精品久久久| 中文字幕一区不卡| 色综合天天综合网国产成人综合天 | 欧美性色黄大片| 亚洲曰韩产成在线| 在线播放国产精品二区一二区四区| 一个色在线综合| 欧美日韩精品系列| 老色鬼精品视频在线观看播放| 欧美本精品男人aⅴ天堂| 精品一二三四区| 欧美极品美女视频| 色婷婷精品大在线视频| 亚洲网友自拍偷拍| 91精品在线麻豆| 国内精品视频666| 国产欧美一区二区三区在线看蜜臀 | 成人午夜视频福利| 亚洲人成精品久久久久久| 在线观看日韩av先锋影音电影院| 亚洲一区二区三区在线播放| 欧美一区二区在线播放| 久88久久88久久久| 自拍偷拍亚洲激情| 欧美日韩色综合| 精品无人码麻豆乱码1区2区| 中文av一区特黄| 欧美日韩成人一区| 国产激情视频一区二区三区欧美| 成人免费在线视频| 欧美一区二区久久久| 成人丝袜高跟foot| 亚洲不卡一区二区三区| 久久久不卡网国产精品二区| 色婷婷亚洲精品| 国产老妇另类xxxxx| 亚洲影视资源网| 国产日韩精品一区二区浪潮av | 欧美激情在线免费观看| 欧美日本一区二区在线观看| 国产精品一区二区三区网站| 亚洲激情在线激情| 国产日韩精品一区二区三区| 欧美视频三区在线播放| 国产成人免费视频一区| 舔着乳尖日韩一区| 亚洲丝袜精品丝袜在线| 26uuu国产日韩综合| 欧美三级电影网站| 99精品国产热久久91蜜凸| 精一区二区三区| 性做久久久久久免费观看| 亚洲欧美在线另类| 久久久久久久国产精品影院| 欧美日韩精品三区| 色婷婷国产精品久久包臀| 懂色av一区二区夜夜嗨| 久久精品国产一区二区三| 亚洲va国产天堂va久久en| 亚洲欧美另类久久久精品 | 色天天综合久久久久综合片| 国内欧美视频一区二区| 麻豆精品一区二区av白丝在线 | 日韩欧美成人一区二区| 在线电影国产精品| 欧美性三三影院| 日本韩国欧美三级| 91在线国产福利| 不卡的av电影| av日韩在线网站| 不卡av在线网| 91亚洲国产成人精品一区二区三| 国产在线一区观看| 国产美女娇喘av呻吟久久| 精品伊人久久久久7777人| 日韩电影免费一区| 日韩国产精品大片| 蜜臀久久99精品久久久久宅男| 亚洲成av人在线观看| 日韩中文字幕一区二区三区| 亚洲一区二区欧美| 日本午夜一本久久久综合| 美腿丝袜一区二区三区| 美女任你摸久久| 精品一区二区日韩| 国产电影一区在线| 成人av资源在线| 色婷婷激情一区二区三区| 欧美日韩一区三区四区| 欧美日韩中文另类| 日韩精品最新网址| 国产亚洲短视频| 亚洲欧美国产77777| 一区二区三区在线免费视频| 一区二区三区欧美视频| 日韩在线一区二区三区| 国产一区二区电影| 色综合天天综合狠狠| 欧美无砖砖区免费| 欧美tickling挠脚心丨vk| 国产三级欧美三级| 亚洲一二三区在线观看| 免费成人小视频| av成人动漫在线观看| 欧美三级蜜桃2在线观看| 日韩精品一区二区三区中文不卡| 国产女同性恋一区二区| 亚洲综合成人在线视频| 免费高清在线视频一区·| 国产精品综合一区二区| 欧美亚洲另类激情小说| 2023国产精华国产精品| 中文字幕一区二区三中文字幕| 香蕉乱码成人久久天堂爱免费| 极品少妇xxxx精品少妇| 在线观看免费亚洲| 欧美精品一区二区三区视频 | 日韩欧美不卡一区| **网站欧美大片在线观看| 免费成人在线观看| 色噜噜狠狠一区二区三区果冻| 精品免费日韩av| 亚洲网友自拍偷拍| 不卡一区中文字幕| 久久亚洲一区二区三区四区| 亚洲欧美另类久久久精品|