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

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

2008-7-24 20:45
7196
: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]

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
在103页有。
2008-7-24 23:47
0
雪    币: 389
活跃值: (159)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
我也解释不清楚,但是用OD跟踪了以后发现的确是没错的。
2008-7-25 08:40
0
雪    币: 2056
活跃值: (13)
能力值: ( LV13,RANK:250 )
在线值:
发帖
回帖
粉丝
4
第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的信息反倒应该用前向指针去访问。
2008-7-25 13:04
0
雪    币: 2056
活跃值: (13)
能力值: ( LV13,RANK:250 )
在线值:
发帖
回帖
粉丝
5
唉,看来我前面找资料不够仔细,发现网上已经有详细讲述PEB的资料了.本论坛也有:http://bbs.pediy.com/showthread.php?t=52398

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

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

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

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


為什麼知道是 fs 而不是其他的如 es, .. etc ?
2009-9-1 16:07
0
游客
登录 | 注册 方可回帖
返回
//