war3 1.20e dota反互通图作弊 及 war3对战平台原理
大部分互通图在作弊的时候都需要输入作弊指令 -xxx
而且为了掩人耳目有些指令具有迷惑作用比如 -ma空格空格空格
但是如果设置聊天对象为ob那么队友也看不到你输入的指令
但事实上这一切尽在服务器眼中
玩家输入的任何游戏指令(-打头)
都会通过26号游戏协议包(F7 26 xx xx)发送到服务器
假如我们做了一个服务器插件
监控玩家使用的游戏指令
就可以达到一定的监测作弊效果
然后配合踢人功能惩罚作弊者…那么…
另外在分析魔兽协议的时候又学习了一下iocp模型
war3为每个连接创建了一个线程接收网络数据包
使用WSARecv接收数据
如果返回-1并且WSAGetLastError = ERROR_IO_PENDING
那么就使用GetQueuedCompletionStatus等待IO完成
另外通过lpCompletionKey结构,可以得知被等待的socket句柄和缓冲区
至此我们也可以猜测各种游戏平台的工作原理
hook socket把TCP改成UDP
hook connect返回成功
hook AcceptEx或其他。。
hook send通过sendto把数据传到服务器由服务器转发,要确保数据正确到达
hook WSARecv,貌似可以阻塞也可以不阻塞,总之数据来了就返回,如果不阻塞。那么再
hook GetQueuedCompletionStatus,等待数据到来
大体应该就是这样子,全是猜测,下一步可以构想一下自己实现的对战平台的网络模型
另外我想数据可以是由服务器中转的,也可以是用UDP穿墙技术实现的。
区别就是经过服务器中转。还可以多实现一些功能
比如聊天监控,作弊监控……