VC dll 注入之钩子注入
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/
且看回调函数:
LRESULT CALLBACK HookProc(int nCode,WPARAM wParam,LPARAM lParam) {AFX_MANAGE_STATE(AfxGetStaticModuleState()); //显示窗口 if(wParam==VK_HOME && ((lParam&(1<<31))==0)) { if(gameDlg==NULL) { dlg=new DLG; //这里是根据窗体资源的ID来创建窗体 dlg->Create(IDD_DLG); } dlg->ShowWindow(true); //::AfxMessageBox("home按下"); } //隐藏窗口 if(wParam==VK_END && ((lParam&(1<<31))==0)) { gameDlg->ShowWindow(false); } return CallNextHookEx(0,nCode,wParam,lParam); }
在这里当按下home建的时候回弹出个窗体,那么还需要在dll工程中插入窗体资源,就不在阐述了。
窗体资源创建好后,关联类,然后在dll.cpp中导入窗体关联的类的头文件:
#include "DLG.h"
DLG *dlg;
安装钩子函数,这里我们hook的是计算器void setHook() {AFX_MANAGE_STATE(AfxGetStaticModuleState()); HWND hw=::FindWindow(NULL,"计算器"); if(hw==0) { ::AfxMessageBox("查找窗口失败"); } DWORD threadId=::GetWindowThreadProcessId(hw,NULL); if(threadId==0) { ::AfxMessageBox("获取线程失败"); } ::SetWindowsHookEx(WH_KEYBOARD,HookProc,::GetModuleHandle("dll_dlg.dll"),threadId); }
当dll中插入窗体资源时,在被hook对象中显示出窗体时,如果关闭了注入的程序,那么被注入的程序就会崩溃退出,原因是退出的时候没有清理创建窗体时申请的资源。
重写ExitInstance()
int CDll_dlgApp::ExitInstance() { delete dlg; dlg=NULL; return CWinApp::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)的形式存在.DLL文件在运行时将按需加载(类似于UNIX系统中的共享库(shar ...
- Anti 消息钩子注入
MSDN上对消息钩子的描述: The SetWindowsHookEx function installs an application-defined hook procedure into a h ...
- dll重定位内存注入
dll重定位内存注入 PE数据重定位已经是很古老的技术了 但是很多网友想了解相关,但是还是没办法自己实现. 然而有了以下内容: 重定位字面理解就是把一个东西的位置改变了. 关于DLL或者sys等可执行 ...
- 依赖注入?依赖注入是如何实现解耦的?
如何用最简单的方式解释依赖注入?依赖注入是如何实现解耦的? 第一章:小明和他的手机 从前有个人叫小明 小明有三大爱好,抽烟,喝酒-- 咳咳,不好意思,走错片场了.应该是逛知乎.玩王者农药和抢微信红包 ...
- 框架依赖注入和普通依赖注入_依赖注入快速入门:它是什么,以及何时使用它...
框架依赖注入和普通依赖注入 by Bhavya Karia 通过Bhavya Karia 介绍 (Introduction) In software engineering, dependency i ...
- 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 注入工具收尾操作 | 关闭注入的动态库 | 恢复寄存器 | 脱离远程调试附着 )
文章目录 一.dlclose 函数简介 二.关闭注入的 libbridge.so 动态库 三.恢复寄存器 四.脱离远程调试附着 一.dlclose 函数简介 dlclose 函数的作用是 卸载一个 指 ...
- 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 获取注入的 libbridge.so 动态库中的 load 函数地址 并 通过 远程调用 执行该函数 )
文章目录 一.dlsym 函数简介 二.获取 目标进程 linker 中的 dlsym 函数地址 三.远程调用 目标进程 linker 中的 dlsym 函数 获取 注入的 libbridge.so ...
- 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 获取 linker 中的 dlopen 函数地址 并 通过 远程调用 执行该函数 )
文章目录 一.dlopen 函数简介 二.获取 目标进程 linker 中的 dlopen 函数地址 三.远程调用 目标进程 linker 中的 dlopen 函数 一.dlopen 函数简介 dlo ...
- 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程中 libc.so 动态库中的 mmap 函数 三 | 等待远程函数执行完毕 | 寄存器获取返回值 )
文章目录 前言 一.等待远程进程 mmap 函数执行完毕 二.从寄存器中获取进程返回值 三.博客资源 前言 前置博客 : [Android 逆向]Android 进程注入工具开发 ( 注入代码分析 | ...
最新文章
- 如何用公式化思维?几个经典公式收集
- [译] 通过视图控制器容器和子视图控制器避免庞大的视图控制器
- document,element,node方法
- ubuntu amd 64bit 安装 QQ for linux教程(附 不能使用中文的解决办法)
- hdu5831 Rikka with Parenthesis II
- 【华为云技术分享】Batch Normalization (BN) 介绍
- linux snap文件夹,SNAP 文件扩展名: 它是什么以及如何打开它?
- 【蓝桥杯单片机】独立按键和矩阵按键
- 自学编程的八大误区!克服它们,豁然开朗!
- 微信多开txt_1分钟教你如何实现微信多开!建议收藏!
- QtextEdit自定义右键菜单
- c语言数字转成大写,c语言 数字变大写 代码
- Xcode8 最快最方便的安装插件方案
- 鸿蒙系统可支持exe文件,效仿华为鸿蒙系统!微软放大招:新版Win10系统兼容安卓应用...
- 台式计算机音频插口,解决台式机电脑机箱前置音频插口(接口)不能使用一例.
- ETH数据集下载及相关问题
- UCanCode发布领先的大型组态建模仿真CAD与GIS开源套件2019版本
- 敏捷方法 - 极限编程与工程实践
- 【C#】SharpDevelop使用教程,C#写windows下第一个窗口程序,简单粗暴,初学者进,全图文,一看就明白
- Stringtie详解
热门文章
- Java Rest path_java – 具有多种类型的REST PathParam
- 大量C语言、C++、C#、VC编程相关书籍下载
- git 进阶 (四)变基提交
- CAD/CASS土地报备坐标数据提取插件txt报盘数据导出工具支持环岛地块
- Windows 10 的系统要求
- php word 添加,PHP 实现Office word 关键词添加背景色
- 922175-70-0,Galacto-RGD,RGDfK(SAA),νβ3表达成像示踪剂
- 交换机SVI配置的作用 思科/华为 网络工程
- 936烙铁芯发热芯型号判断
- Android——检测摄像头是否可用