-
-
[已解决]学习代码远程注入的时候遇到问题了
-
发表于:
2008-8-25 11:57
6914
-
看Windows编程循序渐进看到19章了,(我跳着看的

)!
真的很过瘾,也觉得颇有收获,就想在把以前没有搞定的程序重新拿出来试试,无奈又碰到问题了,故发出来望大家指教!
在书里说的是模块注入,是把DLL注入的别的进程中!我以前写的程序,是把函数注入的别的进程里!感觉差不多的哦!
我的代码是这样写的:
void CCallTestPlgDlg::InjectToProcess(DWORD (*FunName)())
{
HANDLE TmpHandle;
DWORD dwThreadId;
DWORD dwProcessId;
CString sClassName= "";
m_hPwnd = ::FindWindow("TForm1","游戏找CALL练习实例one");//得到窗口句柄
if(m_hPwnd == NULL)
{
MessageBox("没有找到主程序,请先运行主程序");
}
int hFunc=GetClassName(m_hPwnd,sClassName.GetBuffer(0),2000);
if(hFunc != 0 && 0 <= sClassName.Find("TForm1"))
{
if( dwThreadId = ::GetWindowThreadProcessId(m_hPwnd, &dwProcessId))
{
m_hProcess = ::OpenProcess(PROCESS_ALL_ACCESS,
FALSE, dwProcessId);
if(m_hProcess != NULL)
{
//在目标进程建立内存空间
LPVOID ThreadAdd = ::VirtualAllocEx(m_hProcess, NULL,0x1024, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
::WriteProcessMemory(m_hProcess,ThreadAdd ,FunName,0x1024,NULL);
TmpHandle = CreateRemoteThread(m_hProcess,
NULL, 0, (LPTHREAD_START_ROUTINE)ThreadAdd, NULL,
CREATE_SUSPENDED, NULL);//获得注入后过程的句柄ID
if(WaitForSingleObject(TmpHandle,INFINITE) != WAIT_OBJECT_0)//[COLOR="Red"]就在这里死了!程序失去响应![/COLOR]
{
CString StrTmp;
StrTmp.Format("%d",GetLastError());
MessageBox(StrTmp);
}
CloseHandle(TmpHandle);
CloseHandle(m_hProcess);
VirtualFreeEx(m_hProcess,ThreadAdd,0x1024,MEM_RELEASE);
}
}
}
}
DWORD tmpHP()
{
_asm{
pushad
mov eax,4549992
mov eax,[eax]
mov edx,4534336
mov ebx,4533912
call ebx
popad
ret
}
return 0;
}
void CCallTestPlgDlg::OnHp()
{
InjectToProcess(tmpHP);
}
问题出在哪里了?
我把我写的程序,还有那个测试程序都发出来以方便大家帮我找问题!
在此谢过
[培训]科锐逆向工程师培训第53期2025年7月8日开班!