首页
社区
课程
招聘
[求助]关于DLL加载的问题
发表于: 2007-10-31 18:16 3935

[求助]关于DLL加载的问题

2007-10-31 18:16
3935
MFC42.DLL会用到WS2_32.sendto等函数,如下:

60AD34E0   .  52            push    edx
60AD34E1   .  68 4C20B560   push    60B5204C
60AD34E6   .^ E9 5F3AFCFF   jmp     60A96F4A
60AD34EB   $- FF25 4C20B560 jmp     dword ptr [60B5204C]             ;  WSOCK32.recvfrom
60AD34F1   .  51            push    ecx
60AD34F2   .  52            push    edx
60AD34F3   .  68 8020B560   push    60B52080
60AD34F8   .^ E9 4D3AFCFF   jmp     60A96F4A
60AD34FD   $- FF25 8020B560 jmp     dword ptr [60B52080]             ;  WS2_32.sendto
60AD3503   .  51            push    ecx
60AD3504   .  52            push    edx
60AD3505   .  68 9C20B560   push    60B5209C
60AD350A   .^ E9 2235FBFF   jmp     60A86A31
60AD350F   $^ FF25 9C20B560 jmp     dword ptr [60B5209C]             ;  MFC42.60AD3503
60AD3515   .  51            push    ecx
60AD3516   .  52            push    edx

问题是,用Dependency Walker查看的时候,发现MFC42.DLL并不依赖于ws2_32.dll,这说明输入表里面并没有ws2_32.dll,为什么?如果这样,加载的时候,它的IAT如何改写成真正的函数地址,怎么找到sendto?

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 50161
活跃值: (20615)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
2
你确认60AD34E0是MFC42.DLL?
2007-10-31 20:56
0
雪    币: 267
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
经过看雪老大的指点,复查了一下,发现确实是mfc42.dll,不过这个DLL位于QQ的安装目录,也是MS的dll,文件版本号是6.00.8665.0。
后来又看了一下system32下面的mfc42.dll,这个的文件版本是6.02.4131.0,加载的地方是
73D31000。

关于QQ安装目录下的mfc42.dll,上面贴出的汇编代码是ATTACH到QQ再复制出来的,下面的是用OD的loaddll.exe加载的结果

60AD34E0   .  52            push    edx
60AD34E1   .  68 4C20B560   push    60B5204C
60AD34E6   .^ E9 5F3AFCFF   jmp     60A96F4A
60AD34EB   $^ FF25 4C20B560 jmp     dword ptr [60B5204C]             ;  Mfc42.60AD34DF
60AD34F1   .  51            push    ecx
60AD34F2   .  52            push    edx
60AD34F3   .  68 8020B560   push    60B52080
60AD34F8   .^ E9 4D3AFCFF   jmp     60A96F4A
60AD34FD   $^ FF25 8020B560 jmp     dword ptr [60B52080]             ;  跳回头?
60AD3503   .  51            push    ecx
60AD3504   .  52            push    edx
60AD3505   .  68 9C20B560   push    60B5209C
60AD350A   .^ E9 2235FBFF   jmp     60A86A31
60AD350F   $^ FF25 9C20B560 jmp     dword ptr [60B5209C]             ;  Mfc42.60AD3503
60AD3515   .  51            push    ecx
60AD3516   .  52            push    edx

现在并不指向sendto函数,但是QQ加载的时候为什么会指向sendto函数呢?
无论是QQ安装目录下的mfc42.dll还是system32下面的,用Dependency Walker查看,都不依赖与ws2_32.dll或者wsock32.dll。唉,还是没弄明白,看雪老大和各位高手再指点指点
2007-10-31 22:59
0
雪    币: 50161
活跃值: (20615)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
4
60A85B35   >  FF75 F0       push    dword ptr [ebp-10]                         ; /ProcNameOrOrdinal
60A85B38   . |57            push    edi                                        ; |hModule
60A85B39   . |FF15 D4B2B160 call    dword ptr [<&KERNEL32.GetProcAddress>]     ; \GetProcAddress
60A85B3F   . |8BD8          mov     ebx, eax
60A85B41   . |85DB          test    ebx, ebx
60A85B43   . |0F84 C6DD0400 je      60AD390F
60A85B49   > |8B45 0C       mov     eax, dword ptr [ebp+C]
60A85B4C   . |8918          mov     dword ptr [eax], ebx   //填充IAT
60A85B4E   > |A1 B822B560   mov     eax, dword ptr [60B522B8]
60A85B53   . |85C0          test    eax, eax
60A85B55   . |0F85 F8DD0400 jnz     60AD3953
60A85B5B   > |8BC3          mov     eax, ebx
60A85B5D   > |5F            pop     edi
60A85B5E   . |5E            pop     esi
60A85B5F   . |5B            pop     ebx
60A85B60   . |C9            leave
60A85B61   . |C2 0800       retn    8
2007-11-1 10:45
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
好复杂啊,看来我太菜了
2007-11-1 13:13
0
雪    币: 267
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
真是晕死自己脑筋太木了,没想到是动态加载、得到地址再填充。
回头想想也是合理,MFC库不可能依赖于某一版本的ws2_32.dll,它这样做的确是提供了兼容性了。
感谢看雪老大!
2007-11-1 19:25
0
游客
登录 | 注册 方可回帖
返回
//