極驗第四代滑塊驗證碼破解(四):請求分析及加密參數(shù)破解
一、極驗請求分析
1. 滑塊測試網(wǎng)站入口
https://www.geetest.com/adaptive-captcha-demo
2. 滑塊驗證過程抓包
與極驗三代滑塊驗證碼相比,極驗四代簡化了驗證過程,加密參數(shù)w的生成也變簡單了。和極驗三代驗證碼一樣的分析流程,擼就完了。
3. 請求詳解
3.1. adaptive-captcha-demo
請求介紹
極驗第四代驗證碼測試主頁,主要是獲取下個請求中的url(這個url是動態(tài)變化的,所以這個步驟必須要)
請求參數(shù)
沒啥參數(shù)
1
請求響應
響應為html文檔,通過正則匹配下個步驟的請求url
href="(.\*?adaptive-captcha-demo\.js)"
3.2. adaptive-captcha-demo.js
請求介紹
獲取w參數(shù)加密需要的參數(shù)captchaId
請求參數(shù)
實際破解滑塊過程中,此請求可忽略。
沒啥參數(shù)
請求響應
響應為js文件,通過正則匹配captchaId參數(shù)的值
captchaId:"([0-9a-z]+)"
3.3. load
請求介紹
獲取驗證碼信息,包括:驗證碼類型、驗證碼背景圖、驗證碼滑塊圖、lot_number參數(shù)、靜態(tài)文件url等
請求參數(shù)
captcha_id: 24f56dc13c40dc4a02fd0318567caef5 // 上個請求中獲取
challenge: f8beca82-84a4-4b32-a01d-dae1697f1236 // 由js代碼生成,下面會詳細講解生成過程
client_type: web // 固定值
risk_type: slide // 驗證碼類型
lang: zh // 固定值
callback: geetest_1641878914316 // 當前時間戳
請求響應
響應中的c、s在后續(xù)無感驗證生成w參數(shù)時需要使用,其中c為定值,s為變化值。
{
"status": "success",
"data": {
"lot_number": "c574cd8c30a541b28597fb4582542c61",
"captcha_type": "slide",
"js": "/js/gcaptcha4.js",
"css": "/css/gcaptcha4.css",
"static_path": "/v4/static/v1.4.4",
"slice": "pictures/v4_pic/slide_2021_07_14/Group81/slide/019d7acaf9aa4f488a332b6baff7176b.png",
"bg": "pictures/v4_pic/slide_2021_07_14/Group81/bg/019d7acaf9aa4f488a332b6baff7176b.png",
"ypos": 116,
"gct_path": "/v4/gct/gct4.5258a91d0f5f0bb73c65d4d18d48d93f.js",
"arrow": "arrow_1",
"show_voice": false,
"feedback": "https://www.geetest.com/Helper",
"logo": true,
"pt": "1",
"captcha_mode": "risk_manage",
"language": "zh",
"custom_theme": {
"_style": "stereoscopic",
"_color": "hsla(224,98%,66%,1)",
"_gradient": "linear-gradient(180deg, hsla(224,98%,71%,1) 0%, hsla(224,98%,66%,1) 100%)",
"_hover": "linear-gradient(180deg, hsla(224,98%,66%,1) 0%, hsla(224,98%,71%,1) 100%)",
"_brightness": "system",
"_radius": "4px"
}
}
}
3.4. verify
請求介紹
該請求是極驗驗證請求,gcaptcha4.js收集滑動軌跡,與上個請求中的lot_number參數(shù),加密生成w參數(shù)。
請求參數(shù)
captcha_id: 24f56dc13c40dc4a02fd0318567caef5 // 與上個請求中的captcha_id參數(shù)相同
challenge: e29f82f7-78db-42de-913f-fb1b01d3e30b // 與上個請求中的challenge參數(shù)相同
client_type: web // 固定值
lot_number: c574cd8c30a541b28597fb4582542c61 // 上個請求的響應中l(wèi)ot_number參數(shù)值
risk_type: slide // 驗證碼類型
pt: 1 // 上個請求的響應中pt參數(shù)值
w: c742e66584e3b20ad523c2ddff... // gcaptcha4.js收集滑動軌跡加密生成
callback: geetest_1641878916958 // 當前時間戳
請求響應
驗證成功,拿到seccode。
{
"status": "success",
"data": {
"lot_number": "5b79a07bfb1640c1955ef28fbe28bef0",
"result": "success",
"fail_count": 0,
"seccode": {
"lot_number": "5b79a07bfb1640c1955ef28fbe28bef0",
"pass_token": "f5b3b3d7664e032bc06730d56f83433046af98878bfa796d5e4b5b5f48904e40",
"gen_time": "1641880037",
"captcha_output": "2W2T6RrNJ8qVlCuIQxrHVp0imaZt_LrywRPCvYEbTHwQyoZwHIYvpYM5zF0-qSl8LQF_m8ggUDGiA0b8IDdrjji1YjjbEERRWAP9SxWj-G090QRaou4m8NnZL0NVmBie"
},
"score": "1"
}
}
二、js破解前準備工作
1. gcaptcha4.js反混淆
通過AST語法樹將混淆的gcaptcha4.js文件還原,具體還原方式請看 極驗第四代滑塊驗證碼破解(一):AST還原混淆JS
2. 找到w參數(shù)
3. 使用chrome插件reres替換js文件
第三步:進入uuid函數(shù),這個函數(shù)特別簡單,直接改成py
import random
def uuid():
"""
var uuid = function () {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
var r = Math.random() * 16 | 0;
var v = c === 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
};
"""
def __random(c):
r = int(random.random() * 16)
v = r if c == 'x' else (r & 0x3 | 0x8)
return hex(v)[2:]
string = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'
ret = ''
for i in string:
if i in 'xy':
i = __random(i)
ret += i
return ret
四、w參數(shù)破解
1. w參數(shù)分析
下面分析對w參數(shù)的分析過程,依照下圖所示。