京東滑塊驗證碼(java版)

下圖爲京東驗證碼:

和其他驗證碼一樣,圖片分爲兩部分,一部分爲缺口,一部分爲背景,將缺口移動到背景上對應部分即可。

我們首先來獲取圖片:

請求並不複雜,appid可請求首頁取到或直接寫死,校驗得e並不影響登錄及圖片校驗,可隨機生成或直接寫死。

我們再來看看返回值:

很明顯,bg和patch分別對應滑塊和背景圖片:

可以看到滑塊爲png格式,但是圖片大小僅僅只有滑塊那麼大,也就是說返回值裏面肯定有來確定滑塊Y軸方向的參數。

也就是y:37這個參數估計是表示滑塊Y軸的位置。

我們可以用ps打開背景圖片定位一下y=37的位置,發現正好是滑塊的頂部。

所以這裏我們只需對圖片二值化後,定位小圖在大圖中的三個角座標值都是黑色即可找出陰影x的位置了:

接下來我們看看滑動後的請求:

參數也不復雜,c和s可以請求首頁取到,關鍵就剩下一個d,明顯是加密過的,而且絕對是和軌跡相關。

那我們就追溯一下這個d:

這樣就找到了軌跡加密方法了,我們可以看到傳入是一個array,返回則是加密後的字符串。

現在就只需構造軌跡array即可。

我們先看看array是長什麼樣子的:

一看結構,肯定就是x,y座標+當前時間戳組成。

多試幾次就能發現,第一行是表示驗證碼在當前窗口的位置。

所以我們只需要模擬第一行之後的即可。

生成軌跡的方法網上也有很多了,這裏隨便寫一個:

加密方法解決還是參考之前提到過的,直接調用js的方法,然後將我們構造的軌跡數組傳入,即可得到參數d了。

這樣就可得到驗證成功返回值了:

jsonp_012041562394977534({"message":"success","nextVerify":"NULL_VERIFY","success":"1","validate":"d0ca79997123423886a84852f5837f44"})

本文參考:https://blog.csdn.net/qq_21189053/article/details/84775194 

非常感謝該作者

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章