- 注册时间
- 2011-8-8
- 最后登录
- 1970-1-1
该用户从未签到
|
好久没来了,心情不好,又来到这熟悉又怀念的地方,伴我快一年多的地方,真的很感谢伴我渡过孤独的大半年。
又看到喜欢的VC++,VC++这块一直很少有人发表,可能高手都忙吧。今天没事就发下我以前的远程调用Call。
有不好的地方希望大家可以指正交流。
- typedef struct ParamData //参数结构
- {
- long Param1;
- long Param2;
- DWORD Param3;
- DWORD Param4;
- }ParamData,*Paramp;
-
- //**************************************************************************************
- //函数名:InfusionFunc
- //功能 :封装远程注入的函数
- //参数 1:进程ID
- //参数 2:被注入函数指针<函数名>
- //参数 3:参数
- //参数 4:参数长度
- //**************************************************************************************
- void InfusionFunc(DWORD dwProcId,LPVOID mFunc, LPVOID Param, DWORD ParamSize)
- {
- HANDLE hProcess;//远程句柄
- LPVOID mFuncAddr;//申请函数内存地址
- LPVOID ParamAddr;//申请参数内存地址
- HANDLE hThread; //线程句柄
- DWORD NumberOfByte; //辅助返回值
- CString str;
- //打开被注入的进程句柄
- hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwProcId);
- //申请内存
- mFuncAddr = VirtualAllocEx(hProcess,NULL,128,MEM_COMMIT,PAGE_EXECUTE_READWRITE);
- ParamAddr = VirtualAllocEx(hProcess,NULL,ParamSize,MEM_COMMIT,PAGE_EXECUTE_READWRITE);
- //写内存
- WriteProcessMemory(hProcess,mFuncAddr,mFunc,128, &NumberOfByte);
- WriteProcessMemory(hProcess,ParamAddr,Param,ParamSize, &NumberOfByte);
- //创建远程线程
- hThread = CreateRemoteThread(hProcess,NULL,0,(LPTHREAD_START_ROUTINE)mFuncAddr,
- ParamAddr,0,&NumberOfByte);
- WaitForSingleObject(hThread, INFINITE); //等待线程结束
- //释放申请有内存
- VirtualFreeEx(hProcess,mFuncAddr,128,MEM_RELEASE);
- VirtualFreeEx(hProcess,ParamAddr,ParamSize,MEM_RELEASE);
- //释放远程句柄
- CloseHandle(hThread);
- CloseHandle(hProcess);
- }
-
- //**************************************************************************************
- //函数名:CallAddhp
- //功能 :调用加血Call
- //**************************************************************************************
- void CallAddhp ()
- {
- DWORD dwAddr = 0x00452E98;
- _asm
- {
- pushad
- mov eax,dword ptr DS:[0x456D68]
- mov edx,0x00453028
- call dwAddr
- popad
- }
- }
-
- //**************************************************************************************
- //函数名:CallAddhp
- //功能 :调用加法计算Call
- //**************************************************************************************
- void CallAdd(LPVOID lParam)
- {
- ParamData * lp;
- lp=(ParamData *)lParam;
- long lp1=(long)lp->Param1;
- long lp2=(long)lp->Param2;
- DWORD dwAddr = 0x45992C;
- _asm
- {
- pushad
- pushad
- push lp2
- push lp1
- mov eax,dword ptr DS:[0x461CF8]
- push eax
- call dwAddr
- popad
- }
- }
- 下面是调用实例
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- //一例:调用无参Call
- void CInfusionFunDlg::OnButton4()
- {
- // TODO: Add your control notification handler code here
- DWORD ProcessId=NULL;
- HWND hWnd = ::FindWindow(NULL,"游戏找CALL练习实例one"); //窗口标题取句柄
- GetWindowThreadProcessId(hWnd,&ProcessId);
- if(ProcessId==NULL)
- ::AfxMessageBox("未找到进程");
- else
- {
-
- InfusionFunc(ProcessId,CallAddhp,NULL,NULL);
- }
- }
- //二例:调用有参Call
- void CInfusionFunDlg::OnButtonAdd()
- {
- // TODO: Add your control notification handler code here
- DWORD ProcessId=NULL;
- HWND hWnd = ::FindWindow(NULL,"F8 CALL 01"); //窗口标题取句柄
- GetWindowThreadProcessId(hWnd,&ProcessId);
- ParamData CallParam;
- CallParam.Param1 = atoi(m_edit1_text);
- CallParam.Param2 = atoi(m_edit2_text);
- if(ProcessId==NULL)
- ::AfxMessageBox("未找到进程");
- else
- {
-
- InfusionFunc(ProcessId,CallAdd,&CallParam,sizeof(CallParam));
- }
- }
复制代码 |
|