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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? restoreshadow.c

?? Ring0下恢復SSDT Shadow。
?? C
字號:
/*
RestoreShadow.C
Author: <your name>
Last Updated: 2007-07-06

This framework is generated by EasySYS 0.3.0 Modify
This template file is copying from QuickSYS 0.3.0 written by Chunhua Liu
//=============================================
Modified by PLK_XiaoWei[0GiNr]
http://www.0GiNr.com
//=============================================
*/
#include <ntddk.h>
#include "RestoreShadow.h"
#include "dbghelp.h"
#include "LDasm.h"

NTKERNELAPI
NTSTATUS
KeAddSystemServiceTable(
			IN PULONG_PTR Base,
			IN PULONG Count OPTIONAL,
			IN ULONG Limit,
			IN PUCHAR Number,
			IN ULONG Index
			);

typedef struct _KSERVICE_TABLE_DESCRIPTOR
{
	PULONG_PTR	Base;
	PULONG	Count;
	ULONG	Limit;
	PUCHAR	Number;
}
KSERVICE_TABLE_DESCRIPTOR, *PKSERVICE_TABLE_DESCRIPTOR;

typedef struct _LDR_DATA_TABLE_ENTRY
{
	LIST_ENTRY InLoadOrderLinks;
	LIST_ENTRY InMemoryOrderLinks;
	LIST_ENTRY InInitializationOrderLinks;
	PVOID DllBase;
	PVOID EntryPoint;
	ULONG SizeOfImage;
	UNICODE_STRING FullDllName;
	UNICODE_STRING BaseDllName;
	ULONG Flags;
	USHORT LoadCount;
	USHORT TlsIndex;
	union {
		LIST_ENTRY HashLinks;
		struct
		{
			PVOID SectionPointer;
			ULONG CheckSum;
		};
	};
	union {
		struct
		{
			ULONG TimeDateStamp;
		};
		struct
		{
			PVOID LoadedImports;
		};
	};
	struct _ACTIVATION_CONTEXT * EntryPointActivationContext;
	PVOID PatchInformation;
}LDR_DATA_TABLE_ENTRY, *PLDR_DATA_TABLE_ENTRY;



PKSERVICE_TABLE_DESCRIPTOR KeServiceDescriptorTableShadow = NULL;

PVOID	pWin32kBase = NULL;

//===========================================
NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObj, PUNICODE_STRING pRegistryString);
NTSTATUS DispatchCreate(PDEVICE_OBJECT pDevObj, PIRP pIrp);
NTSTATUS DispatchClose(PDEVICE_OBJECT pDevObj, PIRP pIrp);
VOID DriverUnload(PDRIVER_OBJECT pDriverObj);
#ifdef ALLOC_PRAGMA
#pragma alloc_text(INIT, DriverEntry)
#pragma alloc_text(PAGE, DispatchCreate)
#pragma alloc_text(PAGE, DispatchClose)
#pragma alloc_text(PAGE, DriverUnload)
#endif // ALLOC_PRAGMA 
//////////////////////////////////////////////////////////////////////////
VOID GetWin32kBase(PDRIVER_OBJECT pDriverObj);
VOID GetSSDTShadowBase();
NTSTATUS RestoreShadow();
ULONG RVAToRaw(PVOID lpBase,ULONG VirtualAddress);
//==========================================
NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObj, PUNICODE_STRING pRegistryString)
{
	NTSTATUS status = STATUS_SUCCESS;
	UNICODE_STRING ustrLinkName;
	UNICODE_STRING ustrDevName;
	PDEVICE_OBJECT pDevObj;

	dprintf("DriverEntry: %S\n", pRegistryString->Buffer);

	// Create dispatch points for device control, create, close.
	pDriverObj->MajorFunction[IRP_MJ_CREATE] = DispatchCreate;
	pDriverObj->MajorFunction[IRP_MJ_CLOSE] = DispatchClose;
	pDriverObj->DriverUnload = DriverUnload;
	//

	RtlInitUnicodeString(&ustrDevName, DEVICE_NAME);

	status = IoCreateDevice(pDriverObj,
		0,
		&ustrDevName,
		FILE_DEVICE_UNKNOWN,
		0,
		FALSE,
		&pDevObj);

	dprintf("Device Name %S", ustrDevName.Buffer);

	if (!NT_SUCCESS(status))
	{
		dprintf("IoCreateDevice = 0x%x\n", status);
		return status;
	}


	RtlInitUnicodeString(&ustrLinkName, LINK_NAME);

	status = IoCreateSymbolicLink(&ustrLinkName, &ustrDevName);
	if (!NT_SUCCESS(status))
	{
		dprintf("IoCreateSymbolicLink = 0x%x\n", status);
		IoDeleteDevice(pDevObj);
		return status;
	}

	dprintf("SymbolicLink:%S", ustrLinkName.Buffer);

	GetWin32kBase(pDriverObj);
	GetSSDTShadowBase();
	dprintf("Win32k Base : 0x%X",pWin32kBase);
	dprintf("KeServiceDescriptorTableShadow : 0x%X", KeServiceDescriptorTableShadow);

	return STATUS_SUCCESS;
}


