-
-
[分享] 64位系统下7行代码隐藏驱动,不触发PG
-
发表于:
2018-8-25 00:54
12850
-
[分享] 64位系统下7行代码隐藏驱动,不触发PG
思路来源是CSDN的一位大佬:https://blog.csdn.net/zhuhuibeishadiao/article/details/75658816
不过他的文章中只提到了关键函数,没有贴出代码,于是乎,自己动手~
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[2];
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[IRP_MJ_DEVICE_CONTROL]函数中执行的),不知道是不是我注册了MiniFilter导致的-_-...
--------------------------------------------
好了,本小白继续去钻研WSK去了(⊙o⊙)…
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课