现在的位置: 首页 > 综合 > 正文

VC++6.0远程调用Call

2018年04月06日 ⁄ 综合 ⁄ 共 3988字 ⁄ 字号 评论关闭

好久没来了,心情不好,又来到这熟悉又怀念的地方,伴我快一年多的地方,真的很感谢伴我渡过孤独的大半年。 
又看到喜欢的VC++,VC++这块一直很少有人发表,可能高手都忙吧。今天没事就发下我以前的远程调用Call。 

有不好的地方希望大家可以指正交流。 

  1. typedef struct ParamData    //参数结构   
  2. {   
  3.     long Param1;   
  4.     long Param2;   
  5.     DWORD Param3;   
  6.     DWORD Param4;   
  7. }ParamData,*Paramp;   
  8.    
  9. //**************************************************************************************   
  10. //函数名:InfusionFunc   
  11. //功能  :封装远程注入的函数   
  12. //参数 1:进程ID    
  13. //参数 2:被注入函数指针<函数名>    
  14. //参数 3:参数    
  15. //参数 4:参数长度    
  16. //**************************************************************************************   
  17. void InfusionFunc(DWORD dwProcId,LPVOID mFunc, LPVOID Param, DWORD ParamSize)    
  18. {    
  19.     HANDLE hProcess;//远程句柄   
  20.     LPVOID mFuncAddr;//申请函数内存地址           
  21.     LPVOID ParamAddr;//申请参数内存地址   
  22.     HANDLE hThread;    //线程句柄   
  23.     DWORD NumberOfByte; //辅助返回值   
  24.     CString str;       
  25.     //打开被注入的进程句柄       
  26.     hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwProcId);   
  27.     //申请内存   
  28.     mFuncAddr = VirtualAllocEx(hProcess,NULL,128,MEM_COMMIT,PAGE_EXECUTE_READWRITE);   
  29.     ParamAddr = VirtualAllocEx(hProcess,NULL,ParamSize,MEM_COMMIT,PAGE_EXECUTE_READWRITE);   
  30.     //写内存    
  31.     WriteProcessMemory(hProcess,mFuncAddr,mFunc,128, &NumberOfByte);       
  32.     WriteProcessMemory(hProcess,ParamAddr,Param,ParamSize, &NumberOfByte);   
  33.     //创建远程线程   
  34.     hThread = CreateRemoteThread(hProcess,NULL,0,(LPTHREAD_START_ROUTINE)mFuncAddr,   
  35.         ParamAddr,0,&NumberOfByte);   
  36.     WaitForSingleObject(hThread, INFINITE); //等待线程结束   
  37.     //释放申请有内存   
  38.     VirtualFreeEx(hProcess,mFuncAddr,128,MEM_RELEASE);   
  39.     VirtualFreeEx(hProcess,ParamAddr,ParamSize,MEM_RELEASE);       
  40.     //释放远程句柄   
  41.     CloseHandle(hThread);    
  42.     CloseHandle(hProcess);    
  43. }    
  44.    
  45. //**************************************************************************************   
  46. //函数名:CallAddhp   
  47. //功能  :调用加血Call   
  48. //**************************************************************************************   
  49. void  CallAddhp ()    
  50. {    
  51.     DWORD dwAddr = 0x00452E98;    
  52.     _asm   
  53.     {           
  54.         pushad    
  55.         mov eax,dword ptr DS:[0x456D68]    
  56.         mov edx,0x00453028   
  57.         call dwAddr    
  58.         popad    
  59.     }   
  60. }     
  61.    
  62. //**************************************************************************************   
  63. //函数名:CallAddhp   
  64. //功能  :调用加法计算Call   
  65. //**************************************************************************************   
  66. void CallAdd(LPVOID lParam)   
  67. {   
  68.     ParamData * lp;   
  69.     lp=(ParamData *)lParam;   
  70.     long lp1=(long)lp->Param1;   
  71.     long lp2=(long)lp->Param2;   
  72.     DWORD dwAddr = 0x45992C;    
  73.     _asm   
  74.     {   
  75.         pushad   
  76.         pushad    
  77.         push lp2   
  78.         push lp1   
  79.         mov eax,dword ptr DS:[0x461CF8]   
  80.         push eax   
  81.         call dwAddr    
  82.         popad    
  83.     }   
  84. }   
  85. 下面是调用实例   
  86. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////   
  87. //一例:调用无参Call   
  88. void CInfusionFunDlg::OnButton4()    
  89. {   
  90.     // TODO: Add your control notification handler code here       
  91.     DWORD ProcessId=NULL;   
  92.     HWND hWnd = ::FindWindow(NULL,"游戏找CALL练习实例one"); //窗口标题取句柄   
  93.     GetWindowThreadProcessId(hWnd,&ProcessId);   
  94.     if(ProcessId==NULL)   
  95.         ::AfxMessageBox("未找到进程");   
  96.     else   
  97.     {   
  98.    
  99.         InfusionFunc(ProcessId,CallAddhp,NULL,NULL);   
  100.     }   
  101. }   
  102. //二例:调用有参Call   
  103. void CInfusionFunDlg::OnButtonAdd()    
  104. {   
  105.     // TODO: Add your control notification handler code here   
  106.     DWORD ProcessId=NULL;   
  107.     HWND hWnd = ::FindWindow(NULL,"F8 CALL 01"); //窗口标题取句柄   
  108.     GetWindowThreadProcessId(hWnd,&ProcessId);   
  109.     ParamData CallParam;   
  110.     CallParam.Param1 = atoi(m_edit1_text);   
  111.     CallParam.Param2 = atoi(m_edit2_text);   
  112.     if(ProcessId==NULL)   
  113.         ::AfxMessageBox("未找到进程");   
  114.     else   
  115.     {   
  116.    
  117.         InfusionFunc(ProcessId,CallAdd,&CallParam,sizeof(CallParam));   
  118.     }       
  119. }  


转载地址:http://www.ghoffice.com/bbs/read-htm-tid-67453.html

抱歉!评论已关闭.