青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

yehao's Blog

掛鉤注入DLL

在windows核心編程中的第22章中提到了插入DLL和掛接API這個內(nèi)容,剛開始看到并不是很明白,所以當(dāng)時關(guān)于注入DLL ,我選取的是一個相對我自己而言比較容易理解的遠程注入,在做畢設(shè)的過程中,我發(fā)現(xiàn)掛鉤注入DLL其實是更加方便和強悍的一種方法,我也在網(wǎng)上搜索過很多例子,試圖先尋找一個樣板依葫蘆畫瓢,可是一直沒有滿意的,所以自己下定決心寫了一個,發(fā)現(xiàn)也沒那么難,仔細一點就好了,下面是原理和實現(xiàn)的過程。

眾所周知,windows這個強大的消息是基于事件驅(qū)動的,事件驅(qū)動就會引發(fā)消息,所以在窗口接受到消息之前可以對其進行一些你想要的處理就會發(fā)生窗口處理消息之前先處理你所需要的操作,就達到了消息過濾的過程,這個主要基于windows的消息機制——系統(tǒng)一旦發(fā)生操作就會引發(fā)消息,并將消息放到消息隊列中,應(yīng)用程序從消息隊列中獲取消息并發(fā)送到相應(yīng)的窗口讓鉤子函數(shù)在這個函數(shù)“有機可趁”。消息過濾與我所要講的掛鉤注入DLL又有什么聯(lián)系呢,主要是掛鉤注入DLL中用到一個函數(shù)SetWindowsHookEx,這個函數(shù)大家網(wǎng)上一搜一堆解讀,這邊就不做贅述,其第一個參數(shù)就是消息鉤子,也就是說,DLL所要注入的那個進程發(fā)送了某種消息給窗口后才會引發(fā)鉤子鉤住并注入DLL,這與消息過濾其實是一個意思。我這邊主要做的是注入特定的進程,而不是全局鉤子,其實全局鉤子也很簡單,只需要將上述函數(shù)的最后一個參數(shù)設(shè)為0,但這樣會導(dǎo)致,但凡發(fā)送了相同消息給窗口的都會導(dǎo)致鉤子鉤住并注入DLL執(zhí)行相應(yīng)處理,這樣我就不知道是不是我要的線程發(fā)送了這個消息,所以最后一個參數(shù)我傳遞了指定線程的ID。下面是實現(xiàn)的過程——將自己寫的Hooking.dll通過自己寫的應(yīng)用程序MyHook.exe注入到word進程,目前是在word進程已經(jīng)存在,由于設(shè)置的是WH_CBT鉤子,所以一旦word進程最大化或者成為活動窗口之類的就會發(fā)送相應(yīng)的消息,導(dǎo)致相應(yīng)的處理,這里我只是做簡單的處理比如在桌面上建立一個小文件。

1.首先打開VS2008,創(chuàng)建一個工程,在該工程下面創(chuàng)建兩個項目,一個是Hooking的DLL項目,一個是MyHook項目,是負責(zé)設(shè)置掛鉤的

2.在該DLL中主要就是掛鉤函數(shù)SetWindowsHookExW(WH_CBT, HookmProc, g_hinstDll, dwThread)和處理函數(shù)LRESULT CALLBACK HookmProc(int nCode, WPARAM wParam, LPARAM lParam),之所以能將DLL注入到指定進程,就是因為,以dwThread為ID的指定進程向窗口發(fā)送與WH_CBT掛鉤相關(guān)聯(lián)的消息,導(dǎo)致其執(zhí)行處理函數(shù)HookmProc,而處理函數(shù)又在以g_hinstDll為句柄的DLL中,所以必須先將DLL注入到指定進程才能執(zhí)行該處理函數(shù),處理函數(shù)這里只進行了簡單的操作證明其注入成功了,例如創(chuàng)建一個桌面文件。這里的DLL的句柄參數(shù)就是就是掛鉤函數(shù)所在的DLL ,但DLL并不執(zhí)行掛鉤函數(shù),而是作為接口,由MyHook.exe調(diào)用

3.所以MyHook模塊中主要就是加載Hooking.dll調(diào)用其接口函數(shù)SetHook,以指定被注入的線程的句柄為參數(shù),在這之前,先要遍歷系統(tǒng)進程找到WINWORD.EXE并將其線程句柄獲得傳入,這里用到了快照方法,這個也不做贅述,網(wǎng)上一堆。

