300英雄吧 关注:1,182,262贴子:77,578,540

回复:【计算机知识科普】网游中常见的作弊原理

取消只看楼主收藏回复

但如果一个人不是绿色玩家,但它的真实延迟只有50ms呢?如果它用到了前面的伪造发包来强行使用技能的技术,它将获得巨大的收益,这也是机械臂的关键所在!现在我们将预输入设置为1000ms(当然实际中是延迟补偿和预输入的结合,这里方便计算),以补偿最卡的玩家网络波动时的情况。对于同样一个在1000使用,将在5000冷却完成的四秒冷却技能。如果是最卡的1000ms延迟玩家本人而言,它十分清楚自己的延迟因此在狂按技能,在C3000=S4000(注意这里的差值为玩家的延迟,请结合前述来理解)预输入了技能,然后在1000ms后服务器收到消息S5000=C4000并判定成功,因此这名玩家确实的正确释放了技能并完美旋转冷却。对于一个不卡的50ms玩家而言,他也在C3950=S4000尝试使用技能,服务器在S4050=C4000收到了包,但此时冷却时间SCD950=CCD1000,因此没有执行使用技能的效果,这就像你平时在游戏里提前按了技能的状况一样。在稍后的C4900=S4950时正确的按下了技能,然后服务器在S5000=C4950正确收到了包,这名低延迟玩家也完成了无缝的(在服务器计数逻辑上的)冷却循环


