VC++6.0远程调用Call

本文分享了一个关于远程调用的技术实现案例,重点介绍了如何利用C++进行远程注入和调用,包括无参数和有参数的函数调用过程,并提供了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

好久没来了,心情不好,又来到这熟悉又怀念的地方,伴我快一年多的地方,真的很感谢伴我渡过孤独的大半年。  
又看到喜欢的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
//官方网站:www.feiyuol.com //郁金香灬老师 //QQ 150330575 //个人网站:www.yjxsoft.com 跨进程调用CALL进程调用带多个的参数CALL // myInject_dll.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include #include"RWA.h" //PVOID 跨进程分配内存(WORD nSize ); //1、获取进程句柄 //2、读写 分配内存 创建线程 //3、跨进程分配内存 void mycall() { PVOID p1=跨进程分配内存(1000); printf("分配的内存地址=%p\n",p1); printf("按回车键 释放内存\n"); getchar(); 跨进程释放内存(p1,1000); printf("已经 释放内存\n"); } LPTHREAD_START_ROUTINE a; BOOL 跨进程调用CALL(PVOID pcall地址,PVOID plst参数 ); //LoadLibraryA(dll名字指针) //MessageBeep(1) void Test远程调用MessageBeep() { 跨进程调用CALL(MessageBeep,(PVOID)0x12768); } //注入my022MFC.dll到目标进程 void Test3() { char szDllName[]="my022MFC.dll"; //全路径 // char szDllName[]="C:\\Users\\yjxsoft\\Documents\\visual studio 2010\\Projects\\my022\\Debug\\my022MFC.dll"; PVOID p1=跨进程分配内存(1000); printf("分配的内存地址=%p\n",p1); WN((DWORD)p1,szDllName,sizeof(szDllName));//WriteProcessMemory /*跨进程调用CALL(LoadLibraryA,(PVOID)szDllName);*/ 跨进程调用CALL(LoadLibraryA,(PVOID)p1); } void Test4() { // char szDllName[]="my022MFC.dll"; //全路径 char szDllName[]="E:\\1905\\代码\\my022-24\\Debug\\my022MFC.dll"; PVOID p1=跨进程分配内存(1000); printf("分配的内存地址=%p\n",p1); WN((DWORD)p1,szDllName,sizeof(szDllName));//WriteProcessMemory /*跨进程调用CALL(LoadLibraryA,(PVOID)szDllName);*/ 跨进程调用CALL(LoadLibraryA,(PVOID)p1); } int _tmain(int argc, _TCHAR* argv[]) { //mycall(); Test3(); Test4(); return 0; } //作业 //1、练习跨进程注入DLL //2、跨进程分配的内存内存 使用完后 用VirtualFreeEx释放掉 //3、进程句柄使用完后用CloseHandle释放句柄资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值