人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當前位置:蘿卜系統 > 網絡技術教程 > 詳細頁面

防范全局鉤子的侵入

防范全局鉤子的侵入

更新時間:2021-10-03 文章作者:未知 信息來源:網絡 閱讀次數:

網絡技術是從1990年代中期發展起來的新技術,它把互聯網上分散的資源融為有機整體,實現資源的全面共享和有機協作,使人們能夠透明地使用資源的整體能力并按需獲取信息。資源包括高性能計算機、存儲資源、數據資源、信息資源、知識資源、專家資源、大型數據庫、網絡、傳感器等。 當前的互聯網只限于信息共享,網絡則被認為是互聯網發展的第三階段。
Author: pjf(jfpan20000@sina.com)

  Windows消息鉤子一般都很熟悉了。它的用處很多,耳熟能詳的就有——利用鍵盤鉤子獲取目標進程的鍵盤輸入,從而獲得各類密碼以達到不可告人的目的。朋友想讓他的軟件不被別人的全局鉤子監視,有沒有辦法實現呢?答案是肯定的,不過缺陷也是有的。

  首先簡單看看全局鉤子如何注入別的進程。

  消息鉤子是由Win32子系統提供,其核心部分通過NtUserSetWindowsHookEx為用戶提供了設置消息鉤子的系統服務,用戶通過它注冊全局鉤子。當系統獲取某些事件,比如用戶按鍵,鍵盤driver將掃描碼等傳入win32k的KeyEvent處理函數,處理函數判斷有無相應hook,有則callhook。此時,系統取得Hook對象信息,若目標進程沒有裝載對應的Dll,則裝載之(利用KeUserModeCallback“調用”用戶例程,它與Apc調用不同,它是仿制中斷返回環境,其調用是“立即”性質的)。

  進入用戶態的KiUserCallbackDispatcher后,KiUserCallbackDispatcher根據傳遞的數據獲取所需調用的函數、參數等,隨后調用。針對上面的例子,為裝載hook dll,得到調用的是LoadLibraryExW,隨后進入LdrLoadDll,裝載完畢后返回,后面的步驟就不敘述了。

  從上面的討論我們可以得出一個最簡單的防侵入方案:在加載hook dll之前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();
}

網絡的神奇作用吸引著越來越多的用戶加入其中,正因如此,網絡的承受能力也面臨著越來越嚴峻的考驗―從硬件上、軟件上、所用標準上......,各項技術都需要適時應勢,對應發展,這正是網絡迅速走向進步的催化劑。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

網站地圖xml | 網站地圖html
主站蜘蛛池模板: 黑山县| 剑川县| 邵东县| 延庆县| 蒙阴县| 陆良县| 楚雄市| 达日县| 元朗区| 通江县| 南乐县| 阿拉善盟| 盐山县| 阿荣旗| 马关县| 祁东县| 云南省| 丹江口市| 中阳县| 宁夏| 资溪县| 隆尧县| 洛阳市| 屏东市| 嘉定区| 浏阳市| 富民县| 托里县| 邵武市| 平武县| 绥江县| 体育| 侯马市| 高尔夫| 灵武市| 玉龙| 太白县| 义乌市| 高邮市| 博湖县| 蓝田县|