那些年我們「投(shua)」過的票
最近朋友圈中時不時有人要幫忙投個票啥的,又想起N年前,那時候剛開始學習滲透測試,並且自學java的時候,為了學習代碼的同時能夠更好的用於實戰,想找一些事來做一做。
當時發現一個文學網站有一個為期3個月左右的投票活動,網站活動剛開始就看著最前面的一些作品一下子就獲取了1萬多票(肯定是專業團隊刷的),於是已一個當時屌絲的心態來看,似乎有事做了。哪知道最終我和這個文學網站的投票系統杠上了。
由於是自學java期間,所以沒有用一些打包好的jar包,如httpclient等,代碼基本都是原生的。
剛開始的時候,測試發現網站的投票功能沒有任何限制,於是寫了幾行代碼,直接發送post請求:
看到很多作品的投票數往上漲,心裡很是開心。
不過幾天後,發現程序似乎失效了,刷了半天,票數似乎沒有任何變化,難道有什麼變動?
抓包測試了一下,發現似乎請求還是原來的請求,不過似乎只能投票一次了?難道是IP的限制,果斷用一個代理IP試了一下,發現又成功了。果然是IP的限制。
一個作品一天只能用一個ip
投票一次
於是想著用代理IP,可是平時我也就幾個IP翻翻牆而已,這幾個代理改變不了大局。總不能為了搞個這個,還花錢去買一堆IP吧,不過網上還是有許多的http和sockets的免費代理,有些5分鐘更新一次,有些10分鐘更新一次,不過這類IP的失效速度挺快的,用於投票還是挺靠譜的。
網上有挺多的代理工具可以自動收集、整理並驗證IP是否有效的,只需要輸入網頁地址就好了,我用的是花刺代理:
最常用的就是添加資源》下載代理資源》驗證全部》導出選定,直接導出txt的格式。
然後寫代碼讀取有用的代理IP,默認用http,報錯後切換socket代理:
驗證碼的對抗
不過又過了一段時間,又發現不行了,原來加了驗證碼,不過驗證碼很簡單,只是純數字,而且沒有啥變形之類的,也就沒有弄ocr等等工具,以提高自己為主,於是網上找了一個簡單的圖形驗證碼識別代碼,了解了解原理,然後改了改做處理:
圖形驗證碼的識別在於字模庫,不過我想的也挺簡單,他的驗證碼不複雜,0-9,共10個數字,1個驗證碼4個數字,準備40張圖片,每個數字四張圖片對應4個位置,同時網上找了分割代碼和二值化的代碼來輔助圖片處理:
存儲圖片庫設定4個目錄,對應4個位置:
一個目錄10張圖片:
如何比較呢?網上找的一個,應該是一個像素一個像素對比:
當然這種方法是很古老的了,不過可以作為學習者參考使用。
驗證碼的識別搞定了,接下來就是需要與cookie綁定了,保證驗證碼圖片的獲取和投票的請求的cookie一致:
只需要在發送請求中加入
connection.setRequestProperty("Cookie",cookie);
就好了。
幾天後,我發現似乎代碼又失效了,不過排除原因後,我差點樂了,他們把驗證碼內容改了,改成漢字的了,而且做了干擾和變形,這樣建模的難度就高了,不過我開心的原因就是他們這次的驗證碼沒有滿足唯一性和失效性,這也是驗證碼經常出現問題的地方,也就是使用一次後,不會自動失效,也就導致原來的驗證碼一直可以使用,不用再去浪費時間刷驗證碼了。
快樂的時光總是短暫,幾天後,似乎他們又發現了什麼,驗證碼又換回去了,不在有驗證碼的漏洞,而且複雜度提高了,加入了字母在裡面,在啟用之前的驗證碼破解方法,已經不行了,而且建模太費時間了,於是就暫時放棄了。
不過我去他們的評論區去發帖,說投個票搞個驗證碼,太費事了,而且對於專業的刷票團隊來說,似乎也沒啥鳥用嘛!
登錄註冊投票
似乎發帖投訴有點作用了,一段時間後,驗證碼取消了,不過又換成了一個新的方式,投票者需要登錄以及註冊,註冊後需要進行郵箱驗證。
不過發現,註冊時的郵箱,可以重複使用,主要用戶名不重複就好了,這樣就不需要搞那麼多郵箱了,不過註冊的項目挺多的,文學網站,哎!
為了提高真實性,我從百家姓里,把姓氏給提出來,然後隨機幾個漢字,在長度隨機一下,就開始註冊了,同時用戶名也隨機一樣,密碼與用戶名一樣,然後就開始批量註冊了:
同時把註冊的用戶名存在一個文件里:之後註冊了一些用戶之後,就可以了,反正可以重複使用。
再就是自動登錄,並獲取cookie後進行綁定,不過他們使用登錄後投票的功能之後,就沒有一個IP只能投一次票的限制了,所以也就暫時不用代理IP了,不過一段時間後,他們又啟用了該限制,不過那個時候也差不多快結束了,而且啟用代理後,也就多了幾行代碼而已:
刷代理買火車票
另外值得一提的是,那一年也是網上可以剛開始搶火車票的一年,當時各種插件共享,搶票點擊木有問題,問題是,到點了票不出來,幾個同事朋友說,這肯定是緩存,哪哪幾個城市人少,說不定那快一些,於是又想到了代理IP,但是手動切換瀏覽器代理IP太費勁了,咋能自動切換呢?
於是當時想到了fiddler,記得一次分享的時候,部門的大神分享了fiddler可以自定義一些功能,於是想,能不能把瀏覽器指向fiddler,在fiddler中自動代理,而且刷出來了之後,直接關了fiddler就好了,就可以直接買票了,快速方便。
於是找了fiddler的腳本編寫的文章,果然有戲,在fiddler的script中,有幾個函數:
其中OnBeforeRequest(oSession: Session)的作用就是在請求發送前的一些設置,而代理ip的配置可以如下:
oSession["x-overrideGateway"] = "127.0.0.1:8080";
所以就可以設定一個IP數組,然後加一個隨機值,自動走其中一個代理IP就好了。
*
本文原創作者:wadcl,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載
※瑞星2016年中國信息安全報告
※有關事件響應(IR)自動化和協同的幾點反思
※一種極為高效的釣魚技術,騙取Gmail用戶賬戶
※你猜2016年最常用密碼還會是「123456」嗎?
※革命性創新?走近「高水準」新型勒索軟體Spora
TAG:FreeBuf |
※Leonard Cohen離開了,我們的七十年代也走遠了
※這5位朋友得到了我們送出的《Family Photography Now》
※李宇春最愛的Alexander Wang,我們終於買的起了
※Anitama新聲:我們也是人
※我們給New Balance Football寫了份年終總結
※讓人瞬間暖起來的小金毛。Ins:thechroniclesofarchie#萌寵#我們都是寵物迷#萌寵的日常#隨手拍萌寵#汪星人日記
※我們出發吧!我和爸爸的旅行&This is my Thailand trip just with Daddy
※我們都應該有一個High Dream
※又冷又霾的冬天來了,我們推薦這 10 個方法驅散心情陰霾 | Hack Your Life
※今年還有 48 天,沒完成年度目標的話,我們幫你想了些辦法 | Hack Your Life
※當我們一起走過 之 帶你看世界-日本
※新年第一天,李燦琛和 Subcrew 就要給我們一個久等的好消息
※September LibraryⅡ:《我們為什麼要去火星》
※[團購最後半天]《獨生小孩 The Only Child》丨我們是生而孤獨的一代
※利特發表《Kiss The Radio》下車感言 謝謝我們一起走過十年
※Mr.bean,我們值得擁有!
※剛畢業的 Kiko Kostadinov,為我們帶來了幾套 「新時代工裝」
※開學季,你回你的School,我們出門刷街就愛踩Old Skool!
※我們愛了120年的Monogram 到底有什麼魔力?
※tfboys主演的《我們的少年時代》還有他