gchq2005 发表于 2015-9-26 14:58:23

VC++6.0远程调带参Call实现代码!!

VC++6.0远程调带参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   
//**************************************************************************************   
voidCallAddhp ()   
{   
    DWORD dwAddr = 0x00452E98;   
    _asm   
    {         
      pushad   
      mov eax,dword ptr DS:   
      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:   
      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));   
    }      
}






随波逐流2015 发表于 2015-9-26 19:21:34


支持, 海 强烈支持楼主ing……

xzr23 发表于 2015-10-9 23:28:02

看看。。。。。
页: [1]
查看完整版本: VC++6.0远程调带参Call实现代码!!