VC++6.0远程调用Call

好久没来了,心情不好,又来到这熟悉又怀念的地方,伴我快一年多的地方,真的很感谢伴我渡过孤独的大半年。  
又看到喜欢的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)); 
    }     
}

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

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值