青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 94, comments - 250, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

探索NDIS HOOK新的實現方法(1)

Posted on 2008-08-30 23:42 Condor 閱讀(1725) 評論(0)  編輯 收藏 引用

NDIS HOOK是專業級防火墻使用的一種攔截技術,NDIS HOOK的重點是如何獲得特定協議對應NDIS_PROTOCOL_BLOCK指針,獲得了該指針,接下來就可以替換該協議所注冊的收發函數,而達到攔截網絡數據的目的。
     獲 得NDIS_PROTOCOL_BLOCK指針的方法一般是用NdisRegisterProtocol注冊一個新的協議,所獲得的協議句柄實際上就是一 個NDIS_PROTOCOL_BLOCK指針,順著該指針遍歷NDIS_PROTOCOL_BLOCK鏈表,就可以找到你所要掛鉤的協議所對應的 NDIS_PROTOCOL_BLOCK.之所以可以這樣做,是因為每注冊一個協議,系統都會把該協議對應的NDIS_PROTOCOL_BLOCK放置 在協議鏈表的開頭,該協議鏈表每個元素都是NDIS_PROTOCOL_BLOCK類型,代表一個已經注冊的協議。
     事 實上我們需要的只是TCPIP協議族的NDIS_PROTOCOL_BLOCK指針,畢竟TCP,IP,ARP,ICMP等等幾乎所有我們感興趣的協議, 都是在tcpip.sys協議驅動里面實現的。如果我們只需要TCPIP協議所對應的NDIS_PROTOCOL_BLOCK,那么上面的方法就有點繁瑣 了。我們可以試著尋找更簡便的方法來獲得TCPIP協議的NDIS_PROTOCOL_BLOCK.
于 是我對tcpip.sys驅動進行了反匯編,發現NDIS_PROTOCOL_BLOCK指針存放在一個名為_ARPHandle的全局變量里面,所以如 果能找到_ARPHandle的地址,我們就成功了,我們完全可以把該全局變量的偏移量作為一個常量來使用,但這里純粹為了拓寬思路,我介紹另一種找到該 全局變量的方法。
     Tcpip.sys有個導出函數叫IPDelayedNdisReEnumerateBindings,該函數內部曾經出現過_ARPHandle 的地址,為什么會出現它的地址呢,因為該函數內部調用過NdisReEnumerateProtocolBindings函數,懂得反匯編的應該知道,在 用call指令調用函數之前,必然會用到push指令將函數的參數壓到棧里面去,不巧的是, NdisReEnumerateProtocolBindings函數只有一個參數,而該參數恰恰是一個NDIS_PROTOCOL_BLOCK指針類 型,在這里,實際上就是把_ARPHandle當作參數傳給了
NdisReEnumerateProtocolBindings,所以_ARPHandle的地址必然會出現在push指令的后面,說具體一點,緊跟push指令的四個字節就是_ARPHandle的地址。
      所以具體的思路就是這樣,先找到IPDelayedNdisReEnumerateBindings函數的地址,然后從該函數的地址開始搜索push指令的特征碼,搜到了以后,把緊跟push指令的四個字節作為指向NDIS_PROTOCOL_BLOCK指針的指針返回。
     也許有的人會問,如果IPDelayedNdisReEnumerateBindings函數體內部出現過多次push指令,豈不是會搜出不正確的地址,事實上,雖然都叫push指令,然而在機器碼級別是不同的,push指令的機器碼表示有十幾種之多,用來區別不同的尋址方式,調用NdisReEnumerateProtocolBindings 時用的push指令字節序列是0xff35,這個push指令表示后面緊跟的四個字節是一個內存地址,而不是一個立即數或者寄存器之類的。知道了這些,我 們就可以清楚,在一個有限的地址范圍,0xff35的唯一性是可以得到滿足的。根據我的觀察,在win2000,winxp,win2003上面,IPDelayedNdisReEnumerateBindings本身是一個很短的函數,0xff35指令確實只出現過一次,所以該方法是很可靠的。