4.由此,先啟動word進程并將其窗口最小化,然后運行程序就會得到想要的效果,DLL被注入,再最大化word窗口,桌面就會出現(xiàn)小文件

5.總結(jié)一下,這中間遇到了一些問題,但都與掛鉤注入DLL無關(guān),還是自己的基礎(chǔ)不牢。

下面要考慮的就是,加上監(jiān)視word啟動的代碼,這樣一旦word啟動了就進行上述操作,不啟動則不進行Hooking.h:
#ifndef Hooking_H
#define Hooking_H
extern "C" _declspec(dllexport)BOOL WINAPI SetHook(DWORD dwThread);
#endif

Hooking.cpp:
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include "Hooking.h"

LRESULT CALLBACK HookmProc(int nCode, WPARAM wParam, LPARAM lParam);
HHOOK g_hHook = NULL;
HINSTANCE g_hinstDll = NULL;

BOOL WINAPI Typedef_eSetHook(DWORD dwThread)
{
    g_hinstDll = GetModuleHandle(L"Hooking.dll");
    g_hHook = SetWindowsHookExW(WH_CBT, HookmProc, g_hinstDll, dwThread);

    if (NULL == g_hHook)
    {
        printf("sethook failed!");
    }
    return TRUE;
}

LRESULT CALLBACK HookmProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    CreateFileW(L"C:\\Users\\Administrator\\Desktop\\hook success.txt", GENERIC_READ|GENERIC_WRITE, 
        0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, NULL); 
    return(CallNextHookEx(g_hHook, nCode, wParam, lParam));
}

dllmian.cpp:
LRESULT CALLBACK HookmProc(int nCode, WPARAM wParam, LPARAM lParam);

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
        {
            /*g_hCurrentMoudle = hModule;
            g_hHook = SetWindowsHookExW(WH_KEYBOARD, HookmProc, hModule, 0);*/
            //LoadDll();//1.找出感興趣的進程 2.從證書中獲取密鑰 3.加載文件過濾DLL
        }
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}

Hooking.def:
LIBRARY    "Hooking"
EXPORTS
Typedef_eSetHook @1


在windows核心編程中的第22章中提到了插入DLL和掛接API這個內(nèi)容,剛開始看到并不是很明白,所以當(dāng)時關(guān)于注入DLL ,我選取的是一個相對我自己而言比較容易理解的遠程注入,在做畢設(shè)的過程中,我發(fā)現(xiàn)掛鉤注入DLL其實是更加方便和強悍的一種方法,我也在網(wǎng)上搜索過很多例子,試圖先尋找一個樣板依葫蘆畫瓢,可是一直沒有滿意的,所以自己下定決心寫了一個,發(fā)現(xiàn)也沒那么難,仔細一點就好了,下面是原理和實現(xiàn)的過程。

眾所周知,windows這個強大的消息是基于事件驅(qū)動的,事件驅(qū)動就會引發(fā)消息,所以在窗口接受到消息之前可以對其進行一些你想要的處理就會發(fā)生窗口處理消息之前先處理你所需要的操作,就達到了消息過濾的過程,這個主要基于windows的消息機制——系統(tǒng)一旦發(fā)生操作就會引發(fā)消息,并將消息放到消息隊列中,應(yīng)用程序從消息隊列中獲取消息并發(fā)送到相應(yīng)的窗口讓鉤子函數(shù)在這個函數(shù)“有機可趁”。消息過濾與我所要講的掛鉤注入DLL又有什么聯(lián)系呢,主要是掛鉤注入DLL中用到一個函數(shù)SetWindowsHookEx,這個函數(shù)大家網(wǎng)上一搜一堆解讀,這邊就不做贅述,其第一個參數(shù)就是消息鉤子,也就是說,DLL所要注入的那個進程發(fā)送了某種消息給窗口后才會引發(fā)鉤子鉤住并注入DLL,這與消息過濾其實是一個意思。我這邊主要做的是注入特定的進程,而不是全局鉤子,其實全局鉤子也很簡單,只需要將上述函數(shù)的最后一個參數(shù)設(shè)為0,但這樣會導(dǎo)致,但凡發(fā)送了相同消息給窗口的都會導(dǎo)致鉤子鉤住并注入DLL執(zhí)行相應(yīng)處理,這樣我就不知道是不是我要的線程發(fā)送了這個消息,所以最后一個參數(shù)我傳遞了指定線程的ID。下面是實現(xiàn)的過程——將自己寫的Hooking.dll通過自己寫的應(yīng)用程序MyHook.exe注入到word進程,目前是在word進程已經(jīng)存在,由于設(shè)置的是WH_CBT鉤子,所以一旦word進程最大化或者成為活動窗口之類的就會發(fā)送相應(yīng)的消息,導(dǎo)致相應(yīng)的處理,這里我只是做簡單的處理比如在桌面上建立一個小文件。

