• 2232阅读
  • 2回复

VC++6.0远程调用Call [复制链接]

上一主题 下一主题
离线啊冲
 

只看楼主 倒序阅读 使用道具 楼主  发表于: 2014-06-07
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));
    }    
}
善者 慈悲心常在 无怨无恨 以苦为乐
默认压缩密码www.hifyl.com
文件分享密码问题:http://www.hifyl.com/read-htm-tid-4444.html
离线李侃

只看该作者 沙发  发表于: 2014-06-07
学习
技术为王,我辈在路上
离线nopara

只看该作者 板凳  发表于: 2016-12-13
谢谢分享!!!!
快速回复
限100 字节
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
 
上一个 下一个