首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

VC远程调用CAll,高手在那里?小弟求帮解决方法

2012-03-19 
VC远程调用CAll,高手在那里?小弟求帮主要代码如下C/C++ codeDWORD GetProcessIDByName(char *name){PROCES

VC远程调用CAll,高手在那里?小弟求帮
主要代码如下

C/C++ code
DWORD GetProcessIDByName(char *name){        PROCESSENTRY32 entry;    entry.dwSize=sizeof(entry);    HANDLE handle=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);        bool tap=Process32First(handle,&entry);        while(tap)    {        if(strcmp(entry.szExeFile,name)==0)            return entry.th32ProcessID;        tap=Process32Next(handle,&entry);    }    return -1;                            }void M_InfusionFunc(DWORD pid,LPVOID mfun){       HANDLE hProcess;//远程句柄    LPVOID mFuncAddr;//申请函数内存地址           HANDLE hThread;    //线程句柄     DWORD NumberOfByte; //辅助返回值      CString str;     //打开被注入的进程句柄       hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid);    //申请内存     mFuncAddr = VirtualAllocEx(hProcess,NULL,128,MEM_COMMIT,PAGE_EXECUTE_READWRITE);    //写内存     WriteProcessMemory(hProcess,mFuncAddr,mfun,128, &NumberOfByte);      //创建远程线程    hThread = CreateRemoteThread(hProcess,NULL,0,(LPTHREAD_START_ROUTINE)mFuncAddr, 0,0,&NumberOfByte);     WaitForSingleObject(hThread, INFINITE); //等待线程结束    //释放申请有内存      VirtualFreeEx(hProcess,mFuncAddr,128,MEM_RELEASE);     //释放远程句柄    CloseHandle(hThread);      CloseHandle(hProcess); }  void AddHP(){            __asm     mov ebx,0x00994818    __asm    mov edx,ebx    __asm    mov eax,[ebx+0x124]    __asm    call [ebx+0x120]} void CCodeDlg::OnButton1() {    // TODO: Add your control notification handler code here    DWORD id=GetProcessIDByName("游戏找CALL练习实例one.exe");    M_InfusionFunc(id,AddHP);    }

那个进程id我调试了没问题呀,就是注入有问题,我用od跟了一下注入的地址,全是 jmp什么的,程序运行出错
再网上下了个注入器,注入了一下,又用od跟了一下,发现确实注入了,
现在就是为什么这段代码注入不了呢?那位大哥帮给指点一下
那个 “游戏找CALL练习实例one.exe”是我在网上下的找call的
发过的帖子没人回我就再发一次,嘿嘿

[解决办法]
//创建远程线程
hThread = CreateRemoteThread(hProcess,NULL,0,(LPTHREAD_START_ROUTINE)mFuncAddr, 0,0,&NumberOfByte); 
创建的远程线程有问题的,你要把你函数的代码写到注入进程的地址空间去
WriteProcessMemory(hProcess,mFuncAddr,mfun,128, &NumberOfByte); // 有问题
[解决办法]
探讨

引用:
//创建远程线程
hThread = CreateRemoteThread(hProcess,NULL,0,(LPTHREAD_START_ROUTINE)mFuncAddr, 0,0,&NumberOfByte);
创建的远程线程有问题的,你要把你函数的代码写到注入进程的地址空间去
WriteProcessMemory(h……

热点排行
Bad Request.