1.首先打開VS2008,創(chuàng)建一個工程,在該工程下面創(chuàng)建兩個項目,一個是Hooking的DLL項目,一個是MyHook項目,是負責(zé)設(shè)置掛鉤的

2.在該DLL中主要就是掛鉤函數(shù)SetWindowsHookExW(WH_CBT, HookmProc, g_hinstDll, dwThread)和處理函數(shù)LRESULT CALLBACK HookmProc(int nCode, WPARAM wParam, LPARAM lParam),之所以能將DLL注入到指定進程,就是因為,以dwThread為ID的指定進程向窗口發(fā)送與WH_CBT掛鉤相關(guān)聯(lián)的消息,導(dǎo)致其執(zhí)行處理函數(shù)HookmProc,而處理函數(shù)又在以g_hinstDll為句柄的DLL中,所以必須先將DLL注入到指定進程才能執(zhí)行該處理函數(shù),處理函數(shù)這里只進行了簡單的操作證明其注入成功了,例如創(chuàng)建一個桌面文件。這里的DLL的句柄參數(shù)就是就是掛鉤函數(shù)所在的DLL ,但DLL并不執(zhí)行掛鉤函數(shù),而是作為接口,由MyHook.exe調(diào)用

3.所以MyHook模塊中主要就是加載Hooking.dll調(diào)用其接口函數(shù)SetHook,以指定被注入的線程的句柄為參數(shù),在這之前,先要遍歷系統(tǒng)進程找到WINWORD.EXE并將其線程句柄獲得傳入,這里用到了快照方法,這個也不做贅述,網(wǎng)上一堆。

4.由此,先啟動word進程并將其窗口最小化,然后運行程序就會得到想要的效果,DLL被注入,再最大化word窗口,桌面就會出現(xiàn)小文件

5.總結(jié)一下,這中間遇到了一些問題,但都與掛鉤注入DLL無關(guān),還是自己的基礎(chǔ)不牢。

下面要考慮的就是,加上監(jiān)視word啟動的代碼,這樣一旦word啟動了就進行上述操作,不啟動則不進行


MyHook.h:
#pragma once

typedef BOOL(WINAPI *Typedef_eSetHook)(DWORD);

extern Typedef_eSetHook SetHook;

MyHook.cpp:
#include <Windows.h>
#include <TlHelp32.h>
#include "stdio.h"
#include "MyHook.h"
#include <conio.h>

Typedef_eSetHook  SetHook = NULL;

BOOL LoadNativeLibrary()
{
    HMODULE hDll = LoadLibraryW(L"..\\Debug\\Hooking.dll");
    if (hDll != NULL)
    {
        SetHook = (Typedef_eSetHook)GetProcAddress(hDll, MAKEINTRESOURCEA(1));
    }
    else
    {
        printf("LoadLibrary failed\n");
    }
    if(NULL == SetHook)
    {    
        printf("SetHook is null\n");
        OutputDebugStringA("0x103200 no init func.");
    }

    return TRUE;
}