VOID DriverUnload(PDRIVER_OBJECT pDriverObj)
{
	UNICODE_STRING strLink;
	RtlInitUnicodeString(&strLink, LINK_NAME);
	//
	// Delete the symbolic link
	//
	IoDeleteSymbolicLink(&strLink);
	//
	// Delete the device object
	//
	IoDeleteDevice(pDriverObj->DeviceObject);
	dprintf("Unloaded\n");
}

NTSTATUS DispatchCreate(PDEVICE_OBJECT pDevObj, PIRP pIrp)
{
	RestoreShadow();
	pIrp->IoStatus.Status = STATUS_SUCCESS;
	pIrp->IoStatus.Information = 0;
	dprintf("IRP_MJ_CREATE\n");
	IoCompleteRequest(pIrp, IO_NO_INCREMENT);
	return STATUS_SUCCESS;
}

NTSTATUS DispatchClose(PDEVICE_OBJECT pDevObj, PIRP pIrp)
{
	pIrp->IoStatus.Status = STATUS_SUCCESS;
	pIrp->IoStatus.Information = 0;
	dprintf("IRP_MJ_CLOSE\n");
	IoCompleteRequest(pIrp, IO_NO_INCREMENT);
	return STATUS_SUCCESS;
}


VOID GetSSDTShadowBase()
{
	UCHAR *cPtr;
	UCHAR *pOpcode;
	ULONG Length;
	for (cPtr = (PUCHAR)KeAddSystemServiceTable;
		cPtr < (PUCHAR)KeAddSystemServiceTable + PAGE_SIZE;
		cPtr += Length)
	{
		Length = SizeOfCode(cPtr, &pOpcode);

		if (!Length) break;

		if ( *(PUSHORT)cPtr == 0x888D )
		{
			KeServiceDescriptorTableShadow = (PKSERVICE_TABLE_DESCRIPTOR)(*(ULONG *)((ULONG)pOpcode + 2));
			break;
		}
	}
}

VOID GetWin32kBase(PDRIVER_OBJECT pDriverObj)
{
	PLIST_ENTRY pList = NULL;
	PLDR_DATA_TABLE_ENTRY Ldr = NULL;
	pList = ( (PLIST_ENTRY)pDriverObj->DriverSection )->Flink;
	do {
		Ldr = CONTAINING_RECORD(
			pList,
			LDR_DATA_TABLE_ENTRY,
			InLoadOrderLinks);
		if (Ldr->EntryPoint &&
			Ldr->FullDllName.Buffer) {
				if ( !_wcsicmp(Ldr->FullDllName.Buffer, L"\\systemroot\\system32\\win32k.sys") ) {
					//比較模塊名字,應(yīng)該比較FullDllName,單單比較BaseDllName很可能會遇到同名文件。
					pWin32kBase = Ldr->DllBase;//保存模塊基址
					break;
				}
		}
		pList = pList->Flink;//下一個鏈表
	} while ( pList != ((LIST_ENTRY*)pDriverObj->DriverSection)->Flink );
}