IP属地:湖北40楼2023-10-13 14:19
收起回复
    不妨将这个宽容最卡的人的时间叫做宽限时间,目前我们假设为1000ms。如果一个技能的冷却时间低于两倍的宽限时间,它就必须解除服务端判定,否则对任何卡的人就不友好。一个最基本的逻辑是,客户端必须收到服务器返回的使用成功的包,才能使用下一个多段技能,否则验证就毫无意义。假设一个只有100ms冷却的多段系列技能abcd,那么根据前述,最卡的人需要提前(=预输入时间)的发出使用a的指令,如果严格采用了验证,那么此刻它的服务端,也就是300英雄界面中是不能使用二段技能b的,因为没有收到a使用成功的回包,也就是它的任何多段技能,实际冷却至少还是两倍的延迟!


    IP属地:湖北41楼2023-10-13 14:43
    回复
      这里有人要问了,那我不能向之前的解决方法一样,允许卡比提前发b包,也就是它本地用完a技能立刻切换到b技能,然后接连发送abcd,服务器也接连验证使用abcd,这不就解决了?可惜现实的世界不仅仅有延迟,还有延迟波动!不仅仅有延迟波动,还有丢包!而好巧不巧,越卡的人,越容易延迟波动或者丢包!如果a技能在1000ms的延迟后到服务器(C1000=S0 => S1000),但b技能忽然网络好了在500ms就到了(C1100=S100 => S600),就算算上本地冷却时间,居然也是后发先到,服务器如果严格执行验证只能直接先不让用b,然后响应了a。这个时候你会发现,服务器的你只用了a技能,在等二段的b,而本地的你已经ab假装都用出去了,技能栏亮着的是c!如果这个c不能自动切回b或者只会切回a,你怕是要卡着一整局了。
      熟悉么?ty是会做游戏的,相信玩的久一点的能开始脑补出以前因此导致的类似bug了


      IP属地:湖北42楼2023-10-13 14:46
      收起回复
        因此为了让卡的人也配玩游戏,二倍于宽限时间的技能只能服务器不做验证。这时候机械臂就来喽,相信看了前文的各位也能猜测个七七八八了:一个其实只有50ms延迟的正常人,一股脑的连续向服务器发送使用亚丝娜q1q2q3q4的消息,而因为这个技能二段冷却太短,服务器不能严谨验证,只能真的信了,只要它的包顺序的收到,服务器就真敢认为它是连续使用的。有人问,那服务器一帧四个包也能信么?前面为了方便计算给大家只计算了客户端预输入时的优化状况,不要忘了实际中是有服务端延迟补偿的。而最简单的服务端延迟补偿方式,就是直接在服务端的技能冷却验证中给所有技能一个减数,以简单的对半弥补宽限时间的策略,本地做500ms的预输入,服务端做500ms减计延迟补偿,这意味着任何技能在服务器上判定时,都减少了0.5s的冷却,对于亚丝娜这样几乎没有冷却的技能,在服务器上冷却为0的连续收包通过验证也不奇怪了


        IP属地:湖北44楼2023-10-13 14:54
        回复
          最后做个结尾,也简单解答我能想到的小白问题
          Q: 这么烂是ty不作为,ty不行么?
          A: ty烂是一部分,但关键是一定要照顾玩家体验,网络的底层逻辑和玩家体验优化的平衡让这个很难解决。强如tx旗下的lol也难以解决这些漏洞的存在。再例如FF14中的首杀队三插外挂问题,跟这篇贴子说到的网络原理可谓异曲同工


          IP属地:湖北46楼2023-10-13 14:57
          收起回复
            Q: 赛博亚丝娜这么无脑发一堆包,能不能重点关照一下加入一些特判逻辑?
            A: 从特征上来判断是可能的,不过这就不是ty的水平能做的(tx那样的可是专门有一部分团队在抓特征的),简单的想当然比如什么机械臂就是连续大量发包是挂,普通人慢慢有间隔不是挂太想当然现实的网络状况了,由于udp在国内丢包家常便饭的问题,300正经的传包我相信都是多发的(例如kcp这种上层协议内部实现就都是多发的),在加上网络延迟等问题(你是卡比,你的4q一套数据包在长城宽带的某个口排队了一下刚好排一块了,然后它一口气给你发出去了,叠加上游戏本身的多发,你看服务器看起来你像不像机械臂?),很难非常简单的从技术上判断这种作弊,按ty的装死程度可能很长时间都很难改善了


            IP属地:湖北47楼2023-10-13 15:07
            收起回复
              淦,梳理到最后都忘了为啥发贴了,说一下吧友口里CE幻刺的情况。
              首先做一个基本判断,随机数一定是本地的,要是连个随机数都要问一圈服务器那这游戏卡的没法玩了。考虑到随机数如何进行一个验证,我们可以设计在游戏开始时给所有玩家每人一个两端同步的种子,然后在使用时累计计数与服务器进行某种同步,可以看到因为普攻暴击等高频机制的存在,这又是一个无法完全服务器校验的内容,因此如果想要搞肯定是有漏洞在里面的
              根据300里的表现,我认为可能是服务器开始时下发种子和计数,然后定期同步
              可能1:CE类改本地,如果本地数据未加密是可能的,根据某些老贴的印象ty对局内应该会定期同步全局来修复了某些问题,但不排除这种可能
              可能2:抓到明文,开局看ID的黑科技多年不死,有理由怀疑开局前或掉线重连中申请的全场同步首包之类的可被明文阅读,如果里面有了种子的话自己做中间人修改为一个算法下 头n次高概率的种子,然后不断申请全场同步的包读改明文
              可能3:重放暴击攻击的技能动作包,幻刺暴击攻击是特殊动作,这里应该是套用了使用技能的逻辑,既然机械臂神赵云之类这么泛滥可以相信对于作弊者而言模拟使用技能发包是可以做到的


              IP属地:湖北48楼2023-10-13 15:25
              回复
                最后再裱一下隔壁的癌症策划,就这数值水平别在游戏公司混了,ty是死到招不到人了么?概率概率,你对概率有一点点概念么?相似的例子Minecraft社区的超人气玩家Dream,在一次速通中被怀疑暗改了概率,看看别人是怎么做的?简单的数学统计就告诉你超高的概率就是作弊!极低的概率就是0!能不能学学这视频的样子算一下香子兰某段中几次攻击暴击几次,期望多少多少,然后确认这约等于0?是不会,是不敢,还是利益相关啊?
                https://www.bilibili.com/video/BV1Dt4y1k7HL


                IP属地:湖北49楼2023-10-13 15:30
                收起回复