VC dll 注入之钩子注入
来源:互联网 发布:上海 心理咨询 知乎 编辑:程序博客网 时间:2024/04/29 20:39
C++只是个菜鸟,最近学习了下DLL注入,是通过hook方式来注入的。暂且不扯,新建个MFC dll,let's go。
首先得需要几个函数:
HHOOK SetWindowsHookEx(
int idHook, //要安装的钩子类型 (参考下面的IdHook取值)
HOOKPROC lpfn, //钩子过程的指针 ,也即拦截到指定系统消息后的预处理过程,须定义在DLL中,
HINSTANCE hMod, //应用程序实例的句柄 如果是全局钩子, hInstance是DLL句柄(DllMain中给的模块地址。就是包含HookProc的动态库加载地址。否则给0就可以了,即勾自己。
DWORD dwThreadId; //要安装钩子的线程ID ,指定被监视的线程,如果明确指定了某个线程的ID就只监视该线程,此时的钩子即为线程钩子;如果该参数被设置为0,则表示此钩子为监视系统所有线程的全局钩子。);
LRESULT CALLBACK HookProc(int nCode,WPARAM wParam,LPARAM lParam)//钩子回调函数
FindWindow(lpClassName,lpWindowName: PChar)//查找窗体
GetWindowThreadProcessId(hWnd: HWND,lpdwProcessId)//获取线程id/
且看回调函数:
在这里当按下home建的时候回弹出个窗体,那么还需要在dll工程中插入窗体资源,就不在阐述了。
窗体资源创建好后,关联类,然后在dll.cpp中导入窗体关联的类的头文件:
#include "DLG.h"
DLG *dlg;
安装钩子函数,这里我们hook的是计算器
当dll中插入窗体资源时,在被hook对象中显示出窗体时,如果关闭了注入的程序,那么被注入的程序就会崩溃退出,原因是退出的时候没有清理创建窗体时申请的资源。
重写ExitInstance()
如果发现编译出错,说是ExitInstance没定义,需要在头文件中定义一下ExitInstance即可。如果需要设定哪些函数可以被其他对象调用,可以在dll.def中带出要被调用的函数:setHook;那么setHook就是我们希望被调用的函数
dll程序就这些,下面看下注入程序exe。
在注入程序中需要将dll编译生成的dll.dll和dll.lib文件复制到注入文件的工程目录里面,然后在注入文件中导入:
#pragma comment(lib,"dlg.lib");
__declspec(dllexport) void setHook();
然后在某个地方调用setHook()即可,效果如图所示:
- VC dll 注入之钩子注入
- DLL注入技术之消息钩子注入
- DLL注入技术之消息钩子注入
- DLL注入技术之消息钩子注入
- DLL注入技术之消息钩子注入
- vc++进程注入钩子DLL通用模块
- 钩子DLL注入
- 函数钩子-Dll注入
- Dll注入技术之消息钩子
- Dll注入技术之消息钩子
- Dll注入技术之消息钩子
- vc++进程注入钩子DLL通用模块开源
- vc++进程注入钩子DLL通用模块开源
- DLL注入--设置消息钩子
- 键盘钩子函数注入dll
- VC++实现DLL注入
- vc 无dll注入
- Windows 钩子,基本的dll注入
- crontab定时任务的用法(转)
- hibernate3中出现 could not initialize proxy - no Session 错误的解决办法以及lazy load的介绍
- 让鼠标拖动WinForm窗体
- VS2010安装后出现无法使用帮助的解决方案
- struct net_device 详解2
- VC dll 注入之钩子注入
- Android程序完全退出的三种方法
- 霍夫变换(Hough Transform)
- struct net_device 详解3
- Java 中的观察者模式
- 第11章 并发控制(数据库系统概论)
- install xmms
- DeskBand 实现6(遇到的问题)
- java中去字符串中的(全角)空格