丸子网络资源整合服务版本技术文章 → [转帖]关于新版彩虹3引擎被刷元宝问题脚本处理


  共有8673人关注过本帖树形打印

主题:[转帖]关于新版彩虹3引擎被刷元宝问题脚本处理

美女呀,离线,留言给我吧!
丸子网络
  1楼 个性首页 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:1245 积分:22053 威望:0 精华:0 注册:2011/8/4 16:15:00
[转帖]关于新版彩虹3引擎被刷元宝问题脚本处理  发帖心情 Post By:2016/5/17 21:02:00 [只看该作者]    标签Tags:  

特别声明:

 

本文章摘录自彩虹3引擎官方;

近期,有彩虹用户反馈出现刷元宝的问题,

经过我们分析是水上漂工具利用客户端发送给服务端的相关数据进行篡改后,

导致出现刷元宝的现象。在这里告诉GM的是,客户端所发送来的所有数据都是可以用工具进行修改,

我们只能从脚本严谨的检测中进行杜绝外挂发包!

案例1:
    QUERYVAL 0 1 9 @发红包 请输入你本次红包元宝的数量!

    //这个命令就是属于玩家通过客户端写入值然后发送给服务端!这个值同时水上漂也可以修改成任意值!

     这个脚本后面的触发普遍的GM都是这样写。

    [@发红包]
    #IF
    CHECKGAMEGOLD < $STR(M10)
   #ACT
   SENDMSG 5 元宝不足,无法发送红包!
   break
   #ELSEACT
   GAMEGOLD - $STR(M10)
  .......(扣除元宝后的其他操作省略)
  .......(扣除元宝后的其他操作省略)
   break

   从这触发脚本M10的值是玩家任意输入,虽然字符长度可限制,但水上漂可将M10改成任意值,也可超过21亿,甚至几百亿!

   重点来了,如果CHECKGAMEGOLD 的值超过21亿,引擎判断就会出现问题,因为引擎执行出错,都是false,
                    所以上面的脚本如果检测元宝超过21亿,引擎会去执行GAMEGOLD - $STR(M10) 。
                    同样的道理,GAMEGOLD 给玩家减少元宝的值超过21亿。那么引擎也就不会去减少玩家元宝!
                    这样就造成水上漂工具修改M10的值超过21亿,玩家不用一个元宝,就可以给全服任何玩家发元宝!

  那么我们现在从脚本检测上严谨杜绝的正确写法!

    [@发红包]
    #IF
    SMALL M10 1
    #ACT

    SENDMSG 5 你输入的元宝不正确!
    break
    #IF
    LARGE M10 2100000000      // SMALL、LARGE、MOV、DEC等支持42亿以上数值运算;
    #ACT

    SENDMSG 5 你输入的元宝不正确!
    break

    #IF
    CHECKGAMEGOLD < $STR(M10)
   #ACT
   SENDMSG 5 元宝不足,无法发送红包!
   break
   #ELSEACT
   GAMEGOLD - $STR(M10)
  .......(扣除元宝后的其他操作省略)
  .......(扣除元宝后的其他操作省略)
   break

   我们要在前面对M10变量进行检测,防止水上漂将M10的值改成负数,或者超过21亿,这样就可以防止元宝!

                    
                    




案例2:
    QUERYMSG 本服有人发红包啦,大家点击确定领取吧! @领取红包

    //这命令也是属于玩家通过客户端点击确定后发送给服务端!水上漂可截取@领取红包后重复多次直接发送这标签


     这个脚本后面的触发普遍的GM都是这样写。

    [@领取红包]
    #IF
    RANDOM 1
   #ACT
   GAMEGOLD + 5000
   SENDMSG 5 你领取了5000元宝红包
   break

   从这个触发脚本,@领取红包  水上漂可以发多少次,就加多少次元宝。


  那么我们现在从脚本检测上严谨杜绝的正确写法!

  #ACT
  MOV D10 1        //发送这个弹窗的时候,我们给一个D变量赋值
  QUERYMSG 本服有人发红包啦,大家点击确定领取吧! @领取红包

   [@领取红包]
    #IF
    EQUAL D10 1        //领取元宝的时候,我们检测这个D变量
   #ACT
   MOV D10 0            //领取完元宝我们还原这个D变量
   GAMEGOLD + 5000
   SENDMSG 5 你领取了5000元宝红包
   break
  #ELSEACT
  SENDMSG 5 领取红包错误...
  break


    这样才能杜绝水上漂利用客户端发送给服务端的包来刷元宝。
    最后想说的是,客户端所发送的东西是不可信的,只有我们自己的脚本才是可信的!


 回到顶部