Qrimkiss 发表于 2020-3-22 20:25:54

64位系统下7行代码隐藏驱动,不触发PG。


思路来源是CSDN的一位大佬,不过他的文章中只提到了关键函数,没有贴出代码,于是乎,自己动手~

extern "C" NTSYSAPI NTSTATUS NTAPI ZwQuerySystemInformation(ULONG SystemInformationClass, PVOID SystemInformation, ULONG SystemInformationLength, PULONG ReturnLength);

typedef struct _KLDR_DATA_TABLE_ENTRY {
    LIST_ENTRY InLoadOrderLinks;
    PVOID ExceptionTable;
    ULONG ExceptionTableSize;
    PVOID GpValue;
    ULONG UnKnow;
    PVOID DllBase;
    PVOID EntryPoint;
    ULONG SizeOfImage;
    UNICODE_STRING FullDllName;
    UNICODE_STRING BaseDllName;
    ULONG Flags;
    USHORT LoadCount;
    USHORT __Unused5;
    PVOID SectionPointer;
    ULONG CheckSum;
    PVOID LoadedImports;
    PVOID PatchInformation;
} KLDR_DATA_TABLE_ENTRY, *PKLDR_DATA_TABLE_ENTRY;

typedef struct _SYSINFO {
    ULONG U;
    PVOID X;
    PVOID BaseAddress;
    PVOID Size;
} SYSINFO, *PSYSINFO;

typedef VOID(*_MiProcessLoaderEntry)(IN PKLDR_DATA_TABLE_ENTRY DataTableEntry, IN LOGICAL Insert);

VOID HideDriver(PDRIVER_OBJECT DriverObject, ULONG Offset) {
    ULONG NeededSize;
    PSYSINFO SysInfo = (PSYSINFO)&SysInfo;
    ZwQuerySystemInformation(11, NULL, 0, &NeededSize);
    SysInfo = (PSYSINFO)ExAllocatePool(PagedPool, NeededSize);
    ZwQuerySystemInformation(11, SysInfo, NeededSize, NULL);
    _MiProcessLoaderEntry MiProcessLoaderEntry = (_MiProcessLoaderEntry)((PUCHAR)SysInfo->BaseAddress + Offset);
    MiProcessLoaderEntry((PKLDR_DATA_TABLE_ENTRY)DriverObject->DriverSection, 0);
}

其中HideDriver函数就是主要代码啦,一共7行(诚实的楼主)。

第二个参数是版本偏移(其实就是硬编码= =我自己通过IDA找出来的)
Win7 32位是 0x761D7 ,Win7 64位是 0x16A1D0 ,Win10 64位是 0x18AD8 。

我根据多份系统样品的IDA分析,这个常量应该是不会变的,其中Win10的截至1809Preview(build 17713)暂未改变。

结构体KLDR_DATA_TABLE_ENTRY来自百度。
结构体SYSINFO为自创,网上找的定位ntoskrnl基址的代码都太繁琐或者兼容性差,so我自己改了一下~
在卸载驱动之前必须恢复隐藏,也就是再调用一次函数,第二个参数由0改成1。
我这个方法隐藏驱动后一切正常,不触发PG,可以与应用层通信,也可以FltRegisterFilter等。

但如果按照原文中说的执行DriverObject->DriverSection = NULL后会出问题(在MajorFunction函数中执行的),
不知道是不是我注册了MiniFilter导致的-_-...
--------------------------------------------
好了,本小白继续去钻研WSK去了(⊙o⊙)…

1003770559 发表于 2020-9-20 14:20:41

看到这么好的资源真是高兴,楼主辛苦了!
页: [1]
查看完整版本: 64位系统下7行代码隐藏驱动,不触发PG。