15,471
社区成员
发帖
与我相关
我的任务
分享
bool InsertDll(DWORD dwProcessId,CString strDllFile)//注入DLL
{
HANDLE hProcess = OpenProcess (PROCESS_ALL_ACCESS, 0, dwProcessId); // 打开进程
if(!hProcess)return false;//打开进程失败
bool bRetValue=false;
int nLen =(int)strlen(strDllFile.GetBuffer()) + 1; // 取出dll的全路径nLen
HANDLE hMem = VirtualAllocEx (hProcess, 0, nLen, MEM_COMMIT, PAGE_READWRITE); // hMem用来保存GetModuleHandleA的参数
if(WriteProcessMemory (hProcess, hMem,strDllFile, nLen, 0)){// 将参数写到远程的进程内存中
HMODULE hModule = GetModuleHandleA (_T("Kernel32"));
PTHREAD_START_ROUTINE hProc = (PTHREAD_START_ROUTINE)GetProcAddress (hModule, _T("LoadLibraryA"));
HANDLE hThread =CreateRemoteThread (hProcess, 0, 0, hProc, hMem, 0, 0); // 远程执行命令
WaitForSingleObject (hThread, -1); // 等待执行退出
CloseHandle (hThread); // 关闭线程
bRetValue=true;
}
VirtualFreeEx (hProcess, hMem, nLen, 16384); // 释放内存
CloseHandle (hProcess);
return bRetValue;
}