首页
社区
课程
招聘
[求助]第5章定位kernel32.dll代码的疑惑?
2008-7-24 20:45 7004

[求助]第5章定位kernel32.dll代码的疑惑?

2008-7-24 20:45
7004
:find base addr of kernel32.dll

mov ebx, fs:[edx + 0x30]      ;edx(0)难道就是线程控制块TEB的地址
mov ecx, [ebx + 0x0c]

mov ecx, [ecx + 0x1c]

mov ecx, [ecx]                   ;ecx为什么是第二个入口点(kernel32.dll)的地址,而不是
                            ;ntdll.dll的地址
mov ebp, [ecx + 0x08]

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

收藏
点赞0
打赏
分享
最新回复 (10)
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wanghuok 2008-7-24 23:47
2
0
在103页有。
雪    币: 151
活跃值: (24)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
jesterjy 1 2008-7-25 08:40
3
0
我也解释不清楚,但是用OD跟踪了以后发现的确是没错的。
雪    币: 2056
活跃值: (13)
能力值: ( LV13,RANK:250 )
在线值:
发帖
回帖
粉丝
vxasm 6 2008-7-25 13:04
4
0
第1个问题:
  TEB+0x30处是PEB指针,而fs:[0]是指向当前TEB数据的,所以直接用 fs:[0x30] 得到PEB。

第2个问题:
  一开始我也觉得奇怪,InInitializationOrderModuleList 是个 LIST_ENTRY 类型,LIST_ENTRY的定义如下:
typedef struct _LIST_ENTRY {
   struct _LIST_ENTRY *Flink;
   struct _LIST_ENTRY *Blink;
} LIST_ENTRY, *PLIST_ENTRY, *RESTRICTED_POINTER PRLIST_ENTRY;

那么[ecx]是前向指针,[ecx+4]是后向指针,也就是说[ecx+4]才应该是指向下一个成员的(即第2个成员:Kernel32.dll),但是用OD调试发现,此时ecx保存的已经是ntdll.dll信息了([ecx+8]的值即是ntdll.dll的基址),在网上查的资料好像对这一点也都讲的不清楚,所以我估计有可能是因为插入顺序的原因,即后面初始化的总是插入在链表前面,所以kernel32.dll的信息反倒应该用前向指针去访问。
雪    币: 2056
活跃值: (13)
能力值: ( LV13,RANK:250 )
在线值:
发帖
回帖
粉丝
vxasm 6 2008-7-25 15:58
5
0
唉,看来我前面找资料不够仔细,发现网上已经有详细讲述PEB的资料了.本论坛也有:http://bbs.pediy.com/showthread.php?t=52398

总之关键的一点,LDR_MODULE结构中三个链表的顺序是前向遍历.

附件中是我自己写的列出这三个链表所有模块的小例子,VC6编译,有需要的可以下载.
上传的附件:
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wanghuok 2008-7-28 23:19
6
0
关于第二个问题,还是不怎么明白。
得到的指向InInitializationOrderModuleList的指针,当前应该是指向ntdll.dll的,往前遍历一个才是kernel32.dll,往后遍历一个是head。
雪    币: 2056
活跃值: (13)
能力值: ( LV13,RANK:250 )
在线值:
发帖
回帖
粉丝
vxasm 6 2008-7-29 10:00
7
0
mov ecx, [ecx + 0x1c] ;执行完这句后,ecx已经指向ntdll

mov ecx, [ecx] ;这句相当于ecx=ecx->flink,执行完后,ecx正好指向kernel32。
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wanghuok 2008-7-31 21:48
8
0
呵呵,多谢楼上的,这下明白了。
雪    币: 331
活跃值: (57)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
better 2 2008-8-3 17:32
9
0
呵呵,是链表不是结构体指针……
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
remnantday 2008-9-20 22:14
10
0
不懂不懂。、、、、
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
pcqq 2009-9-1 16:07
11
0
想請問一下

fs:[0]是指向当前TEB数据


為什麼知道是 fs 而不是其他的如 es, .. etc ?
游客
登录 | 注册 方可回帖
返回