最近那段时间,我是真闲得蛋疼,刚把手头一个外包项目交了,甲方又是个拖款大户,钱没到账,我也不想开新活。朋友老王天天在群里嚷嚷那个叫“生命竞赛”的网页游戏,说里面有个每日签到能抽奖,奖励挺丰厚的。他每天早晚都提醒我,别忘了去点一下,搞得我耳朵都快起茧子了。
我就好奇了,一个破页游能搞多复杂的机制?我决定上去看看,不是为了玩,就是想看看他们的官网到底是怎么搭建的,特别是那个抽奖接口,能不能抓包分析一下,弄个自动签到的脚本,省得老王天天守着。这纯粹就是我作为一个老码农的职业病犯了,非得扒拉一下人家网站的底裤。
扒拉官网的技术底裤
我打开电脑,架起代理,先是猛刷了几遍他们官网的首页。界面做得花里胡哨的,一看就是套模板。我瞄准目标,直接点进了那个“活动中心”。一进去,果然就是签到页面。我打开开发者工具,开始监控网络请求。
我发现他们用了一堆加密参数,混淆得很厉害。我试了几次直接模拟请求,全给弹回来了,告诉我请求签名不对。我当时心想,这小作坊还挺会藏东西,不像某些大厂的接口,随便抄抄就能用。
- 我猜测它是在前端对时间戳和用户ID做了特定混淆,于是我钻进了那堆压缩得像屎一样的JS代码里,翻来覆去地找那个签名生成的函数。那个代码写得真是稀烂,变量名都是a, b, c,找得我眼睛都快花了。
- 中间我绕了好几个弯,以为签名是在客户端用某个复杂的算法生成的,甚至掏出了逆向工具准备干一架。结果折腾了半天,发现它只是把用户ID和今天的日期做了个简单的MD5,然后套了个自定义的密钥。
- 我搞懂后差点没气死。搞得像模像样,一捅就破,就是个吓唬人的架子。
等我终于摸清了接口的路径,写好了Python脚本,跑起来一看,成功自动签到了。我把脚本丢给老王,他高兴得屁颠屁颠的。但这时候我才意识到,我花了整整两天时间,就为了绕过一个用时三分钟就能手动点完的签到按钮。图个啥?
我当时气得差点把键盘砸了。这跟当年我在老东家被逼着用那个烂透了的内部系统一样,都是表面功夫。老东家那个系统,每年砸进去几百万,号称多安全多先进,结果?一次服务器宕机,所有的备份文件全丢了,几年的数据直接蒸发。当时为了保住饭碗,我们那帮人熬了三天三夜才把残局收拾
我为啥会记起这事?因为我这回实现自动签到后,去论坛里发帖炫耀了一下,想卖这个脚本回点血。结果不到半小时,账号直接被封了。我尝试联系客服,客服说我违反了用户协议,理由是“试图篡改游戏数据”。我气笑了,我只是模拟了一下请求,哪叫篡改?我辩解说我是在做技术分析,想帮助他们发现漏洞。客服根本不听,直接挂断了。
3总结了一下:这个“生命竞赛”的官网,技术上看得出是急匆匆堆起来的,安全机制全靠“吓唬”玩家。我的实践记录就是:费了牛劲拆穿一个简单的机制,然后被平台用最粗暴的方式踢出局。教训就是,有些事,你看穿了,但人家根本不在乎你用什么方式实现的,只要你影响了他们的流程,直接封杀了事。我这几天是白忙活了,脚本没卖出去,还搭进去一个账号。真是糟心。