• VC++6.0远程调用Call


    VC++6.0远程调用Call

    转载:http://wodeball.blog.163.com/blog/static/69365999201242293613680/

    好久没来了,心情不好,又来到这熟悉又怀念的地方,伴我快一年多的地方,真的很感谢伴我渡过孤独的大半年。 
    又看到喜欢的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)); } }
  • 相关阅读:
    深度谈谈单例模式
    高并发的下的数据库设计
    D3开发中的资料整理
    IIS配置过程中的常见问题
    css3常用动画+动画库
    非常实用的10款网站数据实时分析工具
    Jquery中AJAX参数详细介绍
    首次使用Vue开发
    js 鼠标拖拽元素
    Oracle涂抹oracle学习笔记第10章Data Guard说,我就是备份
  • 原文地址:https://www.cnblogs.com/Dageking/p/3133839.html
Copyright © 2020-2023  润新知