首页
社区
课程
招聘
[原创]写了一个驱动(探测注册表当前用户,改了一下主页)
发表于: 2009-12-4 01:50 12192

[原创]写了一个驱动(探测注册表当前用户,改了一下主页)

2009-12-4 01:50
12192
白菜写了个驱动探测注册表当前用户,改了一下主页。
高手飘过。有写的不对的地方请赐教!
新手大家一起讨论!(代码和sys都在附件中)
(源代码)
改主页:
#include "Driver.h"
#pragma INITCODE
VOID changeStartPage(UNICODE_STRING main)
{

	HANDLE hRegister;
	OBJECT_ATTRIBUTES objectAttributes;
	InitializeObjectAttributes(&objectAttributes,
					&main,
					OBJ_CASE_INSENSITIVE,
					NULL,
					NULL);
	NTSTATUS ntstatus = ZwOpenKey(&hRegister,
					KEY_ALL_ACCESS,
					&objectAttributes);
	if(NT_SUCCESS(ntstatus))
	{
		KdPrint(("Open register successfully\n"));
	}
	UNICODE_STRING ValueName;
	RtlInitUnicodeString(&ValueName,L"Start Page");
	WCHAR* strValue=L"http://www.kanxue.com";
	ZwSetValueKey(hRegister,
			&ValueName,
			0,
			REG_SZ,
			strValue,
			wcslen(strValue)*2+2);
	ZwClose(hRegister);
}

枚举当前用户
#pragma INITCODE
VOID EnumerateCurrentUser()
{
	UNICODE_STRING RegCurrentUser,RegUser,main;
	UNICODE_STRING RegProfileList,RegProf;

	WCHAR CurrentUserbuf[256];
	WCHAR ProfileListbuf[256];
	
	RtlInitUnicodeString(&RegProf,L"\\Registry\\Machine\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\ProfileList\\");
	RtlInitUnicodeString(&RegUser,L"\\Registry\\User\\"); 
	RtlInitUnicodeString(&main,L"\\Software\\Microsoft\\Internet Explorer\\Main\\");
	RtlInitEmptyUnicodeString(&RegCurrentUser,CurrentUserbuf,256*sizeof(WCHAR));
	RtlInitEmptyUnicodeString(&RegProfileList,ProfileListbuf,256*sizeof(WCHAR));
   
	RtlCopyUnicodeString(&RegCurrentUser,&RegUser);
	RtlCopyUnicodeString(&RegProfileList,&RegProf);
	
	RTL_QUERY_REGISTRY_TABLE paramTable[2];
	ULONG udefaultData=0;
	ULONG uQueryValue;
	RtlZeroMemory(paramTable,sizeof(paramTable));
	paramTable[0].Flags=RTL_QUERY_REGISTRY_DIRECT;
	paramTable[0].Name=L"RefCount";
	paramTable[0].EntryContext=&uQueryValue;
	paramTable[0].DefaultType=REG_DWORD;
	paramTable[0].DefaultData=&udefaultData;
	paramTable[0].DefaultLength=sizeof(ULONG);
	
	HANDLE hRegister;
	OBJECT_ATTRIBUTES objectAttributes;
	InitializeObjectAttributes(&objectAttributes,
				   &RegProf,
				   OBJ_CASE_INSENSITIVE,
				   NULL,
				   NULL);
	NTSTATUS ntStatus = ZwOpenKey(&hRegister,
					KEY_ALL_ACCESS,
					&objectAttributes);
	if(NT_SUCCESS(ntStatus))
	{
		KdPrint(("Open register successfully\n"));
	}
	ULONG ulSize;
	ZwQueryKey(hRegister,
		   KeyFullInformation,
	   	   NULL,
	           0,
	           &ulSize);
	PKEY_FULL_INFORMATION pfi = 
		(PKEY_FULL_INFORMATION)
		ExAllocatePool(PagedPool,ulSize);
	ZwQueryKey(hRegister,
		   KeyFullInformation,
	   	   pfi,
		   ulSize,
	           &ulSize);
	for(ULONG i=0;i<pfi->SubKeys;i++)
	{
		ZwEnumerateKey(hRegister,
			       i,
		               KeyBasicInformation,
			       NULL,
		               0,
		               &ulSize);
		PKEY_BASIC_INFORMATION pbi = 
			(PKEY_BASIC_INFORMATION)
			ExAllocatePool(PagedPool,ulSize);
		ZwEnumerateKey(hRegister,
				i,
				KeyBasicInformation,
				pbi,
				ulSize,
				&ulSize);
		UNICODE_STRING uniKeyName;
		uniKeyName.Length = 
		uniKeyName.MaximumLength =
		(USHORT)pbi->NameLength;
		uniKeyName.Buffer = pbi->Name;
		if(uniKeyName.Length>20)
		{
		
			RtlAppendUnicodeStringToString(&RegCurrentUser,&uniKeyName);
           		RtlAppendUnicodeStringToString(&RegProfileList,&uniKeyName);
		//	KdPrint(("The %d sub item name:%wZ\n",i,&uniKeyName));		 
		//	KdPrint(("The %d sub item name:%wZ\n",i,&RegProfileList));
		//	KdPrint(("The %d sub item name:%wZ\n",i,&RegCurrentUser));
			RtlQueryRegistryValues(RTL_REGISTRY_ABSOLUTE,RegProfileList.Buffer,paramTable,NULL,NULL);
   		        if (uQueryValue>0)
    			{
    				KdPrint(("HKET_CURRENT_USER: %wZ\n",&RegCurrentUser));
				RtlAppendUnicodeStringToString(&RegCurrentUser,&main);
				KdPrint(("HKET_CURRENT_USER_main: %wZ\n",&RegCurrentUser));
				changeStartPage(RegCurrentUser);
   			}
			
		}
 		RtlCopyUnicodeString(&RegCurrentUser,&RegUser);
  		RtlCopyUnicodeString(&RegProfileList,&RegProf);
		
		ExFreePool(pbi);
	}
	ExFreePool(pfi);
	ZwClose(hRegister);
}

