百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

“微信刷票”的简单实现

bigegpt 2024-08-02 11:03 7 浏览

快到年底了,家里的微信群又热闹了起来,家族里有几个亲戚正在参加某评比活动的微信投票活动,所以七大姑八大姨天天在群里让我们帮着投票,家里人知道我是搞IT技术的就想着让我搞个刷票软件,自动刷票。于是我就花了些经历研究了一下这个灰色产业!

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

一、 微信的刷票方式

微信刷票主要有两种方式,软件技术刷票和人工水军刷票。

人工刷票:人工刷票,就是使用投票水军来刷票。商家热衷于搞微信投票活动,一些空闲时间多的人士发现了这其中的商家,以帮助参赛选手投票来获得佣金。这些人多数是为兼职投票手投票员,外界一般称我们为投票水军。人工水军刷票的原理就非常简单,就是组建一个微信投票任务群,把投票任务发到群里面就完成刷票了,就是这么简单。一个群不够用,就多组建几个群就可以了。

目前网上好多刷票团队,自称都是人工刷票,其实多数都是假的,为什么呢?因为你看他的收费标准就知道了投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. """ 

相关推荐

或者这些Joplin插件也可以帮助你的笔记应用再一次强大

写在前面距离上次分享《搭建私有全平台多端同步笔记,群晖NAS自建JoplinServer服务》已过去一段时间,大家是否开始使用起来了呢?如果你和我一样已经使用过Joplin有一段时间了,那或许你也会...

Three.JS教程4 threejs中的辅助类

一、辅助类简介Three.js提供了一些辅助类(Helpers)以帮助我们更容易地调试、可视化场景中的元素。ArrowHelepr:创建箭头辅助器;AxisHelper:创建坐标轴辅助器;BoxH...

第2章 还记得点、线、面吗(二)(第二章还能敲钟吗)

glbgltf模型(webvrmodel)-gltf模型下载定制,glb模型下载定制,三维项目电商网站在线三维展示,usdz格式,vr模型网,网页VR模型下载,三维模型下载,webgl网页模型下载我...

如何检查Linux系统硬件信息?从CPU到显卡,一网打尽!

你可能会问:“我为什么要关心硬件信息?”答案很简单:硬件是Linux系统的根基,了解它可以帮你解决很多实际问题。比如:性能调优:知道CPU核心数和内存大小,才能更好地调整程序运行参数。故障排查:系统卡...

SpriteJS:图形库造轮子的那些事儿

从2017年到2020年,我花了大约4年的时间,从零到一,实现了一个可切换WebGL和Canvas2D渲染的,跨平台支持浏览器、SSR、小程序,基于DOM结构和支持响应式的,高...

平时积累的FPGA知识点(6)(fpga经典应用100例)

平时在FPGA群聊等积累的FPGA知识点,第六期:1万兆网接口,发三十万包,会出现掉几包的情况,为什么?原因:没做时钟约束,万兆网接口的实现,本质上都是高速serdes,用IP的话,IP会自带约束。...

芯片逻辑调度框架设计 都需要那些那些软件工具

设计芯片逻辑调度框架通常需要使用以下软件工具:1.逻辑设计工具:例如Vivado、Quartus、SynopsysDesignCompiler等,用于设计和实现逻辑电路。2.仿真工具:例如Mo...

ZYNQ与DSP之间EMIF16通信(正点原子领航者zynq之fpga开发指南v3)

本文主要介绍说明XQ6657Z35-EVM高速数据处理评估板ZYNQ与DSP之间EMIF16通信的功能、使用步骤以及各个例程的运行效果。[基于TIKeyStone架构C6000系列TMS320C6...

好课推荐:从零开始大战FPGA(从零开始的冒险4399)

从零开始大战FPGA引子:本课程为“从零开始大战FPGA”系列课程的基础篇。课程通俗易懂、逻辑性强、示例丰富,课程中尤其强调在设计过程中对“时序”和“逻辑”的把控,以及硬件描述语言与硬件电路相对应的“...

业界第一个真正意义上开源100 Gbps NIC Corundum介绍

来源:内容由「网络交换FPGA」编译自「FCCM2020」,谢谢。FCCM2020在5月4日开始线上举行,对外免费。我们有幸聆听了其中一个有关100G开源NIC的介绍,我们对该文章进行了翻译,并对其中...

高层次综合:解锁FPGA广阔应用的最后一块拼图

我们为什么需要高层次综合高层次综合(High-levelSynthesis)简称HLS,指的是将高层次语言描述的逻辑结构,自动转换成低抽象级语言描述的电路模型的过程。所谓的高层次语言,包括C、C++...

Xilinx文档编号及其内容索引(部分)

Xilinx文档的数量非常多。即使全职从事FPGA相关工作,没有几年时间不可能对器件特性、应用、注意事项等等有较为全面的了解。本文记录了我自使用Xilinx系列FPGA以来或精读、或翻阅、或查询过的文...

Xilinx Vivado联合Modelsim软件仿真

引言:Xilinx公司Vivado开发软件自带仿真工具,可以实现一般性能的FPGA软件仿真测试,其测试执行效率以及性能都不如第三方专用仿真软件Modelsim强。本文我们介绍下如何进行Vivado20...

体育动画直播是怎么做出来的?从数据到虚拟赛场的科技魔法!

你是否见过这样的比赛直播?没有真实球员,却能看梅西带球突破?足球比赛变成动画版,但数据100%真实?电竞比赛用虚拟形象直播,选手操作实时同步?这就是体育动画直播——一种融合实时数据、游戏引擎和AI的...

Dialogue between CPC and political parties of neighboring countries held in Beijing

BEIJING,May26(Xinhua)--TheCommunistPartyofChina(CPC)inDialoguewithPoliticalPartiesof...