58手勢驗證碼的分析

? 做爬蟲的小伙伴們肯定都深有體會,爬蟲要是遇到驗證碼了基本上就是GG了。于是爬蟲工作者和驗證碼之間必有一戰(zhàn)。隨著web安全技術(shù)的提升,驗證碼也一代一代的革新,并且越發(fā)的變態(tài)。小曾也去研究了各式樣的驗證碼,最后決定拿出58手勢驗證碼和大家分享。

分析概述

? ? 首先我對58手勢驗證碼做一個總體的描述。從觸發(fā)驗證碼到驗證成功,我們操作的背后需要向服務(wù)器發(fā)送6個請求,并且還有一次js算法對參數(shù)加密。6個請求之間有著依賴關(guān)系,操作圖如下:

? ? 6個請求中有些請求還會存在時效性,也就是做時間過久之后該請求就會失效,請求返回的參數(shù)就需要重新獲取。

? ? 驗證碼圖片的url在請求4的返回值中,請求4的請求參數(shù)需要從請求2中獲取。

? ? js加密部分屬于AES加密,需要的參數(shù)是滑動軌跡的數(shù)據(jù)和請求3獲取token值。

? ? 請求6是驗證的最后一步,需要2,4請求返回的參數(shù)以及js加密后的參數(shù),如果軌跡數(shù)據(jù)和58服務(wù)器端數(shù)據(jù)一致則驗證成功,會返回一個success_token值。

具體過程

請求1.

該請求是驗證碼的入口,相關(guān)參數(shù)用于標(biāo)識你驗證的是該處驗證碼而不是其他處。

url:

https://callback.58.com/firewall/verifycode?serialId=d22d6f319b5148ae8a199a4b574dd8b4_7daf4f969cac4852a2fbbfb2e275bbcd&code=22&sign=26dbf4d672a5d9691e63e40bb02910d0&namespace=ershoufanglistphp&url=https%3A%2F%2Fwh.58.com%2Fershoufang%2F&tdsourcetag=s_pcqq_aiomsg&qq-pf-to=pcqq.group

請求2.

url:

https://callback.58.com/firewall/codev2/getsession.do?1552704552771

請求方式:post

參數(shù):1552704552771為時間戳

post內(nèi)容:

serialId=d22d6f319b5148ae8a199a4b574dd8b4_7daf4f969cac4852a2fbbfb2e275bbcd

&code=22

&sign=26dbf4d672a5d9691e63e40bb02910d0


第二個請求返回值如下:

請求3.

獲取加密時的所需的一個token參數(shù)

url:

https://cdata.58.com/fpToken?callback=dpjsonp_014459113626603415

返回值如下:

請求4.

url:

https://verifycode.58.com/captcha/getV3?callback=jQuery11010788698968164369_1552706578792&showType=win&sessionId=c511de755a684fcd96d8ce9af1c3b8d4&_=1552706578793


url中的sessionID便是第二鏈接返回值的sessionId值

該請求是為了返回獲取 captcha圖片的url和一個比較重要的參數(shù)responseId

返回值如下:

請求5.

獲取captcha驗證碼的圖片

https://verifycode.58.com/captcha/captcha_img?rid=fe8717a931e54d148bd01672c4e7ed1b&it=_big

該請求獲取只能返回一次,多次返回?zé)o圖片顯示。

js加密部分

搜索關(guān)鍵字: AESEncryption

需要的參數(shù)是滑動軌跡的數(shù)據(jù)和請求3獲取token值。

加密函數(shù)部分如圖:

下圖是鼠標(biāo)軌跡數(shù)據(jù):

下圖是AES加密后的數(shù)據(jù):

請求6.

最后一個鏈接,驗證滑動驗證碼是否成功:

Url如下:


https://verifycode.58.com/captcha/checkV3?

callback=jQuery110102771457823954544_1552707202602&

responseId=df3b891c0a6848cb9ede1e904e752988

&sessionId=761d8548ab34405eb5e6f555a44710ee

&data=

&_=1552707202604


Url中存在5個參數(shù)分別如下:

callback: 返回數(shù)據(jù)名稱;

responseId:第四個請求中的responseId

sessionId:第二個請求中的sessionId

Data:js加密生成的p值(js核心)

_:時間戳

驗證成功便會獲取success_token。

總結(jié):

? ? 如果我們想要去破解58手勢驗證碼,就需要模擬上述6個請求加一個JS加密的過程。模擬請求本就是爬蟲選手們的工作,js加密的部分也是很容易就可以實現(xiàn)的。破解58手勢驗證碼的難點是用編程語言及相關(guān)工具來獲取圖片中的軌跡數(shù)據(jù)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容