顯示廣告
隱藏 ✕
看板 uefacool
作者 uefangsmith (唉呦!不錯哦~)
標題 [NDIS] NDIS_MINIPORT_BLOCK
時間 2012年08月17日 Fri. PM 02:17:26


http://d00hnibor.wordpress.com/2011/04/
NDIS HOOK(未完待更新)
四月 4, 2011 — d00hnibor
網上有很多討論關於NDIS HOOK的文章,但大多只講了WIN7之前的HOOK協議對應的NDIS_OPEN_BLOCK下的例程,至於WIN7下怎麼HOOK以及如何做MINIPORT-HOOK,則網上鮮有提及。根據前陣子的相關分析,我把NDIS HOOK總結一下。

1、首先通過註冊表項\\REGISTRY\\MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\NetworkCards獲得網卡的設備名,比如{F0AFC092-E841-48DF-909F- 78146070F5D3}

2、XP:通過註冊假協議,遍歷所有NDIS_OPEN_BLOCK,找到DeviceName是上面的設備名,那麼就掛接其WSendHandler(MINIPORT HOOK),如果只是做非MINIPORT -HOOK,則只需要掛接TCPIP協議下所有的NDIS_OPEN_BLOCK裡的相關例程即可(ReceiveHandler, ReceivePacketHandler,WanSendHandler,SendHandler,
SendPacketsHandler等)。

3、WIN7:仍然是遍歷所有NDIS_OPEN_BLOCK, 如果是做非MINIPORT-HOOK,則Send需要INLINE HOOK ndis!NdisSendNetBufferLists,或者HOOK TCPIP.SYS的IAT裡的ndis!NdisSendNetBufferLists,Receive需要HOOK NDIS_OPEN_BLOCK裡的ReceiveNetBufferListsHandler。

MINIPORT-HOOK:
根據上面的註冊表項找到對應的NDIS_OPEN_BLOCK,XP下HOOK WSendHandler,WIN7下根據NDIS_OPEN_BLOCK定位到對應的NDIS_MINIPORT_BLOCK,然後定位到M_DRIVER_BLOCK結構體(offset:0xE04),然後M_DRIVER_BLOCK的偏移0× 60處就是miniport的SendNetBufferListsHandler。

其他:
NDIS_PRPTOCOL_BLOCK:這個結構表示協議相關的信息,每個協議對應一個
NDIS_OPEN_BLOCK:這個結構是表示協議(PROTOCOL)和網卡(MINIPORT)的綁定關係的。
NDIS_MINIPORT_BLOCK: 這個結構是表示小端口信息的,除了物理網卡和虛擬網卡存在這個結構外,IMD(中間層驅動)由於是向上表現為MINIPORT,所以IMD也存在一個本結構

IMD:向上表現為MINIORT,向下表現為PROTCOL,所以IMD和PROTOCOL之間也存在NDIS_OPEN_BLOCK,而IMD和下層的MINIOPORT也存在NDIS_OPEN_BLOCK


NDIS_MINIPORT_BLOCK Structure
http://hi.baidu.com/zheng252635/blog/item/affdd98afb7ab11bc9fc7a05.html

--
※ 作者: uefangsmith 時間: 2012-08-17 14:17:26
※ 編輯: uefangsmith 時間: 2012-08-17 15:37:13
※ 看板: uefacool 文章推薦值: 0 目前人氣: 0 累積人氣: 46 
guest
x)推文 r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