刷百度地图2016年感恩节喂火鸡活动
2016-11-24T23:00:00+08:00
再见理想
很简单的小游戏 ,在地图上有火鸡,喂饱它就能获得积分,一天可以喂12次。
积分可以兑换商品,那我们就有作弊的动力了!抓包发现几乎所有的逻辑都是在服务器端完成的,以下是真实的逻辑过程:
点击火鸡:请求服务器创建一局游戏
- 服务器检查今天的次数用完没
- 没有用完则创建游戏(A),返回游戏id,同时随机指定此局游戏输赢结果
用户玩游戏:不出意外,服务器允许你赢你就能喂饱火鸡,否则无论如何你手多块都喂不饱的
赢了返回游戏结果:服务器随机指定赢多少个积分(B),意外能获得其他奖品,如果此局服务器已经指定你输了,你伪造结果返回,服务器能够识别返回作弊错误
拉积分情况:服务器返回已有次数,可用次数,总积分,商品列表,哪些商品能兑换的状态
兑换:请求服务器兑换指定商品,服务器检查积分情况,够则扣分给兑换(C)
刷积分
上面的步骤有ABC三个地方可以试着并发
- A能够超量取得足够多的游戏id
- B能够通过一个游戏id超量获得多次积分
- C能够超量兑换足够多的积分内商品
建议先抓包取得正常情况下的COOKIES和cuid
A的request如下
其中mc_x=12963440&mc_y=4832785&city_id=131
可以一直使用不用变化,这意味着我坐在家里就能刷完一天12次,不用出门去找火鸡。
curl -H 'Host: zt.baidu.com' -H 'Accept: */*' -H 'Cookie: BDUSS=<必填>; BAIDUID=<必填>; BIDUPSID=<必填>; PSTM=<必填>' -H 'User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 10_1_1 like Mac OS X) AppleWebKit/602.2.14 (KHTML, like Gecko) Mobile/14B100 baidumap_IPHO' -H 'Accept-Language: zh-cn' -H 'Referer: http://map.baidu.com/zt/y2016/thanksgivingar/index.html?ar_enabled=1&ctimes=15&iptype=1&needlogin=1&cuid=<必填>&mc_x=12963440&mc_y=4832785&city_id=131' --compressed 'http://zt.baidu.com/activity/thanksgiving/game?cuid=<必填>&iptype=1&mc_x=12963440&mc_y=4832785&city_id=131&_=1479996816646&callback=jsonp1'
成功的返回如下:
jsonp1({"errno":0,"errmsg":"","data":{"time":"2016-11-24 22:24:51","iptype":1,"game_id":"<id>","can_win":[false|true]}})
错误的返回如下:
jsonp1({"errno":6001,"errmsg":"game time","data":[]})
B的request如下
curl -H 'Host: zt.baidu.com' -H 'Accept: */*' -H 'Cookie: BDUSS=<必填>; BAIDUID=<必填>; BIDUPSID=<必填>; PSTM=<必填>' -H 'User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 10_1_1 like Mac OS X) AppleWebKit/602.2.14 (KHTML, like Gecko) Mobile/14B100 baidumap_IPHO' -H 'Accept-Language: zh-cn' -H 'Referer: http://map.baidu.com/zt/y2016/thanksgivingar/index.html?ar_enabled=1&ctimes=15&iptype=1&needlogin=1&cuid=<必填>&mc_x=12963440&mc_y=4832785&city_id=131' --compressed 'http://zt.baidu.com/activity/thanksgiving/result?cuid=<必填>&iptype=1&game_id=<id>&mc_x=12963440&mc_y=4832785&city_id=131&_=1479996841153&callback=jsonp2'
成功的返回如下:
jsonp2({"errno":0,"errmsg":"","data":{"iptype":1,"coin":11}})
成功加意外奖品的返回如下:
jsonp2({"errno":0,"errmsg":"","data":{"iptype":1,"coin":10,"prize":[{"type":"coupon","tpl":"exchange","name":"\u516c\u4ea4\u5361\u5957","desc":"\u4ec5\u9650\u7279\u5b9a\u5546\u573a\u5151\u6362","icon":"http:\/\/d.hiphotos.baidu.com\/lbsopn\/pic\/item\/00e93901213fb80ea808f6e93fd12f2eb9389437.jpg"}]}})
错误的返回如下:
jsonp2({"errno":6002,"errmsg":"wrong game_id","data":[]})
C的请求复杂点,分两步,第一步兑换请求,第二部输入验证码,这个做并发意义不大,试想你换一堆相同的东西,没啥用,也没研究,用好AB把积分刷上去就行了。