简单的C++ DLL注入
程序员文章站
2022-07-23 21:58:09
今天呢,我们来讨论一下用C++实现DLL注入的简单方法。 环境: Visual Studio 2015及以上 Windows 7及以上 入门需要了解的: DLL是什么:DLL_360百科 DLL是Dynamic Link Library的缩写,意为动态链接库。在Windows中,许多应用程序并不是一 ......
今天呢,我们来讨论一下用c++实现dll注入的简单方法。
环境:
- visual studio 2015及以上
- windows 7及以上
入门需要了解的:
- dll是什么:dll_360百科
dll是dynamic link library的缩写,意为动态链接库。在windows中,许多应用程序并不是一个完整的,它们被分割成一些相对独立的动态链接库,即dll文件,放置于系统中。当我们执行某一个程序时,相应的dll文件就会被调用。一个应用程序可有多个dll文件,一个dll文件也可能被几个应用程序所共用,这样的dll文件被称为共享dll文件。
- 注入是什么:注入_360百科
所谓dll注入就是将一个dll放进某个进程的里,让它成为那个进程的一部分。要实现dll注入,首先需要打开目标进程。
任务目标:将dll注入到windows计算器中,使按下home键时弹出消息框(messagebox)
1.生成dll文件:
2.代码时间!
需要了解的函数方法:
findwindow( //返回该窗体的句柄(hwnd) lpctstr lpclassname, //窗体的类名,可以为null lpctstr lpwindowname //窗体的标题 ); getwindowthreadprocessid( //返回这个线程的id(dword) hwnd hwnd, //该窗体的句柄(hwnd) 用findwindow获取 lpdword lpdwprocessid //存放 线程的变量地址(dword) 的地址(有点绕口 = =) ); getmodulehandle( //获取一个特定的应用程序或动态链接库的模块句柄 lpctstrlpmodulename); //模块名称 也就是dll项目名 setwindowshookex( __in int idhook, //钩子类型 这里用的是键盘钩子,所以用wh_keyboard __in hookproc lpfn, //回调函数地址 处理键盘事件的方法 __in hinstance hmod, //实例句柄 也就是这个dll的句柄,用getmodulehandle获取 __in dword dwthreadid); //线程id 用getwindowthreadprocessid获取
了解以上函数以后,事情就变得十分简单了:
直接将代码加入到初始的cpp中即可,注意更改部分的代码以兼容你自己的程序:
lresult winapi keybordproc(int code, wparam wp, lparam lp) { if (code == hc_action && wp == vk_home && getkeystate(vk_home) < 0) { messagebox(null,text("lol"),text("is working!"),0); return 0; } return callnexthookex(null, code, wp, lp);//一定要有,否则程序可能无法正常运行 } void _stdcall sethook() { hwnd games; games = ::findwindow(null, text("计算器")); dword pid, tid; tid = ::getwindowthreadprocessid(games, &pid); hhook g_hook=::setwindowshookex(wh_keyboard, keybordproc, getmodulehandle(text("mfclibrary2.dll")),//注意这里是生成的dll名称 tid); }
生成->编译
没差错的话dll就生成在了debug目录下
上一篇: Java - Obejct 类 (待续)
下一篇: 组件化和 React