在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
今天呢,我们来讨论一下用C++实现DLL注入的简单方法。 环境:
入门需要了解的:
DLL是Dynamic Link Library的缩写,意为动态链接库。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当我们执行某一个程序时,相应的DLL文件就会被调用。一个应用程序可有多个DLL文件,一个DLL文件也可能被几个应用程序所共用,这样的DLL文件被称为共享DLL文件。
所谓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目录下
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论