2020腾讯游戏安全技术初赛pc客户端安全R0

参赛网址:

1、2020腾讯游戏技术竞赛

 

题目要求:

初赛ring0题目:(本题共5分)

DriverDemo.sys是一个驱动程序,它内置了一些限制。

1, 不能篡改该文件,尝试使驱动成功加载。(3分)

2, 该驱动程序成功加载后,突破它的限制,但不允许patch文件或内存,使它成功打印出(用dbgview可接受)调试信息"hello world!".(2分)

请以文档方式,详细描述解题过程,如涉及编写程序,必须提供源代码。

驱动未签名,需要设置Windows 10高级启动选项,禁用驱动程序强制签名后方可答题,支持使用虚拟机。

 

实操:

1、dump驱动

bp MmGetSystemRoutineAddress然后再用.writemem指令将内存写到文件

然后得到最终的dump文件

 

2、不能篡改该文件,尝试使驱动成功加载

1、调用KdDebuggerEnabled关闭内核调试(Windbg动态调试直接跳过即可)

2、检查注册表路径\\REGISTRY\\MACHINE\\SOFTWARE\\AppDataLow\\Tencent\\{61B942F7-A946-4585-B624-B2C0228FFEBC}路径下的Key键名的键值为1表示合法此时驱动正常执行加载。

3、显示调试信息"hello world!"

后面的代码就是创建事件

KeResetEvent调用指定的事件对象重置为无信号状态

然后创建线程等待事件收到信号输出:hello world

结论只要我们调用KeSetEvent设置为有信号即可

 

4、代码编写

逻辑:

1、用IoCreateNotificationEvent 打开事件对象

2、调用KeSetEvent设置信号

#include <ntddk.h>


NTSTATUS DriverNormalDeallDispatch(struct _DEVICE_OBJECT* DeviceObject, struct _IRP* Irp)
{
	UNREFERENCED_PARAMETER(DeviceObject);
	Irp->IoStatus.Information = STATUS_SUCCESS;

	IoCompleteRequest(Irp, IO_NO_INCREMENT);
	return STATUS_SUCCESS;
}

VOID DriverUnload(IN PDRIVER_OBJECT DriverObject)
{
	UNREFERENCED_PARAMETER(DriverObject);

	KdPrint(("卸载成功\t\n"));
	return;

}
NTSTATUS DriverEntry(
	IN PDRIVER_OBJECT  DriverObject,		//代表本驱动的驱动对象
	IN PUNICODE_STRING RegistryPath		//驱动的路径,在注册表中
)
{
	UNICODE_STRING EventName = { 0 };
	UNREFERENCED_PARAMETER(RegistryPath);
	//卸载函数
	DriverObject->DriverUnload = DriverUnload;
	//1、通讯函数、创建设备、符号链接、初始化导出接口
	for (size_t i = 0; i < IRP_MJ_MAXIMUM_FUNCTION; i++)
	{
		DriverObject->MajorFunction[i] = DriverNormalDeallDispatch;
	}

	RtlInitUnicodeString(&EventName, L"\\BaseNamedObjects\\tp2020");
	HANDLE hEvent = 0;
	//如果事件对象已经存在,则 IoCreateNotificationEvent 只是打开事件对象。 
	PRKEVENT pEvent = IoCreateNotificationEvent(&EventName, &hEvent);
	if (pEvent)
	{
		KeSetEvent(pEvent, 0, 0);
	}
	else
	{
		KdPrint(("IoCreateNotificationEvent Error\t\n"));
	}
	KdPrint(("驱动初始化成功\t\n"));
	return STATUS_SUCCESS;
}

5、最终效果

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值