windows10驱动 x64--- 驱动实现隐藏驱动模块(五)

驱动实现隐藏驱动模块(五)

原理

每个驱动DriverObject->DriverSection存着个结构体LDR_DATA_TABLE_ENTRY
{
LIST_ENTRY InLoadOrderLinks;
LIST_ENTRY InMemoryOrderLinks;
LIST_ENTRY InInitializationOrderLinks;
PVOID DllBase;
PVOID EntryPoint;
ULONG64 SizeOfImage;
UNICODE_STRING FullDllName;
UNICODE_STRING BaseDllName;
}
双链表遍历前面已经文章已经很多次了

驱动代码 — 0环

#include "ntifs.h"
#include<wdm.h>

//extern PEPROCESS PsInitialSystemProcess;
NTSTATUS DriverUnload(PDRIVER_OBJECT DriverObject)
{
	DbgPrint("Driver Exit \r\n");
	return STATUS_SUCCESS;

}
typedef struct LDR_DATA_TABLE_ENTRY
{
	LIST_ENTRY InLoadOrderLinks;
	LIST_ENTRY InMemoryOrderLinks; 
	LIST_ENTRY InInitializationOrderLinks;
	PVOID DllBase;
	PVOID EntryPoint;
	ULONG64 SizeOfImage;
	UNICODE_STRING FullDllName;
	UNICODE_STRING BaseDllName;

}DriverSectionObject, * pDriverSectionObject;



NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING Regedit)
{
	
	pDriverSectionObject SectionObject = (pDriverSectionObject)DriverObject->DriverSection;
	PLIST_ENTRY bmpDriverList = (PLIST_ENTRY)SectionObject->InLoadOrderLinks.Flink;

	SectionObject = (pDriverSectionObject)bmpDriverList;

	pDriverSectionObject tmpSectionObject = SectionObject;


	UNICODE_STRING UniString1;
	WCHAR* string1 = L"MyDriverHello.sys";
	RtlInitUnicodeString(&UniString1,string1);
	DbgPrint("DriverName:%wZ\n", &UniString1);

	//遍历内核驱动
	for (;;)
	{
		bmpDriverList = bmpDriverList->Flink;
		SectionObject = (pDriverSectionObject)bmpDriverList;
		DbgPrint("DriverName:%wZ\n", &SectionObject->BaseDllName);
		RtlEqualUnicodeString(&SectionObject->BaseDllName, &UniString1, TRUE);
		//相等等于1  不相等为 0 返回是char类型
		if (tmpSectionObject == SectionObject)
		{
			DbgPrint("结尾了");
			break;
		}
		if(RtlEqualUnicodeString(&SectionObject->BaseDllName,&UniString1,TRUE))

		{
		
			//内核驱动隐藏
			bmpDriverList->Flink->Blink = bmpDriverList->Blink;
			bmpDriverList->Blink->Flink = bmpDriverList->Flink;
			//过滤掉头指针 重新遍历
			bmpDriverList = bmpDriverList->Flink;
			for (;;)
			{
				bmpDriverList = bmpDriverList->Flink;
				SectionObject = (pDriverSectionObject)bmpDriverList;
				DbgPrint("DriverName:%wZ\n", &SectionObject->BaseDllName);
				RtlEqualUnicodeString(&SectionObject->BaseDllName, &UniString1, TRUE);
				if (tmpSectionObject == SectionObject)
				{
					DbgPrint("结尾了");
					break;
				}
			}
			break;

		}
	
	}





	DriverObject->DriverUnload = DriverUnload;
	return STATUS_SUCCESS;
}

总结

隐藏驱动–>MyDriverHello.sys
驱动加载前:可以看到MyDriverHello.sys
在这里插入图片描述
驱动加载后:看不到MyDriverHello.sys
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
易语言辅助必备驱动保护模块 代码公开 透明 绝无暗装之类 ------------------------------ .版本 2 .子程序 关闭保护辅助进程, 逻辑型, 公开, 取消禁止结束并保护程序 .参数 进程ID, 整数型, 可空, 可空,默认取消自身,可用的进程_名取ID()获取进程ID, .子程序 关闭防各类调试, 逻辑型, 公开, 取消结束并保护程序 .参数 进程ID, 整数型, 可空, 可空,默认取消自身,可用的进程_名取ID()获取进程ID, .子程序 开启保护辅助进程, 逻辑型, 公开, 可禁止他人有意结束某程序,并保护程序不被注入,打开程序,支持所有系统,32,WIN764位都可以 .参数 进程ID, 整数型, 可空, 可空,默认保护自身,可用的进程_名取ID()获取进程ID, .子程序 开启防各类调试, 逻辑型, 公开, 可禁止他人有意,用CE,VE,ME,GE,内存工具和WPE等程序,打开程序,支持所有系统,32,WIN764位都可以 .参数 进程ID, 整数型, 可空, 可空,默认保护自身,可用的进程_名取ID()获取进程ID, .子程序 隐藏模块, 逻辑型, 公开, 隐藏模块 (GetModuleHandle (“隐藏.dll”)) .参数 模块基地址, 整数型 .子程序 郁金香取消隐藏进程, 逻辑型, 公开, 取消隐藏进程 暂时无法取消隐藏 .参数 进程ID, 整数型, 可空, 可空,默认取消自身,可用进程_名取ID()获取进程ID, .子程序 郁金香隐藏进程, 逻辑型, 公开, 隐藏进程,,支持32位,和64位WIn7,与所有系统请自行测试 .参数 进程ID, 整数型, 可空, 可空,默认隐藏自身,可用进程_名取ID()获取进程ID, .子程序 置格盘陷阱, 逻辑型, 公开 .子程序 置蓝屏陷阱, 逻辑型, 公开, 利用蓝屏代码 绝对值蓝屏 .子程序 置死机陷阱, 逻辑型, 公开 .子程序 置重启陷阱, 逻辑型, 公开, 绝对值重启 .DLL命令 GetModuleHandle, 整数型, "kernel32", "GetModuleHandleA", 公开 .参数 lpModuleName, 文本型 .DLL命令 RtlMoveMemory, 整数型, , "RtlMoveMemory", 公开, _写内存3 .参数 dest, 整数型, 传址 .参数 Source, 整数型 .参数 len, 整数型, , 4

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值