看流星社区

 找回密码
 注册账号
查看: 2454|回复: 0

VC++6.0远程调用Call

[复制链接]

该用户从未签到

发表于 2011-9-16 09:39:39 | 显示全部楼层 |阅读模式
好久没来了,心情不好,又来到这熟悉又怀念的地方,伴我快一年多的地方,真的很感谢伴我渡过孤独的大半年。
又看到喜欢的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. //函数名:InfusionFunc
  10. //功能  :封装远程注入的函数
  11. //参数 1:进程ID  
  12. //参数 2:被注入函数指针<函数名>  
  13. //参数 3:参数  
  14. //参数 4:参数长度  
  15. //**************************************************************************************
  16. void InfusionFunc(DWORD dwProcId,LPVOID mFunc, LPVOID Param, DWORD ParamSize)  
  17. {  
  18.     HANDLE hProcess;//远程句柄
  19.     LPVOID mFuncAddr;//申请函数内存地址         
  20.     LPVOID ParamAddr;//申请参数内存地址
  21.     HANDLE hThread;    //线程句柄
  22.     DWORD NumberOfByte; //辅助返回值
  23.     CString str;     
  24.     //打开被注入的进程句柄     
  25.     hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwProcId);
  26.     //申请内存
  27.     mFuncAddr = VirtualAllocEx(hProcess,NULL,128,MEM_COMMIT,PAGE_EXECUTE_READWRITE);
  28.     ParamAddr = VirtualAllocEx(hProcess,NULL,ParamSize,MEM_COMMIT,PAGE_EXECUTE_READWRITE);
  29.     //写内存  
  30.     WriteProcessMemory(hProcess,mFuncAddr,mFunc,128, &NumberOfByte);     
  31.     WriteProcessMemory(hProcess,ParamAddr,Param,ParamSize, &NumberOfByte);
  32.     //创建远程线程
  33.     hThread = CreateRemoteThread(hProcess,NULL,0,(LPTHREAD_START_ROUTINE)mFuncAddr,
  34.         ParamAddr,0,&NumberOfByte);
  35.     WaitForSingleObject(hThread, INFINITE); //等待线程结束
  36.     //释放申请有内存
  37.     VirtualFreeEx(hProcess,mFuncAddr,128,MEM_RELEASE);
  38.     VirtualFreeEx(hProcess,ParamAddr,ParamSize,MEM_RELEASE);     
  39.     //释放远程句柄
  40.     CloseHandle(hThread);  
  41.     CloseHandle(hProcess);  
  42. }  

  43. //**************************************************************************************
  44. //函数名:CallAddhp
  45. //功能  :调用加血Call
  46. //**************************************************************************************
  47. void  CallAddhp ()  
  48. {  
  49.     DWORD dwAddr = 0x00452E98;  
  50.     _asm
  51.     {         
  52.         pushad  
  53.         mov eax,dword ptr DS:[0x456D68]  
  54.         mov edx,0x00453028
  55.         call dwAddr  
  56.         popad  
  57.     }
  58. }   

  59. //**************************************************************************************
  60. //函数名:CallAddhp
  61. //功能  :调用加法计算Call
  62. //**************************************************************************************
  63. void CallAdd(LPVOID lParam)
  64. {
  65.     ParamData * lp;
  66.     lp=(ParamData *)lParam;
  67.     long lp1=(long)lp->Param1;
  68.     long lp2=(long)lp->Param2;
  69.     DWORD dwAddr = 0x45992C;  
  70.     _asm
  71.     {
  72.         pushad
  73.         pushad  
  74.         push lp2
  75.         push lp1
  76.         mov eax,dword ptr DS:[0x461CF8]
  77.         push eax
  78.         call dwAddr  
  79.         popad  
  80.     }
  81. }
  82. 下面是调用实例
  83. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  84. //一例:调用无参Call
  85. void CInfusionFunDlg::OnButton4()  
  86. {
  87.     // TODO: Add your control notification handler code here     
  88.     DWORD ProcessId=NULL;
  89.     HWND hWnd = ::FindWindow(NULL,"游戏找CALL练习实例one"); //窗口标题取句柄
  90.     GetWindowThreadProcessId(hWnd,&ProcessId);
  91.     if(ProcessId==NULL)
  92.         ::AfxMessageBox("未找到进程");
  93.     else
  94.     {

  95.         InfusionFunc(ProcessId,CallAddhp,NULL,NULL);
  96.     }
  97. }
  98. //二例:调用有参Call
  99. void CInfusionFunDlg::OnButtonAdd()  
  100. {
  101.     // TODO: Add your control notification handler code here
  102.     DWORD ProcessId=NULL;
  103.     HWND hWnd = ::FindWindow(NULL,"F8 CALL 01"); //窗口标题取句柄
  104.     GetWindowThreadProcessId(hWnd,&ProcessId);
  105.     ParamData CallParam;
  106.     CallParam.Param1 = atoi(m_edit1_text);
  107.     CallParam.Param2 = atoi(m_edit2_text);
  108.     if(ProcessId==NULL)
  109.         ::AfxMessageBox("未找到进程");
  110.     else
  111.     {

  112.         InfusionFunc(ProcessId,CallAdd,&CallParam,sizeof(CallParam));
  113.     }     
  114. }
复制代码
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-4-27 20:35

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表