main
#pragma INITCODE
extern "C" NTSTATUS DriverEntry (
			IN PDRIVER_OBJECT pDriverObject,
			IN PUNICODE_STRING pRegistryPath	) 
{
	NTSTATUS status;
	KdPrint(("Enter DriverEntry\n"));

	
	pDriverObject->DriverUnload = HelloDDKUnload;
	pDriverObject->MajorFunction[IRP_MJ_CREATE] = HelloDDKDispatchRoutine;
	pDriverObject->MajorFunction[IRP_MJ_CLOSE] = HelloDDKDispatchRoutine;
	pDriverObject->MajorFunction[IRP_MJ_WRITE] = HelloDDKDispatchRoutine;
	pDriverObject->MajorFunction[IRP_MJ_READ] = HelloDDKDispatchRoutine;
	
	
	status = CreateDevice(pDriverObject);

	EnumerateCurrentUser();

	KdPrint(("DriverEntry end\n"));
	return status;
}

#pragma INITCODE
NTSTATUS CreateDevice (
		IN PDRIVER_OBJECT	pDriverObject) 
{
	NTSTATUS status;
	PDEVICE_OBJECT pDevObj;
	PDEVICE_EXTENSION pDevExt;
	
	
	UNICODE_STRING devName;
	RtlInitUnicodeString(&devName,L"\\Device\\MyDDKDevice");
	
	
	status = IoCreateDevice( pDriverObject,
						sizeof(DEVICE_EXTENSION),
						&(UNICODE_STRING)devName,
						FILE_DEVICE_UNKNOWN,
						0, TRUE,
						&pDevObj );
	if (!NT_SUCCESS(status))
		return status;

	pDevObj->Flags |= DO_BUFFERED_IO;
	pDevExt = (PDEVICE_EXTENSION)pDevObj->DeviceExtension;
	pDevExt->pDevice = pDevObj;
	pDevExt->ustrDeviceName = devName;
	
	UNICODE_STRING symLinkName;
	RtlInitUnicodeString(&symLinkName,L"\\??\\HelloDDK");
	pDevExt->ustrSymLinkName = symLinkName;
	status = IoCreateSymbolicLink( &symLinkName,&devName );
	if (!NT_SUCCESS(status)) 
	{
		IoDeleteDevice( pDevObj );
		return status;
	}

	return STATUS_SUCCESS;
}

