登录  | 立即注册

游客您好!登录后享受更多精彩

查看: 47|回复: 2

驱动开发与系统原理-驱动断链隐藏

[复制链接]

90

主题

-6

回帖

112

积分

网站编辑

积分
112
发表于 6 天前 | 显示全部楼层 |阅读模式

补充

pDriverObject->DriverSection实际指向的是下面这个结构,但是微软并没有导出该结构体,需要我们自己定义使用

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; union { LIST_ENTRY HashLinks; struct { PVOID SectionPointer; ULONG CheckSum; }; }; union { ULONG TimeDateStamp; PVOID LoadedImports; }; PVOID EntryPointActivationContext; PVOID PatchInformation; LIST_ENTRY ForwarderLinks; LIST_ENTRY ServiceTagLinks; LIST_ENTRY StaticLinks; } LDR_DATA_TABLE_ENTRY, * PLDR_DATA_TABLE_ENTRY; 操作

驱动也是一个双向链表,我们可以效仿之前断链隐藏进程的方式进行断链

但是我们在断链该驱动的时候,需要将该驱动对象的相关属性进行重置设置,如果直接置0,会发生蓝屏,因为我们正在使用该驱动

因此我们可以挂一个系统线程,对该驱动进行操作

include<ntifs.h>

include<intrin.h>

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; union { LIST_ENTRY HashLinks; struct { PVOID SectionPointer; ULONG CheckSum; }; }; union { ULONG TimeDateStamp; PVOID LoadedImports; }; PVOID EntryPointActivationContext; PVOID PatchInformation; LIST_ENTRY ForwarderLinks; LIST_ENTRY ServiceTagLinks; LIST_ENTRY StaticLinks; } LDR_DATA_TABLE_ENTRY, * PLDR_DATA_TABLE_ENTRY;

VOID DriverUnload(PDRIVER_OBJECT pDriverObject) {

DbgPrint("Unload Driver Success! ");

} VOID ThreadCallBackHide(PVOID Context) { PDRIVER_OBJECT pDriverObject = Context; PLDR_DATA_TABLE_ENTRY HeaderNode = &((PLDR_DATA_TABLE_ENTRY)pDriverObject->DriverSection)->InLoadOrderLinks; RemoveEntryList(HeaderNode); pDriverObject->DriverSection = 0;//对驱动中的一些属性进行重置操作 pDriverObject->Size = 0; pDriverObject->Type = 0; }

NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING pRegPath) { DbgPrint("Load Driver Success!"); HANDLE hThread = NULL; PsCreateSystemThread(&hThread, THREAD_ALL_ACCESS, NULL, NULL, NULL, ThreadCallBackHide, pDriverObject); return STATUS_SUCCESS; } 由于我们隐藏了该驱动,所以我们的卸载函数就会失效,同时PCHUNTER也检测不到该驱动

未加载

已加载

0

主题

3

回帖

18

积分

新手上路

积分
18
发表于 5 天前 | 显示全部楼层
66666666666
回复

使用道具 举报

0

主题

68

回帖

110

积分

注册会员

积分
110
发表于 前天 10:54 | 显示全部楼层
谢谢分享支持楼主
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|断点社区 |网站地图

GMT+8, 2025-5-13 08:02 , Processed in 0.096303 second(s), 26 queries , Yac On.

Powered by XiunoBBS

Copyright © 2001-2025, 断点社区.

快速回复 返回顶部 返回列表