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

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

            About ShutDown of Windows(五)

            Posted on 2009-11-20 00:29 S.l.e!ep.¢% 閱讀(281) 評論(0)  編輯 收藏 引用 所屬分類: RootKit
            About ShutDown of Windows(四)

            天氣很冷,接著折騰
            利用Windows Hooks注入

            Windows系統(tǒng)給我們提供了一些掛鉤函數(shù),
            使得被掛鉤的進(jìn)程可以在自己處理接收到的消息之前,
            先執(zhí)行我們的消息處理函數(shù),
            而這個消息處理函數(shù)一般會放在DLL中,
            來讓目標(biāo)進(jìn)程加載,這實(shí)際上已經(jīng)達(dá)到了注入代碼的效果。
            一般情況下,我們把掛鉤函數(shù)和消息處理函數(shù)都放在dll中:

            ?所謂的注入,就是讓其它進(jìn)程強(qiáng)制加載一個DLL的意思吧

            二至四中,忽悠到了 SetHook... 的最后一個參數(shù)

            WINUSERAPI
            HHOOK
            WINAPI
            SetWindowsHookExW(
            ??? int idHook,
            ??? HOOKPROC lpfn,
            ??? HINSTANCE hmod,
            ??? DWORD dwThreadId);

            最后一個是需要注入的 Thread ID

            HOOKDLL_API?void?Hook(void)
            {
            ????
            //?TODO:?Add?extra?initialization?here
            #ifndef?WH_KEYBOARD_LL
            #define?WH_KEYBOARD_LL?13
            #endif

            ????g_Hook?
            =?SetWindowsHookEx(WH_KEYBOARD_LL,?MyKeyHook,?g_IT,?8800);
            ????
            ????
            if(?g_Hook?==?NULL?)
            ????{
            ????????
            char?szBuf[200]=?{0};
            ????????sprintf(szBuf,?
            "Failed?to?Set?Hook?(%d)",?GetLastError());
            ????????MessageBox(NULL,?szBuf,?NULL,?MB_OK);
            ????}
            //????return?42;
            }

            返回的錯誤碼是 87
            Google 告訴我,WH_KEYBOARD_LL 不支持線程,只能用 WH_KEYBOARD

            修改了下代碼
            //?HookDLL.cpp?:?Defines?the?entry?point?for?the?DLL?application.
            //

            #include?
            "stdafx.h"
            #include?
            "HookDLL.h"
            #include?
            <stdio.h>

            HINSTANCE?g_IT;

            BOOL?APIENTRY?DllMain(?HINSTANCE?hInstance,?
            ???????????????????????DWORD??ul_reason_for_call,?
            ???????????????????????LPVOID?lpReserved
            ?????????????????????)
            {
            ????g_IT?
            =?hInstance;

            ????
            switch?(ul_reason_for_call)
            ????{
            ????????
            case?DLL_PROCESS_ATTACH:
            ????????????MessageBox(NULL,?
            "DLL_PROCESS_ATTACH",?"",?MB_OK);
            ????????????
            break;

            ????????
            case?DLL_THREAD_ATTACH:
            ????????????MessageBox(NULL,?
            "DLL_THREAD_ATTACH",?"",?MB_OK);
            ????????????
            break;

            ????????
            case?DLL_THREAD_DETACH:
            ????????????MessageBox(NULL,?
            "DLL_THREAD_DETACH",?"",?MB_OK);
            ????????????
            break;

            ????????
            case?DLL_PROCESS_DETACH:
            ????????????MessageBox(NULL,?
            "DLL_PROCESS_DETACH",?"",?MB_OK);
            ????????????
            break;
            ????}
            ????
            return?TRUE;
            }


            //?This?is?an?example?of?an?exported?variable
            HOOKDLL_API?int?nHookDLL=0;

            HHOOK?g_Hook?
            =?NULL;

            LRESULT?CALLBACK?MyKeyHook(
            int?code,?WPARAM?wParam,?LPARAM?lParam)
            {
            #if?(_WIN32_WINNT?<?0x0400)
            /*
            *?Structure?used?by?WH_KEYBOARD_LL
            ????
            */
            ????typedef?
            struct?tagKBDLLHOOKSTRUCT?{
            ????????DWORD???vkCode;
            ????????DWORD???scanCode;
            ????????DWORD???flags;
            ????????DWORD???time;
            ????????DWORD???dwExtraInfo;
            ????}?KBDLLHOOKSTRUCT,?FAR?
            *LPKBDLLHOOKSTRUCT,?*PKBDLLHOOKSTRUCT;
            #endif
            ????
            ????PKBDLLHOOKSTRUCT?kbDLLHOOK?
            =?(PKBDLLHOOKSTRUCT)lParam;
            ????
            ????
            const?char?*info?=?NULL;
            ????
            ????
            if?(wParam?==?WM_KEYDOWN)
            ????????info?
            =?"key?down";????
            ????
            else?if?(wParam?==?WM_KEYUP)
            ????????info?
            =?"key?up";
            ????
            else?if?(wParam?==?WM_SYSKEYDOWN)
            ????????info?
            =?"sys?key?down";????
            ????
            else?if?(wParam?==?WM_SYSKEYUP)
            ????????info?
            =?"sys?key?up";
            ????
            ????
            //FILE*?f?=?fopen("hook.txt",?"a+");
            ????
            ????
            //CString?strLog;
            ????
            //strLog.Format("%s?-?vkCode?[%04x],?[%c]?scanCode?[%04x]\n",?info,?kbDLLHOOK->vkCode,?kbDLLHOOK->vkCode,?kbDLLHOOK->scanCode);
            ????
            ????
            //fwrite(strLog,?1,?strLog.GetLength(),?f);
            ????
            //fclose(f);
            ????
            ????
            //?always?call?next?hook
            ????
            //?return?CallNextHookEx(g_Hook,?code,?wParam,?lParam);

            ????
            return?TRUE;
            }????

            //?This?is?an?example?of?an?exported?function.
            HOOKDLL_API?void?Hook(void)
            {
            ????
            //?TODO:?Add?extra?initialization?here
            #ifndef?WH_KEYBOARD_LL
            #define?WH_KEYBOARD_LL?13
            #endif

            ????g_Hook?
            =?SetWindowsHookEx(WH_KEYBOARD_LL,?MyKeyHook,?g_IT,?8800);
            ????
            ????
            if(?g_Hook?==?NULL?)
            ????{
            ????????
            char?szBuf[200]=?{0};
            ????????sprintf(szBuf,?
            "Failed?to?Set?Hook?(%d)",?GetLastError());
            ????????MessageBox(NULL,?szBuf,?NULL,?MB_OK);
            ????}
            //????return?42;
            }

            //?This?is?the?constructor?of?a?class?that?has?been?exported.
            //?see?HookDLL.h?for?the?class?definition
            CHookDLL::CHookDLL()
            {?
            ????
            return;?
            }



            void?CHookTestDlg::OnButton1()?
            {
            ????TCHAR?szPath[MAX_PATH]?
            =?{0};
            ????GetModuleFileName(NULL,?szPath,?MAX_PATH);
            ?????PathRenameExtension(szPath,?_T(
            ""));

            ????typedef?
            void?(*TYPE_pfnLoadLibrary)();
            ????TYPE_pfnLoadLibrary?pfnLoadLibrary?
            =?NULL;

            ????HMODULE?Module?
            =?LoadLibrary(szPath);
            ????pfnLoadLibrary?
            =?(TYPE_pfnLoadLibrary)GetProcAddress(Module,?"Hook");
            ????
            ????pfnLoadLibrary();
            }

            其中,8800 是另一個進(jìn)程其中的一個線程,雖然沒返回錯誤碼,但到
            8800那條線程所在的進(jìn)程看了下,并沒有注入HookTest.dll (使用 syscheck)

            原因是啥,還沒搞清楚

            Google到的資料
            http://bbs.pediy.com/showthread.php?p=445390
            http://edison.5d6d.com/thread-742-1-1.html
            明天再搞
            影音先锋女人AV鲁色资源网久久| 亚洲午夜久久久久久久久电影网 | 久久精品国产99久久久古代| 亚洲级αV无码毛片久久精品| 久久精品国产亚洲AV无码娇色| 国产精品va久久久久久久| 日韩中文久久| 久久久久亚洲精品天堂| 国产成人精品久久亚洲高清不卡 | 久久久久综合中文字幕| 国内精品久久久久| 久久久久久精品久久久久| 久久久久久久综合日本亚洲| 久久丫精品国产亚洲av| 久久精品国产99久久久古代| 九九久久精品国产| 精品国产青草久久久久福利| 久久久久亚洲精品天堂| 香蕉久久夜色精品国产2020| 欧美久久一区二区三区| 久久精品国产91久久综合麻豆自制| 久久青青色综合| 久久久久99精品成人片三人毛片 | 久久人人爽人人爽人人片AV不| 久久综合狠狠综合久久97色| 久久精品国产99国产精品澳门| 亚洲色婷婷综合久久| 狠狠色丁香久久婷婷综合蜜芽五月| 久久人人爽人人爽AV片| 91久久成人免费| 欧美精品一区二区久久| 91精品国产91久久久久久| 99久久精品毛片免费播放| 久久r热这里有精品视频| 精品永久久福利一区二区| 久久线看观看精品香蕉国产| 久久久国产乱子伦精品作者| 人妻丰满AV无码久久不卡| 日韩精品久久久肉伦网站 | 精品国产一区二区三区久久蜜臀| 久久精品免费观看|