微笑哥哥 发表于 2025-5-7 04:21:09

某赞 滑块 如违规版主麻烦删下

直接放代码~
```
import json
import math
import time
from loguru import logger
import requests
from Crypto.Cipher import AES
import base64
import random
import ddddocr
ocr = ddddocr.DdddOcr()
logger.success("""\n   _____    _____   ____   __       ______
/ ___/   /|///_// /      / ____/
\__ \   / /|_/ /   / /   / /      / __/   
___/ // // /_/ /   / /___   / /___   
/____//_//_//___//_____//_____/   
\n有赞Captcha\nBy:Smile""")
basic_headers = {
    "user-agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0'
}
host="passport.youzan.com"
token_url=f'https://{host}/api/captcha/get-behavior-captcha-token.json?bizType=15'
class youzan:
    def __init__(self):
      # 密钥和 IV
      self.eventData='{"cx":126,"cy":33,"scale":0.5,"slidingEvents":[{"mx":32,"my":200,"ts":1746556441652},{"mx":0,"my":0,"ts":1},{"mx":1,"my":0,"ts":23},{"mx":1,"my":0,"ts":18},{"mx":1,"my":0,"ts":6},{"mx":1,"my":0,"ts":3},{"mx":0,"my":0,"ts":2},{"mx":1,"my":0,"ts":3},{"mx":1,"my":0,"ts":1},{"mx":1,"my":0,"ts":2},{"mx":1,"my":0,"ts":2},{"mx":0,"my":0,"ts":1},{"mx":1,"my":0,"ts":2},{"mx":1,"my":0,"ts":1},{"mx":1,"my":0,"ts":2},{"mx":1,"my":0,"ts":2},{"mx":0,"my":0,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":1,"my":0,"ts":2},{"mx":1,"my":0,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":1,"my":-1,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":2,"my":0,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":2,"my":0,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":2,"my":0,"ts":1},{"mx":1,"my":-1,"ts":1},{"mx":2,"my":0,"ts":1},{"mx":2,"my":0,"ts":1},{"mx":0,"my":0,"ts":1},{"mx":2,"my":0,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":2,"my":0,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":2,"my":0,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":2,"my":0,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":2,"my":0,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":2,"my":-1,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":2,"my":0,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":2,"my":0,"ts":1},{"mx":1,"my":-1,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":2,"my":0,"ts":1},{"mx":0,"my":0,"ts":1},{"mx":2,"my":0,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":1,"my":-1,"ts":1},{"mx":0,"my":0,"ts":1},{"mx":2,"my":0,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":0,"my":0,"ts":1},{"mx":2,"my":-1,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":0,"my":0,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":0,"my":0,"ts":1},{"mx":2,"my":-1,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":0,"my":0,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":1,"my":-1,"ts":1},{"mx":1,"my":0,"ts":4},{"mx":0,"my":0,"ts":1},{"mx":1,"my":0,"ts":2},{"mx":1,"my":0,"ts":2},{"mx":0,"my":-1,"ts":1},{"mx":1,"my":0,"ts":1},{"mx":1,"my":0,"ts":2},{"mx":0,"my":0,"ts":5},{"mx":0,"my":0,"ts":8},{"mx":0,"my":0,"ts":7},{"mx":0,"my":0,"ts":7},{"mx":0,"my":0,"ts":7}]}'

      self.key = 'youzan.com._key_'
      self.iv = 'youzan.com.aesiv'
      self.token=""
      self.tokenObj=None
      self.bg=None
      self.slide=None
      self.pos=None
      self.cy=0
    # 初始化
    def getToken(self):
      res = requests.get(url=token_url, headers=basic_headers).json()
      try:
            self.token = res['data']
      except Exception:
            logger.error("get token fail!")
      return self.token

    def getTokenObj(self):
      url = f'https://{host}/api/captcha/get-behavior-captcha-data.json?token={self.token}&captchaType=1'
      res = requests.get(url=url, headers=basic_headers).json()
      try:
            self.tokenObj = res['data']
            self.bg=res['data']['captchaObtainInfoResult']['bigUrl']
            self.slide = res['data']['captchaObtainInfoResult']['smallUrl']
            self.cy=res['data']['captchaObtainInfoResult']['cy']
      except Exception:
            logger.error("get TokenObj fail!")
      return self.tokenObj
    def ocr(self):
      img_bg=requests.get(self.bg, timeout=10).content
      img_slide=requests.get(self.slide, timeout=10).content
      pos=ocr.slide_match(img_slide, img_bg, simple_target=True)
      self.pos=pos
      return pos
    def captcha_slide(self):
      url=f'https://{host}/api/captcha/check-behavior-captcha-data.json'
      _head=basic_headers
      eventData_obj=json.loads(self.eventData)
      print(self.pos,self.cy)
      eventData_obj['cx'] = math.ceil(self.pos['target']/2)
      eventData_obj['cy'] = math.ceil(self.cy/2)
      eventData_obj['slidingEvents']['ts'] = int(time.time()*1000)
      self.eventData=json.dumps(eventData_obj)
      print(self.eventData)
      userBehaviorData=aes_encrypt(self.eventData,self.key,self.iv)
      logger.info("userBehaviorData->"+userBehaviorData)
      _head.update({"content-type":"application/x-www-form-urlencoded"})
      form_data = {
            "token": self.token,
            "bizType": "15",
            "bizData": "",
            "captchaType": "1",
            "userBehaviorData": userBehaviorData
      }

      res = requests.post(url=url,data=form_data,headers=_head).json()
      logger.info(res)
      return res
def iso10126_pad(data, block_size):
    padding_length = block_size - (len(data) % block_size)
    padding = bytes() + bytes()
    return data + padding

def iso10126_unpad(data):
    padding_length = data[-1]
    return data[:-padding_length]

def aes_encrypt(plaintext, key, iv):
    cipher = AES.new(key.encode('utf-8'), AES.MODE_CBC, iv.encode('utf-8'))
    padded_plaintext = iso10126_pad(plaintext.encode('utf-8'), AES.block_size)
    ciphertext = cipher.encrypt(padded_plaintext)
    return base64.b64encode(ciphertext).decode('utf-8')

def aes_decrypt(ciphertext, key, iv):
    ciphertext = base64.b64decode(ciphertext)
    cipher = AES.new(key.encode('utf-8'), AES.MODE_CBC, iv.encode('utf-8'))
    decrypted_data = cipher.decrypt(ciphertext)
    unpadded_data = iso10126_unpad(decrypted_data)
    return unpadded_data.decode('utf-8')



if __name__ == '__main__':
    yz = youzan()
    token=yz.getToken()
    logger.info(yz.getTokenObj())
    logger.info(yz.ocr())
    logger.info(yz.captcha_slide())
    url = "https://oauth.youzan.com/api/login/by-pass.json"

    headers = {
      "accept": "application/json, text/plain, */*",
      "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",
      "content-type": "application/x-www-form-urlencoded",
      "origin": "https://oauth.youzan.com",
      "pragma": "no-cache",
      "referer": "https://oauth.youzan.com/login/password?clientId=84050d9ed73fdddc1c&redirectUrl=https%3A%2F%2Fcdp.youzan.com%2Fredirect%3Fpath%3D%252F&scope=auth_user",
      "sec-ch-ua": "\"Chromium\";v=\"136\", \"Microsoft Edge\";v=\"136\", \"Not.A/Brand\";v=\"99\"",
      "sec-ch-ua-mobile": "?0",
      "sec-ch-ua-platform": "\"Windows\"",
      "sec-fetch-dest": "empty",
      "sec-fetch-mode": "cors",
      "sec-fetch-site": "same-origin",
      "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0",
      # 合并 curl 中的 -b 参数(Cookie)到 headers
      "Cookie": "_kdt_id_=91433235; yz_log_uuid=04f248cf-cbc1-4086-9a43-b3af636ed5ee; yz_log_ftime=1736672314431; KDTSESSIONID=YZ1366424082224013312YZJB2UlvPo; Hm_lvt_7bec91b798a11b6f175b22039b5e7bdd=1745822491; _clck=jwj431|2|fvg|0|1944; Hm_lvt_7fff7ceede91c07fb0a2f9c1850d7987=1746553078; HMACCOUNT=AA6B7D8C82B4E03B; yz_fp_hash=92a97848381090fa79f5ef7bc765fe41; _efmdata=Ug3qG4cap1b9cFfbEj48rWQP%2BKxJf8DAcKMBgDd89Pd%2FAjC5aniSvGjkLcTMCuGE2JzCPdc9FoWf8h%2FjR81hcJDeSrD9id7N8P1m4Erxysw%3D; _exid=ff7L%2FrHf5QdAdWaSa0famEW4R3W0UYCxSr0iEZvDHX5wlJeeFAO9BPe2BKs4tfFhoU2v8QRlVpwxaIFMBMXh0A%3D%3D; dfp=889befecaeb46639153a2b41c7d7da7c2ce2a356; captcha_sid=YZ1369488530002628608YZJmc3ElSh; Hm_lpvt_7fff7ceede91c07fb0a2f9c1850d7987=1746553445; ec=HvDv9iFi-1746553445000-ab7276b90c989-219138801; yz_log_seqb=1746561056879; yz_log_seqn=2"
    }
    data = {
      "countryCode": "+86",
      "mobile": "",#你的手机号
      "password": "5LiYAUQAszj+iZcTfy7S3A==",#这里自己逆把
      "redirectUrl": "https://cdp.youzan.com/redirect?path=%2F",
      "clientId": "84050d9ed73fdddc11",
      "scope": "auth_user",
      "name": "智能客户增长",
      "showTuiguangProtocol": "false",
      "autoLogin": "true",
      "captchaCode": token
    }
    res = requests.post(url, headers=headers, data=data).json()
    logger.info(res)


```
页: [1]
查看完整版本: 某赞 滑块 如违规版主麻烦删下