向僵尸开炮吧 关注:76,545贴子:1,258,687
  • 34回复贴,共1

试解:为啥那挂可以修改攻击,毕竟很多小号推到200关了

只看楼主收藏回复

有人问我这个问题,我尝试解答一下,因为要让大多数人明白,可能有点难。
我先说答案:游戏程序偷懒了,虽然这很难,但不是做不到避免这个问题。
游戏里面,我们常规行为,都是客户端,发送给服务器,服务器进行处理后写入数据库并返回客户端。
比如,我十连抽,客户端告诉服务器,我要进行10连抽,服务器会判断你有没有资格,如果有,就根据逻辑,返回一个10连抽的结果,写入数据库,并返回给客户端。
客户端的工作是,如果你没有10把钥匙,就不让你可以点击这个10连抽。但是,如果有人通过抓包,获取到了这个10连抽的请求的格式,就可以模仿发送请求,也就是绕开客户端的限制,恶意的请求,所以服务器在这里,必定是要有判断的。
所以,你看客户端的工作就是提供用户操作的便利,避免一些无效操作,提供方便,服务器端是严格进行管控的。
客户端到服务器,还有一种请求方式,叫做广播,就是2个人看到完全相同的内容,比如寰球和聊天,都是通过广播形式完成,广播就是一个客户端发送,然后服务器端同时发给每个接受广播的客户端。这种消耗明显要高于前面说的一对一的请求。
我们玩的吃鸡也是通过广播来实现两个人两个设备,呈现内容显示一致的,但这里会有一个问题,就是A和B两个要保持一致,最硬的条件是网络延迟,然后就是如果数据再通过服务器进行校验,就会更多的产生延迟,我不知道有没有说清楚,就是为了同步,只能尽可能减少服务器的处理。
好了,问题就出现了,对于战斗这种这么高频率交互的业务,服务器根本无法校验,能同步就已经很厉害了,你想那么多技能,那么快的速度,那么多的变化,我都叹为观止了,吃鸡的战斗都不会那么复杂。
所以,在战斗这部分,就没有了服务器的逻辑参与,理解了吗?
就是为了体验足够好,就放弃了服务器对战斗的校验。
所以,被抓包后,模仿了一些请求,或者修改本地内存里面的一些数据,就可以通关了。因为服务器没有校验,所以客户端告诉服务器通过,服务器就认为通关了。
但这也不是无法避免,至少我参与的项目,是有验算环节的,也就是说把战斗的部分内容截取,然后交给服务器,服务器只在结算的时候进行一次验算,如果不通过就认为战斗无效。
这个有可能有点晦涩,最简单的验算,就好比你角色没有75级,就不可能过200关,这就好理解了吧。一旦有这种验算,就不会存在你说的问题了。
所以我说,这个是程序偷懒了,这不是做不到,但我依然觉得不可思议,那么复杂的游戏都做出来了,这么会这个环节,没去细扣。
唯一的解释就是,做的时候偷懒,然后上线势头太猛,所有精力都放在了继续开发新功能上,而出现的这个问题,交给运营去头疼。
以上,是我不太成熟的观点,接受批评斧正。


IP属地:广东1楼2024-08-01 20:07回复
    那你说修改个五倍攻击,正好也在能出现的范围内,你能验证出人作弊么


    来自Android客户端3楼2024-08-01 20:31
    收起回复
      2025-08-30 20:44:27
      广告
      不感兴趣
      开通SVIP免广告
      修改完有什么意思,这个挂明显就不适合这个游戏,吃鸡挂,cf挂可以体现一下优越感,这个游戏核心不是过关,而是每个星期的抽奖,这才是肾上腺素飙升的点,吧里看得最多的就是每星期抽奖的贴,哪个宝石洗出了好东西,有钱没钱都乐此不疲


      IP属地:广西来自iPhone客户端4楼2024-08-01 21:48
      收起回复
        你是懂开发的这种秒杀功能一个很简单的校验就能避免,不同步做成异步也行啊,至少检测到开挂封了不会在排行榜挂好几天


        IP属地:河南来自iPhone客户端5楼2024-08-03 00:56
        收起回复
          策划也需要工作室和刷钥匙的用户流量,各取所需


          IP属地:安徽来自Android客户端6楼2024-08-03 04:52
          回复
            一局那么多怪,不可能都往服务器发,发个结果给服务器就行了。


            IP属地:云南来自iPhone客户端7楼2025-01-22 22:44
            回复
              元素试练每天上升上限10关,我看有人一人升了几十关,是用挂吗?


              IP属地:浙江8楼2025-06-19 12:36
              回复