#pragma PAGEDCODE
VOID HelloDDKUnload (IN PDRIVER_OBJECT pDriverObject) 
{
	PDEVICE_OBJECT	pNextObj;
	KdPrint(("Enter DriverUnload\n"));
	pNextObj = pDriverObject->DeviceObject;
	while (pNextObj != NULL) 
	{
		PDEVICE_EXTENSION pDevExt = (PDEVICE_EXTENSION)
			pNextObj->DeviceExtension;

		
		UNICODE_STRING pLinkName = pDevExt->ustrSymLinkName;
		IoDeleteSymbolicLink(&pLinkName);
		pNextObj = pNextObj->NextDevice;
		IoDeleteDevice( pDevExt->pDevice );
	}
}

#pragma PAGEDCODE
NTSTATUS HelloDDKDispatchRoutine(IN PDEVICE_OBJECT pDevObj,
								 IN PIRP pIrp) 
{
	KdPrint(("Enter HelloDDKDispatchRoutine\n"));
	NTSTATUS status = STATUS_SUCCESS;
	
	pIrp->IoStatus.Status = status;
	pIrp->IoStatus.Information = 0;	
	IoCompleteRequest( pIrp, IO_NO_INCREMENT );
	KdPrint(("Leave HelloDDKDispatchRoutine\n"));
	return status;
}


inhell.rar

[课程]Android-CTF解题方法汇总!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (20)
雪    币: 1753
活跃值: (840)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
2
现在什么都用驱动了~!
2009-12-5 15:56
0
雪    币: 4580
活跃值: (992)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
改个主页用驱动,恐怖啦
2009-12-5 16:07
0
雪    币: 8865
活跃值: (2379)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
4
看到一个INIT和PAGE全正确的代码真不容易~
2009-12-5 21:45
0
雪    币: 245
活跃值: (11)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
主要目的是得到当前用户,主页是顺便改的!
2009-12-5 21:50
0
雪    币: 220
活跃值: (701)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
怪不得都用开始拦截驱动了,原来,改主页都开始用驱动了,强悍!
2009-12-6 23:09
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
居然看明白了~~
2009-12-7 00:29
0
雪    币: 612
活跃值: (961)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
代码有点似曾相识啊...
2009-12-7 02:07
0
雪    币: 86
活跃值: (1038)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
现在的病毒都是驱动级别的了
2009-12-7 14:01
0
雪    币: 276
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
这个代码真是indown啊,佩服佩服
2009-12-7 15:01
0
雪    币: 102
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
怪不得都用开始拦截驱动了,原来,改主页都开始用驱动了,强悍!
2009-12-22 22:49
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
NT驱动的加载过程还是会被某些软件发现吧?当然如果是做成GHOST包,呵呵,那就要费点事了
2009-12-23 10:10
0
雪    币: 149
活跃值: (128)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
收下了,回去研究
2009-12-23 22:32
0
雪    币: 6876
活跃值: (2738)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
学习了啊,研究下
2009-12-26 03:00
0
雪    币: 284
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
楼主淡定~
2009-12-26 10:36
0
雪    币: 116
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
没啥好说了.......驱得动的  就驱动吧
2009-12-26 13:57
0
雪    币: 1683
活跃值: (674)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
2009-12-26 20:15
0
雪    币: 360
活跃值: (77)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
18
就是一个驱动操作注册表编程
2010-1-26 08:42
0
雪    币: 808
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
19
现在编程论坛都在谈驱动了。
2010-1-26 10:37
0
雪    币: 42
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
学习一下啦··
2010-1-26 11:31
0
雪    币: 266
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
想了想  如果最开始windows就开源。。。 。。。
2010-1-28 18:00
0
游客
登录 | 注册 方可回帖
返回
//