学习笔记

1.首先要建立mfc的动态链接库。在def文件中放入要导出的函数名。

2.添加函数如下

//安装钩子
//HHOOK SetWindowsHookEx(
// int idHook,//钩子的类型WH_KEYBOARD键盘钩子
// HOOKPROC lpfn,//钩子的回调函数,钩子类型不同回调函数不同
// HINSTANCE hwnd,//dll动态链接库的句柄
// DWORD dwthreadid//游戏主进程的id 是GetWindowThreadProcessId的返回值
// )
//键盘钩子对应的回调函数
LRESULT CALLBACK GameProc(
int code,
WPARAM wParam,//按键代码,例如f12=VK_F12
LPARAM lParam//按键相关的信息。具体百度
)
{
//用到mfc中的api就得加上这句宏!!!!
AFX_MANAGE_STATE(AfxGetStaticModuleState());
//还可以添加按键被按下之后执行的逻辑
if((wParam==VK_F12)&&(lParam&(<<)==))//取出lparam的第31位0则是被按下
{
AfxMessageBox(L"按下F12");
}
return CallNextHookEx(,code,wParam,lParam);
}
#define gamename L"YB_OnlineClient"//宏定义窗口名称
void SetHook()
{
//用到mfc中的api就得加上这句宏!!!!
AFX_MANAGE_STATE(AfxGetStaticModuleState());
//获取窗口句柄
HWND gameh=::FindWindowW(NULL,gamename);
//获取线程id
DWORD gameid=GetWindowThreadProcessId(gameh,NULL);
//线程钩子第三个参数不能为0,第四个参数为0 则是全局钩子。
//::GetModuleHandleA("mydll.dll")获取动态链接库的句柄
::SetWindowsHookExW(WH_KEYBOARD,&GameProc,::GetModuleHandleA("mydll.dll"),gameid);
}
3.新建窗口程序添加钩子。
3.1把动态链接库生成的dll和lib文件复制到窗口程序的release文件下或者根目录下或者debug下
3.2添加程序如下
#pragma comment(lib,"mydll.lib")//引入dll的链接库
_declspec(dllimport) void SetHook();//导入函数的声明
//vs2008以后可以不这样来加载和导入函数的声明。
//在窗体类顶部加上
//typedef HHOOK TSetHook(void); //定义变量别名
//TSetHook *SetHook;//定义函数指针
//在消息处理程序中加上
//HMODULE hdd=LoadLibrary(L"mydll.dll");//加载链接库
//SetHook=(TSetHook*)::GetProcAddress(hdd,"SetHook");//获取函数地址
void CrxjhcDlg::OnBnClickedButtonsethook()
{
// TODO: 在此添加控件通知处理程序代码
SetHook();
}

 

