VC++6.0长途调用Call   
               添加时间:2013-6-13 点击量: 
 
              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 = 0 x00452E98;  
    _asm 
    {         
        pushad  
        mov eax,dword ptr DS:[0 x456D68]  
        mov edx,0 x00453028 
        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 = 0 x45992C;  
    _asm 
    { 
        pushad 
        pushad  
        push lp2 
        push lp1 
        mov eax,dword ptr DS:[0 x461CF8] 
        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)); 
    }     
}
我所有的自负皆来自我的自卑,所有的英雄气概都来自于我的软弱。嘴里振振有词是因为心里满是怀疑,深情是因为痛恨自己无情。这世界没有一件事情是虚空而生的,站在光里,背后就会有阴影,这深夜里一片寂静,是因为你还没有听见声音。—— 马良《坦白书》
                     
                  
     
  
 
    
    
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 = 0 x00452E98;
_asm
{
pushad
mov eax,dword ptr DS:[0 x456D68]
mov edx,0 x00453028
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 = 0 x45992C;
_asm
{
pushad
pushad
push lp2
push lp1
mov eax,dword ptr DS:[0 x461CF8]
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));
}
}
我所有的自负皆来自我的自卑,所有的英雄气概都来自于我的软弱。嘴里振振有词是因为心里满是怀疑,深情是因为痛恨自己无情。这世界没有一件事情是虚空而生的,站在光里,背后就会有阴影,这深夜里一片寂静,是因为你还没有听见声音。—— 马良《坦白书》