int main()
{
    LoadNativeLibrary();
    DWORD dwProcessID = 0;
    HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, dwProcessID);
    if (hSnapshot == NULL)
    {
        return 0;
    }
    PROCESSENTRY32 processinfo = {0};
    processinfo.dwSize = sizeof(processinfo);
    Process32FirstW(hSnapshot, &processinfo);
    do 
    {
        if (0 == lstrcmpiW(processinfo.szExeFile, L"WINWORD.EXE"))
        {
            dwProcessID = processinfo.th32ProcessID;
            break;
        }

    } while (Process32NextW(hSnapshot, &processinfo));
    CloseHandle(hSnapshot);

    unsigned long pTID;
    _asm { 
        mov eax, fs:[0x18] 
        add eax, 36 
            mov [pTID], eax 
    } 
    DWORD threadID;
    HANDLE hProcess = OpenProcess(PROCESS_VM_READ, false, dwProcessID); 
    ReadProcessMemory(hProcess, (const void *)pTID, &threadID, 4, NULL); 
    SetHook(threadID);
    printf("...");
    getche();
    return 0;
}

其實一開始我主要是糾結(jié)于哪個函數(shù)放在哪個cpp還是dll里面,還有word干嘛了會讓setwindowshook函數(shù)將dll注入到其進程。后來我想自己肯定要有一個應(yīng)用程序去執(zhí)行掛鉤這個過程,本來想把setwindowshook這個函數(shù)也放在自己的應(yīng)用程序里,后來想想最好把其和處理函數(shù)放在一起,然后處理函數(shù)必然要在dll里,于是就把setwindowshook函數(shù)也放在dll里,因為放在dll里他也不會執(zhí)行,只要自己的應(yīng)用程序去執(zhí)行就行了,所以把setwindowshook這個函數(shù)封裝起來作為接口傳給自己的應(yīng)用程序,應(yīng)用程序一調(diào)用就進行掛鉤了而且也把這個dll注入到了相應(yīng)進程了。

以上肯定還有很多不完善和不正確的表述,也歡迎大家指出,謝謝!!!

posted on 2013-11-01 10:52 厚積薄發(fā) 閱讀(2026) 評論(0)  編輯 收藏 引用 所屬分類: Windows編程

導(dǎo)航

<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

統(tǒng)計

常用鏈接

留言簿

隨筆分類

文章分類

文章檔案

搜索

