相信大家都经历过朋友圈、群组里各种转发求投票的消息,有需求就会有刷票

关于刷票我自己也稍微研究过,这里说的刷票是指刷投票,不是黄牛那种抢票

初识刷票

人生中第一次刷票是在大一,舍友的姐姐结婚拍婚纱照,摄影店给了一个点赞链接,承诺点赞数量超过500票免费送豪华相册和相框

舍友让我们帮着转发和点赞,这种东西大家都懂,不想污染了朋友圈,但又不能不帮舍友,碰巧当时正在研究微信抓包啥的,便想研究一下看看能不能刷票

投票网页要求必须微信打开,如果是普通浏览器打开不让投票,但是在微信进行投票它也没有弹出那个获取微信个人信息的确认框,这让我怀疑他根本没有利用微信的信息进行身份确认,有可能可以伪造身份进行刷票

早期微信抓包非常简单,手机root后安装xposed,使用JustTrustMe插件信任所有证书,然后手机安装burp的证书,wifi使用burp的代理,然后就能使用burp对https进行抓包了

抓包后发现投票的确没有仔细检查个人信息,于是通过Burp的Intruder伪造了身份,重放几百次顺利给舍友刷取几百票,圆满完成他姐姐交给他的任务

前几天的刷票

前几天出于好奇又刷了一波票,这次经历是我写这篇文章的主要动机

前几天,我们导员、任课老师、教务等疯狂发钉钉、朋友圈、QQ群、QQ空间,让帮我们学弟投票

随手投上一票,发现投票网站需要使用姓名和手机号码注册,但是没有验证手机验证码,并且没有限制浏览器,感觉必有刷票的机会

于是对网页的所有请求进行抓包分析,发现投票是使用WebSocket进行的,投票时只需要给出登录成功的token和要投的队伍号

关键就在这个登录上了,如果能够有效验证投票者身份就能够减轻刷票,但是分析注册和登录请求发现并没有对用户身份进行有效验证,手机号码可以随便伪造

并且,姓名字段没有任何要求,没有限制长度,没有限制必须是中文,随便一个字符串就能被接受

于是写了一个程序,自动伪造身份登录、投票,循环这个过程

认识与建议

上面两个案例是成功的刷票经历,我也经历过几次失败的刷票经历,在失败的经历中,那些投票系统都是利用微信提供的用户信息验证用户身份,而微信本身对用户审核的很严(没办法伪造),我也没有多个微信号,刷票自然失败

实际上,刷票过程最重要的是伪造投票者身份,欺骗投票系统是不同用户进行的投票,所以投票系统防刷票最重要的就是验证用户身份

在实际应用中有很多验证用户身份的方法:

  • 验证手机号(发验证码的那种)
  • 验证是否真人(极验、reCaptcha)
  • 利用微信提供的身份

对于验证手机号,刷票组织可以轻松的获取大量手机号,包括各种真号码、虚拟号码,这种方法可以轻松绕过

对于使用机器人验证器,绕过比较麻烦,但是也是可以通过程序绕过的,并且刷票组织有可能人力手工进行验证

使用微信提供的身份信息是最难搞的,因为微信本身审核的很严,提供的身份又无法伪造,这里利用的是微信对用户身份的验证,是可以信任的。但是也不是没有绕过的方法,刷票组织有时候会养了大批量的微信号用来刷票,利用群控手段也可以绕过。

并且,有很多刷票组织养着很多群,可以提供真人投票服务,这种刷票成本非常高,但是是无法检测的,刷票成功率100%

针对刷票行为,无法完全避免,我们能做的就是通过各种方式对用户身份进行验证,检查用户IP,尽量避免身份伪造

同时,可以对投票请求的频率等信息进行分析,因为脚本刷票投票会很集中、时间间隔会比较均匀