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

            轉載: 防止全局鉤子的侵入

            Posted on 2010-01-08 11:11 S.l.e!ep.¢% 閱讀(483) 評論(0)  編輯 收藏 引用 所屬分類: RootKit

            ? 轉載: 防止全局鉤子的侵入 收藏
            轉載: 防止全局鉤子的侵入
            http://202.38.73.222/~pjf/blog/archives/000040.html

            Author: pjf(jfpan20000@sina.com)
            Windows消息鉤子一般都很熟悉了。它的用處很多,耳熟能詳的就有——利用鍵盤鉤子獲取目標進程的鍵盤輸入,從而獲得各類密碼以達到不可告人的目的。朋友想讓他的軟件不被別人的全局鉤子監視,有沒有辦法實現呢?答案是肯定的,不過缺陷也是有的:)。
            首先簡單看看全局鉤子如何注入別的進程。
            消息鉤子是由Win32子系統提供,其核心部分通過NtUserSetWindowsHookEx為用戶提供了設置消息鉤子的系統服務,用戶通過它注冊全局鉤子。當系統獲取某些事件,比如用戶按鍵,鍵盤driver將掃描碼等傳入win32k的KeyEvent處理函數,處理函數判斷有無相應hook,有則callhook。此時,系統取得Hook對象信息,若目標進程沒有裝載對應的Dll,則裝載之(利用KeUserModeCallback“調用”用戶例程,它與Apc調用不同,它是仿制中斷返回環境,其調用是“立即”性質的)。
            進入用戶態的KiUserCallbackDispatcher后,KiUserCallbackDispatcher根據傳遞的數據獲取所需調用的函數、參數等,隨后調用。針對上面的例子,為裝載hook dll,得到調用的是LoadLibraryExW,隨后進入LdrLoadDll,裝載完畢后返回,后面的步驟就不敘述了。
            從上面的討論我們可以得出一個最簡單的防侵入方案:hook api使得加載失敗,不過有一個缺陷:系統并不會因為一次的失敗而放棄,每次有消息產生欲call hook時系統都會試圖在你的進程加載dll,這對于性能有些微影響,不過應該感覺不到。剩下一個問題就是不是所有的LoadLibraryExW都應攔截,這個容易解決,比如判斷返回地址。下面給出一個例子片斷,可以添加一些判斷使得某些允許加載的hook dll被加載。
            這里hook api使用了微軟的detours庫,隨需要修改。

            typedef HMODULE (__stdcall *LOADLIB)(
            LPCWSTR lpwLibFileName,
            HANDLE hFile,
            DWORD dwFlags
            );

            extern "C" {
            DETOUR_TRAMPOLINE(HMODULE __stdcall Real_LoadLibraryExW(
            LPCWSTR lpwLibFileName,
            HANDLE hFile,
            DWORD dwFlags),
            LoadLibraryExW);
            }

            ULONG user32 = 0;

            HMODULE __stdcall Mine_LoadLibraryExW(
            LPCWSTR lpwLibFileName,
            HANDLE hFile,
            DWORD dwFlags)
            {
            ULONG addr;

            _asm mov eax, [ebp+4]
            _asm mov addr, eax

            if ((user32 & 0xFFFF0000) == (addr & 0xFFFF0000))
            {
            return 0;
            }

            HMODULE res = (LOADLIB(Real_LoadLibraryExW)) (
            lpwLibFileName,
            hFile,
            dwFlags );

            return res;
            }

            BOOL ProcessAttach()
            {
            DetourFunctionWithTrampoline((PBYTE)Real_LoadLibraryExW,
            (PBYTE)Mine_LoadLibraryExW);
            return TRUE;
            }

            BOOL ProcessDetach()
            {
            DetourRemove((PBYTE)Real_LoadLibraryExW,
            (PBYTE)Mine_LoadLibraryExW);
            return TRUE;
            }

            CAnti_HookApp::CAnti_HookApp() //在使用用戶界面服務前調用ProcessAttach
            {
            user32 = (ULONG)GetModuleHandle("User32.dll");
            ProcessAttach();
            }


            本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/Mrkang/archive/2005/05/27/381894.aspx

            国产综合精品久久亚洲| 欧美久久亚洲精品| 波多野结衣AV无码久久一区| 国产精品视频久久久| 亚洲AV日韩AV永久无码久久| 久久久无码精品亚洲日韩京东传媒 | 一级做a爰片久久毛片16| 色欲综合久久躁天天躁蜜桃| 久久中文字幕人妻丝袜| 99久久免费国产精品特黄| 久久经典免费视频| 少妇久久久久久被弄高潮| 狠狠色丁香久久婷婷综合五月| 国产亚洲精品自在久久| 久久久久久a亚洲欧洲aⅴ| 91性高湖久久久久| 欧美午夜精品久久久久久浪潮| 2021最新久久久视精品爱| 亚洲va久久久噜噜噜久久| 一本久久知道综合久久| 超级碰碰碰碰97久久久久| 97精品依人久久久大香线蕉97| 久久久无码一区二区三区| 精品999久久久久久中文字幕| 久久精品亚洲乱码伦伦中文| 国产69精品久久久久观看软件| 久久亚洲精品人成综合网| 久久福利青草精品资源站免费| 精品无码人妻久久久久久| 久久久久久久久久久精品尤物| 久久精品a亚洲国产v高清不卡| 久久青草国产精品一区| 亚洲欧美日韩精品久久亚洲区 | 伊人久久大香线蕉综合热线| 久久天天婷婷五月俺也去| AV无码久久久久不卡蜜桃| 久久九九久精品国产| 日韩精品久久久久久久电影蜜臀 | segui久久国产精品| 99精品久久精品一区二区| 国产午夜精品久久久久九九电影|