看流星社区

 找回密码
 注册账号
查看: 1942|回复: 1

vc6 封装远程注入源码

[复制链接]

该用户从未签到

发表于 2013-4-30 08:53:20 | 显示全部楼层 |阅读模式
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,"youxi找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));
    }     
}

该用户从未签到

发表于 2013-9-23 12:58:37 | 显示全部楼层
还有这种东西?  [s:342]
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-5-14 20:51

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表