日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言dll注入进程,DLL注入--设置消息钩子

發布時間:2023/12/31 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言dll注入进程,DLL注入--设置消息钩子 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

通過設置消息鉤子,達到和dll注入相同的目的,但這個方法與其他DLL注入方法又不一樣,它不會把自己的DLL加載到目標進程,所以也就實現不來DLL的隱藏,這樣很容易被殺軟KILL掉,親測360秒殺,但實現簡單還有有相當的應用場景,下面是一個通用的消息勾取主函數,它將關鍵的消息勾取函數SetWindowsHookEx函數放到了DLL當中,通過DLL調用來實現消息勾取,因為此邏輯相對簡單,此處就不詳細介紹,直接貼代碼。//?keyboard_test.cpp?:?定義控制臺應用程序的入口點。

//

#include?"stdafx.h"

#include?"windows.h"

#define?DEF_DLL_NAME?"KeyHook_Con.dll"

#define?DEF_HOOKSTART?"HookStart"

#define?DEF_HOOKSTOP?"HookStop"

typedef?void(*PFN_HOOKSTART)();

typedef?void(*PFN_HOOKSTOP)();

void?_tmain(int?argc,?_TCHAR*?argv[])

{

HMODULE?hDll?=?NULL;

PFN_HOOKSTART?HookStart?=?NULL;

PFN_HOOKSTOP??HookStop?=?NULL;

hDll?=?LoadLibraryA(DEF_DLL_NAME);

//獲取導出函數地址

HookStart?=?(PFN_HOOKSTART)GetProcAddress(hDll,?DEF_HOOKSTART);

HookStop?=?(PFN_HOOKSTOP)GetProcAddress(hDll,?DEF_HOOKSTOP);

//開始勾取

HookStart();

//等待用戶輸入“q”結束

printf("press?q?to?quit\n");

while?(getchar()?!=?'q');

//終止勾取

HookStop();

//卸載KeyHook.dll

FreeLibrary(hDll);

}

下面是DLL函數//?dllmain.cpp?:?定義?DLL?應用程序的入口點。

#include?"stdafx.h"

#include?"stdio.h"

#include?"windows.h"

#define?DEF_PROCESS_NAME?"notepad.exe"

HINSTANCE?g_hInstance?=?NULL;

HHOOK?g_hHook?=?NULL;

HWND?g_hWnd?=?NULL;

#ifdef?_DEBUG

#define?new?DEBUG_NEW

#endif

BOOL?APIENTRY?DllMain(?HMODULE?hModule,

DWORD??dwReason,

LPVOID?lpReserved

)

{

switch?(dwReason)

{

case?DLL_PROCESS_ATTACH:

g_hInstance?=?hModule;

break;

}

return?TRUE;

}

LRESULT?CALLBACK?KeyboardProc(int?nCode,?WPARAM?wParam,?LPARAM?lParam)

{

char?szPath[MAX_PATH]?=?{?0,?};

char?*p?=?NULL;

if?(!(lParam?&?0x80000000))

{

GetModuleFileNameA(NULL,?szPath,?MAX_PATH);

p?=?strrchr(szPath,?'\\');

//比較當前進程名?若為notepad.exe?則消息不會傳遞給應用程序(或下一個鉤子)

if?(!strcmp(p?+?1,?DEF_PROCESS_NAME))

{

//當我在WIN10?64位機運行的時候,發現很容易是目標進程卡

//住,不知道是什么原因,而XP?32位并沒有此現象

printf("記事本鍵盤消息已被截取\n");

return?1;

}

}

//若非notepad.exe?則調用CallNextHookEx()函數,將消息傳遞給應用程序或者下一個鉤子

return?CallNextHookEx(g_hHook,?nCode,?wParam,?lParam);

}

#ifdef?__cplusplus

extern?"C"?{

#endif

__declspec(dllexport)?void?HookStart()

{

//關鍵函數這一個,安裝消息鉤子

g_hHook?=?SetWindowsHookEx(WH_KEYBOARD,?KeyboardProc,?g_hInstance,?0);

}

__declspec(dllexport)?void?HookStop()

{

if?(g_hHook)

{

UnhookWindowsHookEx(g_hHook);

g_hHook?=?NULL;

}

}

#ifdef?__cplusplus

}

#endif

總結

以上是生活随笔為你收集整理的c语言dll注入进程,DLL注入--设置消息钩子的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。