• <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>

            S.l.e!ep.¢%

            像打了激速一樣,以四倍的速度運轉(zhuǎn),開心的工作
            簡單、開放、平等的公司文化;尊重個性、自由與個人價值;
            posts - 1098, comments - 335, trackbacks - 0, articles - 1
              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            無處不在的HOOK之---DRx異常HOOK

            Posted on 2010-01-04 21:59 S.l.e!ep.¢% 閱讀(759) 評論(0)  編輯 收藏 引用 所屬分類: RootKit
            無處不在的HOOK之---DRx異常HOOK
            2009-08-13 22:09

            不久前寫的一個小例子

            利用硬件斷點異常的鉤子方式

            截獲到異常后,轉(zhuǎn)到異常處理程序中處理

            流程(1) (2) (3)代表執(zhí)行步驟

            code:---------------------------------------------

            #include <windows.h>

            //消息輸出

            void WINAPI MsgXXX(DWORD id)
            {
            char szid[100];
            wsprintf(szid,"錯誤碼:%08Xh",id);
            ::MessageBox(NULL,szid,"XXX",0);

            }


            int main()
            {
            __asm
            {

            ?? push offset perThread_Handler //異常處理程序入口???????? (1)
            ?? push fs:[0]
            ?? mov fs:[0],esp //修改異常處理

            ?? xor eax,eax
            ?? mov eax,[eax] //這里故意制造一個內(nèi)存違規(guī)異常 讀0?? 異常碼 0xC0000005?????? (2)
            ?? mov eax,eax?? //寫幾條無用指令留點空隙 便于調(diào)試
            ?? mov eax,eax
            ?? mov eax,eax
            ?? mov eax,eax
            ?? mov eax,eax
            ?? mov eax,eax
            ?? mov eax,eax
            //異常處理程序
            perThread_Handler:

            ?? push ebp?????????????????????????????? (3)從2出現(xiàn)了內(nèi)存異常 直接轉(zhuǎn)到異常處理程序?? & (10)下面的硬件異常同樣會到這里
            ?? mov ebp,esp
            ?? push ecx
            ?? mov ecx,dword ptr[ebp+08h] //獲取錯誤碼指針
            ?? mov ecx,dword ptr[ecx]?? //獲取錯誤碼
            ?? cmp ecx,0C0000005h??? //比較是否為制造的內(nèi)存錯誤
            ?? je memError????????????????????????????????????????????????????????????????? (4)確定為內(nèi)存異常 跳到memError
            ?? cmp ecx,080000004h??? //比較是否為硬件斷點
            ?? je memDRx
            ?? mov eax,1????? //都不是 那就是程序自身異常 交由程序自身異常處理程序處理
            ?? jmp End
            ??
            //如果是制造的那個內(nèi)存錯誤
            memError:????????????????????????????????????? (5)從4跳到了這里 這里設(shè)置硬件斷點
            ?? push ecx
            ?? call MsgXXX
            ?? mov eax,dword ptr [ebp+10h] //獲取線程寄存器結(jié)構(gòu)
            ?? mov ecx,offset xxooxx?? //模擬一個硬件斷點地址?????
            ?? mov dword ptr [eax+04h],ecx //把斷點地址放入到DR0
            ?? mov ecx,101h???? //DR7參數(shù)
            ?? mov dword ptr [eax+18h],ecx //把參數(shù)放到DR7
            ?? mov ecx,offset NewAddr?? //異常處理程序結(jié)束后要返回的地址
            ?? mov dword ptr [eax+0B8h],ecx//這里把EIP修改成新地址
            ?? mov eax,0????? //返回0 表示異常處理程序處理完后繼續(xù)處理
            ?? jmp End???????????? (6)

            //硬件斷點異常
            memDRx:
            ?? push ecx
            ?? call MsgXXX
            ?? mov eax,dword ptr [ebp+10h] //獲取結(jié)構(gòu)
            ?? mov ecx,offset NewAddr?? //設(shè)置新地址
            ?? mov dword ptr [eax+0B8h],ecx//修改EIP
            ?? mov eax,0
            ?? jmp End

            End:
            ?? pop ecx?????? (7)這里ret后 會到NewAddr 地址處 因為設(shè)置了新EIP是這里
            ?? pop ebp
            ?? ret

            //新地址 設(shè)置完異常后到這里
            NewAddr:???????? (8) 這里繼續(xù)執(zhí)行
            ?? mov eax,eax
            ?? push 1
            ?? call MsgXXX
            ?? mov eax,eax
            ?? mov eax,eax
            ?? mov eax,eax
            ?? mov eax,eax
            ?? mov eax,eax
            ?? mov eax,eax
            ?? mov eax,eax
            ?? mov eax,eax
            ?? mov eax,eax
            ?? mov eax,eax
            //硬件異常模擬地址 到這里會出現(xiàn)硬件單步異常
            xxooxx:???????????? (9)到這里 會觸發(fā)硬件斷點異常 會跳回到 異常處理程序
            ?? mov ebx,ebx
            ?? mov ebx,ebx
            ?? mov ebx,ebx
            ?? mov ebx,ebx
            ?? mov ebx,ebx
            ?? mov ebx,ebx???? (.?)所以永遠到不了這里
            ?? mov ebx,ebx
            ?? mov ebx,ebx
            ?? mov ebx,ebx

            }
            return 0;
            }

            看上去邏輯很亂 但是調(diào)試一下就真相大白了

            同樣可以做很猥瑣的事

            2022年国产精品久久久久| 情人伊人久久综合亚洲| 怡红院日本一道日本久久 | 亚洲国产天堂久久综合网站| 国产成人精品久久一区二区三区av| 久久无码一区二区三区少妇 | 国产亚州精品女人久久久久久 | 青青草国产成人久久91网| 伊人热热久久原色播放www| 久久精品aⅴ无码中文字字幕不卡 久久精品aⅴ无码中文字字幕重口 | 久久99国产精品二区不卡| 国产激情久久久久影院小草| 久久久久久久波多野结衣高潮 | 久久亚洲精精品中文字幕| 久久国产午夜精品一区二区三区| 久久这里只有精品首页| 国产亚洲精午夜久久久久久| 久久香综合精品久久伊人| 色综合合久久天天给综看| 久久se精品一区精品二区| 综合网日日天干夜夜久久 | 大美女久久久久久j久久| 久久久久久夜精品精品免费啦 | 国产精品一区二区久久精品无码| 日日躁夜夜躁狠狠久久AV| 国产精品久久久久久久app | 久久99国产精品久久99| av午夜福利一片免费看久久| 麻豆精品久久久久久久99蜜桃| 国产福利电影一区二区三区久久老子无码午夜伦不 | 精品久久久久久久中文字幕| 国产一区二区三区久久精品| 精品国产99久久久久久麻豆| 狠狠综合久久综合88亚洲 | 潮喷大喷水系列无码久久精品| 日本人妻丰满熟妇久久久久久| 久久精品人人做人人爽电影 | 国产V亚洲V天堂无码久久久| 国产91色综合久久免费分享| 青青青青久久精品国产| 伊人丁香狠狠色综合久久|