关于一些脚本引起导致刷元宝的问题
更新时间:2016-10-27 09:03
文章作者:admin
浏览次数: 次
近期,有彩虹用户反馈出现刷元宝的问题,经过我们分析是水上漂工具利用客户端发送给服务端的相关数据进行篡改后,导致出现刷元宝的现象。在这里告诉GM的是,客户端所发送来的所有数据都是可以用工具进行修改,我们只能从脚本严谨的检测中进行杜绝外挂发包!
案例1: 内容来自dedecms
QUERYVAL 0 1 9 @发红包 请输入你本次红包元宝的数量!
//这个命令就是属于玩家通过客户端写入值然后发送给服务端!这个值同时水上漂也可以修改成任意值! 织梦好,好织梦
这个脚本后面的触发普遍的GM都是这样写。
[@发红包]
#IF 本文来自织梦
CHECKGAMEGOLD < $STR(M10)
#ACT
SENDMSG 5 元宝不足,无法发送红包!
break dedecms.com
#ELSEACT
GAMEGOLD - $STR(M10)
.......(扣除元宝后的其他操作省略)
.......(扣除元宝后的其他操作省略) 织梦好,好织梦
break
从这触发脚本M10的值是玩家任意输入,虽然字符长度可限制,但水上漂可将M10改成任意值,也可超过21亿,甚至几百亿! copyright dedecms
重点来了,如果CHECKGAMEGOLD 的值超过21亿,引擎判断就会出现问题,因为引擎执行出错,都是false,
所以上面的脚本如果检测元宝超过21亿,引擎会去执行GAMEGOLD - $STR(M10) 。 本文来自织梦
同样的道理,GAMEGOLD 给玩家减少元宝的值超过21亿。那么引擎也就不会去减少玩家元宝!
这样就造成水上漂工具修改M10的值超过21亿,玩家不用一个元宝,就可以给全服任何玩家发元宝! 织梦好,好织梦
那么我们现在从脚本检测上严谨杜绝的正确写法!
[@发红包]
#IF 织梦内容管理系统
SMALL M10 1
#ACT
SENDMSG 5 你输入的元宝不正确!
break
#IF 内容来自dedecms
LARGE M10 2100000000 // SMALL、LARGE、MOV、DEC等支持42亿以上数值运算;
#ACT
SENDMSG 5 你输入的元宝不正确! 织梦好,好织梦
break
#IF
CHECKGAMEGOLD < $STR(M10)
#ACT
SENDMSG 5 元宝不足,无法发送红包! 内容来自dedecms
break
#ELSEACT
GAMEGOLD - $STR(M10)
.......(扣除元宝后的其他操作省略) 织梦内容管理系统
.......(扣除元宝后的其他操作省略)
break
我们要在前面对M10变量进行检测,防止水上漂将M10的值改成负数,或者超过21亿,这样就可以防止元宝! dedecms.com
copyright dedecms
案例2:
QUERYMSG 本服有人发红包啦,大家点击确定领取吧! @领取红包 dedecms.com
//这命令也是属于玩家通过客户端点击确定后发送给服务端!水上漂可截取@领取红包后重复多次直接发送这标签! copyright dedecms
这个脚本后面的触发普遍的GM都是这样写。
[@领取红包] 内容来自dedecms
#IF
RANDOM 1
#ACT
GAMEGOLD + 5000 内容来自dedecms
SENDMSG 5 你领取了5000元宝红包
break
从这个触发脚本,@领取红包 水上漂可以发多少次,就加多少次元宝。 本文来自织梦
那么我们现在从脚本检测上严谨杜绝的正确写法!
#ACT dedecms.com
MOV D10 1 //发送这个弹窗的时候,我们给一个D变量赋值
QUERYMSG 本服有人发红包啦,大家点击确定领取吧! @领取红包 copyright dedecms
[@领取红包]
#IF
EQUAL D10 1 //领取元宝的时候,我们检测这个D变量 织梦内容管理系统
#ACT
MOV D10 0 //领取完元宝我们还原这个D变量 dedecms.com
GAMEGOLD + 5000
SENDMSG 5 你领取了5000元宝红包
break
#ELSEACT 织梦好,好织梦
SENDMSG 5 领取红包错误...
break
这样才能杜绝水上漂利用客户端发送给服务端的包来刷元宝。 copyright dedecms
最后想说的是,客户端所发送的东西是不可信的,只有我们自己的脚本才是可信的!