最新評論

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            米奇777超碰欧美日韩亚洲| 一本大道av伊人久久综合| 亚洲老板91色精品久久| 激情文学一区| 亚洲视频中文| 亚洲视频高清| 欧美激情一区在线观看| 免费成人网www| 国产亚洲精品7777| 亚洲一本大道在线| 亚洲尤物在线| 欧美日韩在线看| 亚洲精品你懂的| 国内精品久久久久久影视8| 午夜精品成人在线| 性色av香蕉一区二区| 国产精品豆花视频| 99精品国产热久久91蜜凸| 亚洲精品日韩在线观看| 欧美成人午夜免费视在线看片| 久久久精品日韩欧美| 国产日产高清欧美一区二区三区| 一区二区三区日韩欧美精品| 亚洲综合视频一区| 国产精品国产三级国产专播品爱网| 亚洲精品一区久久久久久 | 毛片一区二区| 欧美不卡福利| 亚洲国产精选| 欧美激情视频给我| 亚洲精品资源| 亚洲男人影院| 国产麻豆精品视频| 久久se精品一区二区| 另类天堂视频在线观看| 亚洲激情小视频| 欧美刺激性大交免费视频 | 蜜臀99久久精品久久久久久软件| 黄色工厂这里只有精品| 久久精品最新地址| 亚洲第一区在线观看| 亚洲精品小视频在线观看| 欧美日本在线| 亚洲一区二区三区四区五区黄| 欧美一区在线视频| 在线成人激情| 欧美日韩八区| 午夜在线视频观看日韩17c| 久久中文精品| 一区二区欧美在线观看| 国产精品资源在线观看| 久久久中精品2020中文| 亚洲美女色禁图| 久久成人人人人精品欧| 亚洲欧洲一区二区三区在线观看 | 久久这里有精品15一区二区三区| 亚洲国产欧美不卡在线观看| 亚洲午夜av| 含羞草久久爱69一区| 欧美成人综合一区| 亚洲一区在线免费| 麻豆成人在线观看| 亚洲女人天堂av| 在线精品视频在线观看高清| 欧美日韩国产二区| 久久国产主播精品| 日韩亚洲欧美一区二区三区| 久久久久久69| 中文在线资源观看网站视频免费不卡 | 国产精品99久久久久久久久久久久 | 牛牛影视久久网| 亚洲欧美色一区| 亚洲欧洲一区二区三区久久| 国产精品网站在线观看| 欧美岛国激情| 久久久久国色av免费看影院| 在线一区二区三区做爰视频网站| 蜜桃久久av| 久久精品视频网| 亚洲一区精彩视频| 亚洲精选国产| 在线欧美一区| 国产亚洲精品久久久久久| 欧美日韩一区二区三区| 免费看亚洲片| 久久久综合免费视频| 亚洲综合精品四区| 宅男精品视频| 亚洲每日更新| 亚洲国产婷婷综合在线精品 | 亚洲欧美日韩爽爽影院| 亚洲精品看片| 亚洲大胆美女视频| 国产亚洲一区二区精品| 国产精品欧美日韩一区二区| 欧美日韩第一页| 欧美国产日韩一二三区| 蜜桃av噜噜一区| 久久婷婷综合激情| 久久av资源网| 久久国内精品视频| 欧美在线免费视频| 亚洲欧美视频| 亚洲欧美国产va在线影院| 一区二区三区视频免费在线观看| 亚洲精品色婷婷福利天堂| 亚洲高清视频一区二区| 欧美77777| 蜜臀av性久久久久蜜臀aⅴ| 久久久久国色av免费观看性色| 欧美一区免费视频| 久久久777| 老司机久久99久久精品播放免费| 久久久亚洲影院你懂的| 快she精品国产999| 欧美 亚欧 日韩视频在线| 欧美高清视频| 亚洲日本激情| 亚洲色图在线视频| 性感少妇一区| 久久婷婷影院| 欧美日韩国产一区二区三区| 欧美日韩国产首页| 国产精品日韩一区二区三区| 国产日韩欧美视频在线| 激情成人亚洲| 亚洲久色影视| 亚洲欧美一区二区激情| 久久九九久精品国产免费直播 | 亚洲电影观看| 99视频在线精品国自产拍免费观看 | 国产日本欧美一区二区| 影音先锋中文字幕一区| 99国产精品| 久久成人免费网| 欧美韩国日本一区| 国产精品99久久久久久久vr| 欧美一级片一区| 欧美电影免费观看高清完整版| 国产精品av免费在线观看| 国产亚洲激情在线| 99xxxx成人网| 久久久亚洲欧洲日产国码αv| 欧美色播在线播放| 国产一区视频网站| 一区二区三区视频在线看| 午夜精品亚洲| 欧美岛国激情| 亚洲视频香蕉人妖| 久久综合图片| 国产乱码精品一区二区三区av| 在线观看国产成人av片| 亚洲欧美日本国产有色| 欧美激情黄色片| 午夜精品av| 欧美肉体xxxx裸体137大胆| 在线免费日韩片| 欧美一区二区国产| 亚洲精品一线二线三线无人区| 久久精品免费| 国产精品久久久久毛片大屁完整版 | 亚洲深夜福利网站| 欧美四级在线观看| 亚洲欧美日韩精品在线| 亚洲自拍都市欧美小说| 国产精品一区二区你懂得| 亚洲免费在线观看视频| 亚洲一卡久久| 国产一区自拍视频| 久久综合一区二区| 久久久久久亚洲精品杨幂换脸 | 欧美va亚洲va香蕉在线| 久久综合久久综合久久| 亚洲人永久免费| 亚洲美女区一区| 国产精品系列在线播放| 久久成人综合网| 久久综合99re88久久爱| 日韩视频免费在线| 在线综合亚洲| 含羞草久久爱69一区| 亚洲高清av在线| 欧美视频在线一区二区三区| 欧美一区二区三区啪啪| 久久激情一区| 亚洲美女黄色| 亚洲欧美www| 亚洲国产99精品国自产| 亚洲精选一区| 国产一区二区日韩精品欧美精品 | 久久精品国产亚洲aⅴ| 亚洲国产婷婷香蕉久久久久久| 亚洲欧洲精品一区二区三区 | 国产精品亚洲人在线观看| 久久人人97超碰精品888| 欧美aⅴ99久久黑人专区| 亚洲一区二区三区四区五区午夜| 午夜精品久久久久99热蜜桃导演| 亚洲第一页在线| 亚洲一级在线观看|