極驗(yàn)驗(yàn)證碼破解—超詳細(xì)教程(一)
極驗(yàn)驗(yàn)證碼破解—超詳細(xì)教程(二)
極驗(yàn)驗(yàn)證碼破解—超詳細(xì)教程(三)
Gayhub:FanhuaandLuomu/geetest_break
2017.8.21 代碼以上傳,可供參考
[國家企業(yè)信用信息公示系統(tǒng)為例]
目錄
一虽另、網(wǎng)站http://www.gsxt.gov.cn滑動(dòng)驗(yàn)證碼概述.
二誓琼、極驗(yàn)驗(yàn)證碼破解-抓包分析.
三听系、極驗(yàn)驗(yàn)證碼破解-搭建本地驗(yàn)證碼服務(wù).
四原杂、極驗(yàn)驗(yàn)證碼破解-分析geetest.js盯拱,得到所需參數(shù).
五祥得、極驗(yàn)驗(yàn)證碼破解-Track的獲取.
六允青、極驗(yàn)驗(yàn)證碼破解-獲取背景圖片及缺口距離d的計(jì)算.
七橄碾、極驗(yàn)驗(yàn)證碼破解-總結(jié).
參考文獻(xiàn).
運(yùn)行截圖.
五、極驗(yàn)驗(yàn)證碼破解-Track的獲取
1. Track的生成可以根據(jù)圖片缺口的距離d颠锉,使用隨機(jī)函數(shù)隨機(jī)采樣生成法牲。比如d=120,則我們控制總拖動(dòng)時(shí)間為t(t一般小于3s),則可以每很小的時(shí)間內(nèi)(每次隨機(jī)時(shí)間,如10ms)移動(dòng)一小段隨機(jī)距離琼掠,最后在時(shí)刻t時(shí)正好移動(dòng)到d拒垃。但考慮人拖動(dòng)會(huì)有先加速在減速的特點(diǎn)(或許還有其他特點(diǎn)),geetest的服務(wù)器可能會(huì)識(shí)別到時(shí)機(jī)器所為瓷蛙,我們很難找到人行為的軌跡特點(diǎn)并且難以模擬恶复,因此生成軌跡不太可行(也許可行,但代價(jià)較大)速挑。
2. 我們提出另一種方法替代Track的生成,即手工事先存儲(chǔ)備用Track副硅。驗(yàn)證碼圖片總長大概250左右姥宝,由于我們已經(jīng)實(shí)現(xiàn)了在Console中打印Track的js,因此我們可以多次刷新http://localhost:8000/頁面恐疲,得到不同缺口位置的驗(yàn)證碼腊满,手動(dòng)拖動(dòng)至缺口處套么,保存Console中的Track。
3. 經(jīng)過試驗(yàn)發(fā)現(xiàn)碳蛋,缺口位置大多停留在中間位置胚泌,并且拖動(dòng)誤差在3以內(nèi)都可以接受。因此我們可以用當(dāng)前位置d的Track來代替d-1和d+1的Track(如缺口位置120肃弟,則119和121的Track可以不用測試玷室,直接使用120的Track)。這樣大大減少了刷新頁面獲取Track的次數(shù)笤受,我收集的Track列表如下:
為了方便統(tǒng)計(jì)穷缤,我按個(gè)位數(shù)將Track存放在10個(gè)文件中。
我們將所有的Track整合為dict(t_dict.pkl)箩兽,格式如下:
{k1:v1}津肛,其中k1為缺口位置,v1為Track(字符串形式)汗贫。
至此我們得到Track備用列表身坐,我們可以根據(jù)實(shí)際的缺口位置獲得相應(yīng)的Track值,下一節(jié)我們將會(huì)講解如何得到缺口距離驗(yàn)證碼左邊的相對(duì)距離d落包。
六部蛇、極驗(yàn)驗(yàn)證碼破解-獲取背景圖片及缺口距離d的計(jì)算
1. 我們首先尋找圖片的來源⊥咨回憶分析get.php搪花?的時(shí)候,看到過“fullbg”的出現(xiàn)嘹害,因此很大可能背景圖片信息是通過get.php撮竿?傳來的。查看Response如下:
根據(jù)圖片的url打開圖片:
可以發(fā)現(xiàn)圖片已經(jīng)亂碼笔呀,這是因?yàn)榉祷氐膱D片是局部重合產(chǎn)生的幢踏。
查看驗(yàn)證碼圖片的審查元素:
可以發(fā)現(xiàn),展示的圖片是從原始亂碼圖片中多次截取小段许师,合成而成的房蝉。具體的合成方式如background-position所示。如background-position:-157px,-58px微渠。則該小段圖片為源亂碼圖片的(157,58搭幻,157+10,58+58)。根據(jù)上述分析逞盆,我么可以還原bg和fullbg的非亂碼圖片(即所看見的背景圖片)檀蹋。
我們通過比較兩張圖片的像素值,即可得到缺口的位置云芦,缺口左上角橫坐標(biāo)的值即為d俯逾。我們封裝了get_dist函數(shù)如下:
函數(shù)其它細(xì)節(jié)請(qǐng)參見項(xiàng)目源碼贸桶。
七、極驗(yàn)驗(yàn)證碼破解-總結(jié)
1. 至此桌肴,geetest驗(yàn)證碼的關(guān)鍵技術(shù)點(diǎn)已經(jīng)講解完皇筛,有沒有感覺號(hào)稱使用深度學(xué)習(xí)技術(shù)進(jìn)行人機(jī)驗(yàn)證的滑動(dòng)驗(yàn)證碼也不過如此。最近我會(huì)在Github上開源所有代碼坠七,希望得到大家的指點(diǎn)水醋。
2. 當(dāng)時(shí)做這個(gè)項(xiàng)目大概斷斷續(xù)續(xù)做了兩星期左右(2017.03),開始是參照網(wǎng)上教程使用selenium控制鼠標(biāo)來實(shí)現(xiàn)灼捂,后來發(fā)現(xiàn)鼠標(biāo)移動(dòng)的速度太機(jī)械化离例,成功率太低(滑動(dòng)到缺口處,但被識(shí)別為機(jī)器行為)悉稠。所以宫蛆,我采取了退而求其次的方法,避免對(duì)軌跡路徑的生成的猛,直接使用已經(jīng)成功驗(yàn)證的歷史軌跡來作為當(dāng)前軌跡耀盗。經(jīng)過試驗(yàn),這種方法成功率接近100%卦尊,且復(fù)雜度不高叛拷,歷史軌跡單獨(dú)存在硬盤,可定期更新(以防止軌跡被封)岂却。
3. 最近(2017.07)突然想寫個(gè)文檔教程分享技術(shù)忿薇,算是個(gè)學(xué)習(xí)筆記,也算是對(duì)自己曾經(jīng)努力的記載躏哩。該文檔斷斷續(xù)續(xù)寫了4個(gè)晚上的時(shí)間署浩,歡迎大家閱讀并指正。
4. 最后附上Github地址扫尺,里面有一些小爬蟲和NLP相關(guān)的項(xiàng)目筋栋,歡迎圍觀。https://github.com/FanhuaandLuomu
參考文獻(xiàn)
1.http://blog.csdn.net/paololiu/article/details/52514504
2.https://zhuanlan.zhihu.com/p/22866110?refer=windev
3.https://zhuanlan.zhihu.com/p/22404294
(向以上參考文章的作者致謝~)
運(yùn)行截圖
Python geetest_spider.py
注意:要爬取的企業(yè)列表寫在searchword_list正驻。
(THE END弊攘,如果對(duì)您有幫助,請(qǐng)點(diǎn)個(gè)贊~~~)