安装全局消息钩子实现dll窗体程序注入
说明{
     通过设置全局消息钩子来实现dll注入,然后窗体有相关消息请求的时候就会自动加载注入dll,
然后在入口处做处理就可以了。注入方式简单很多,比代码注入和lsp等注入都简单,就不解释了。
这个也可以传递不同的劫持类型来进行键盘按键记录等。
}
注意{
    1.dll注入期间注入程序不可以退出,否则dll内核句柄有可能被释放。
    2.注意32位和64位注入问题
}
DLL调用
/*
HMODULE h = LoadLibrary(L"xx.dll");
_SetHook SetHook = (_SetHook)GetProcAddress(h,"SetHook");
_UnHook UnHook = (_UnHook)GetProcAddress(h,"UnHook");
SetHook();
Sleep(10000);
UnHook();
CloseHandle(h);
*/
//DLL相关代码
#include <windows.h>
#include <tlhelp32.h>
#include <Psapi.h>
#pragma comment(lib,"psapi.lib")
#pragma data_seg("Yrrehs")
HHOOK HT = NULL;
#pragma data_seg()
HINSTANCE DLLhinst = NULL;
LRESULT CALLBACK CProc(int nCode,WPARAM wParam,LPARAM lParam){
	return CallNextHookEx(HT,nCode,wParam,lParam);
}
//安装钩子
extern "C" __declspec(dllexport) BOOL SetHook(){
	HT = SetWindowsHookEx(WH_CALLWNDPROC,CProc,DLLhinst,0);
	if(HT == NULL){
		return false;
	}
	return true;
}
//卸载钩子
extern "C" __declspec(dllexport) BOOL UnHook(){
	BOOL HM_BOOL = FALSE;
	if(HT != NULL){
		HM_BOOL = UnhookWindowsHookEx(HT);
	}
	return HM_BOOL;
}
//获得进程名
wchar_t* GetProcessName(DWORD processID){
	HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,FALSE,processID);
	wchar_t *procName = new wchar_t[MAX_PATH];
	GetModuleFileNameEx(hProcess,NULL,procName,MAX_PATH);
	CloseHandle(hProcess);
	return procName;
}
//获得进程名
wchar_t* GetProcessName(wchar_t *FileName){
	size_t len = wcslen(FileName);
	size_t i = len-1;
	for(;i>=0;i--){
		if(FileName[i] == L'\\'){
			break;
		}
	}
	wchar_t *temp = FileName + i + 1;
	return temp;
}
BOOL WINAPI DllMain(HINSTANCE hinstDll,DWORD fdwReason,LPVOID lpvReserved){
	DLLhinst = hinstDll;
	if(DLL_PROCESS_ATTACH == fdwReason){
		wchar_t *procName = GetProcessName(GetCurrentProcessId());
		if(_wcsicmp(L"xxx.exe",GetProcessName(procName))==0){
			//XXXXXX
		}
	}
	if(DLL_PROCESS_DETACH == fdwReason){
	}
	return TRUE;
}安装全局消息钩子实现dll窗体程序注入的更多相关文章
- windows消息钩子
		1.消息钩子的概念: Windows应用程序是基于消息驱动的,不论什么线程仅仅要注冊窗体类都会有一个消息队列用于接收用户输入的消息和系统消息.为了拦截消息,Windows提出了钩子的概念.钩子(Hoo ... 
- windows消息钩子注册底层机制浅析
		标 题: [原创]消息钩子注册浅析 作 者: RootSuLe 时 间: 2011-06-18,23:10:34 链 接: http://bbs.pediy.com/showthread.php?t= ... 
- MFC线程钩子和全局钩子[HOOK DLL]
		第一部分:API函数简介 1. SetWindowsHookEx函数 函数原型 HHOOK SetWindowsHookEx( int idHook, // hook typ ... 
- Dll注入:Windows消息钩子注入
		SetWindowsHook() 是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的.当消息到达后,在目标窗口处理函数之 ... 
- 安装Wamp时出现无法启动此程序,因为计算机中丢失MSVCR110.dll
		一.问题描述 安装Wamp时出现无法启动此程序,因为计算机中丢失MSVCR110.dll 二.解决方法 首先进入 http://www.microsoft.com/zh-CN/download/det ... 
- 解决mysql安装报错:无法启动此程序,因为计算机丢失MSVCP120.dll
		问题一: 因为装的是新系统,所以遇到mysql启动报错:无法启动此程序,因为计算机丢失MSVCP120.dll 后来参考这篇文章https://blog.csdn.net/huacode/articl ... 
- Dll注入技术之消息钩子
		转自:黑客反病毒 DLL注入技术之消息钩子注入 消息钩子注入原理是利用Windows 系统中SetWindowsHookEx()这个API,他可以拦截目标进程的消息到指定的DLL中导出的函数,利用这个 ... 
- Win64 驱动内核编程-28.枚举消息钩子
		枚举消息钩子 简单粘贴点百度的解释,科普下消息钩子: 钩子是WINDOWS中消息处理机制的一个要点,通过安装各种钩子,应用程序能够设置相应的子例程来监视系统里的消息传递以及在这些消息到达目标窗口程序之 ... 
- 全局键盘钩子(WH_KEYBOARD)
		为了显示效果,在钩子的DLL中我们会获取挂钩函数的窗体句柄,这里的主程序窗体名为"TestMain",通过FindWindow查找. KeyBoardHook.dll代码 libr ... 
随机推荐
- Java 查找算法
			1 查找算法介绍 在 java 中,我们常用的查找有四种: 1) 顺序(线性)查找 2) 二分查找/折半查找 3) 插值查找 4) 斐波那契查找 2 线性查找算法 有一个数列: {1,8, 10, ... 
- 文件查询  select name,age where age>22
			# 员工信息表: 完善代码,背下来给代码加注释column_dic = {'id': 0, 'name': 1, 'age': 2, 'phone': 3, 'job': 4} # 将文件每一列的名字 ... 
- CSV 注入实战
			oxo1 前言 之前看到过 CSV 注入的文章,具体想了解的请搜索学习,这里不多作介绍.今天刚好碰到了导出功能,就随手测试一波,没想到还真的存在 CSV 注入漏洞. oxo2 经过 1.测试漏洞 看到 ... 
- 事件 on
			$(选择器).on(事件名称,事件的处理函数) 事件名称:js事件去掉on的部分,例如js中onclick,这里就是click 例如:<input type="button" ... 
- cadence Virtuoso ADE原理图AnalogLib库中的switch使用
			Symbol: switch A,B:等效于一个电阻; C,D:等效于控制开关(CD间的控制电压控制AB的断开或闭合); open switch resistance:开关断开状态下的等效电阻(AB之 ... 
- Linux—用户新建目录和文件的默认权限设置:umask详解
			关注微信公众号:CodingTechWork,一起学习进步. 引言 我们有没有思考过一个问题,在登录Linux系统后,我们创建的目录或者文件的权限,为什么每次创建都是统一的?我们做以下实验:新建一 ... 
- Android Stuio让我濒临崩溃的bug之cause: unable to find valid certification path to requested target
			•问题描述 像往常一样,打开 $android studio$ 开启愉快的开发之旅: 写着写着,右下角弹出一个对话,说 $android studio$ 有新版本可更新: 有新版本为何不用,果断点击 ... 
- 高精度加法(c++)
			为什么要用高精度? 有时我们要进行精度较高的运算时,就要使用高精度来进行运算: 就如例题: 大整数加法 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 21965 通过数: 634 ... 
- 问题笔记-vueCli3.0打包路径出错
			需求:vueCli3.0打包路径出错.解决办法:vueCli3.0打包,新版本更新脚手架做出精简,webpack配置文件需要手动配置.在文件根目录创建一个vue.config.js配置文件.基本版: ... 
- 磁盘lvm管理
			1.磁盘接口: 从整体的角度上,硬盘接口分为IDE.SATA.SCSI和SAS四种,IDE接口硬盘多用于家用产品中,也部分应用于服务器,SCSI接口的硬盘则主要应用于服务器市场,而SAS只在高端服务器 ... 