2.添加键盘钩子。向进程中注入dll的更多相关文章

  1. 使用ptrace向已运行进程中注入.so并执行相关函数

    这个总结的很好,从前一个项目也用到这中技术 转自:http://blog.csdn.net/myarrow/article/details/9630377 1. 简介 使用ptrace向已运行进程中注 ...

  2. 使用ptrace向已运行进程中注入.so并执行相关函数(转)

    1. 简介 使用ptrace向已运行进程中注入.so并执行相关函数,其中的“注入”二字的真正含义为:此.so被link到已运行进程(以下简称为:目标进程)空间中,从而.so中的函数在目标进程空间中有对 ...

  3. Wow64(32位进程)注入DLL到64位进程

    转载自: https://blog.poxiao.me/p/wow64-process-inject-dll-into-x64-process/ 向其他进程注入DLL通常的做法是通过调用CreateR ...

  4. 【旧文章搬运】再谈隐藏进程中的DLL模块

    原文发表于百度空间,2009-09-17========================================================================== 相当老的话 ...

  5. 如何在 C# 程序中注入恶意 DLL?

    一:背景 前段时间在训练营上课的时候就有朋友提到一个问题,为什么 Windbg 附加到 C# 程序后,程序就处于中断状态了?它到底是如何实现的? 其实简而言之就是线程的远程注入,这一篇就展开说一下. ...

  6. 远程线程注入DLL突破session 0 隔离

    远程线程注入DLL突破session 0 隔离 0x00 前言 补充上篇的远程线程注入,突破系统SESSION 0 隔离,向系统服务进程中注入DLL. 0x01 介绍 通过CreateRemoteTh ...

  7. 如何创建DLL,以及注入DLL

    为了防止忘记,特记下 DLL的创建,在VS2017中选择dll的创建 // dllmain.cpp : Defines the entry point for the DLL application. ...

  8. 将dll文件注入到其他进程中的一种新方法

    http://www.45it.com/windowszh/201212/33946.htm http://www.hx95.cn/Article/OS/201212/65095.html 我们知道将 ...

  9. 钩子编程(HOOK) 安装进程内键盘钩子 (1)

    摘要:钩子能够监视系统或进程中的各种事件消息.截获发往目标窗体的消息并进行处理.这样,我们就能够在系统中安装自己定义的钩子,监视系统中特定事件的发生.完毕特定的功能,比方截获键盘.鼠标的输入.屏幕取词 ...

随机推荐

  1. bzoj 2705: [SDOI2012]Longge的问题 歐拉函數

    2705: [SDOI2012]Longge的问题 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 1035  Solved: 669[Submit][S ...

  2. CFUUIDRef和CFStringRef-生成唯一标识符

    - (NSString *)createCUID:(NSString *)prefix{ NSString *  result; CFUUIDRef   uuid; CFStringRef uuidS ...

  3. KeilC51使用详解 (二)

    深入理解并应用C51对标准ANSIC的扩展是学习C51的关键之一.因为大多数扩展功能都是直接针对8051系列CPU硬件的.大致有以下8类: 8051存储类型及存储区域 存储模式 存储器类型声明 变量类 ...

  4. QT的父子Widget之间消息的传递(如果子类没有accept或ignore该事件,则该事件会被传递给其父亲——Qlabel与QPushButton的处理就不一样)

    以前我一直以为:在父widget上摆一个子widget后,当click子widget时:只会进入到子widget的相关事件处理函数中,比如进入到mousePressEvent()中, 而不会进入到父w ...

  5. rootkit的检测工具使用(chkrootkit和rootkit hunter)

      信息安全        这两天突然发现我们的服务器产生大量DNS解析连线.为了查明问题,就下载网上找工具检查问题所在.用了两个工具,一个chkrootkit,另外一个rootkit huntur. ...

  6. js之script属性async与defer

    概念 默认情况下js的脚本执行是同步和阻塞的,但是 <script> 标签有 defer 和 async 属性, 这可以改变脚本的执行方式,这些都是布尔类型了,没有值,只需要出现在 < ...

  7. 怎么样把UIImage保存到相册

    需要保存的图片放在UIImage里面,保存只需要运行一下代码:     UIImageWriteToSavedPhotosAlbum(outputImage, nil, nil, nil);

  8. mvn archetyoe:generate -DarchetypeCatalog=internal

    可以使用 $mvn archetype:generate -DarchetypeCatalog=internal archetypeCatalog表示插件使用的archetype元数据,默认值为rem ...

  9. c#基础语言编程-按值类型和引用类型传递参数

    引言 在介绍传递参数介绍前,请明白参数类型和传递方式是不同的.传递方式分为按值类型和引用类型传递参数.参数类型有值类型和引用类型,这个和C++是不同的.这里的传递方式对应c++中的深复制和浅复制. 两 ...

  10. bootstrap+jQuery.validate表单校验

    谈谈表单校验 这大概是一种惯例,学习前台后台最开始接触的业务都是用户注册和登录.现在社会坚持以人为本的理念,在网站开发过程同样如此.User是我们面对较多的对象,也是较核心的对象.最开始的用户注册和登 ...