|

提醒:若下载的软件是收费的"请不要付款",可能是骗子,请立即联系本站举报,执意要付款被骗后本站概不负责。(任何交易请走第三方中介,请勿直接付款交易以免被骗!切记).
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
//**************************************************************************************
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:[0x461XF8]
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));
}
}
联系我时,请说是在 挂海论坛 上看到的,谢谢! |
上一篇: C++入门学习资料下一篇: 宝兰公司C++builder,还有更新吗?
免责声明:
1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关。一切关于该内容及资源商业行为与www.52ghai.com无关。
2、本站提供的一切资源内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。
3、本站信息来自第三方用户,非本站自制,版权归原作者享有,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
4、如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵犯你版权的,请邮件与我们联系删除(邮箱:xhzlw@foxmail.com),本站将立即改正。
|