【求助】关于DLL插入指定进程??
HWND hwnd=::FindWindow(NULL,"计算器");
if(!hwnd)
{
AfxMessageBox("打开计算器吧,打开你就知道效果了");
return;
}
DWORD lpprocessid=NULL;
::GetWindowThreadProcessId(hwnd,&lpprocessid);
HANDLE handle1=::OpenProcess(PROCESS_ALL_ACCESS ,false,lpprocessid);
CString ms_DllName;
char* mc_RemoteStr;
ms_DllName="DllHook.Dll";
mc_RemoteStr=(char*)VirtualAllocEx(handle1,NULL,ms_DllName.GetLength()+1,MEM_COMMIT,PAGE_READWRITE);
WriteProcessMemory(handle1,mc_RemoteStr,ms_DllName.GetBuffer(0),ms_DllName.GetLength()+1,NULL);
/////插入DLL;
HANDLE hThread;
PTHREAD_START_ROUTINE pfn_LoadLib;
pfn_LoadLib=(PTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(TEXT("Kernel32")),"LoadLibraryA");
hThread=CreateRemoteThread(handle1,NULL,0,pfn_LoadLib,mc_RemoteStr,0,NULL);
我在DLL中InitInstance中写的个AfxMessageBox("jklkjljkl");
但结果当然是失败了
我用以下代码是成功的
STARTUPINFO si;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
PROCESS_INFORMATION pi;
ZeroMemory( &pi, sizeof(pi) );
if( !CreateProcess( "C:\\WINDOWS\\system32\\calc.exe",NULL,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi) )
{
AfxMessageBox("打不到计算器");
return;
}
CString ms_DllName;
char* mc_RemoteStr;
ms_DllName="DllHook.Dll";
mc_RemoteStr=(char*)VirtualAllocEx(pi.hProcess,NULL,ms_DllName.GetLength()+1,MEM_COMMIT,PAGE_READWRITE);
WriteProcessMemory(pi.hProcess,mc_RemoteStr,ms_DllName.GetBuffer(0),ms_DllName.GetLength()+1,NULL);
/////插入DLL;
HANDLE hThread;
PTHREAD_START_ROUTINE pfn_LoadLib;
pfn_LoadLib=(PTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(TEXT("Kernel32")),"LoadLibraryA");
hThread=CreateRemoteThread(pi.hProcess,NULL,0,pfn_LoadLib,mc_RemoteStr,0,NULL);
/////关闭远程线程;
WaitForSingleObject(hThread,INFINITE);
VirtualFreeEx(pi.hProcess,mc_RemoteStr,0,MEM_RELEASE);
/////如果进程结束,则关闭进程头和线程头;
WaitForSingleObject( pi.hProcess, INFINITE );
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
但我希望插入的是运行中的进程,讲各位论坛的朋友指正~~~或者有这样的源代码的,请发一个出来参考,谢谢!!我的邮箱:pzhccy@yahoo.com.cn再次谢谢
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课