首页
社区
课程
招聘
[原创]定位FSD(笔记)
发表于: 2008-6-26 19:15 7253

[原创]定位FSD(笔记)

2008-6-26 19:15
7253

小弟菜虫一只 也做一次笔记试试 .内容如题.
定位方法,先从入口DriverEntry开始搜索0xC7 ? 0x58 和0x89 ? 0x58
找到位置后再根据重定位表内信息修正结果
额.大致就是这样吧.

proc __GetFsd
	locals
		@hMem rd 1
	endl
	i ExpandEnvironmentStrings,'%WinDir%\system32\drivers\ntfs.sys',esi=strBuffer,strBuffer.size
	i ImageLoad,esi,ebx=0
	push eax
	mov esi,[eax+4*2]
	mov [@hMem],esi
	mov eax,[esi+0x3C]
	add esi,[esi+eax+0x28]
	
.reloop:
	lodsb
	cmp al,0xC7
	je @F
	cmp al,0x89
	jne .reloop
@@:	
	cmp byte[esi+1],0x58	;IRP_MJ_SET_EA
	jne .reloop
	lea ebx,[esi+2]
	mov esi,[@hMem]
	sub ebx,esi

	mov eax,[esi+0x3C]
	add esi,[esi+eax+0xA0]
@@:
	add esi,[esi+4]
	mov ecx,ebx
	sub ecx,[esi]
	cmp ecx,0x1000
	ja @B
	lodsd
	lodsd

	mov edx,ebx
	and edx,0x0FFF
@@:
	lodsw
	and eax,0x0FFF
	cmp edx,eax
	ja @B
	je @F
	mov dx,word[esi-4]
	and dx,0x0FFF
@@:
	and ebx,0xFFFFF000
	add ebx,edx
	add ebx,[@hMem]
	mov ebx,[ebx]	;ebx = rva
	i ImageUnload,
	int3
endp	

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

收藏
免费 7
支持
分享
最新回复 (10)
雪    币: 225
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
2
标记下
2008-6-26 19:39
0
雪    币: 222
活跃值: (10)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
3
暴力搜索......为什么不是从历遍Driver Object来入手呢?
2008-6-29 04:49
0
雪    币: 249
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
Driver Object被HOOK了
2008-6-29 05:09
0
雪    币: 722
活跃值: (123)
能力值: ( LV12,RANK:300 )
在线值:
发帖
回帖
粉丝
5
定位FSD的最终目的是为了检测和还原对它的HOOK,因此假设前提已经是DriverObject中的可能已经被HOOK了。
2008-6-29 05:24
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
6
搜索文件吧,你这样纵然搜到了,也不知道是否被HOOK过了呀
2008-6-29 13:53
0
雪    币: 249
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
我这不就是搜索文件吗...
Driver Object..那就不叫搜索了
2008-6-29 14:34
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
8
你的asm中哪句是Load ntfs.sys 到内存的啊?
ImageLoad啊?以前没用过这个函数。
偶汇编太菜了,看得糊涂啊。。。
2008-6-29 16:27
0
雪    币: 249
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
9
i ImageLoad,esi,ebx=0

第一句就是load了...
不过貌似这个api用的人少..
2008-6-29 16:30
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
10
嗯,代码都懂了。
用 ImageLoad 把 ntfs.sys 当DLL加载到内存中,定位到PE的 OEP,驱动文件的入口也就是DriverEntry了,然后开始搜索特征码,找到了,就可以计算出RVA了,然后根据实际情况进行HOOK或者恢复。


查了下指令集,
LODSB的功能是将DS:[si]中的内容取到AL中,然后SI<=SI+/-1 REP LODSB的功能是重复将DS:[si]中的内容取到AL中

-------------------------------------------------------

学习,asm写东西真是简练高效又强大啊。膜拜下洋洋洒洒大牛。123465~
2008-6-29 16:35
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
11
PS:
保存网页当资料刻盘
2008-6-29 16:36
0
游客
登录 | 注册 方可回帖
返回
//