好友
阅读权限 25
听众
最后登录 1970-1-1
本帖最后由 13955925361 于 2025-11-8 19:56 编辑
电脑拿去修了小半个月,回来2天搞完了极验4,分享给大家。
主要是有一个RSA加密和AES加密,合起来就是w值。
本次分享的包括无感和滑块,如果不行的话有一个
动态键值对就留给 大家自行研究吧,我反正是写死了。
滑块验证码
[Python] 纯文本查看 复制代码
from curl_cffi import requests
import json
import time
import random
import re
import execjs
import numpy as np
from io import BytesIO
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
import base64
from Crypto.Cipher import PKCS1_OAEP, PKCS1_v1_5
from Crypto.PublicKey import RSA
from captcha_recognizer.recognizer import Recognizer
import logging
cookies = {
'captcha_v4_user': '2a05648ecd264b72b4a0705e8fa5fec7',
'_uetvid': '1633caa0703211f0944c294f68e5bcd2',
'language': 'zh',
'sensorsdata2015jssdkcross': '%7B%22distinct_id%22%3A%222509034534%40qq.com%22%2C%22first_id%22%3A%221986e979d43287d-052e489f0209694-4c657b58-1339560-1986e979d4426d1%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E4%BB%98%E8%B4%B9%E5%B9%BF%E5%91%8A%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC%22%2C%22%24latest_referrer%22%3A%22https%3A%2F%2Fcn.bing.com%2F%22%2C%22%24latest_landing_page%22%3A%22https%3A%2F%2Fwww.geetest.com%2F%3Futm_campaign%3D%E7%99%BE%E5%BA%A6SEM%26utm_source%3Dbaidu%26utm_medium%3Dcpc%26utm_term%3D%E6%9E%81%E9%AA%8C%26utm_content%3D%E5%93%81%E7%89%8C%E8%AF%8D%E7%B3%BB%E5%88%97%26_channel_track_key%3DqXBWd7ZK%26bd_vid%3D8261401145188680067%22%2C%22%24latest_utm_source%22%3A%22baidu%22%2C%22%24latest_utm_medium%22%3A%22cpc%22%2C%22%24latest_utm_campaign%22%3A%22%E7%99%BE%E5%BA%A6SEM%22%2C%22%24latest_utm_content%22%3A%22%E5%93%81%E7%89%8C%E8%AF%8D%E7%B3%BB%E5%88%97%22%2C%22%24latest_utm_term%22%3A%22%E6%9E%81%E9%AA%8C%22%7D%2C%22%24device_id%22%3A%221986e979d43287d-052e489f0209694-4c657b58-1339560-1986e979d4426d1%22%2C%22identities%22%3A%22eyIkaWRlbnRpdHlfY29va2llX2lkIjoiMTk4NmU5OGI3MWQ3NmMtMDc1NDE2MzE5NWFhYmNjLTRjNjU3YjU4LTEzMzk1NjAtMTk4NmU5OGI3MWUxZWRmIiwiJGlkZW50aXR5X2xvZ2luX2lkIjoiMjUwOTAzNDUzNEBxcS5jb20ifQ%3D%3D%22%2C%22history_login_id%22%3A%7B%22name%22%3A%22%24identity_login_id%22%2C%22value%22%3A%222509034534%40qq.com%22%7D%7D',
'Hm_lvt_25b04a5e7a64668b9b88e2711fb5f0c4': '1759239383,1761661590',
'HMACCOUNT': '15FDFDCDB803ED31',
'Hm_lpvt_25b04a5e7a64668b9b88e2711fb5f0c4': '1761707723',
}
headers = {
'Accept': '*/*',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
'Cache-Control': 'no-cache',
'Connection': 'keep-alive',
'Pragma': 'no-cache',
'Referer': 'https://www.geetest.com/',
'Sec-Fetch-Dest': 'script',
'Sec-Fetch-Mode': 'no-cors',
'Sec-Fetch-Site': 'same-site',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36 Edg/141.0.0.0',
'sec-ch-ua': '"Microsoft Edge";v="141", "Not?A_Brand";v="8", "Chromium";v="141"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
# 'Cookie': 'captcha_v4_user=2a05648ecd264b72b4a0705e8fa5fec7; _uetvid=1633caa0703211f0944c294f68e5bcd2; language=zh; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%222509034534%40qq.com%22%2C%22first_id%22%3A%221986e979d43287d-052e489f0209694-4c657b58-1339560-1986e979d4426d1%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E4%BB%98%E8%B4%B9%E5%B9%BF%E5%91%8A%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC%22%2C%22%24latest_referrer%22%3A%22https%3A%2F%2Fcn.bing.com%2F%22%2C%22%24latest_landing_page%22%3A%22https%3A%2F%2Fwww.geetest.com%2F%3Futm_campaign%3D%E7%99%BE%E5%BA%A6SEM%26utm_source%3Dbaidu%26utm_medium%3Dcpc%26utm_term%3D%E6%9E%81%E9%AA%8C%26utm_content%3D%E5%93%81%E7%89%8C%E8%AF%8D%E7%B3%BB%E5%88%97%26_channel_track_key%3DqXBWd7ZK%26bd_vid%3D8261401145188680067%22%2C%22%24latest_utm_source%22%3A%22baidu%22%2C%22%24latest_utm_medium%22%3A%22cpc%22%2C%22%24latest_utm_campaign%22%3A%22%E7%99%BE%E5%BA%A6SEM%22%2C%22%24latest_utm_content%22%3A%22%E5%93%81%E7%89%8C%E8%AF%8D%E7%B3%BB%E5%88%97%22%2C%22%24latest_utm_term%22%3A%22%E6%9E%81%E9%AA%8C%22%7D%2C%22%24device_id%22%3A%221986e979d43287d-052e489f0209694-4c657b58-1339560-1986e979d4426d1%22%2C%22identities%22%3A%22eyIkaWRlbnRpdHlfY29va2llX2lkIjoiMTk4NmU5OGI3MWQ3NmMtMDc1NDE2MzE5NWFhYmNjLTRjNjU3YjU4LTEzMzk1NjAtMTk4NmU5OGI3MWUxZWRmIiwiJGlkZW50aXR5X2xvZ2luX2lkIjoiMjUwOTAzNDUzNEBxcS5jb20ifQ%3D%3D%22%2C%22history_login_id%22%3A%7B%22name%22%3A%22%24identity_login_id%22%2C%22value%22%3A%222509034534%40qq.com%22%7D%7D; Hm_lvt_25b04a5e7a64668b9b88e2711fb5f0c4=1759239383,1761661590; HMACCOUNT=15FDFDCDB803ED31; Hm_lpvt_25b04a5e7a64668b9b88e2711fb5f0c4=1761707723',
}
def uuid():
def replace_char(c):
if c == 'x':
v = random.randint(0, 15)
else: # c == 'y'
v = (random.randint(0, 15) & 0x3) | 0x8
return format(v, 'x')
template = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'
result = ''.join(replace_char(c) if c in 'xy' else c for c in template)
return result
cxx=uuid()
params = {
'callback': 'geetest_'+str(random.randint(0, 9999) + int(time.time() * 1000)),
'captcha_id': '24f56dc13c40dc4a02fd0318567caef5',
'challenge': cxx,
'client_type': 'web',
'risk_type': 'slide',
'lang': 'zh',
}
captcha_id=params['captcha_id']
response = requests.get('https://gcaptcha4.geetest.com/load', params=params, cookies=cookies, headers=headers)
json_data=response.text
print(json_data)
json_str = json_data.split('(', 1)[1].rstrip(')')
# 解析 JSON 字符串为 Python 字典
data = json.loads(json_str)
print(data)
lot_number = data['data']['lot_number']
payload = data['data']['payload']
process_token=data['data']['process_token']
payload_protocol=data['data']['payload_protocol']
pt=data['data']['pt']
version=data['data']["pow_detail"]['version']
bits=data['data']['pow_detail']['bits']
datetime=data['data']['pow_detail']['datetime']
hashfunc=data['data']['pow_detail']['hashfunc']
print(lot_number)
print(payload )
print(process_token)
print(payload_protocol)
print(pt)
print(version)
print(bits)
print(datetime)
print(hashfunc)
bg_0=data['data']['bg']
front_0=data['data']['slice']
print(bg_0)
print(front_0)
bg='https://static.geetest.com/'+str(bg_0)
front='https://static.geetest.com/'+str(front_0)
bgContent=requests.get(bg,headers=headers).content
frontContent=requests.get(front,headers=headers).content
with open ('bg.png','wb') as f:
f.write(bgContent)
with open ('front.png','wb') as f:
f.write(frontContent)
import cv2
import os
def get_slide_distance( bg_path, slide_path):
bg_img = cv2.imread(bg_path)
sd_img = cv2.imread(slide_path)
# 获取滑块实际宽高(关键步骤)
slide_height, slide_width = sd_img.shape[:2] # 提取高度和宽度(忽略通道数)
# 背景图预处理(灰度化→模糊→边缘检测→转RGB)
bg_gray = cv2.cvtColor(bg_img, cv2.COLOR_BGR2GRAY)
bg_gray = cv2.GaussianBlur(bg_gray, (5, 5), 0)
bg_edge = cv2.Canny(bg_gray, 30, 100)
rgb_bg_gray = cv2.cvtColor(bg_edge, cv2.COLOR_GRAY2RGB)
# 滑块图预处理(与背景图处理一致)
sd_gray = cv2.cvtColor(sd_img, cv2.COLOR_BGR2GRAY)
sd_gray = cv2.GaussianBlur(sd_gray, (5, 5), 0)
sd_edge = cv2.Canny(sd_gray, 30, 100)
rgb_sd_gray = cv2.cvtColor(sd_edge, cv2.COLOR_GRAY2RGB)
# 模板匹配
result = cv2.matchTemplate(rgb_bg_gray, rgb_sd_gray, cv2.TM_CCORR_NORMED)
_, _, _, max_loc = cv2.minMaxLoc(result)
# 用滑块真实宽高标记矩形(核心修改处)
# 右下角坐标 = 左上角坐标 + 滑块宽高
cv2.rectangle(
bg_img,
(max_loc[0], max_loc[1]), # 左上角
(max_loc[0] + slide_width, max_loc[1] + slide_height), # 右下角(动态计算)
(0, 255, 0), # 绿色
2 # 线宽
)
# 保存结果图
result_path = os.path.join(os.path.dirname(bg_path), "result.png")
cv2.imwrite(result_path, bg_img)
# 返回滑动距离(滑块左上角x坐标)
return max_loc[0]
setLeft= get_slide_distance('bg.png','front.png')
print(f"滑块需要滑动的距离是: {setLeft}px")
userresponse=(int(setLeft)/1.0059466666666665)+2
passtime=(int(setLeft)/189)*1494
with open('极验4.js','r',encoding='utf-8')as f:
js=f.read()
ctx=execjs.compile(js)
num=ctx.call('get_h')
print(num)
pow_msg=f"{version}|{bits}|{hashfunc}|{datetime}|{captcha_id}|{lot_number}||{num}"
print(pow_msg)
pow_sign=ctx.call('hash',pow_msg,hashfunc)
print(pow_sign)
infoo={"setLeft":setLeft,"passtime":passtime,"userresponse":userresponse,"device_id":"","lot_number":lot_number,"pow_msg":pow_msg,"pow_sign":pow_sign,"geetest":"captcha","lang":"zh","ep":"123","biht":"1426265548","VkOI":"YGWp","4784ca":"9e36","em":{"ph":0,"cp":0,"ek":"11","wd":1,"nt":0,"si":0,"sc":0}}
info=json.dumps(infoo)
print(info)
uxx=ctx.call('aesCbcEncrypt',info,num)
print(uxx)
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5
import binascii
def RSA_encrypt(data):
modulus = 0x00C1E3934D1614465B33053E7F48EE4EC87B14B95EF88947713D25EECBFF7E74C7977D02DC1D9451F79DD5D1C10C29ACB6A9B4D6FB7D0A0279B6719E1772565F09AF627715919221AEF91899CAE08C0D686D748B20A3603BE2318CA6BC2B59706592A9219D0BF05C9F65023A21D2330807252AE0066D59CEEFA5F2748EA80BAB81
exponent = 0x010001
key = RSA.construct((modulus, exponent))
cipher = PKCS1_v1_5.new(key)
encrypted = cipher.encrypt(data.encode())
return binascii.hexlify(encrypted).decode()
rxx=RSA_encrypt(num)
print(rxx)
wxx=uxx+rxx
print(wxx)
url_2 = "https://gcaptcha4.geetest.com/verify"
params = {
"callback": 'geetest_'+str(random.randint(0, 9999) + int(time.time() * 1000)),
"captcha_id": captcha_id,
"client_type": "web",
"lot_number": lot_number ,
"risk_type": "ai",
"payload": payload,
"process_token": process_token,
"payload_protocol": payload_protocol,
"pt": pt,
"w":wxx
}
response = requests.get(url_2, headers=headers, cookies=cookies, params=params)
print(response.text)
print(response)
JS代码
[JavaScript] 纯文本查看 复制代码
const CryptoJS = require("crypto-js");
function aesCbcEncrypt(plaintext,num) {
// 定义 Key 和 IV(UTF-8 编码)
const key = CryptoJS.enc.Utf8.parse(num);
const iv = CryptoJS.enc.Utf8.parse('0000000000000000');
// AES-CBC 加密
const encrypted = CryptoJS.AES.encrypt(
CryptoJS.enc.Utf8.parse(plaintext), // 明文转 WordArray
key,
{
iv: iv,
mode: CryptoJS.mode.CBC, // CBC 模式
padding: CryptoJS.pad.Pkcs7 // PKCS#7 填充
}
);
// 返回 16 进制字符串
return encrypted.ciphertext.toString(CryptoJS.enc.Hex);
}
// 测试
const plaintext = "Hello, AES-CBC!";
const ciphertext = aesCbcEncrypt(plaintext);
console.log("加密结果(Hex):", ciphertext);
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);
});
}
console.log(uuid())
function exx() {
return (65536 * (1 + Math['random'
]()) | 0)['toString'
](16)['substring'
](1)
}
function get_h() {return exx() + exx() + exx() + exx()}
console.log(get_h());
var crypto=require('crypto')
function hash(text,ha){
var hs;
if (ha=="sha256"){
hs=crypto.createHash('sha256').update(text).digest('hex');
} if (ha=="md5"){
hs=crypto.createHash('md5').update(text).digest('hex');
}if(ha=="sha1"){hs=crypto.createHash('sha1').update(text).digest('hex');}
return hs;
}
无感
[Python] 纯文本查看 复制代码
from curl_cffi import requests
import json
import time
import random
import re
import execjs
import numpy as np
from io import BytesIO
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
import base64
from Crypto.Cipher import PKCS1_OAEP, PKCS1_v1_5
from Crypto.PublicKey import RSA
from captcha_recognizer.recognizer import Recognizer
import logging
cookies = {
'captcha_v4_user': '2a05648ecd264b72b4a0705e8fa5fec7',
'_uetvid': '1633caa0703211f0944c294f68e5bcd2',
'language': 'zh',
'sensorsdata2015jssdkcross': '%7B%22distinct_id%22%3A%222509034534%40qq.com%22%2C%22first_id%22%3A%221986e979d43287d-052e489f0209694-4c657b58-1339560-1986e979d4426d1%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E4%BB%98%E8%B4%B9%E5%B9%BF%E5%91%8A%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC%22%2C%22%24latest_referrer%22%3A%22https%3A%2F%2Fcn.bing.com%2F%22%2C%22%24latest_landing_page%22%3A%22https%3A%2F%2Fwww.geetest.com%2F%3Futm_campaign%3D%E7%99%BE%E5%BA%A6SEM%26utm_source%3Dbaidu%26utm_medium%3Dcpc%26utm_term%3D%E6%9E%81%E9%AA%8C%26utm_content%3D%E5%93%81%E7%89%8C%E8%AF%8D%E7%B3%BB%E5%88%97%26_channel_track_key%3DqXBWd7ZK%26bd_vid%3D8261401145188680067%22%2C%22%24latest_utm_source%22%3A%22baidu%22%2C%22%24latest_utm_medium%22%3A%22cpc%22%2C%22%24latest_utm_campaign%22%3A%22%E7%99%BE%E5%BA%A6SEM%22%2C%22%24latest_utm_content%22%3A%22%E5%93%81%E7%89%8C%E8%AF%8D%E7%B3%BB%E5%88%97%22%2C%22%24latest_utm_term%22%3A%22%E6%9E%81%E9%AA%8C%22%7D%2C%22%24device_id%22%3A%221986e979d43287d-052e489f0209694-4c657b58-1339560-1986e979d4426d1%22%2C%22identities%22%3A%22eyIkaWRlbnRpdHlfY29va2llX2lkIjoiMTk4NmU5OGI3MWQ3NmMtMDc1NDE2MzE5NWFhYmNjLTRjNjU3YjU4LTEzMzk1NjAtMTk4NmU5OGI3MWUxZWRmIiwiJGlkZW50aXR5X2xvZ2luX2lkIjoiMjUwOTAzNDUzNEBxcS5jb20ifQ%3D%3D%22%2C%22history_login_id%22%3A%7B%22name%22%3A%22%24identity_login_id%22%2C%22value%22%3A%222509034534%40qq.com%22%7D%7D',
'Hm_lvt_25b04a5e7a64668b9b88e2711fb5f0c4': '1759239383,1761661590',
'HMACCOUNT': '15FDFDCDB803ED31',
'Hm_lpvt_25b04a5e7a64668b9b88e2711fb5f0c4': '1761707723',
}
headers = {
'Accept': '*/*',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
'Cache-Control': 'no-cache',
'Connection': 'keep-alive',
'Pragma': 'no-cache',
'Referer': 'https://www.geetest.com/',
'Sec-Fetch-Dest': 'script',
'Sec-Fetch-Mode': 'no-cors',
'Sec-Fetch-Site': 'same-site',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36 Edg/141.0.0.0',
'sec-ch-ua': '"Microsoft Edge";v="141", "Not?A_Brand";v="8", "Chromium";v="141"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
# 'Cookie': 'captcha_v4_user=2a05648ecd264b72b4a0705e8fa5fec7; _uetvid=1633caa0703211f0944c294f68e5bcd2; language=zh; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%222509034534%40qq.com%22%2C%22first_id%22%3A%221986e979d43287d-052e489f0209694-4c657b58-1339560-1986e979d4426d1%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E4%BB%98%E8%B4%B9%E5%B9%BF%E5%91%8A%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC%22%2C%22%24latest_referrer%22%3A%22https%3A%2F%2Fcn.bing.com%2F%22%2C%22%24latest_landing_page%22%3A%22https%3A%2F%2Fwww.geetest.com%2F%3Futm_campaign%3D%E7%99%BE%E5%BA%A6SEM%26utm_source%3Dbaidu%26utm_medium%3Dcpc%26utm_term%3D%E6%9E%81%E9%AA%8C%26utm_content%3D%E5%93%81%E7%89%8C%E8%AF%8D%E7%B3%BB%E5%88%97%26_channel_track_key%3DqXBWd7ZK%26bd_vid%3D8261401145188680067%22%2C%22%24latest_utm_source%22%3A%22baidu%22%2C%22%24latest_utm_medium%22%3A%22cpc%22%2C%22%24latest_utm_campaign%22%3A%22%E7%99%BE%E5%BA%A6SEM%22%2C%22%24latest_utm_content%22%3A%22%E5%93%81%E7%89%8C%E8%AF%8D%E7%B3%BB%E5%88%97%22%2C%22%24latest_utm_term%22%3A%22%E6%9E%81%E9%AA%8C%22%7D%2C%22%24device_id%22%3A%221986e979d43287d-052e489f0209694-4c657b58-1339560-1986e979d4426d1%22%2C%22identities%22%3A%22eyIkaWRlbnRpdHlfY29va2llX2lkIjoiMTk4NmU5OGI3MWQ3NmMtMDc1NDE2MzE5NWFhYmNjLTRjNjU3YjU4LTEzMzk1NjAtMTk4NmU5OGI3MWUxZWRmIiwiJGlkZW50aXR5X2xvZ2luX2lkIjoiMjUwOTAzNDUzNEBxcS5jb20ifQ%3D%3D%22%2C%22history_login_id%22%3A%7B%22name%22%3A%22%24identity_login_id%22%2C%22value%22%3A%222509034534%40qq.com%22%7D%7D; Hm_lvt_25b04a5e7a64668b9b88e2711fb5f0c4=1759239383,1761661590; HMACCOUNT=15FDFDCDB803ED31; Hm_lpvt_25b04a5e7a64668b9b88e2711fb5f0c4=1761707723',
}
def uuid():
def replace_char(c):
if c == 'x':
v = random.randint(0, 15)
else: # c == 'y'
v = (random.randint(0, 15) & 0x3) | 0x8
return format(v, 'x')
template = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'
result = ''.join(replace_char(c) if c in 'xy' else c for c in template)
return result
cxx=uuid()
params = {
'callback': 'geetest_'+str(random.randint(0, 9999) + int(time.time() * 1000)),
'captcha_id': '24f56dc13c40dc4a02fd0318567caef5',
'challenge': cxx,
'client_type': 'web',
'risk_type': 'ai',
'lang': 'zh',
}
captcha_id=params['captcha_id']
response = requests.get('https://gcaptcha4.geetest.com/load', params=params, cookies=cookies, headers=headers)
json_data=response.text
print(json_data)
json_str = json_data.split('(', 1)[1].rstrip(')')
# 解析 JSON 字符串为 Python 字典
data = json.loads(json_str)
print(data)
lot_number = data['data']['lot_number']
payload = data['data']['payload']
process_token=data['data']['process_token']
payload_protocol=data['data']['payload_protocol']
pt=data['data']['pt']
version=data['data']["pow_detail"]['version']
bits=data['data']['pow_detail']['bits']
datetime=data['data']['pow_detail']['datetime']
hashfunc=data['data']['pow_detail']['hashfunc']
print(lot_number)
print(payload )
print(process_token)
print(payload_protocol)
print(pt)
print(version)
print(bits)
print(datetime)
print(hashfunc)
with open('极验4.js','r',encoding='utf-8')as f:
js=f.read()
ctx=execjs.compile(js)
num=ctx.call('get_h')
print(num)
pow_msg=f"{version}|{bits}|{hashfunc}|{datetime}|{captcha_id}|{lot_number}||{num}"
print(pow_msg)
pow_sign=ctx.call('hash',pow_msg,hashfunc)
print(pow_sign)
infoo={"device_id":"","lot_number":lot_number,"pow_msg":pow_msg,"pow_sign":pow_sign,"geetest":"captcha","lang":"zh","ep":"123","biht":"1426265548","YciC":"P3Vn","1a72df83":"edf83342","em":{"ph":0,"cp":0,"ek":"11","wd":1,"nt":0,"si":0,"sc":0}}
info=json.dumps(infoo)
print(info)
uxx=ctx.call('aesCbcEncrypt',info,num)
print(uxx)
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5
import binascii
def RSA_encrypt(data):
modulus = 0x00C1E3934D1614465B33053E7F48EE4EC87B14B95EF88947713D25EECBFF7E74C7977D02DC1D9451F79DD5D1C10C29ACB6A9B4D6FB7D0A0279B6719E1772565F09AF627715919221AEF91899CAE08C0D686D748B20A3603BE2318CA6BC2B59706592A9219D0BF05C9F65023A21D2330807252AE0066D59CEEFA5F2748EA80BAB81
exponent = 0x010001
key = RSA.construct((modulus, exponent))
cipher = PKCS1_v1_5.new(key)
encrypted = cipher.encrypt(data.encode())
return binascii.hexlify(encrypted).decode()
rxx=RSA_encrypt(num)
print(rxx)
wxx=uxx+rxx
print(wxx)
url_2 = "https://gcaptcha4.geetest.com/verify"
params = {
"callback": 'geetest_'+str(random.randint(0, 9999) + int(time.time() * 1000)),
"captcha_id": captcha_id,
"client_type": "web",
"lot_number": lot_number ,
"risk_type": "ai",
"payload": payload,
"process_token": process_token,
"payload_protocol": payload_protocol,
"pt": pt,
"w":wxx
}
response = requests.get(url_2, headers=headers, cookies=cookies, params=params)
print(response.text)
print(response)
极验4.zip
192.57 KB, 下载次数: 130, 下载积分: 吾爱币 -1 CB
免费评分
查看全部评分