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

posts - 94, comments - 250, trackbacks - 0, articles - 0
  C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

NDIS HOOK是專(zhuān)業(yè)級(jí)防火墻使用的一種攔截技術(shù),NDIS HOOK的重點(diǎn)是如何獲得特定協(xié)議對(duì)應(yīng)NDIS_PROTOCOL_BLOCK指針,獲得了該指針,接下來(lái)就可以替換該協(xié)議所注冊(cè)的收發(fā)函數(shù),而達(dá)到攔截網(wǎng)絡(luò)數(shù)據(jù)的目的。
     獲 得NDIS_PROTOCOL_BLOCK指針的方法一般是用NdisRegisterProtocol注冊(cè)一個(gè)新的協(xié)議,所獲得的協(xié)議句柄實(shí)際上就是一 個(gè)NDIS_PROTOCOL_BLOCK指針,順著該指針遍歷NDIS_PROTOCOL_BLOCK鏈表,就可以找到你所要掛鉤的協(xié)議所對(duì)應(yīng)的 NDIS_PROTOCOL_BLOCK.之所以可以這樣做,是因?yàn)槊孔?cè)一個(gè)協(xié)議,系統(tǒng)都會(huì)把該協(xié)議對(duì)應(yīng)的NDIS_PROTOCOL_BLOCK放置 在協(xié)議鏈表的開(kāi)頭,該協(xié)議鏈表每個(gè)元素都是NDIS_PROTOCOL_BLOCK類(lèi)型,代表一個(gè)已經(jīng)注冊(cè)的協(xié)議。
     事 實(shí)上我們需要的只是TCPIP協(xié)議族的NDIS_PROTOCOL_BLOCK指針,畢竟TCP,IP,ARP,ICMP等等幾乎所有我們感興趣的協(xié)議, 都是在tcpip.sys協(xié)議驅(qū)動(dòng)里面實(shí)現(xiàn)的。如果我們只需要TCPIP協(xié)議所對(duì)應(yīng)的NDIS_PROTOCOL_BLOCK,那么上面的方法就有點(diǎn)繁瑣 了。我們可以試著尋找更簡(jiǎn)便的方法來(lái)獲得TCPIP協(xié)議的NDIS_PROTOCOL_BLOCK.
于 是我對(duì)tcpip.sys驅(qū)動(dòng)進(jìn)行了反匯編,發(fā)現(xiàn)NDIS_PROTOCOL_BLOCK指針存放在一個(gè)名為_(kāi)ARPHandle的全局變量里面,所以如 果能找到_ARPHandle的地址,我們就成功了,我們完全可以把該全局變量的偏移量作為一個(gè)常量來(lái)使用,但這里純粹為了拓寬思路,我介紹另一種找到該 全局變量的方法。
     Tcpip.sys有個(gè)導(dǎo)出函數(shù)叫IPDelayedNdisReEnumerateBindings,該函數(shù)內(nèi)部曾經(jīng)出現(xiàn)過(guò)_ARPHandle 的地址,為什么會(huì)出現(xiàn)它的地址呢,因?yàn)樵摵瘮?shù)內(nèi)部調(diào)用過(guò)NdisReEnumerateProtocolBindings函數(shù),懂得反匯編的應(yīng)該知道,在 用call指令調(diào)用函數(shù)之前,必然會(huì)用到push指令將函數(shù)的參數(shù)壓到棧里面去,不巧的是, NdisReEnumerateProtocolBindings函數(shù)只有一個(gè)參數(shù),而該參數(shù)恰恰是一個(gè)NDIS_PROTOCOL_BLOCK指針類(lèi) 型,在這里,實(shí)際上就是把_ARPHandle當(dāng)作參數(shù)傳給了
