15,471
社区成员
发帖
与我相关
我的任务
分享
void CMyDlg::OnBtnInsert()
{
// TODO: Add your control notification handler code here
CString strProcess;
GetDlgItemText(IDC_EDIT_PROCESS, strProcess);
HANDLE hProcess = GetProcessHandle(strProcess); //获取指定进程名的句柄
InsertPro(hProcess); //插入远程线程
}
HANDLE CMyDlg::GetProcessHandle(CString strProcess)
{
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32 pe;
DWORD dwProcess = 0;
Process32First(hSnapshot, &pe);
do
{
if (strProcess == pe.szExeFile)
{
dwProcess = pe.th32ProcessID;
break;
}
}while(Process32Next(hSnapshot, &pe));
return OpenProcess(PROCESS_CREATE_THREAD|PROCESS_VM_OPERATION|PROCESS_VM_WRITE, FALSE, dwProcess);
}
//测试 没写函数体
DWORD WINAPI CMyDlg::ThreadProc(LPVOID lpParent)
{
return 0;
}
void CMyDlg::InsertPro(HANDLE hProcess)
{
const DWORD dwFunSize = 100;
LPVOID lpBuf = VirtualAllocEx(hProcess, 0, dwFunSize,MEM_COMMIT, PAGE_READWRITE);
if (lpBuf == NULL)
{
AfxMessageBox("远程进程创建内存空间失败");
return;
}
DWORD dwWrite = 0;
WriteProcessMemory(hProcess, lpBuf, &ThreadProc, dwFunSize, &dwWrite);
if (dwFunSize != dwWrite)
{
VirtualFreeEx(hProcess, lpBuf, dwFunSize, MEM_DECOMMIT);
AfxMessageBox("远程进程写入内存失败");
return;
}
CreateRemoteThread(hProcess, NULL, 0, (DWORD (WINAPI*)(LPVOID))ThreadProc, lpBuf, 0, 0);
}