周末,在家静坐。被票圈的网易严选推广刷了屏,3件8折果断败了下家。
结果在提交订单的时候,我从马云爸爸那买的170手机号居然过不了验证,写 iPhone 版的小哥,你的正则是不是该更新下了。
于是倍感不爽,看到微信的618活动有免单机会,于是自己就跑去也试了一把。结果只有180分,然后又看了下排行榜那么多900+的,心想这怎么可能他们一定是作弊了。看我戳穿他们。
于是,我熟练地打开了 Charels 这个神奇的工具。
重新玩了次游戏,获得了活动的api地址:http://api.menma.me,直接whois没有成功,追根溯源发现 menma.me 跟socialpark.com.cn 有关系,于是切换了个思路。
所以可见,网易严选这次的微信内活动是这家公司做的。
用Charles看了下提交的数据,其中phprpc_args应该就是我们提交的数据。
尝试对其进行解码,当时数据中结尾为==,所以直接进行了base64解码。以图示为例解码为:
看来构造数据很简单,不过因为不熟悉PHP,所以走了弯路,最开始直接将score分数修改再编码,然后再通过Charles打断点,篡改提交。结果总是报错,后来返回的数据中也会带有a:1{i:0;s:73... 这类的结构,提醒了我这可能是一种特殊的结构,一搜就发现是PHP序列化的一种格式。
于是抄了一个PHP的小程序,构造了1000分的数据,然后PHP序列化再base64编码,再重新提交。于是:
之后提交到了乌云,虽然并没有通过,没有获得邀请码略伤心。
=====================================
有趣的是后来越来越多的人来提交。
很好奇排行榜的排序逻辑,同分数的竟然不是按时间排序。更令我好奇的是,因为接口提交的数据,并没有特殊的标识字段,感觉根本没办法区分正常数据和伪造数据,这个当然可以根据玩家的游戏次数来进行一个大致的判断。
本着严谨的态度,我又对比了我测试漏洞时的数据,与今晚官方清理后的数据:
通过接口我拉取了排名前100的用户。
原2号 fly me 被清理。
原3号 范特西宁. 由 910 分 -> 1000 分,变为1号。
原4号 一团熊熊?由 900 分 -> 990 分,变为2号。
原5号 月 900 分,变为 29 号。
原6号 一天 890分,变为30号。
原7号 娄秦秦秦秦秦,890分,消失。
原8号 春风化雨,880分,消失。
原9号 木,870分,变为34号。
==========================
另外原3和原4,由910-900变为1000,990分,分别对应第一第二,名字为四字母加标点感觉很像预置数据或任意提交数据。原5和原6,分别为第29、30号,卡在活动中奖范围边缘,原7原8又消失不见。
工程师哥哥如何判断应该清理哪些数据,还挺有趣的。