最基础的插入进程代码
2007-12-29 20:12
281 查看
//获得进程句柄
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();
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();
相关文章推荐
- [linux基础] 查看代码区进程号
- 一个向别的进程插入dll的代码
- 一个向别的进程插入dll的代码收藏
- 一个向别的进程插入dll的代码
- JavaScript基础:在HTML中插入js代码
- 一个向别的进程插入dll的代码
- 把自身插入到IE进程里的代码
- 04-在jsp脚本中插入javaScript代码(jsp基础应用)
- 一个向别的进程插入dll的代码 .
- 在进程空间中插入另一个进程的代码细节化
- 把自身插入到IE进程里的代码
- 一个向别的进程插入dll的代码
- 基础排序——冒泡排序、选择排序、插入排序的讲解、代码实现
- JSP基础知识JSP中插入JAVA代码
- C++基础 课程代码
- C++代码往数据库插入数据--failed
- [原创&译]向其他进程注入代码的三种方法
- 进程和线程基础
- 算法导论第三版-第6章堆排序操作完整代码(建堆、插入、删除、排序等)
- 进程之间通讯的代码: