首页
社区
课程
招聘
[原创]调试某驱动
发表于: 2008-8-27 20:49 13978

[原创]调试某驱动

2008-8-27 20:49
13978

调试某驱动

写个驱动,观察某驱动的运行,学学驱动而已。先注册映像加载通知例程。

PsSetLoadImageNotifyRoutine(LoadImageNotify);

VOID LoadImageNotify (
	PUNICODE_STRING FullImageName, 
	HANDLE ProcessId, 
	PIMAGE_INFO ImageInfo
	)
{
	ANSI_STRING	asImageName;
	PCHAR		Delimiter;
	NTSTATUS	Status;
	ULONG		Base;
	ULONG		Entry;
	ULONG		Patch;
	ULONG		i;
	
	
	RtlUnicodeStringToAnsiString(&asImageName, FullImageName, TRUE);
	
	if (!ImageInfo->SystemModeImage)
	{
		goto __End; //不是驱动
	}
	
	Delimiter = strrchr(asImageName.Buffer, '\\');
	if (Delimiter == NULL)
		goto __End;
	
	Delimiter++;
	
	if( _strnicmp(Delimiter,"xxx.sys",strlen("xxx.sys")) != 0)
		goto __End;

	Base = (ULONG)ImageInfo->ImageBase;
				
	DbgPrint("%s Loaded, MappingAddress=%08X, Size=%08X\n",
		 asImageName.Buffer,
		 ImageInfo->ImageBase,
		 ImageInfo->ImageSize );
	

	//这里地址直接硬编码了,可以分析PE文件及使用反汇编引擎(原代码的地址删了,表找我麻烦)

	// 原驱动DriverEntry出口:
	// 	leave
	// 	retn    8
	// 	
	// 	

	Entry = Base + 0x1111;
	Patch = Base + 0x2222;
	g_ReturnAddress = Base + 0x3333;

	if (!(*(PULONG)Entry == 0x83EC8B55 &&  *(PUCHAR)(Entry+5) == 0x14)) //检查Entry
	{
		DbgPrint("Mismatched Entry!\n");
		goto __End;
	}

	if (*(PULONG)Patch != 0x0008C2C9)
	{
		DbgPrint("Mismatched Patch Point!\n");
		goto __End;
	}

	__asm
	{
		CLI
		MOV   EAX, CR0
		AND   EAX, NOT 10000H	//disable WP bit
		MOV   CR0, EAX
	}

	*(PUCHAR)Entry = 0xE9;
	*(PULONG)(Entry+1) = (ULONG)&SaveDriverObject - (Entry+5);

	*(PUCHAR)Patch = 0xE9;
	*(PULONG)(Patch+1) = (ULONG)&ReplaceDispatch - (Patch+5);
	

	__asm
	{
		MOV   EAX, CR0
		OR    EAX, 10000H	//enable WP bit
		MOV   CR0, EAX
		STI
	}
	
__End:
	RtlFreeAnsiString(&asImageName);
}

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 7
支持
分享
最新回复 (25)
雪    币: 1946
活跃值: (248)
能力值: (RANK:330 )
在线值:
发帖
回帖
粉丝
2
IRP Hook
2008-8-27 20:55
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
3
最近老梦见跟饭岛爱一起吃饭。
2008-8-27 23:17
0
雪    币: 1946
活跃值: (248)
能力值: (RANK:330 )
在线值:
发帖
回帖
粉丝
4
你还梦见冬日娜了吧
2008-8-27 23:24
0
雪    币: 6075
活跃值: (2236)
能力值: (RANK:1060 )
在线值:
发帖
回帖
粉丝
5
梦见你和冬日娜在旁边吃饭。
2008-8-27 23:35
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
NP 又见 NP
2008-8-28 06:06
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
7
学习~

2008-8-28 07:19
0
雪    币: 225
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
8
支持这种放血!
2008-8-28 07:29
0
雪    币: 451
活跃值: (78)
能力值: ( LV12,RANK:470 )
在线值:
发帖
回帖
粉丝
9
加载自己的驱动站住坑
很暴力哇..

if (!(*(PULONG)Entry == 0x83EC8B55 &&  *(PUCHAR)(Entry+5) == 0x14)) //检查Entry

不错 还有入口点的匹配检测
2008-8-28 08:54
0
雪    币: 398
活跃值: (343)
能力值: (RANK:650 )
在线值:
发帖
回帖
粉丝
10
SM的贴子要学习
2008-8-28 09:05
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
跟~着~学  ~
2008-8-28 11:08
0
雪    币: 321
活跃值: (271)
能力值: ( LV13,RANK:1050 )
在线值:
发帖
回帖
粉丝
12
good,学习
2008-8-28 12:08
0
雪    币: 203
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
支持 学习
2008-8-28 16:56
0
雪    币: 8209
活跃值: (4518)
能力值: ( LV15,RANK:2473 )
在线值:
发帖
回帖
粉丝
14
看懂了一行:
__emit 0xC9 //VC6的汇编不支持leave
2008-8-28 17:16
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
15
不错,很少看到naked啦啦~~
2008-8-28 17:56
0
雪    币: 471
活跃值: (4013)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
16
一群大牛上青天.....................
2008-8-28 18:58
0
雪    币: 109
活跃值: (483)
能力值: ( LV12,RANK:220 )
在线值:
发帖
回帖
粉丝
17
@加入神教

欧阳 眼睛还好么?
2008-8-28 22:48
0
雪    币: 224
活跃值: (16)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
18
不懂 hook ,如何调试,谁告诉我?谢谢
2008-8-29 13:36
0
雪    币: 474
活跃值: (96)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
19
真牛啊!!学习学习!
2008-8-29 14:06
0
雪    币: 360
活跃值: (77)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
20
一定要学学驱动了
2008-8-30 00:13
0
雪    币: 97697
活跃值: (200759)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
21
support.
2008-8-30 10:41
0
雪    币: 134
活跃值: (84)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
22
很不错。学习
2008-8-31 16:12
0
雪    币: 120
活跃值: (58)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
这个要 学习一下。
2008-9-1 13:08
0
雪    币: 311
活跃值: (124)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
好文,学习ing.
2008-9-1 23:54
0
雪    币: 474
活跃值: (96)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
25
学习!谢谢!
2008-9-26 12:55
0
游客
登录 | 注册 方可回帖
返回
//