今天用極驗來實驗一波
極驗是國內比較有名的身份驗證,反爬蟲的產品。其反爬蟲的手段較多,大概分爲: pencil、beeline、click、slide、voice 等多種驗證方式,尤其Slide方式是基於大數據的智能行爲驗證,用戶體驗較好很得客戶青睞,比如我要搶鞋的官網就是基於它來做用戶登錄的身份驗證。
通過極驗官網的文檔,我們可以得知Geetest的大致交互流程如下圖:
結合我搶鞋的接口,整理如下:
1. 獲取驗證ID及驗證流水號
-
請求地址: https://www.nike.com.hk/geetest/doget.json?t=1563879949387&type=MEMBER_LOGIN
-
請求方式: POST
-
請求參數說明:
-
t: 當前時間戳(毫秒)
-
響應內容:
-
返回參數說明:
-
gt: 驗證id
-
challenge: 驗證流水號
2. 獲取驗證素材資源
-
請求地址: https://api.geetest.com/gettype.php?gt=2328764cdf162e8e60cc0b04383fef81&callback=geetest_1563879954116
-
請求方式: GET
-
請求參數說明:
-
gt: 之前接口返回的驗證ID
-
響應內容:
-
示例:
-
https://static.geetest.com/static/js/fullpage.8.7.9.js
-
https://static.geetest.com/static/js/geetest.6.0.9.js
3. 獲取驗證的基本參數
-
請求地址: https://api.geetest.com/get.php?gt=2328764cdf162e8e60cc0b0438...
-
請求方式: GET
-
請求參數說明:
-
gt: 之前接口返回的驗證ID
-
challenge: 之前接口返回的驗證流水號
-
lang=zh-hk
-
pt=0
-
w=4A8S6ZFe9GO43hbI3exYdbebCvxWVtD38od3qc7tqtxxARm4HCI... (待分析)
-
callback=回調函數的方法名
-
響應內容:
4. 獲取驗證方式
-
請求地址: https://api.geetest.com/ajax.php?gt=2328764cdf162e8e60cc0b0438...
-
請求方式: GET
-
請求參數說明:
-
gt: 之前接口返回的驗證ID
-
challenge: 之前接口返回的驗證流水號
-
lang=zh-hk
-
pt=0
-
w=pxIvtqzNcdSbk0QJHeRBsozbYtm8519UAKjSyuCMk01J21VwEEWOlV... (待分析)
-
callback=回調函數的方法名
-
響應內容:
5. 獲取驗證素材信息
-
請求地址: https://api.geetest.com/get.php?is_next=true&type=slide3>=2328764...
-
請求方式: GET
-
請求參數說明:
-
gt: 之前接口返回的驗證ID
-
challenge: 之前接口返回的驗證流水號
-
lang=zh-hk
-
is_next=true
-
type=slide3
-
https=false
-
protocol=https://
-
offline=false
-
product=embed
-
api_server=api.geetest.com
-
isPC=true
-
width=100%
-
callback=回調函數的方法名
-
響應內容:
-
響應參數說明:
-
https://static.geetest.com/pictures/gt/0191efce3/0191efce3.webp
-
https://static.geetest.com/pictures/gt/0191efce3/bg/8eba80808.webp
-
https://static.geetest.com/pictures/gt/0191efce3/slice/8eba80808.png
6. 提交驗證請求
-
請求地址: https://api.geetest.com/ajax.php?gt=2328764cdf162e8e60cc0b...
-
請求方式: GET
-
請求參數說明:
-
gt: 之前接口返回的驗證ID
-
challenge: 第六步返回的驗證流水號
-
lang=zh-hk
-
pt=0
-
w=cY71fua4Cuvs8Cyrf3rW(VzZHB)oSpARQMV65Dtg... (待分析)
-
響應內容:
7. 提交登錄認證
-
請求地址: https://www.nike.com.hk/member/login.json?loxiaflag=1563879969519
-
請求方式: POST
-
請求參數說明:
-
loginName: [email protected]
-
countryCode:
-
password=EJ2JjA3Rw32DrDMHI1Biu7+YKevYJhvU2EyllSQ... (加密後的密碼待分析)
-
passwordAgain=EJ2JjA3Rw32DrDMHI1Biu7+YKevYJhvU2EyllSQ... (加密後的密碼待分析)
-
rememberLoginName=checked
-
type
-
geetest_challenge=decd09d6c9f1bb219f7550cea8e18c01eb (第六步返回的驗證流水號)
-
geetest_validate=545a86f1a2af6f09afc4d1abbb166679 (第七步返回的validate)
-
geetest_seccode=545a86f1a2af6f09afc4d1abbb166679|jordan (第七步返回的validate|jordan)
-
響應內容:
8. 驗證流程整理
經測試不需要所有接口都模擬,比如直接指定驗證方式爲滑塊驗證,依次調用接口: 1 --> 3 --> 5 --> 6 --> 7 即可。Python學習羣:827513319
至此,整個交互流程分析完畢,產生的問題如下:
-
所有用於驗證的代碼都是混淆之後的,如何進行代碼還原或者調試分析。
-
請求與返回的關鍵數據都是加密的後的字符串如上述3、4、6等接口中的W參數,如何解密。