思路已經出來了,下面我把詳細的代碼給大家貼出來,理解這些代碼需要對windows Pe格式有所了解,如果你不想理解也行,代碼可以直接拿來用。
       以下是我寫的一個 獲取內核模塊某個導出函數地址的 通用例程。這里主要是為了獲取tcpip.sys模塊的導出函數IPDelayedNdisReEnumerateBindings
   void* GetRoutineAddress(char* ModuleName,char* RoutineName)
{
       PIMAGE_DOS_HEADER dos_hdr;
    PIMAGE_NT_HEADERS nt_hdr;
    PIMAGE_EXPORT_DIRECTORY export_dir;
    ULONG *fn_name, *fn_addr, i;
      char* base;
      base=(char*)FindModule(ModuleName);//該函數用來獲得內核模塊的基地址
    if(!base)
        return NULL;
    DbgPrint("tcpip address:%p",base);
    dos_hdr = (PIMAGE_DOS_HEADER)base;
    if (dos_hdr->e_magic != IMAGE_DOS_SIGNATURE)
        return NULL;
    nt_hdr = (PIMAGE_NT_HEADERS)(base + dos_hdr->e_lfanew);
    export_dir = (PIMAGE_EXPORT_DIRECTORY)(base + nt_hdr->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress);
    fn_name = (ULONG *)(base + export_dir->AddressOfNames);
    fn_addr = (ULONG *)(base + export_dir->AddressOfFunctions);
    for (i = 0; i < export_dir->NumberOfNames; i++, fn_name++, fn_addr++)
    {
        if (strcmp(RoutineName, base + *fn_name) == 0)
        {
            return base + *fn_addr;
        }
    }
    return NULL;
}
以下是FindModule函數的實現:
void *
FindModule(char *name)
{
    ULONG i, n, *q;
    PSYSTEM_MODULE_INFORMATION p;
    void *base;
    ZwQuerySystemInformation(SystemModuleInformation, &n, 0, &n);
    q = (ULONG *)ExAllocatePool(PagedPool, n);
    ZwQuerySystemInformation(SystemModuleInformation, q, n * sizeof (*q), 0);
    p = (PSYSTEM_MODULE_INFORMATION)(q + 1);
    base = NULL;
    for (i = 0; i < *q; i++) {
        if (_stricmp(p.ImageName + p.ModuleNameOffset, name) == 0) {
            base = p.Base;
            break;
        }
    }
    ExFreePool(q);
    return base;
}
以下是獲取tcpip協議的NDIS_PROTOCOL_BLOCK指針的函數
   void* GetProtocolBlock()
{
    char* base;
    char bytes[]={0xff,0x35};
    base=GetRoutineAddress("tcpip.sys","IPDelayedNdisReEnumerateBindings");
     while(RtlCompareMemory(base,bytes,2)!=2)
    {
       base++;
    }
    return **((void***)(base+2));
}


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久一二三区| 裸体丰满少妇做受久久99精品| 免费视频亚洲| 久久久噜噜噜| 亚洲成人在线视频网站| 亚洲成人中文| 每日更新成人在线视频| 亚洲精品四区| 一区二区三区四区国产| 国产欧美成人| 男人的天堂亚洲| 欧美日韩成人综合| 午夜精彩视频在线观看不卡| 欧美在线三级| 亚洲日本激情| 一本色道久久综合亚洲精品不| 国产精品免费区二区三区观看| 久久久久久97三级| 女女同性女同一区二区三区91| 一本久久知道综合久久| 亚洲欧美三级在线| 亚洲国产欧美不卡在线观看| 亚洲美女av网站| 国产一区二区三区在线观看视频| 免费欧美电影| 欧美日韩综合久久| 久热精品视频在线免费观看| 欧美福利一区| 久久久久久综合网天天| 欧美国产精品中文字幕| 欧美在线观看天堂一区二区三区| 久久字幕精品一区| 午夜精品久久99蜜桃的功能介绍| 久久精品在线观看| 亚洲女优在线| 欧美a级片网| 久久久久久一区| 欧美视频导航| 亚洲国产欧美在线| 国产欧美一区二区精品仙草咪 | 亚洲欧洲在线视频| 亚洲调教视频在线观看| 亚洲欧洲精品成人久久奇米网| 亚洲视频综合| 亚洲少妇最新在线视频| 免费成人毛片| 美女主播一区| 国产综合精品一区| 亚洲女性裸体视频| 一区二区三区 在线观看视| 久久久久成人精品| 久久精品九九| 国产精品亚洲成人| 一区二区三区回区在观看免费视频| 亚洲黄色天堂| 久色成人在线| 免费国产一区二区| 精品二区视频| 久久精品五月| 久久一区二区三区国产精品| 国产精品视频最多的网站| 亚洲乱码国产乱码精品精天堂| 亚洲激情在线激情| 美女诱惑一区| 欧美激情视频在线免费观看 欧美视频免费一| 国产精一区二区三区| 一区二区三区四区蜜桃| 影音先锋日韩资源| 久久精品国产综合精品| 久久国产99| 国一区二区在线观看| 欧美亚洲网站| 久久亚洲春色中文字幕| 国产一区二区精品丝袜| 欧美在线观看视频| 欧美超级免费视 在线| 亚洲高清资源| 欧美精品三区| 一区二区三区四区在线| 亚洲欧美在线网| 国产亚洲电影| 久久亚洲欧洲| 最新日韩av| 亚洲欧美在线一区| 韩国一区二区在线观看| 看欧美日韩国产| 日韩亚洲在线| 久久久久久一区| 亚洲欧洲久久| 国产精品久久久久一区二区三区共 | 久久精品国产精品亚洲综合| 国产日韩欧美亚洲| 久久夜色精品国产噜噜av| 欧美激情一区二区三区全黄| 一区二区三区四区国产| 国产精品欧美激情| 久久久久一区二区三区四区| 亚洲欧洲日夜超级视频| 亚洲自拍偷拍视频| 激情成人综合网| 欧美日韩高清免费| 久久久久.com| 一个色综合导航| 男男成人高潮片免费网站| 99www免费人成精品| 国产欧美日韩在线观看| 欧美高清在线| 久久精品2019中文字幕| 999在线观看精品免费不卡网站| 欧美中文字幕视频| 一区二区高清在线| 精品成人a区在线观看| 欧美亚洲第一区| 欧美.日韩.国产.一区.二区| 亚洲一区二区不卡免费| 欧美国产日本高清在线| 欧美有码视频| 亚洲一区精彩视频| 1024国产精品| 国产欧美一区二区三区久久| 欧美日韩久久不卡| 美国十次了思思久久精品导航| 宅男精品视频| 亚洲免费观看| 亚洲第一区在线| 久久视频一区| 久久精品一级爱片| 午夜精品在线视频| 99re8这里有精品热视频免费| 国产亚洲一本大道中文在线| 国产精品久久久久久久久久直播| 免费欧美日韩国产三级电影| 久久久久这里只有精品| 亚欧成人在线| 亚洲欧美日韩精品综合在线观看| 99国产精品国产精品久久| 亚洲福利精品| 欧美激情网站在线观看| 欧美国产成人精品| 欧美成人精品不卡视频在线观看| 久久久欧美精品sm网站| 久久激五月天综合精品| 亚洲欧美另类在线| 亚洲欧美日韩在线一区| 亚洲欧美在线一区二区| 亚洲一区免费| 亚洲综合导航| 欧美一区二区播放| 欧美一区二区在线免费观看| 午夜精品短视频| 欧美在线观看视频| 久久精品日产第一区二区| 久久国产夜色精品鲁鲁99| 欧美中文在线观看| 久久久久久久高潮| 欧美国产先锋| 91久久精品国产91性色tv| 亚洲精品国产拍免费91在线| 91久久香蕉国产日韩欧美9色 | 亚洲综合国产| 亚洲欧美日本在线| 久久精品国产久精国产思思| 另类天堂av| 亚洲激情视频网| 在线性视频日韩欧美| 亚洲摸下面视频| 久久久国际精品| 欧美激情一区二区三区| 欧美亚州韩日在线看免费版国语版| 国产精品美女一区二区在线观看| 国产资源精品在线观看| 亚洲国产99精品国自产| 一区二区高清在线| 久久精品成人一区二区三区| 牛牛影视久久网| 一本色道久久88综合亚洲精品ⅰ| 午夜性色一区二区三区免费视频| 久久一区二区三区av| 欧美日韩一区二区在线观看| 国产亚洲精品bt天堂精选| 亚洲人成人一区二区在线观看| 亚洲在线观看视频| 老牛嫩草一区二区三区日本| 亚洲国产日韩综合一区| 午夜久久电影网| 欧美激情一二区| 国产一区二区久久久| 日韩性生活视频| 久久免费视频这里只有精品| 亚洲美女色禁图| 久久精品亚洲乱码伦伦中文| 欧美日韩一区二区三区在线看 | 欧美网站在线| 在线播放中文字幕一区| 亚洲自拍都市欧美小说| 欧美gay视频激情| 午夜伦欧美伦电影理论片| 欧美日韩国产三级| 亚洲国产精品999| 久久久777|