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注入--设置消息钩子的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 吴恩达深度学习笔记
- 下一篇: 计算机选题方向怎么写,计算机方面方向论文