NdisReEnumerateProtocolBindings,所以_ARPHandle的地址必然會(huì)出現(xiàn)在push指令的后面,說(shuō)具體一點(diǎn),緊跟push指令的四個(gè)字節(jié)就是_ARPHandle的地址。
      所以具體的思路就是這樣,先找到IPDelayedNdisReEnumerateBindings函數(shù)的地址,然后從該函數(shù)的地址開(kāi)始搜索push指令的特征碼,搜到了以后,把緊跟push指令的四個(gè)字節(jié)作為指向NDIS_PROTOCOL_BLOCK指針的指針?lè)祷亍?br>     也許有的人會(huì)問(wèn),如果IPDelayedNdisReEnumerateBindings函數(shù)體內(nèi)部出現(xiàn)過(guò)多次push指令,豈不是會(huì)搜出不正確的地址,事實(shí)上,雖然都叫push指令,然而在機(jī)器碼級(jí)別是不同的,push指令的機(jī)器碼表示有十幾種之多,用來(lái)區(qū)別不同的尋址方式,調(diào)用NdisReEnumerateProtocolBindings 時(shí)用的push指令字節(jié)序列是0xff35,這個(gè)push指令表示后面緊跟的四個(gè)字節(jié)是一個(gè)內(nèi)存地址,而不是一個(gè)立即數(shù)或者寄存器之類(lèi)的。知道了這些,我 們就可以清楚,在一個(gè)有限的地址范圍,0xff35的唯一性是可以得到滿(mǎn)足的。根據(jù)我的觀(guān)察,在win2000,winxp,win2003上面,IPDelayedNdisReEnumerateBindings本身是一個(gè)很短的函數(shù),0xff35指令確實(shí)只出現(xiàn)過(guò)一次,所以該方法是很可靠的。
思路已經(jīng)出來(lái)了,下面我把詳細(xì)的代碼給大家貼出來(lái),理解這些代碼需要對(duì)windows Pe格式有所了解,如果你不想理解也行,代碼可以直接拿來(lái)用。
       以下是我寫(xiě)的一個(gè) 獲取內(nèi)核模塊某個(gè)導(dǎo)出函數(shù)地址的 通用例程。這里主要是為了獲取tcpip.sys模塊的導(dǎo)出函數(shù)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);//該函數(shù)用來(lái)獲得內(nèi)核模塊的基地址
    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函數(shù)的實(shí)現(xiàn):
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協(xié)議的NDIS_PROTOCOL_BLOCK指針的函數(shù)
   void* GetProtocolBlock()
{
    char* base;
    char bytes[]={0xff,0x35};
    base=GetRoutineAddress("tcpip.sys","IPDelayedNdisReEnumerateBindings");
     while(RtlCompareMemory(base,bytes,2)!=2)
    {
       base++;
    }
    return **((void***)(base+2));
}


