最基础的插入进程代码



//获得进程句柄
 HWND hwnd=::FindWindow(NULL,"计算器");
 if(!hwnd)
 {
  AfxMessageBox("请打开计算器");
  return;
 }
 
 //取得进程句柄和进程ID
 DWORD Process,ProcessId;
 Process=::GetWindowThreadProcessId(hwnd,&ProcessId);
 
 //利用进程句柄来打开进程
 HANDLE hProcess=::OpenProcess(PROCESS_CREATE_THREAD |  PROCESS_VM_READ |PROCESS_VM_OPERATION
  | PROCESS_VM_WRITE,false,ProcessId);
 
 CString m_DllName="C://Documents and Settings//User//桌面//CreateRemoteThread//GameHook1//Debug//GameHook1.dll";
 char* m_Rometstr;

 //在计算器进程中为DLL的名字申请内存空间,返回值为申请到的空间基址
 m_Rometstr=(char*)::VirtualAllocEx(hProcess,NULL,m_DllName.GetLength()+1,MEM_COMMIT,PAGE_READWRITE);
 
 //写入DLL名字
 ::WriteProcessMemory(hProcess,m_Rometstr,m_DllName.GetBuffer(0),m_DllName.GetLength()+1,NULL);
 

 LPTHREAD_START_ROUTINE pfn_LoadLib;
 HANDLE hThread;
 
 //取得LoadLibraryA的入口地址
 pfn_LoadLib=(LPTHREAD_START_ROUTINE)::GetProcAddress(::GetModuleHandle("Kernel32"),"LoadLibraryA");
 
 //建立新线程,并令入口点为LoadLibraryA,附加参数为DLL名字,令DLL启动
 hThread=::CreateRemoteThread(hProcess,NULL,NULL,pfn_LoadLib,m_Rometstr,0,NULL);


 WaitForSingleObject(hThread,INFINITE);
 VirtualFreeEx(hProcess,m_Rometstr,0,MEM_RELEASE);

/如果进程结束,则关闭进程头和线程头;
    WaitForSingleObject( hProcess, INFINITE );

    CloseHandle( hProcess );
    CloseHandle( hThread );

 //VirtualFreeEx(hProcess,m_Rometstr,0,MEM_RELEASE);
 DWORD de=::GetLastError();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值