mirror of
https://github.com/luzhisheng/js_reverse.git
synced 2025-04-12 03:27:07 +08:00
122 lines
3.9 KiB
Python
122 lines
3.9 KiB
Python
import requests
|
|
import json
|
|
import time
|
|
import re
|
|
import ddddocr
|
|
|
|
|
|
class VerificationCode(object):
|
|
|
|
def __init__(self):
|
|
self.url = "https://www.xiaohongshu.com/fe_api/burdock/v2/shield/captcha?c=pp"
|
|
self.register_url = "https://captcha.fengkongcloud.cn/ca/v1/register?channel=web&sdkver=1.1.3&" \
|
|
"callback=sm_{}&data=%7B%7D&lang=zh-cn&organization=eR46sBuqF0fdw7KWFLYa&" \
|
|
"rversion=1.0.1&model=slide&appId=default"
|
|
|
|
def get_xsign(self, url):
|
|
screen_key = "WSUDD"
|
|
_st = url.split(".com")[-1] + screen_key
|
|
import hashlib
|
|
m = hashlib.md5()
|
|
m.update(_st.encode(encoding='UTF-8'))
|
|
md5String = m.hexdigest()
|
|
return "X" + md5String
|
|
|
|
def get_register(self, organization):
|
|
"""
|
|
注册验证码
|
|
"""
|
|
url = 'https://captcha.fengkongcloud.com/ca/v1/register'
|
|
|
|
args = {
|
|
'organization': organization,
|
|
'channel': 'web',
|
|
'lang': 'zh-cn',
|
|
'model': 'slide',
|
|
'appId': 'default',
|
|
'sdkver': '1.1.3',
|
|
'data': '{}',
|
|
'rversion': '1.0.1',
|
|
'callback': 'sm_{}'.format(int(time.time() * 1000))
|
|
}
|
|
r = requests.get(url, params=args)
|
|
res_dict = json.loads(re.search(r'{}\((.*)\)'.format(args['callback']), r.text).group(1))
|
|
return res_dict
|
|
|
|
def get_distance(self):
|
|
det = ddddocr.DdddOcr(det=False, ocr=False)
|
|
with open('fg.png', 'rb') as f:
|
|
target_bytes = f.read()
|
|
|
|
with open('bg.png', 'rb') as f:
|
|
background_bytes = f.read()
|
|
res = det.slide_match(target_bytes, background_bytes)
|
|
return res
|
|
|
|
def get_img(self, resp):
|
|
domain = resp['detail']['domains'][0]
|
|
fg_uri = resp['detail']['fg']
|
|
bg_uri = resp['detail']['bg']
|
|
|
|
fg_url = ''.join(['http://', domain, fg_uri])
|
|
bg_url = ''.join(['http://', domain, bg_uri])
|
|
|
|
r = requests.get(fg_url, verify=False)
|
|
with open('./fg.png', 'wb') as f:
|
|
f.write(r.content)
|
|
|
|
r = requests.get(bg_url, verify=False)
|
|
with open('./bg.png', 'wb') as f:
|
|
f.write(r.content)
|
|
|
|
def reply_xhs(self, rid):
|
|
data = {
|
|
"callFrom": "web",
|
|
"deviceId": "WHJMrwNw1k/Gs2cUNYdnG56AD/SZS9gey8vWaQeDLA8EFEBdCYqjjTrzf2N93wBwGOQN6K4s0Qj5MjjwI6kD9EpFI4QMMTnohdCW1tldyDzmQI99+chXEipSD+UbxzZNMYp5HxsF710xV3HH8Acmv+xkp+XcdgI9keu8bpbMPuOTJc3aMEBGDbIs5e+HU82qGkupQmWmZ4uAGnABEyJ3C2820Aq9yQJefPPPZTTXS5eGePw3N8ql871Hk5GmQWNmIBMuR2wgYcQ3eAN6bmZ5qTw==1487582755342",
|
|
"rid": rid,
|
|
"status": 1,
|
|
}
|
|
x_sign = self.get_xsign(self.url)
|
|
|
|
headers = {
|
|
'x-sign': x_sign,
|
|
'Referer': 'https://www.xiaohongshu.com/website-login/captcha?redirectPath='
|
|
'http%3A%2F%2Fwww.xiaohongshu.com%2Fdiscovery%2Fitem%2F5e'
|
|
'da14da000000000100037c%3Fxhsshare%3DCopyLink%26appuid%3D5e5e2c1100000000'
|
|
'01004481%26apptime%3D1593771484',
|
|
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
|
|
'Chrome/94.0.4606.81 Safari/537.36',
|
|
'sec-fetch-site': 'same-origin',
|
|
'origin': 'www.xiaohongshu.com',
|
|
|
|
}
|
|
|
|
response = requests.post(self.url, headers=headers, json=data, timeout=10)
|
|
response = json.loads(response.text)
|
|
print(response)
|
|
|
|
def run(self):
|
|
organization = 'eR46sBuqF0fdw7KWFLYa'
|
|
# 注册验证码
|
|
res_dict = self.get_register(organization)
|
|
|
|
# 获取rid
|
|
rid = res_dict['detail']['rid']
|
|
print(rid)
|
|
|
|
# 获取图片
|
|
self.get_img(res_dict)
|
|
|
|
# 计算滑动距离
|
|
res = self.get_distance()
|
|
print(res)
|
|
|
|
#
|
|
|
|
self.reply_xhs(rid)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
v = VerificationCode()
|
|
v.run()
|