只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   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>
            久久久91精品| 久久久久一区二区三区| 久久久久久欧美| 亚洲综合社区| 国产午夜亚洲精品理论片色戒 | 免费影视亚洲| 国产主播一区二区三区四区| 久久久久久久久伊人| 久久免费精品视频| 亚洲一级在线观看| 性8sex亚洲区入口| 亚洲美女区一区| 亚洲永久免费观看| 亚洲精品黄色| 久久久美女艺术照精彩视频福利播放| 亚洲高清自拍| 亚洲综合色在线| 欧美激情va永久在线播放| 亚洲日本va午夜在线影院| 亚洲欧美日韩一区在线观看| 亚洲黄色免费| 久久婷婷国产综合精品青草 | 午夜在线a亚洲v天堂网2018| 亚洲国产视频直播| 欧美亚洲日本国产| 性感少妇一区| 国产精品视频99| 亚洲少妇在线| 亚洲一区二区三区四区中文| 欧美久久久久久久久| 亚洲激情第一区| 一区在线视频观看| 久久久久久电影| 老色批av在线精品| 亚洲人永久免费| 欧美午夜电影在线| 宅男精品导航| 小黄鸭精品密入口导航| 国产欧美亚洲视频| 久久精品91久久久久久再现| 国产精品欧美久久久久无广告| 一本色道久久综合| 久久不射电影网| 1000部精品久久久久久久久| 欧美国产精品日韩| 亚洲无线视频| 亚洲国产精品久久| 亚洲永久字幕| 韩国久久久久| 欧美色区777第一页| 亚洲在线观看视频网站| 免费成人激情视频| 亚洲视屏在线播放| 亚洲国产另类久久久精品极度| 久久国产精品久久国产精品| 久久综合九色综合欧美狠狠| 亚洲精品在线看| 国产啪精品视频| 欧美乱在线观看| 久久精品国产亚洲精品| 亚洲第一偷拍| 亚洲一区二区在线视频 | 国产亚洲综合在线| 欧美区二区三区| 亚洲精品乱码久久久久久黑人 | 激情五月综合色婷婷一区二区| 美女脱光内衣内裤视频久久影院| 亚洲二区在线| 国产精品亚洲综合一区在线观看| 香蕉亚洲视频| 这里是久久伊人| 亚洲欧洲三级电影| 亚洲福利专区| 1000部精品久久久久久久久| 国产亚洲欧美日韩一区二区| 国产精品99一区二区| 国产精品久久久久99| 国产精品精品视频| 国产精品国产| 国产日韩欧美| 亚洲黄色一区二区三区| 亚洲国产成人精品女人久久久 | 久久这里只有| 久久乐国产精品| 玖玖国产精品视频| 欧美久久久久中文字幕| 国产精品久久久一区麻豆最新章节| 欧美日韩中文字幕在线视频| 国产精品a久久久久久| 国产伦精品一区二区| 激情欧美亚洲| 久久久国产一区二区| 久久夜色精品国产噜噜av| 欧美成人综合| 国产欧美一区二区在线观看| 一区在线观看视频| 午夜精品在线观看| 久久一区亚洲| 一区二区高清视频| 欧美成人国产va精品日本一级| 欧美四级电影网站| 国内欧美视频一区二区| 老司机精品导航| 亚洲卡通欧美制服中文| 久久gogo国模裸体人体| 欧美视频亚洲视频| 1769国产精品| 欧美一区二区三区在| 亚洲黄色毛片| 欧美mv日韩mv亚洲| 狠狠色综合播放一区二区| 小黄鸭精品aⅴ导航网站入口| 亚洲片国产一区一级在线观看| 久久精品国产欧美激情| 国产精品久久久久久久久久三级| 欧美一区二区三区四区夜夜大片 | 亚洲伦理网站| 国产精品乱码| 在线亚洲欧美视频| 亚洲电影网站| 欧美精品一区三区| 亚洲精品日韩久久| 亚洲激情视频在线| 欧美精品一区二区三| 一本久道久久久| 亚洲一级在线观看| 国产精品一区二区在线观看| 欧美在线看片a免费观看| 午夜一区二区三区不卡视频| 欧美一区二区三区久久精品| 亚洲一区亚洲| 激情一区二区| 欧美国产精品专区| 欧美日韩国产精品一区| 亚洲免费在线观看视频| 欧美一区二区三区精品| 亚洲国产成人久久| 一本色道久久99精品综合| 国产日韩精品一区| 最新成人在线| 夜色激情一区二区| 国产精品视频一| 欧美大片在线观看一区| 欧美四级在线观看| 久久免费偷拍视频| 欧美日韩一区在线观看| 久久久久久久一区二区| 欧美精品乱人伦久久久久久| 欧美一区二区三区精品电影| 蜜桃av一区二区三区| 欧美在线免费播放| 国产精品久久7| 亚洲黄色毛片| 91久久国产综合久久91精品网站| 亚洲资源在线观看| 亚洲欧美电影院| 欧美日韩视频免费播放| 亚洲第一免费播放区| 亚洲国产成人久久| 久久亚洲综合色一区二区三区| 久久精品三级| 国产精品一区二区久久精品 | 亚洲免费av片| 亚洲在线视频网站| 国产精品国产三级国产普通话99 | 亚洲欧美综合精品久久成人| 欧美日韩亚洲一区三区| 中文精品99久久国产香蕉| 亚洲专区一区二区三区| 欧美吻胸吃奶大尺度电影| 亚洲视频一区在线观看| 欧美一区二区黄| 韩国精品一区二区三区| 嫩草成人www欧美| 亚洲一区二区精品在线| 久久久精品国产一区二区三区| 黄色国产精品| 欧美日韩综合不卡| 亚洲欧美综合另类中字| 麻豆精品传媒视频| 中文一区二区在线观看| 国产日韩欧美精品| 欧美国产91| 欧美一二三视频| 亚洲毛片播放| 国产精品一区二区三区久久久| 久久久久久久成人| 亚洲香蕉网站| 亚洲日本欧美| 另类激情亚洲| 久久精品理论片| 亚洲一区二区三| 亚洲国产精品va| 国产一区二区中文字幕免费看| 欧美韩日一区二区三区| 久久精品日韩| 欧美在线中文字幕| 亚洲综合色网站| 亚洲淫性视频| 亚洲综合大片69999|