断链隐藏自身模块方法一12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152//https://developer.aliyun.com/article/1061479//驱动开发:断链隐藏驱动程序自身#include <ntifs.h>HANDLE hThread;VOID ThreadRun(PVOID StartContext);VOID UnDriver(PDRIVER_OBJECT driver){ DbgPrint(("Uninstall Driver Is OK \n"));}NTSTATUS DriverEntry(IN PDRIVER_OBJECT Driver, PUNICODE_STRING RegistryPath){ DbgPrint(("hello lyshark \n")); PLIST_ENTRY pModuleList; pModuleList = Driver->DriverSection; // 前一个模块的Flink=本模块的Flink pModuleList->Blink->Flink = pModuleList->Flink; // 前一个模块的Blink=本模块的Blink pModuleList->Flink->Blink = pModuleList->Blink; PsCreateSystemThread(&hThread, GENERIC_ALL, NULL, NULL, NULL, ThreadRun, Driver); Driver->DriverUnload = UnDriver; return STATUS_SUCCESS;}VOID ThreadRun(PVOID StartContext){ LARGE_INTEGER times; PDRIVER_OBJECT pDriverObject; // 等待3秒 单位是纳秒 times.QuadPart = -30 * 1000 * 1000; KeDelayExecutionThread(KernelMode, FALSE, ×); pDriverObject = (PDRIVER_OBJECT)StartContext; // 修改模块信息 pDriverObject->DriverSize = 0; pDriverObject->DriverSection = NULL; pDriverObject->DriverExtension = NULL; pDriverObject->DriverStart = NULL; pDriverObject->DriverInit = NULL; pDriverObject->FastIoDispatch = NULL; pDriverObject->DriverStartIo = NULL; ZwClose(hThread);} 断链隐藏自身模块方法二123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566#include <ntifs.h>#include "function.h"#define Log(X) DbgPrint("qi:"X##)VOID EnumDriver(PDRIVER_OBJECT pdriver);VOID HideDriver(PDRIVER_OBJECT pdriver);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; LIST_ENTRY HashLinks; ULONG TimeDateStamp;} LDR_DATA_TABLE_ENTRY, * PLDR_DATA_TABLE_ENTRY;NTSTATUS DriverUnload(PDRIVER_OBJECT pdriver){ Log("unload...\n"); return STATUS_SUCCESS;}NTSTATUS DriverEntry(PDRIVER_OBJECT pdriver, PUNICODE_STRING path){ pdriver->DriverUnload = DriverUnload; Log("loading...\n"); EnumDriver(pdriver); HideDriver(pdriver); //驱动的一些信息填为空可以彻底隐藏 /* pdriver->DriverStart = 0; pdriver->DriverSize = 0; pdriver->Type = 0; pdriver->Size = 0; pdriver->DeviceObject = 0; pdriver->DriverExtension = 0; */ return STATUS_SUCCESS;}VOID EnumDriver(PDRIVER_OBJECT pdriver){ PLDR_DATA_TABLE_ENTRY ldr = (PLDR_DATA_TABLE_ENTRY)pdriver->DriverSection; PLDR_DATA_TABLE_ENTRY head = ldr; do { DebugMessage("%p,%wZ\n", ldr->DllBase, &ldr->BaseDllName); ldr = (PLDR_DATA_TABLE_ENTRY)ldr->InLoadOrderLinks.Flink; } while (ldr != head); return;}VOID HideDriver(PDRIVER_OBJECT pdriver){ PLDR_DATA_TABLE_ENTRY ldr = (PLDR_DATA_TABLE_ENTRY)pdriver->DriverSection; (PLDR_DATA_TABLE_ENTRY)ldr->InLoadOrderLinks.Flink->Blink = ldr->InLoadOrderLinks.Blink; (PLDR_DATA_TABLE_ENTRY)ldr->InLoadOrderLinks.Flink->Blink = ldr->InLoadOrderLinks.Blink;}