• <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.¢%

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

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

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

            不久前寫的一個小例子

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

            截獲到異常后,轉到異常處理程序中處理

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

            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] //這里故意制造一個內存違規異常 讀0?? 異常碼 0xC0000005?????? (2)
            ?? mov eax,eax?? //寫幾條無用指令留點空隙 便于調試
            ?? mov eax,eax
            ?? mov eax,eax
            ?? mov eax,eax
            ?? mov eax,eax
            ?? mov eax,eax
            ?? mov eax,eax
            //異常處理程序
            perThread_Handler:

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

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

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

            //新地址 設置完異常后到這里
            NewAddr:???????? (8) 這里繼續執行
            ?? 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
            //硬件異常模擬地址 到這里會出現硬件單步異常
            xxooxx:???????????? (9)到這里 會觸發硬件斷點異常 會跳回到 異常處理程序
            ?? 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;
            }

            看上去邏輯很亂 但是調試一下就真相大白了

            同樣可以做很猥瑣的事

            99久久国产亚洲高清观看2024 | 77777亚洲午夜久久多喷| 国产福利电影一区二区三区,免费久久久久久久精 | 日韩精品久久无码中文字幕| 日产久久强奸免费的看| 欧美国产精品久久高清| 久久久久久av无码免费看大片| 一本一道久久精品综合| 一级做a爰片久久毛片人呢| 久久精品国产亚洲网站| 成人精品一区二区久久| 狠狠色婷婷久久一区二区三区| 久久久噜噜噜www成人网| 99久久婷婷免费国产综合精品| 国产午夜免费高清久久影院| 久久久久亚洲AV成人片| 99久久免费国产精精品| 99热成人精品热久久669| 日本精品久久久中文字幕| 久久99精品久久久久久秒播| 久久AAAA片一区二区| 亚洲国产成人精品91久久久| 久久精品国产99国产精品亚洲| 精品无码久久久久国产动漫3d| 欧美噜噜久久久XXX| 99久久成人18免费网站| 久久久久亚洲AV成人网| 久久午夜夜伦鲁鲁片免费无码影视| 久久经典免费视频| 成人免费网站久久久| 国产福利电影一区二区三区久久久久成人精品综合| 国产精品成人精品久久久| 免费精品国产日韩热久久| 99国产欧美久久久精品蜜芽| 久久久久亚洲AV无码专区网站| 欧美激情一区二区久久久| 国内精品久久久久久久97牛牛| 久久久久一级精品亚洲国产成人综合AV区| 久久久久久久综合狠狠综合| 久久国产一区二区| 久久婷婷五月综合国产尤物app|