2020年腾讯游戏安全大赛PC端初赛

0x1 RING3 扫雷

先用PE查exe的text段偏移地址,然后加0x1da dump出内存

然后用开头特征码去dump文件里再dump出来

1

2

0x2 脚本对比

3

对比一下改了什么

4

可以发现原本是一个inc 自加

5

猜测是时间自加,全部nop后,就使用了咋瓦鲁多(时停)

6

第二个是点到雷之后结束,这里改成jmp跳过,直接无敌

0x3 RING0

先用Unicorn_PE(github)把文件dump出来,然后分析,注意在win7 x64上运行

8

代码除了基本的通信,其他功能反汇编出来了。

7

进入第一个关键函数,百度搜了这些api作用就是查找键项里有没有key键值为1

11

驱动成功加载

0x4 输出hello world

9

搜索字符串找到,发现是KeWaitForMutexObject等待前面的事件进入信号态,往前跟

10

发现就是外面这个函数进入了判断,同时看见上面的Event,原来如此

12

写一个驱动改变一下输出helloworld

0x5 代码

#include <ntddk.h>

VOID SetEvent() {
	UNICODE_STRING EventName = { 0 };
	HANDLE EventHandle = NULL;

	RtlInitUnicodeString(&EventName, L"\\BaseNamedObjects\\tp2020");
	PRKEVENT pEvent = IoCreateNotificationEvent(&EventName, &EventHandle);
	if (!pEvent)
	{
		DbgPrint("Set Faile\n");
	}
	KeSetEvent(pEvent, 0, FALSE);
}


VOID DriverUnload(PDRIVER_OBJECT Driver) {
	DbgPrint("驱动已经卸载");

}

NTSTATUS DriverEntry(PDRIVER_OBJECT Driver, PUNICODE_STRING pReg) {
	DbgPrint("驱动已经加载");
	SetEvent();
	Driver->DriverUnload = DriverUnload;
	return STATUS_SUCCESS;
}

0x6 总结

感谢战队的 Qfrost!!!q神指导我!!

放一个q神博客(滑稽)http://www.qfrost.com/

学习到了很多函数,api和工具。


文章作者: Blue
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Blue !
评论
  目录