关于魔兽T人和延迟的恶劣挂原理及实现
现如今在平台打魔兽,全图泛滥,基本上每一把都有好几个开图的,而且好多主机开延迟挂 T人挂,非常恶劣的行为,打不过开挂T人....
从魔兽机制上讲,是没办法防止主机踢人的,你跟主机连接,主机就可以获取你的IP地址和端口,断开你连接没办法。
我对其中踢人和延迟比较感兴趣,所以自己编写着试了试,完全乃杀人放火之必备利器!
延迟挂和T人挂原理都差不多,延迟就是在IP数据包发送之前,加个延迟函数sleep(),然后再把数据包返回给你,
这样就造成你比如释放技能,要过好久才有反应,如果延迟比较高,则直接掉线;
而T人则直接断开你的连接,就造成掉线了。
魔兽通过winsocket 传输数据,使用的是 wsock32.dll 我们可以HOOK "send" 和 "sendto",在WSPRecv()上做手脚;
比如要延迟玩家,可以Sleep()几秒后再把数据发送出去。
int WSPAPI WSPRecv( SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount, LPDWORD lpNumberOfBytesRecvd, LPDWORD lpFlags, LPWSAOVERLAPPED lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine, LPWSATHREADID lpThreadId, LPINT lpErrno ) { int iError; int iRet; //判断如果开启全部延迟 则全部延迟 if(g_AllToBlock) { Sleep(g_DelaySec); } else if(g_IsDelay) { //s_Socket里面存的是玩家的Socket 判断如果不为null 则延迟 for (int i=0;i<10;i++) { if(s_Socket[i]!=NULL && s==s_Socket[i]) Sleep(g_DelaySec); } } return g_NextProcTable.lpWSPRecv(s, lpBuffers, dwBufferCount, lpNumberOfBytesRecvd, lpFlags, lpOverlapped , lpCompletionRoutine, lpThreadId, lpErrno); }
然后我们可以拦截WSPSend()函数来得到聊天信息,判断是否开启踢人和延迟;
int WSPAPI WSPSend( SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount, LPDWORD lpNumberOfBytesSent, DWORD dwFlags, LPWSAOVERLAPPED lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine, LPWSATHREADID lpThreadId, LPINT lpErrno ) { unsigned char * bp=(unsigned char *)lpBuffers->buf; DWORD i=0; BOOL flag=TRUE; u_long bufferlen=lpBuffers->len; int iError; if(*(bp+i) == 0xf7) { if(*(bp+i+1) == 0x0F) { if(*(bp+i+12)=='-' ) { if(*(bp+i+13)=='d' && *(bp+i+14)=='e'&& *(bp+i+15)=='l' && *(bp+i+16)=='a' && *(bp+i+16)=='y') { g_DelaySec= 2000;//延迟2000毫秒 AddSocket(s); //把该玩家Socket存到数组里面 g_IsDelay=TRUE; } else if( *(bp+i+13)=='a' && *(bp+i+14)=='g') { g_DelaySec =2000; g_AllToBlock=TRUE; } return 0; } } } return g_NextProcTable.lpWSPSend(s, lpBuffers, dwBufferCount, lpNumberOfBytesSent, dwFlags, lpOverlapped , lpCompletionRoutine, lpThreadId, lpErrno); }
我在BreezeMH V2.5的基础上编写了延迟功能,测试开启延迟,对方根本没办法玩!
聊天输入-ag延迟全部玩家 连续打几次 -ag 全部掉线 加分或VS显示‘游戏由于网络异常结束’
私聊-laji 延迟对方 延迟毫秒数可以在配置文件修改 点击托盘的M图标打开配置文件 修改默认延迟毫秒 如果需要对方掉线 请在配置文件把默认延迟毫秒设置高点
随便找个人私聊 -jia 增加延迟 -jian 减少延迟 每次加减延迟毫秒可以在配置文件修改
聊天输入-as 取消所有延迟 为了防止打错命令 所有“-”开头的命令对方都看不到
以下是软件的下载地址:
https://files.cnblogs.com/intcry/%E4%BC%98%E5%8C%96%E7%89%88.rar
此软件仅供学习交流使用
作者:Crazy Ma
出处:http://www.cnblogs.com/intcry
♪:30%的技术+70%的精神,帮助别人得到他想要的,你就能得到你想要的! ♪