爬蟲工程師帶你分析反爬蟲防護交互流程,當真受益匪淺!

今天用極驗來實驗一波

極驗是國內比較有名的身份驗證,反爬蟲的產品。其反爬蟲的手段較多,大概分爲: pencil、beeline、click、slide、voice 等多種驗證方式,尤其Slide方式是基於大數據的智能行爲驗證,用戶體驗較好很得客戶青睞,比如我要搶鞋的官網就是基於它來做用戶登錄的身份驗證。

通過極驗官網的文檔,我們可以得知Geetest的大致交互流程如下圖:

 

 

結合我搶鞋的接口,整理如下:

 

1. 獲取驗證ID及驗證流水號

  • 請求地址: https://www.nike.com.hk/geetest/doget.json?t=1563879949387&type=MEMBER_LOGIN

  • 請求方式: POST

  • 請求參數說明:

  1. t: 當前時間戳(毫秒)

  • 響應內容:

  • 返回參數說明:

  1. gt: 驗證id

  2. challenge: 驗證流水號

 

2. 獲取驗證素材資源

  • 請求地址: https://api.geetest.com/gettype.php?gt=2328764cdf162e8e60cc0b04383fef81&callback=geetest_1563879954116

  • 請求方式: GET

  • 請求參數說明:

  1. gt: 之前接口返回的驗證ID

  • 響應內容:

  • 示例:

  1. https://static.geetest.com/static/js/fullpage.8.7.9.js

  2. https://static.geetest.com/static/js/geetest.6.0.9.js

 

3. 獲取驗證的基本參數

  • 請求地址: https://api.geetest.com/get.php?gt=2328764cdf162e8e60cc0b0438...

  • 請求方式: GET

  • 請求參數說明:

  1. gt: 之前接口返回的驗證ID

  2. challenge: 之前接口返回的驗證流水號

  3. lang=zh-hk

  4. pt=0

  5. w=4A8S6ZFe9GO43hbI3exYdbebCvxWVtD38od3qc7tqtxxARm4HCI... (待分析)

  6. callback=回調函數的方法名

  • 響應內容:

 

4. 獲取驗證方式

  • 請求地址: https://api.geetest.com/ajax.php?gt=2328764cdf162e8e60cc0b0438...

  • 請求方式: GET

  • 請求參數說明:

  1. gt: 之前接口返回的驗證ID

  2. challenge: 之前接口返回的驗證流水號

  3. lang=zh-hk

  4. pt=0

  5. w=pxIvtqzNcdSbk0QJHeRBsozbYtm8519UAKjSyuCMk01J21VwEEWOlV... (待分析)

  6. callback=回調函數的方法名

  • 響應內容:

 

5. 獲取驗證素材信息

  • 請求地址: https://api.geetest.com/get.php?is_next=true&type=slide3>=2328764...

  • 請求方式: GET

  • 請求參數說明:

  1. gt: 之前接口返回的驗證ID

  2. challenge: 之前接口返回的驗證流水號

  3. lang=zh-hk

  4. is_next=true

  5. type=slide3

  6. https=false

  7. protocol=https://

  8. offline=false

  9. product=embed

  10. api_server=api.geetest.com

  11. isPC=true

  12. width=100%

  13. callback=回調函數的方法名

  • 響應內容:

  • 響應參數說明:

  1. https://static.geetest.com/pictures/gt/0191efce3/0191efce3.webp

  2. https://static.geetest.com/pictures/gt/0191efce3/bg/8eba80808.webp

  3. https://static.geetest.com/pictures/gt/0191efce3/slice/8eba80808.png

 

6. 提交驗證請求

  • 請求地址: https://api.geetest.com/ajax.php?gt=2328764cdf162e8e60cc0b...

  • 請求方式: GET

  • 請求參數說明:

  1. gt: 之前接口返回的驗證ID

  2. challenge: 第六步返回的驗證流水號

  3. lang=zh-hk

  4. pt=0

  5. w=cY71fua4Cuvs8Cyrf3rW(VzZHB)oSpARQMV65Dtg... (待分析)

  • 響應內容:

 

7. 提交登錄認證

  • 請求地址: https://www.nike.com.hk/member/login.json?loxiaflag=1563879969519

  • 請求方式: POST

  • 請求參數說明:

  1. loginName: [email protected]

  2. countryCode:

  3. password=EJ2JjA3Rw32DrDMHI1Biu7+YKevYJhvU2EyllSQ... (加密後的密碼待分析)

  4. passwordAgain=EJ2JjA3Rw32DrDMHI1Biu7+YKevYJhvU2EyllSQ... (加密後的密碼待分析)

  5. rememberLoginName=checked

  6. type

  7. geetest_challenge=decd09d6c9f1bb219f7550cea8e18c01eb (第六步返回的驗證流水號)

  8. geetest_validate=545a86f1a2af6f09afc4d1abbb166679 (第七步返回的validate)

  9. geetest_seccode=545a86f1a2af6f09afc4d1abbb166679|jordan (第七步返回的validate|jordan)

  • 響應內容:

 

8. 驗證流程整理

經測試不需要所有接口都模擬,比如直接指定驗證方式爲滑塊驗證,依次調用接口: 1 --> 3 --> 5 --> 6 --> 7 即可。Python學習羣:827513319

至此,整個交互流程分析完畢,產生的問題如下:

  1. 所有用於驗證的代碼都是混淆之後的,如何進行代碼還原或者調試分析。

  2. 請求與返回的關鍵數據都是加密的後的字符串如上述3、4、6等接口中的W參數,如何解密。

 

 

 

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