| ²é¿´: 637 | »Ø¸´: 2 | |||
| µ±Ç°Ö»ÏÔʾÂú×ãÖ¸¶¨Ìõ¼þµÄ»ØÌû£¬µã»÷ÕâÀï²é¿´±¾»°ÌâµÄËùÓлØÌû | |||
zhmindyxгæ (³õÈëÎÄ̳)
|
[ÇóÖú]
ÇóÖúhook³ÌÐòµÄ×¢½â
|
||
|
ÓÐһϼ¸¶ÎHOOK³ÌÐò£¬¿´²»Ì«¶®£¬ÇóÖÐÎÄ×¢½â NTSTATUS HookExistingNDISProtocols(void) { UINT *ProtocolPtr; NDIS_HANDLE hBogusProtocol = NULL; PNDIS_OPEN_BLOCK OpenBlockPtr = NULL; PNDIS_PROTOCOL_HOOK pNode; hBogusProtocol = RegisterBogusNDISProtocol(); if(hBogusProtocol == NULL) return STATUS_UNSUCCESSFUL; ProtocolPtr = (UINT*)hBogusProtocol; ProtocolPtr = (UINT*)((PBYTE)ProtocolPtr + sizeof(REFERENCE) + 8); ProtocolPtr = (UINT*)(*ProtocolPtr); while(ProtocolPtr != NULL) { OpenBlockPtr = (PNDIS_OPEN_BLOCK)(*ProtocolPtr); if(OpenBlockPtr != NULL) { pNode = NewNDISNode(); if(pNode != NULL) { pNode->ProtocolBindingContext = OpenBlockPtr->ProtocolBindingContext; pNode->MacBindingContext = OpenBlockPtr->MacBindingHandle; pNode->OpenBlockPtr = OpenBlockPtr; pNode->RealSendHandler = OpenBlockPtr->SendHandler; //How about WanSendHandler? pNode->RealPostNt31ReceiveHandler = OpenBlockPtr->PostNt31ReceiveHandler; InsertNDISNode(pNode); OpenBlockPtr->SendHandler = NDISSendHandler; //How about WanSendHandler? OpenBlockPtr->PostNt31ReceiveHandler = NDISPostNt31ReceiveHandler; } } ProtocolPtr = (UINT*)((PBYTE)ProtocolPtr + sizeof(REFERENCE) + 8); ProtocolPtr = (UINT*)(*ProtocolPtr); } DeregisterBogusNDISProtocol(hBogusProtocol); return STATUS_SUCCESS; } NTSTATUS HookExistingNDISProtocols(void) { UINT *ProtocolPtr; NDIS_HANDLE hBogusProtocol = NULL; PNDIS_OPEN_BLOCK OpenBlockPtr = NULL; PNDIS_PROTOCOL_HOOK pNode; hBogusProtocol = RegisterBogusNDISProtocol(); if(hBogusProtocol == NULL) return STATUS_UNSUCCESSFUL; ProtocolPtr = (UINT*)hBogusProtocol; ProtocolPtr = (UINT*)((PBYTE)ProtocolPtr + sizeof(REFERENCE) + 8); ProtocolPtr = (UINT*)(*ProtocolPtr); while(ProtocolPtr != NULL) { OpenBlockPtr = (PNDIS_OPEN_BLOCK)(*ProtocolPtr); if(OpenBlockPtr != NULL) { pNode = NewNDISNode(); if(pNode != NULL) { pNode->ProtocolBindingContext = OpenBlockPtr->ProtocolBindingContext; pNode->MacBindingContext = OpenBlockPtr->MacBindingHandle; pNode->OpenBlockPtr = OpenBlockPtr; pNode->RealSendHandler = OpenBlockPtr->SendHandler; //How about WanSendHandler? pNode->RealPostNt31ReceiveHandler = OpenBlockPtr->PostNt31ReceiveHandler; InsertNDISNode(pNode); OpenBlockPtr->SendHandler = NDISSendHandler; //How about WanSendHandler? OpenBlockPtr->PostNt31ReceiveHandler = NDISPostNt31ReceiveHandler; } } ProtocolPtr = (UINT*)((PBYTE)ProtocolPtr + sizeof(REFERENCE) + 8); ProtocolPtr = (UINT*)(*ProtocolPtr); } DeregisterBogusNDISProtocol(hBogusProtocol); return STATUS_SUCCESS; } NDIS_STATUS NDISSendHandler( IN NDIS_HANDLE MacBindingHandle, IN PNDIS_PACKET Packet) { PNDIS_PROTOCOL_HOOK Node; Node = FindNDISNode(MacBindingHandle,2); if(Node == NULL) return NDIS_STATUS_SUCCESS; return Node->RealSendHandler(MacBindingHandle,Packet); } NDIS_STATUS NDISPostNt31ReceiveHandler( IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_HANDLE MacReceiveContext, IN PVOID HeaderBuffer, IN UINT HeaderBufferSize, IN PVOID LookAheadBuffer, IN UINT LookAheadBufferSize, IN UINT PacketSize) { PNDIS_PROTOCOL_HOOK Node; Node = FindNDISNode(ProtocolBindingContext,1); if(Node == NULL) return NDIS_STATUS_SUCCESS; return Node->RealPostNt31ReceiveHandler(ProtocolBindingContext,MacReceiveContext, HeaderBuffer,HeaderBufferSize,LookAheadBuffer,LookAheadBufferSize,PacketSize); } |
» ²ÂÄãϲ»¶
µ÷¼ÁÇóÊÕÁô
ÒѾÓÐ6È˻ظ´
»¯Ñ§308·ÖÇóµ÷¼Á
ÒѾÓÐ5È˻ظ´
0703»¯Ñ§338Çóµ÷¼Á£¡
ÒѾÓÐ6È˻ظ´
286Çóµ÷¼Á
ÒѾÓÐ4È˻ظ´
Çóµ÷¼ÁÍÆ¼ö ²ÄÁÏ 304
ÒѾÓÐ3È˻ظ´
336²ÄÁÏÇóµ÷¼Á
ÒѾÓÐ7È˻ظ´
²ÄÁÏѧ˶333Çóµ÷¼Á
ÒѾÓÐ6È˻ظ´
Ò»Ö¾Ô¸Ö£ÖÝ´óѧ£¬080500ѧ˶£¬×Ü·Ö317·ÖÇóµ÷¼Á
ÒѾÓÐ5È˻ظ´
351Çóµ÷¼Á
ÒѾÓÐ3È˻ظ´
316Çóµ÷¼Á
ÒѾÓÐ3È˻ظ´
» ±¾Ö÷ÌâÏà¹Ø¼ÛÖµÌùÍÆ¼ö£¬¶ÔÄúͬÑùÓаïÖú:
ÇóÖú£ºÔ¼6kbÖÊÁ£×öÄ£°åµÄpcr³ÌÐòÔõôÉ趨°¡
ÒѾÓÐ12È˻ظ´
CÓïÑÔ±äÁ¿ÎÊÌ⣬ÇóÖú´óÏÀ£¡£¡
ÒѾÓÐ17È˻ظ´
¡¾ÇóÖú¡¿MTALABµ¼ÈëÊý¾ÝµÄ¾«¶È¡£¡£¡£
ÒѾÓÐ7È˻ظ´
¡¾ÇóÖú¡¿matlab ÖУ¬¼¸¸ömÎļþµ÷ÓÃ
ÒѾÓÐ14È˻ظ´
¡¾ÇóÖú¡¿¹ØÓÚδ֪Ê÷×´½á¹¹´æ´¢µÄÎÊÌ⣿Çë´óϺָ½Ì£¡
ÒѾÓÐ11È˻ظ´
¡¾ÇóÖú¡¿ÈçºÎдFORTRAN³ÌÐòʵÏÖÇ󯽾ù×î½üÁÚ¾àÀë
ÒѾÓÐ34È˻ظ´
¡¾ÇóÖú¡¿´ÓÎļþ¶ÁÈëÊý×éÓöµ½À§ÄÑ
ÒѾÓÐ3È˻ظ´
¡¾ÇóÖú¡¿ÇëÎʲÄÁÏ»¯Ñ§×¨ÒµµÄ´óÈýѧÉúÓÐûÓбØÒª±¨¼ÆËã»úÈý¼¶¿¼ÊÔ£¿
ÒѾÓÐ13È˻ظ´
¡¾ÇóÖú¡¿Î¿ØÒǵijÌÐòµ÷ÖÆÎÊÌâ
ÒѾÓÐ5È˻ظ´
¡¾ÇóÖú¡¿°ïÎÒ±à¸ö³Ì°¡~CÓïÑÔ£¬C++£¬Matlab£¬VB...¶¼ÐÐ~
ÒѾÓÐ14È˻ظ´
nbjnh
ľ³æ (ÕýʽдÊÖ)
- Ó¦Öú: 14 (СѧÉú)
- ½ð±Ò: 4670.3
- ºì»¨: 12
- Ìû×Ó: 556
- ÔÚÏß: 219Сʱ
- ³æºÅ: 1103994
- ×¢²á: 2010-09-20
- רҵ: ¼ÆËã»úÓ¦Óü¼Êõ
¡¾´ð°¸¡¿Ó¦Öú»ØÌû
¡ï ¡ï ¡ï ¡ï ¡ï
¸Ðл²ÎÓ룬ӦÖúÖ¸Êý +1
zhmindyx: ½ð±Ò+5, ¡ï¡ï¡ï¡ï¡ï×î¼Ñ´ð°¸ 2012-03-26 08:34:44
¸Ðл²ÎÓ룬ӦÖúÖ¸Êý +1
zhmindyx: ½ð±Ò+5, ¡ï¡ï¡ï¡ï¡ï×î¼Ñ´ð°¸ 2012-03-26 08:34:44
|
NTSTATUS HookExistingNDISProtocols(void) { UINT *ProtocolPtr; NDIS_HANDLE hBogusProtocol = NULL; //¶¨ÒåÒ»¸ö¼ÙÐÒéÖ¸Õë PNDIS_OPEN_BLOCK OpenBlockPtr = NULL; PNDIS_PROTOCOL_HOOK pNode; hBogusProtocol = RegisterBogusNDISProtocol();//×¢²á¼ÙÐÒ飬ÒÔ»ñµÃÐÒéÁ´±íÖ¸Õë if(hBogusProtocol == NULL) return STATUS_UNSUCCESSFUL;//ÐÒé×¢²á²»³É¹¦£¬ºóÃæµÄû·¨ÍæÁË£¬Í˳ö ProtocolPtr = (UINT*)hBogusProtocol; ProtocolPtr = (UINT*)((PBYTE)ProtocolPtr + sizeof(REFERENCE) + 8); ProtocolPtr = (UINT*)(*ProtocolPtr); //¹À¼ÆÂ¥Ö÷¿ÉÄÜÊÇ¿´²»¶®ÉÏÃæÈý¾ä£¡ÒªÁ˽âÉÏÃæÈý¾äÏÈÒªÇå³þNDIS_HANDLEµÄ½á¹¹¡£ //µÚ¶þ¾äÊÇËãÈ¡ndisProtocolListÖ¸ÕëλÖ㻵ÚÈý¾äÊÇÈ¡¸ÃÐÒéÁ´±íµÄµØÖ· /********************************************************************* struct PROTOCOL_HANDLE{ LIST_ENTRY protocolEntry; // +sizeof(REFERENCE) ULONG UnKnown1[2]; // +8 PLIST_ENTRY ndisProtocolList; _NDIS50_PROTOCOL_CHARACTERISTICS Characteristics; _WORK_QUEUE_ITEM Queue; KMUTEX Mutex; ULONG Unknown3[5]; USHORT NameBuff[Characteristics->Name.Length+1]; };//±¾½á¹¹´ÓNdisRegisterProtocolÖÐÖ±½Óµ¼³ö£¬Ò²¿ÉÒÔÈÏΪNDIS_HANDLE½á¹¹ //Æäʵ¾ÍÊÇNDIS_OPEN_BLOCK½á¹¹¼´ struct _NDIS_PROTOCOL_BLOCK { PNDIS_OPEN_BLOCK OpenQueue; REFERENCE Ref; UINT Length; NDIS50_PROTOCOL_CHARACTERISTICS ProtocolCharacteristics; struct _NDIS_PROTOCOL_BLOCK *NextProtocol; ULONG MaxPatternSize; #if defined(NDIS_WRAPPER) struct _NDIS_PROTOCOL_FILTER * ProtocolFilter[NdisMediumMax+1]; WORK_QUEUE_ITEM WorkItem; KMUTEX Mutex; PKEVENT DeregEvent; #endif }; //²»¹ÜÊÇÄÄÒ»¸ö½á¹¹£¬×ÜÖ®ProtocolPtr×îºóÖ¸ÏòÐÒéÁ´±íµÄÆðµã¡£ *********************************************************************/ while(ProtocolPtr != NULL) { //Ñ»·´¦ÀíÐÒéÁ´±í OpenBlockPtr = (PNDIS_OPEN_BLOCK)(*ProtocolPtr);//ȡһ¸öÐÒé if(OpenBlockPtr != NULL) {//Èç¹ûÐÒ鲻Ϊ¿Õ pNode = NewNDISNode();//´´½¨Ò»¸öнáµã£¬ÓÃÓÚ±£´æÔʼÐÒéÊý¾Ý£¬ÒÔ±¸»Ö¸´HOOK if(pNode != NULL) { pNode->ProtocolBindingContext = OpenBlockPtr->ProtocolBindingContext; pNode->MacBindingContext = OpenBlockPtr->MacBindingHandle; pNode->OpenBlockPtr = OpenBlockPtr; pNode->RealSendHandler = OpenBlockPtr->SendHandler; //How about WanSendHandler? pNode->RealPostNt31ReceiveHandler = OpenBlockPtr->PostNt31ReceiveHandler; InsertNDISNode(pNode); OpenBlockPtr->SendHandler = NDISSendHandler;//ÐÞ¸ÄÐÒé·¢ËÍÀý³ÌÈë¿Ú //How about WanSendHandler? OpenBlockPtr->PostNt31ReceiveHandler = NDISPostNt31ReceiveHandler;//ÐÞ¸ÄÐÒé½ÓÊÕÀý³ÌÈë¿Ú /**************************************************************************************** µ±Íø¿¨ÓÐÊý¾Ý°ü½øÈëʱ£¬»áͨ¹ý±íÖÐReceiveHandle»òReceivePacketHandler֪ͨÐÒéÇý¶¯³ÌÐòÓÐÒ» ¸ö¸ÃÐÒéµÄÊý¾Ý°ü½øÈ룬·´Ö®ÐÒéÇý¶¯³ÌÐòÊÇͨ¹ýSendHandler»òSendPacketsHandlerº¯ÊýÏòÍø¿¨Çý¶¯ ·¢ËÍÊý¾Ý°üµ½ÍøÂçÉÏÈ¥µÄ¡£Ö»ÒªÄܹ»½«Ã¿Ò»¸öÐÒé³ÌÐòËùÌîдµÄÅÉ·¢º¯ÊýÖ¸Ïò×Ô¼ºµÄº¯Êý,¾ÍÄܳɹ¦µÄ ¶ÔÊý¾Ý°ü½øÐÐÀ¹½Ø¡£´ÓÉÏÃæÁ½¾ä´úÂëÀ´¿´£¬ËùÓÐÐÒéÊÕ¡¢·¢Àý³ÌÈ«²¿±»ÖØÐÂÖ¸Ïòµ½NDISSendHandler() ºÍNDISPostNt31ReceiveHandler()º¯ÊýÖУ¬ÄÇôËùÓеĹýÂ˹¤×÷½«ÔÚÕâÁ½¸öº¯ÊýÖÐÍê³É£¬²¢ÇÒÍê³É¹ýÂË ºó£¬ÔÙ½«Êý¾Ý°üת¸øÔÀ´µÄÀý³Ì½øÐд¦Àí¡£ *****************************************************************************************/ } } ProtocolPtr = (UINT*)((PBYTE)ProtocolPtr + sizeof(REFERENCE) + 8); ProtocolPtr = (UINT*)(*ProtocolPtr); //ÉÏÃæÁ½¾ä£¬¼ÆËãÏÂÒ»¸öÐÒéÈë¿Ú¡£ } DeregisterBogusNDISProtocol(hBogusProtocol); return STATUS_SUCCESS; } NDIS_STATUS NDISSendHandler( IN NDIS_HANDLE MacBindingHandle, IN PNDIS_PACKET Packet) { PNDIS_PROTOCOL_HOOK Node; Node = FindNDISNode(MacBindingHandle,2); if(Node == NULL) return NDIS_STATUS_SUCCESS; return Node->RealSendHandler(MacBindingHandle,Packet); //·¢ËÍÀý³ÌûÓÐ×öÈκδ¦Àí£¬Ö±½Ó½«Êý¾Ý°ü´«¸ø±£´æÔÚNodeÖеÄÔÀý³Ì´¦Àí¡£ //µ±È»£¬Èç¹ûÐèÒª×ö¹ýÂ˵ϰ£¬Ò²¿ÉÒÔÌí´úÂë¡£ } NDIS_STATUS NDISPostNt31ReceiveHandler( IN NDIS_HANDLE ProtocolBindingContext, IN NDIS_HANDLE MacReceiveContext, IN PVOID HeaderBuffer, IN UINT HeaderBufferSize, IN PVOID LookAheadBuffer, IN UINT LookAheadBufferSize, IN UINT PacketSize) { PNDIS_PROTOCOL_HOOK Node; Node = FindNDISNode(ProtocolBindingContext,1); if(Node == NULL) return NDIS_STATUS_SUCCESS; return Node->RealPostNt31ReceiveHandler(ProtocolBindingContext,MacReceiveContext, HeaderBuffer,HeaderBufferSize,LookAheadBuffer,LookAheadBufferSize,PacketSize); //ÊÕµ½µÄ°ü³öûÓд¦Àí£¬Ò²ÊÇÖ±½Ó´«¸øÔÀý³Ì´¦ÀíµÄ£¬×Ô¼º¼Ó¹ýÂË´úÂë°É¡£¿´Ñù×ÓÓ¦¸ÃÊÇÒ»¸ö //·À»ðǽµÄ¿ò¼Ü³ÌÐò¡£ } |

3Â¥2012-03-22 09:15:37
cmdblock
Òø³æ (ÕýʽдÊÖ)
- Ó¦Öú: 23 (СѧÉú)
- ½ð±Ò: 234.2
- É¢½ð: 79
- Ìû×Ó: 719
- ÔÚÏß: 123.7Сʱ
- ³æºÅ: 1520796
- ×¢²á: 2011-12-02
- ÐÔ±ð: GG
- רҵ: ¼ÆËã»úÍøÂç
2Â¥2012-03-21 10:19:55













»Ø¸´´ËÂ¥