阅读:1333回复:8
关于在 WinMe 中使用 Hook NDIS 的方法:同样的函数 hook 了两次?
最近在看 PCAUSA 的 PIM 代码(其实就是 Hook NDIS),看那代码的意思是在 Win 9x 中载入的是 NDIS.VXD,在 WinMe 中载入的是 NDIS.SYS。
它的代码在初始化的时候用 Hook_Device_Service hook 了一些 NDIS wrapper 的函数,比如 NdisRegisterProtocol,NdisSend 等等,但是在被 hook 的 _PELDR_AddExportTable 中它又 hook 了这些函数(看样子是替换了函数导出表),难道这不重复吗? 下面我整理一下我上面说的话:看它代码的意思是在 WinMe 中先用 Hook_Device_Service hook 了一些函数,然后在截获到 _PELDR_AddExportTable 调用的时候又 hook 了这些函数,为什么? 是不是在 WinMe 中 Hook_Device_Service 会失效呀?_PELDR_AddExportTable 的调用时机又是什么? [编辑 - 4/22/02 作者: edust] |
|
沙发#
发布于:2002-04-22 10:38
如果真的是 hook 了两次的话,那么当 protocol 调用 NdisSend 的时候,调用了哪个 hook 函数呢?
是通过 Hook_Device_Service hook 的 hook 函数呢? 还是通过修改 PE Export Table hook 的 hook 函数呢? =========================================================== 附:在源代码中通过两种手段 hook 后有两个不同的 hook 函数,也就是说这两种方法并非为同一个 hook 函数服务。 |
|
板凳#
发布于:2002-04-22 14:53
#ifdef VTOOLSD // For VtoolsD
别人使用的是条件编译!!你应该改学C或者C++了!! |
|
|
地板#
发布于:2002-04-22 15:14
To monkeyy:
你说的是下面这些吗? #ifdef VTOOLSD // For VtoolsD Build nResult = VXDLDR_GetVersion(); // 得到 VxD loader 的版本号 #else nResult = TRUE; // Can\'t Get VXDWRAPS To Work. Sorry... #endif 这只是说可以通过 VXDLDR_GetVersion() 来判断是否装入了 VxD loader(代表着在 WinMe 中运行),如果不能使用 VXDLDR_GetVersion() 的话干脆认为就是在 WinMe 下运行!反正在 PEH_AddExportTable 中还是会判断装入的是不是 NDIS.SYS。请看仔细一点,不过还是谢谢你的回复! By the way,老大,我 C 已经学/用了 7 年了,如果这也看不出来的话,我还不去跳楼啊! |
|
地下室#
发布于:2002-05-17 10:24
最近在看 PCAUSA 的 PIM 代码(其实就是 Hook NDIS),看那代码的意思是在 Win 9x 中载入的是 NDIS.VXD,在 WinMe 中载入的是 NDIS.SYS。 请问Pcausa上哪有PIM的原码下载,能给出链接吗?谢谢!!! |
|
5楼#
发布于:2002-05-17 14:18
在WinMe上,ndis.vxd变成了ndis.sys,为了兼容以前基于ndis.vxd的程序,故ndis.sys会call peldr_addexporttable将一系列ndisxxx export,供原有的vxd程序调用,所以在me上,只有hook _PELDR_AddExportTable 会成功,而在me以前,只有Hook_Device_Service hook 会成功,二者只能有一个成功,不会
hook两次。 |
|
6楼#
发布于:2002-05-17 20:48
在WinMe上,ndis.vxd变成了ndis.sys,为了兼容以前基于ndis.vxd的程序,故ndis.sys会call peldr_addexporttable将一系列ndisxxx export,供原有的vxd程序调用,所以在me上,只有hook _PELDR_AddExportTable 会成功,而在me以前,只有Hook_Device_Service hook 会成功,二者只能有一个成功,不会 大侠,能给一份PIM的代码吗?(可给您50分)急用!!! 谢谢!!! |
|
7楼#
发布于:2002-05-17 21:46
[quote]在WinMe上,ndis.vxd变成了ndis.sys,为了兼容以前基于ndis.vxd的程序,故ndis.sys会call peldr_addexporttable将一系列ndisxxx export,供原有的vxd程序调用,所以在me上,只有hook _PELDR_AddExportTable 会成功,而在me以前,只有Hook_Device_Service hook 会成功,二者只能有一个成功,不会 大侠,能给一份PIM的代码吗?(可给您50分)急用!!! 谢谢!!! [/quote] 你看帖子看不细!!第一个版,是不是有个话题是NDISWAN的?里面有!!分不用给我了!尤其是这么多分!免得~~~~ |
|
|
8楼#
发布于:2002-05-18 16:49
top大侠非常感谢!!!
但为什么你们都不要分呢?给分是应该的!!! |
|