向远程进程注入 DLL

//注入DLL 至窗口进程中 //HWND hwnd : 远程窗口进程 HWND //LPCSTR dllName : 要注入的DLL Name BOOL InjectDllToProcess(HWND hwnd , LPCSTR dllName){ DWORD processId; GetWindowThreadProcessId(hwnd,&processId); //打开进程,并设置完全访问权 HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,processId); if(hProcess == NULL){ return FALSE; } //将当前程序执行路径 附为 dll 路径 char dll[500]; GetCurrentDirectoryA(sizeof(dll),dll); strcat_s(dll,"//"); strcat_s(dll,dllName); //计算 dll 名称字符串长度 size_t size = strlen(dll) + 1; //远程中分配 LPVOID parmAddr = VirtualAllocEx(hProcess,NULL,size,MEM_COMMIT,PAGE_READWRITE); //将 dll 名称写入 远程进程 DWORD d; if(!WriteProcessMemory(hProcess,parmAddr,dll,size,&d)){ return FALSE; } //读取 LoadLibraryA 地址 PROC funAddr = GetProcAddress(GetModuleHandleA("kernel32") , "LoadLibraryA"); if(NULL == funAddr){ return FALSE; } //建立远程 线程 加载 DLL. HANDLE thread = CreateRemoteThread(hProcess,NULL,0,(LPTHREAD_START_ROUTINE)funAddr,parmAddr,0,NULL); if(NULL == thread){ return FALSE; } //等待远程线程结束 WaitForSingleObject(thread,INFINITE); CloseHandle(thread); CloseHandle(hProcess); return TRUE; } //注入DLL 至窗口进程中 //HWND hwnd : 远程窗口进程 HWND //LPCSTR dllName : 要注入的DLL Name BOOL InjectDllToProcess(HWND hwnd , LPCSTR dllName){ DWORD processId; GetWindowThreadProcessId(hwnd,&processId); //打开进程,并设置完全访问权 HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,processId); if(hProcess == NULL){ return FALSE; } //将当前程序执行路径 附为 dll 路径 char dll[500]; GetCurrentDirectoryA(sizeof(dll),dll); strcat_s(dll,"//"); strcat_s(dll,dllName); //计算 dll 名称字符串长度 size_t size = strlen(dll) + 1; //远程中分配 LPVOID parmAddr = VirtualAllocEx(hProcess,NULL,size,MEM_COMMIT,PAGE_READWRITE); //将 dll 名称写入 远程进程 DWORD d; if(!WriteProcessMemory(hProcess,parmAddr,dll,size,&d)){ return FALSE; } //读取 LoadLibraryA 地址 PROC funAddr = GetProcAddress(GetModuleHandleA("kernel32") , "LoadLibraryA"); if(NULL == funAddr){ return FALSE; } //建立远程 线程 加载 DLL. HANDLE thread = CreateRemoteThread(hProcess,NULL,0,(LPTHREAD_START_ROUTINE)funAddr,parmAddr,0,NULL); if(NULL == thread){ return FALSE; } //等待远程线程结束 WaitForSingleObject(thread,INFINITE); CloseHandle(thread); CloseHandle(hProcess); return TRUE; }

转载于:https://www.cnblogs.com/hcmsxy/archive/2008/07/18/2164070.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值