• <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++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            About ShutDown of Windows(五)

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

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

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

            ?所謂的注入,就是讓其它進程強制加載一個DLL的意思吧

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

            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 是另一個進程其中的一個線程,雖然沒返回錯誤碼,但到
            8800那條線程所在的進程看了下,并沒有注入HookTest.dll (使用 syscheck)

            原因是啥,還沒搞清楚

            Google到的資料
            http://bbs.pediy.com/showthread.php?p=445390
            http://edison.5d6d.com/thread-742-1-1.html
            明天再搞
            国产成人精品免费久久久久| 久久久久国色AV免费看图片| 精品久久久久久无码人妻热 | 久久精品成人欧美大片| 久久精品亚洲福利| 久久艹国产| 日韩精品无码久久一区二区三| 久久黄视频| 国产精品久久久久久久app| 亚洲欧美日韩精品久久亚洲区 | 久久精品国产一区| 国产国产成人精品久久| 热re99久久精品国产99热| 久久国产精品99久久久久久老狼| 99久久99久久| 久久精品国产半推半就| 精品蜜臀久久久久99网站| 久久精品国产免费| 一个色综合久久| 亚洲精品无码久久久久sm| 久久亚洲AV无码西西人体| 国产一区二区三区久久精品| 亚洲愉拍99热成人精品热久久 | 九九久久99综合一区二区| 99精品国产99久久久久久97| 久久久久国产一区二区| 一级做a爰片久久毛片人呢| 久久精品aⅴ无码中文字字幕不卡 久久精品aⅴ无码中文字字幕重口 | 久久精品一本到99热免费| 亚洲级αV无码毛片久久精品| 久久亚洲国产成人影院网站 | 久久综合久久综合亚洲| 久久99热这里只有精品国产| AAA级久久久精品无码区| 亚洲国产精品久久66| 久久精品这里热有精品| 久久91精品国产91久久小草| 精品国产福利久久久| 91久久成人免费| 久久99精品免费一区二区| 蜜桃麻豆www久久国产精品|