NTSTATUS RestoreShadow()
{
	NTSTATUS status;
	HANDLE hFile;//文件句柄
	OBJECT_ATTRIBUTES ObjAttr;
	UNICODE_STRING ustrWin32k;
	IO_STATUS_BLOCK ioStatus;
	ULONG ulShadowRaw = 0;
	ULONG ulShadowBase = 0;
	PVOID PoolArea = NULL;
	FILE_POSITION_INFORMATION fpi;
	LARGE_INTEGER Offset;
	ULONG OrigAddress = 0;
	ULONG CurAddress = 0;
	ULONG i = 0;
	ULONG ulCount = 0;
	PULONG pAddr;

	if ( pWin32kBase == NULL ||
		KeServiceDescriptorTableShadow == NULL)
	{
		dprintf("Error.");
		return STATUS_UNSUCCESSFUL;
	}

	ulCount = KeServiceDescriptorTableShadow[1].Limit;//Linit就是表中函數(shù)的個數(shù)

	dprintf("Count Of Shadow : %d\n", ulCount );

	ulShadowBase = *(ULONG*)&KeServiceDescriptorTableShadow[1].Base;//得到基址

	dprintf("ulShadowBase = 0x%X\n",ulShadowBase);

	ulShadowRaw = ulShadowBase - (ULONG)pWin32kBase;
	//ulShadowRaw = RVAToRaw(pWin32kBase,ulShadowBase);

	dprintf("ulShadowRaw = 0x%X\n",ulShadowRaw);

	RtlInitUnicodeString(&ustrWin32k, L"\\SystemRoot\\System32\\win32k.sys");

	PoolArea = ExAllocatePool( PagedPool, sizeof(ULONG) * ulCount );
	//分配空間,用于保存讀取到的數(shù)據(jù),因為每個地址的長度sizeof(ULONG),個數(shù)是ulCount,所以相乘

	if (!PoolArea) {
		dprintf("PoolArea is null\n");
		return STATUS_UNSUCCESSFUL;
	}

	RtlZeroMemory(&ObjAttr, sizeof(ObjAttr) );

	InitializeObjectAttributes(
		&ObjAttr,
		&ustrWin32k,
		OBJ_KERNEL_HANDLE | OBJ_CASE_INSENSITIVE,
		NULL,
		NULL);
	//打開文件
	status = IoCreateFile(
		&hFile,
		FILE_READ_ATTRIBUTES,
		&ObjAttr,
		&ioStatus,
		0,
		FILE_ATTRIBUTE_NORMAL,
		FILE_SHARE_READ,
		FILE_OPEN,
		0,
		NULL,
		0,
		0,
		NULL,
		IO_NO_PARAMETER_CHECKING);

	if ( !NT_SUCCESS(status) ) {
		dprintf("IoCreateFile Error : 0x%X", status);
		goto __exit;
	}

	//設(shè)置文件偏移
	Offset.LowPart = ulShadowRaw;
	Offset.HighPart = 0;
	//開始讀取數(shù)據(jù)
	status = ZwReadFile (
		hFile,
		NULL,
		NULL,
		NULL,
		&ioStatus,
		PoolArea,
		ulCount*sizeof(ULONG),
		&Offset,
		NULL);

	if ( !NT_SUCCESS(status) ) {
		dprintf("ZwReadFile Error : 0x%X");
		goto __exit;
	}

	pAddr = (PULONG)PoolArea;
	//比較原始地址與當前的地址并且輸出調(diào)試
	for (i=0;i<ulCount;i++) {
		OrigAddress = *pAddr;//指向原始地址
		CurAddress = KeServiceDescriptorTableShadow[1].Base[i];//讀取當前地址
		if ( OrigAddress != CurAddress ) {
			dprintf("ID:%-3d.OrigAddr : 0x%X CurAddr : 0x%X---Hooked!\n",i,OrigAddress,CurAddress);
		} else {
			dprintf("ID:%-3d.OrigAddr : 0x%X.CurAddr : 0x%X\n",i,OrigAddress,CurAddress);
		}
		pAddr++;//指針指向下一個函數(shù)
	}

__exit:
	if (PoolArea) {
		ExFreePool(PoolArea);
		//釋放空間
	}
	if (hFile) {
		ZwClose(hFile);
		//關(guān)閉句柄
	}
	return status;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产色一区二区| 蜜臀国产一区二区三区在线播放 | 视频一区二区三区入口| 免费国产亚洲视频| 色综合久久综合| 精品国产一区二区三区四区四| 中文字幕视频一区二区三区久| 日韩电影在线一区二区| 色综合久久九月婷婷色综合| 久久一区二区三区四区| 午夜婷婷国产麻豆精品| 91首页免费视频| 337p粉嫩大胆噜噜噜噜噜91av | 国产欧美一区二区精品仙草咪| 一区二区在线观看av| 成人国产在线观看| 久久综合资源网| 免费黄网站欧美| 69堂国产成人免费视频| 亚洲自拍另类综合| 一本色道综合亚洲| 国产精品久久久久一区二区三区共| 九九**精品视频免费播放| 51精品国自产在线| 天天综合日日夜夜精品| 欧美体内she精视频| 亚洲与欧洲av电影| 在线亚洲欧美专区二区| 亚洲日本va在线观看| 成人av动漫网站| 国产精品久久久久久久蜜臀| 成人高清av在线| 国产精品亲子伦对白| 丁香婷婷综合色啪| 国产精品丝袜久久久久久app| 国产精品一二三四区| 久久久久久一二三区| 狠狠狠色丁香婷婷综合久久五月| 欧美刺激脚交jootjob| 久久99蜜桃精品| 26uuu亚洲婷婷狠狠天堂| 激情成人综合网| 久久影音资源网| 欧美大片免费久久精品三p| 日韩1区2区3区| 日韩三级免费观看| 国产乱码精品一区二区三区忘忧草| 久久久久久久综合日本| 国产不卡在线视频| 亚洲狼人国产精品| 欧美精品在线观看一区二区| 麻豆91精品91久久久的内涵| 久久天堂av综合合色蜜桃网| 成人自拍视频在线观看| 亚洲九九爱视频| 91精品国产色综合久久| 国产大陆a不卡| 亚洲欧美电影一区二区| 欧美日韩精品一区二区三区蜜桃 | 中文字幕精品—区二区四季| 成人午夜视频网站| 亚洲一区二区在线免费观看视频| 欧美一区二区三区系列电影| 国产福利一区在线| 亚洲精品一卡二卡| 欧美xxxx在线观看| 99久久精品免费看国产| 日韩成人av影视| 国产精品乱码一区二三区小蝌蚪| 欧美在线小视频| 狠狠色丁香婷婷综合久久片| **欧美大码日韩| 日韩一区二区三区在线| 91视频在线观看免费| 日韩高清国产一区在线| 日本一二三四高清不卡| 欧美另类久久久品| 丁香网亚洲国际| 另类成人小视频在线| 亚洲视频资源在线| 欧美精品一区男女天堂| 色综合天天性综合| 国产曰批免费观看久久久| 亚洲免费三区一区二区| 精品国产一区久久| 欧美三级日韩三级| 成人av第一页| 久久99国产精品麻豆| 亚洲一区二区精品视频| 欧美激情在线免费观看| 精品国产乱码久久久久久闺蜜| 欧美午夜视频网站| 色综合中文字幕国产| 激情综合亚洲精品| 日韩精品乱码免费| 亚洲国产欧美在线| 亚洲欧美另类久久久精品2019 | 欧美一区二区三区爱爱| 91网址在线看| 成人18视频在线播放| 久久成人免费网| 五月天激情综合网| 亚洲欧美国产77777| 国产精品久久久久久福利一牛影视 | 欧美三级中文字| 99精品久久久久久| 国产成人午夜高潮毛片| 国产一区二区三区不卡在线观看 | 色噜噜夜夜夜综合网| 成人免费电影视频| 国产91在线看| 高清beeg欧美| 成人涩涩免费视频| 国产91精品精华液一区二区三区| 国产在线精品一区二区不卡了| 麻豆精品一区二区三区| 免费的国产精品| 久久99精品国产麻豆婷婷 | 日韩免费成人网| 欧美一级电影网站| 欧美视频一区二区三区四区| 久久精品国产精品亚洲综合| 欧美日韩国产免费| 日本免费新一区视频| 日日噜噜夜夜狠狠视频欧美人| 亚洲成人av电影在线| 亚洲va中文字幕| 免费在线视频一区| 日韩不卡一二三区| 国产乱人伦偷精品视频免下载 | 久久成人18免费观看| 日本中文字幕一区| 激情都市一区二区| 粉嫩欧美一区二区三区高清影视| 成人精品免费看| 色猫猫国产区一区二在线视频| 欧美午夜电影一区| 91精品国产免费| 国产亚洲欧洲997久久综合| 中文字幕不卡在线| 亚洲一区在线看| 老司机精品视频在线| 成人一区二区在线观看| 欧美亚洲综合久久| 精品免费国产一区二区三区四区| 国产夜色精品一区二区av| 亚洲人成网站精品片在线观看 | 久99久精品视频免费观看| 国产a级毛片一区| 欧美三级电影一区| 精品久久久网站| 一区二区三区小说| 国产伦精品一区二区三区免费| 99re这里都是精品| 日韩欧美一区二区三区在线| 国产精品麻豆欧美日韩ww| 偷拍一区二区三区| www.欧美亚洲| 欧美一区二区在线免费播放| 中文字幕一区二区三区不卡| 奇米精品一区二区三区四区| 成人三级伦理片| 日韩一区二区三区在线观看| 国产精品网站在线观看| 奇米影视在线99精品| 91丨国产丨九色丨pron| 久久这里只有精品6| 亚洲尤物视频在线| 粗大黑人巨茎大战欧美成人| 日韩欧美色综合| 一区二区三区久久| 成人午夜在线免费| 日韩欧美国产综合| 亚洲国产精品一区二区久久恐怖片 | 极品尤物av久久免费看| 欧美丝袜丝交足nylons| 日韩理论片在线| 国产成人av电影免费在线观看| 91精品麻豆日日躁夜夜躁| 亚洲色图另类专区| 成人性生交大合| 久久嫩草精品久久久精品| 日韩福利电影在线| 欧美午夜精品一区二区三区| ㊣最新国产の精品bt伙计久久| 国产精品一区二区不卡| 欧美成人女星排名| 奇米亚洲午夜久久精品| 欧美日韩一区小说| 亚洲国产毛片aaaaa无费看| 色婷婷综合久久久中文一区二区| 中文字幕不卡在线观看| 成人午夜在线免费| 日本一区二区三区免费乱视频| 国产一区二区看久久| 日韩欧美电影在线| 久久草av在线| 久久久美女毛片| 成人夜色视频网站在线观看| 欧美极品aⅴ影院|