edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1333回复:8

关于在 WinMe 中使用 Hook NDIS 的方法:同样的函数 hook 了两次?

楼主#
更多 发布于:2002-04-22 10:03
最近在看 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]
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-04-22 10:38
如果真的是 hook 了两次的话,那么当 protocol 调用 NdisSend 的时候,调用了哪个 hook 函数呢?

是通过 Hook_Device_Service hook 的 hook 函数呢?

还是通过修改 PE Export Table hook 的 hook 函数呢?

===========================================================

附:在源代码中通过两种手段 hook 后有两个不同的 hook 函数,也就是说这两种方法并非为同一个 hook 函数服务。
monkeyy
驱动中牛
驱动中牛
  • 注册日期2001-12-06
  • 最后登录2010-10-10
  • 粉丝0
  • 关注0
  • 积分315分
  • 威望84点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-04-22 14:53
#ifdef VTOOLSD // For VtoolsD
别人使用的是条件编译!!你应该改学C或者C++了!!

听说老虎会吃人,所以从没想过去摸老虎的屁股。:( :(
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于: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 年了,如果这也看不出来的话,我还不去跳楼啊!
qtnl
驱动牛犊
驱动牛犊
  • 注册日期2002-02-21
  • 最后登录2010-03-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-05-17 10:24
最近在看 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]


请问Pcausa上哪有PIM的原码下载,能给出链接吗?谢谢!!!
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
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两次。
qtnl
驱动牛犊
驱动牛犊
  • 注册日期2002-02-21
  • 最后登录2010-03-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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 会成功,二者只能有一个成功,不会
hook两次。


大侠,能给一份PIM的代码吗?(可给您50分)急用!!!

谢谢!!!
.X.T.I.M.
驱动大牛
驱动大牛
  • 注册日期2001-09-22
  • 最后登录2021-08-25
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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 会成功,二者只能有一个成功,不会
hook两次。


大侠,能给一份PIM的代码吗?(可给您50分)急用!!!

谢谢!!! [/quote]
你看帖子看不细!!第一个版,是不是有个话题是NDISWAN的?里面有!!分不用给我了!尤其是这么多分!免得~~~~
<IMG src="http://www.microsoft.com/traincert/images/logos/mcp.gif" border=0> <IMG src="http://www.microsoft.com/traincert/images/logos/mcdba.gif" border=0><br> <IMG src="http://www.microsoft.com/traincert/images/logos/mcse.gif" border=0> <IMG src="http://www.microsoft.com/traincert/images/logos/mcsd.gif" border=0>
qtnl
驱动牛犊
驱动牛犊
  • 注册日期2002-02-21
  • 最后登录2010-03-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-05-18 16:49
top大侠非常感谢!!!
但为什么你们都不要分呢?给分是应该的!!!
游客

返回顶部