From 8441f09ae5551c157cf5bb20c5a24203e9c7215d Mon Sep 17 00:00:00 2001 From: "steve.gao" Date: Tue, 10 Dec 2024 15:18:51 +0800 Subject: [PATCH] initial --- README.md | 18 ++ dianping/__init__.py | 0 dianping/mtgsig.py | 431 ++++++++++++++++++++++++++++++++++++++++++++++ douyin/__init__.py | 0 douyin/dy_abogus.py | 227 ++++++++++++++++++++++++ douyin/dy_ttwid.py | 152 ++++++++++++++++ hnw/__init__.py | 0 hnw/hnw_hook.py | 114 ++++++++++++ kuaishou/README.md | 27 +++ kuaishou/__init__.py | 0 kuaishou/ks_http.py | 161 +++++++++++++++++ kuaishou/ks_make_trace.py | 58 +++++++ kuaishou/ks_slide.py | 336 ++++++++++++++++++++++++++++++++++++ main.py | 16 ++ requirements.txt | 40 +++++ server.py | 266 ++++++++++++++++++++++++++++ utils/ImageHelper.py | 205 ++++++++++++++++++++++ utils/Logger.py | 112 ++++++++++++ utils/MysqlData.py | 234 +++++++++++++++++++++++++ utils/__init__.py | 0 utils/rotate_captcha.py | 123 +++++++++++++ utils/tmp/bg_2.png | Bin 0 -> 297055 bytes utils/tmp/fg_2.png | Bin 0 -> 84041 bytes utils/tool.py | 143 +++++++++++++++ uwsgi.ini | 11 ++ wx/__init__.py | 0 wx/video/__init__.py | 0 wx/video/video_decode.py | 59 +++++++ xhs/__init__.py | 0 xhs/shield.py | 132 ++++++++++++++ xhs/shield_aes.py | 200 +++++++++++++++++++++ xhs/shield_const.py | 274 +++++++++++++++++++++++++++++ xhs/shield_md5.py | 250 +++++++++++++++++++++++++++ xhs/shield_rc4.py | 36 ++++ xhs/xhs_aes.py | 28 +++ xhs/xhs_captcha.py | 208 ++++++++++++++++++++++ xhs/xhs_des.py | 226 ++++++++++++++++++++++++ xhs/xhs_param.py | 199 +++++++++++++++++++++ 38 files changed, 4286 insertions(+) create mode 100644 README.md create mode 100644 dianping/__init__.py create mode 100644 dianping/mtgsig.py create mode 100644 douyin/__init__.py create mode 100644 douyin/dy_abogus.py create mode 100644 douyin/dy_ttwid.py create mode 100644 hnw/__init__.py create mode 100644 hnw/hnw_hook.py create mode 100644 kuaishou/README.md create mode 100644 kuaishou/__init__.py create mode 100644 kuaishou/ks_http.py create mode 100644 kuaishou/ks_make_trace.py create mode 100644 kuaishou/ks_slide.py create mode 100644 main.py create mode 100644 requirements.txt create mode 100644 server.py create mode 100644 utils/ImageHelper.py create mode 100644 utils/Logger.py create mode 100644 utils/MysqlData.py create mode 100644 utils/__init__.py create mode 100644 utils/rotate_captcha.py create mode 100644 utils/tmp/bg_2.png create mode 100644 utils/tmp/fg_2.png create mode 100644 utils/tool.py create mode 100644 uwsgi.ini create mode 100644 wx/__init__.py create mode 100644 wx/video/__init__.py create mode 100644 wx/video/video_decode.py create mode 100644 xhs/__init__.py create mode 100644 xhs/shield.py create mode 100644 xhs/shield_aes.py create mode 100644 xhs/shield_const.py create mode 100644 xhs/shield_md5.py create mode 100644 xhs/shield_rc4.py create mode 100644 xhs/xhs_aes.py create mode 100644 xhs/xhs_captcha.py create mode 100644 xhs/xhs_des.py create mode 100644 xhs/xhs_param.py diff --git a/README.md b/README.md new file mode 100644 index 0000000..8cb0494 --- /dev/null +++ b/README.md @@ -0,0 +1,18 @@ +# api-py + +python版--提供API + +- kuaishou: 协议过快手web端滑块,激活cookie["did"]字段 + - 需要配合node服务使用,当前以定时任务执行 + +- hnw: 处理惠农网的请求头加密 + - 部分参数需要node服务生成,当前以python接口实现 + +- douyin: 处理ttwid生成问题 + - 需要配合node服务使用,当前以定时任务执行 + +- xhs: 处理web端的x-s、x-t生成逻辑 + +- wx: 处理微信视频号的视频加密解析 + - 需要配合node服务使用,目前node服务部署在172.16.10.39设备上 + - 注:该模块接口主要在172.18.1.145设备上对外开放使用 \ No newline at end of file diff --git a/dianping/__init__.py b/dianping/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dianping/mtgsig.py b/dianping/mtgsig.py new file mode 100644 index 0000000..594650d --- /dev/null +++ b/dianping/mtgsig.py @@ -0,0 +1,431 @@ +import base64 +import binascii +import ctypes +import gzip +import hashlib +import json +import time +from urllib.parse import quote, urlparse, parse_qs, quote_plus + +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad, unpad + + +def encrypt_aes_cbc(plaintext): + key = "z7Jut6Ywr2Pe5Nhx".encode("utf-8") + iv = "0807060504030201".encode("utf-8") + cipher = AES.new(key, AES.MODE_CBC, iv) + ciphertext = cipher.encrypt(pad(bytes.fromhex(plaintext), AES.block_size)) + return base64.b64encode(ciphertext).decode() + + +def decrypt_aes_128_cbc(ciphertext): + """ + + """ + key = "z7Jut6Ywr2Pe5Nhx".encode("utf-8") + iv = "0807060504030201".encode("utf-8") + cipher = AES.new(key, AES.MODE_CBC, iv) + plaintext = cipher.decrypt(base64.b64decode(ciphertext)) + strs = binascii.b2a_hex(plaintext).decode() + print(strs, len(strs)) + return binascii.b2a_hex(unpad(plaintext, AES.block_size)) + + +def md5_(bytearray): + md5 = hashlib.md5() + md5.update(bytearray) + result = md5.hexdigest() + # print(result) + return result + + +def hex_2_str(v: int): + v = v & 0xffffffff # 将结果转换为32位有符号整数 + return str(hex(v))[2:] + + +def get_md5Array(hex_md5): + md5_list = [hex_md5[i: i + 8] for i in range(0, len(hex_md5), 8)] + + for j in range(len(md5_list)): + m = [md5_list[j][i: i + 2] for i in range(0, len(md5_list[j]), 2)] + md5_list[j] = "".join(m[::-1]) + # print(md5_list) + md5_int_list = [] + for q in md5_list: + decimal_num = int(q, 16) + # decimal_num = is_overflow(decimal_num) + md5_int_list.append(decimal_num) + + # print(md5_int_list) + + return md5_int_list + + +def hex_reserve(i): + st1 = hex_2_str(i) + st1 = '0' * (8 - len(st1)) + st1 if len(st1) < 8 else st1 + return "".join([st1[i: i + 2] for i in range(0, len(st1), 2)][::-1]) + + +def logical_left_shift(n, bits): + # 有符号左移 + return ctypes.c_int(n << bits).value + + +def logical_right_shift(n, bits): + # 无符号右移 + return (n % 0x100000000) >> bits + + +def python_2_js(value, size): + # python转为和js一样 ^ + return (value ^ size) % (2**32) + + +def iu(jo): + jp = [] + for jq in range(0, len(jo), 2): + jr = jo[jq:jq + 2] + js = int(jr, 16) + jp.append(js) + # print(jp) + return jp + + +def ix(jo): + if jo is None: + jo = [] + + jp = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"] + + result = "".join([jp[jo_item >> 4 & 15] + jp[15 & jo_item] for jo_item in jo]) + + return result + + +def is_(jo): + jp = quote(jo) + # print(jp) + jq = [] + jr = 0 + while jr < len(jp): + js = jp[jr] + if "%" == js: + jt = jp[jr + 1] + jp[jr + 2] + ju = int(jt, 16) + jq.append(ju) + jr += 2 + else: + jq.append(ord(js[0])) + jr += 1 + + # print(len(jq), jq) + return jq + + +def _iD(jo): + raw_table = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' + new_table = 'ZmserbBoHQtNP+wOcza/LpngG8yJq42KWYj0DSfdikx3VT16IlUAFM97hECvuRX5=' + dictionary_decode = str.maketrans(new_table, raw_table) # 创建字符映射关系 用于base64decode + dictionary_encode = dict(zip(dictionary_decode.values(), dictionary_decode.keys())) # 创建一个与上面反向的映射关系用于base64encode + result_b64 = base64.b64encode(bytearray(jo)).decode() + new_result_b64 = result_b64.translate(dictionary_encode) + # print(new_result_b64) + return new_result_b64 + + +def get_k2(jo, jp): + """ + iO(jo, jp) + jo: url相关的数组 + jp: 时间戳 + """ + + m = len(jo) % 4 + jj = jp ^ len(jo) + ju = 1540483477 # 固定 + + # 每四个为一组 + for i in range(0, len(jo) - m, 4): + tmp1 = (jo[i] & 255) | logical_left_shift((jo[i + 1] & 255), 8) + tmp2 = logical_left_shift((jo[i + 2] & 255), 16) + tmp3 = tmp1 | tmp2 + tmp4 = tmp3 | logical_left_shift(jo[i + 3] & 255, 24) + + tmp5 = (tmp4 & 65535) * ju + tmp6 = logical_left_shift((((logical_right_shift(tmp4, 16)) * ju) & 65535), 16) + tmp7 = tmp5 + tmp6 + + tmp8 = python_2_js(tmp7, logical_right_shift(tmp7, 24)) + tmp9 = (tmp8 & 65535) * ju + tmp10 = logical_left_shift((((logical_right_shift(tmp8, 16)) * ju) & 65535), 16) + tmp11 = tmp9 + tmp10 + + tmp12 = (jj & 65535) * ju + tmp13 = logical_left_shift((((logical_right_shift(jj, 16)) * ju) & 65535), 16) + tmp14 = tmp12 + tmp13 + + jj = python_2_js(tmp11, tmp14) + + i = i + 4 + if m == 3: + jj = python_2_js(jj , logical_left_shift(255 & jo[i + 2], 16)) + jj = python_2_js(jj , logical_left_shift(255 & jo[i + 1], 8)) + jj = python_2_js(jj, (255 & jo[i])) + jj = (65535 & jj) * ju + logical_left_shift(logical_right_shift(jj, 16) * ju & 65535, 16) + elif m == 2: + jj = python_2_js(jj , logical_left_shift(255 & jo[i + 1], 8)) + jj = python_2_js(jj, (255 & jo[i])) + jj = (65535 & jj) * ju + logical_left_shift(logical_right_shift(jj, 16) * ju & 65535, 16) + elif m == 1: + jj = python_2_js(jj, (255 & jo[i])) + jj = (65535 & jj) * ju + logical_left_shift(logical_right_shift(jj, 16) * ju & 65535, 16) + + + tmp0 = python_2_js(jj, logical_right_shift(jj, 13)) + tmp1 = (tmp0 & 65535) * ju + tmp2 = logical_left_shift((logical_right_shift(tmp0, 16) * ju) & 65535, 16) + tmp3 = tmp1 + tmp2 + + tmp4 = logical_right_shift(python_2_js(tmp3, logical_right_shift(tmp3, 15)), 0) + + res = ctypes.c_int(tmp4 ^ ju).value + # print(res) + return res + + +def iy(jo, jq): + jr = 0 + js = 0 + jt = [] + ju = len(jq) + # print(f"{jq} 长度为 {ju}") + for jv in range(ju): + jr = (jr + 1) % 256 + js = (js + jo[jr]) % 256 + jp = jo[jr] + jo[jr] = jo[js] + jo[js] = jp + jt.append(ord(jq[jv]) ^ jo[(jo[jr] + jo[js]) % 256]) + + return jt + + +def get_k1(jZ, jp): + array1 = [i for i in range(256)] + array2 = jZ + jr = 0 + for i in range(256): + jt = i % 256 + n = i % 16 + js = array1[jt] + jr = (jr + js + array2[n] + 31) % 256 + array1[jt] = array1[jr] + array1[jr] = js + + # print(f"ararry1 => {array1}") + jt_ = iy(array1, jp) + # print(f"_arrary1 => {array1}") + jZ.extend(jt_) + # print(f" jZ => {len(jZ)} => {jZ}") + + k1 = _iD(jZ) # a5 + return k1 + + +def get_kh(jS, kb, kf, x0=4): + m = [0] * 2 + m[0] = jS << x0 + m[1] = jS << (32 - x0) + m[0] = m[0] | m[1] + kg = m[0] + kf[0] = kf[0] ^ kg + kf[1] = kf[1] ^ kb + kf[2] = kf[2] ^ kb ^ kg + kf[3] = kf[3] ^ kf[0] + + kh_list = [] + for i in kf: + kh_list.append(hex_reserve(i)) + + kh = "".join(kh_list) + return kh + + +def iv(jo): + jp = [] + jp.append((jo >> 24) & 255) + jp.append((jo >> 16) & 255) + jp.append((jo >> 8) & 255) + jp.append(jo & 255) + return jp + + +def bc(p): + t = 256 + f = [None] * t + while t: + c = 8 + t -= 1 + a = t + while c: + if a & 1: + a = python_2_js(logical_right_shift(a, 1), 3988292384) + else: + a = logical_right_shift(a, 1) + c -= 1 + + f[t] = logical_right_shift(a, 0) + + c = 0 + t = -1 + while c < len(p): + t = f[python_2_js(255 & t, p[c])] ^ logical_right_shift(t, 8) + c += 1 + + return python_2_js(t, 306674911) - 2 ** 32 + + +def get_a6(a6): + """ + 直接读取a6 + 并修改a6的部分内容 + :return: + """ + env = from_a6(a6[4:]) + A = gzip.compress(env.encode("utf-8"), compresslevel=1) + C = encrypt_aes_cbc(A.hex()) + C = "w1.3" + C + return C + + +def get_JP(url): + """ + 处理url + """ + parse_result = urlparse(url) + path = parse_result.path + param_dict = parse_qs(parse_result.query) + param_list = list(param_dict.keys()) + param_list.sort() # 排序从小到大 + params = "&".join([f'{i}={quote_plus(param_dict[i][0])}' for i in param_list]) + + target_ = f"GET {path} {params}" + JP = is_(target_) + return JP + + +def get_a5(i, y, qa): + """ + a5 生成 + """ + d = i & 4294967295 + p = iv(d) + g = [] + g.extend(is_(y)) + g.extend(p) + + v = md5_(bytearray(g)) + m = iu(v[:15]) + f = 0 # env 环境值 + m[7] = 255 & (f ^ bc(p)) + m.extend(p) + l = iv(4294967295 & bc(m)) + m.extend(l) + a5 = get_k1(m, qa) + return a5 + + +def get_main(i, a6, a3, a7, url, jq): + # i = 1723618362188 # 时间戳 TODO:需要二次处理 + o = i & 4294967295 + a5 = get_a5(i, a6, jq) + + tmp = is_(a6) + l = iv(o) + tmp.extend(l) + g = bytearray(tmp) + v = md5_(g) + w = get_JP(url) + S = get_k2(w, i) + C = iv(S) + A = get_k2(bytearray(is_(a5)), i) + I = iv(A) + c = [S, A, S ^ o, S ^ A ^ o] + O = iu("".join([hex_reserve(i) for i in c])) + + tmp = [] + tmp.extend(C) + tmp.extend(I) + tmp.extend(O) + D = ix(tmp) # a4 + + d = logical_right_shift(A, 0) + T = f"1.2{i}{a3}{D}{d}{v}{a7}" + tmp = md5_(bytearray(is_(T))) + j = get_md5Array(tmp) + d1 = get_kh(o, d, j, x0=3) # 到这一步就是 小程序的 d1 + + mtgsig = { + "a1": "1.2", + "a2": i, # 时间戳 估计有校验 + "a3": a3, # 服务器下发 + "a4": D, # 计算 + "a5": a5, # 计算 暂时不清楚入参 + "a6": a6, # 计算环境 需要确定环境信息 + "a7": a7, # wxcode 固定 + "x0": 3, # 固定 + "d1": d1 # 计算 比h5少一步 + } + + return mtgsig + + +def from_a6(a6): + """ + 根据版本迭代 a6 + :param a6: + :return: + """ + decode_res = decrypt_aes_128_cbc(a6) + plain_text = gzip.decompress(bytes.fromhex(decode_res.decode())) + p = json.loads(plain_text.decode()) + p[-3] = int(time.time()) # 修改时间戳 + p[-4][-6] = "3.9.12" # 修改版本 + p[-4][-9] = "3.6.3" # 修改另外一个版本 **目前没有看到其他的需要修改的地方 + res = json.dumps(p, ensure_ascii=False, separators=(',', ':')) + return res + + + +def mtgsig_run(url, b8, a3, a6): + """ + mtgsig 对外调用接口 + :param url: 需要加密的链接 + :param b8: 累加 + :param a3: a3服务器下发 暂时写死 + :param a6: 目标设备环境 + :return: + """ + a6 = get_a6(a6) + a7 = "wx734c1ad7b3562129" + # m = 1723688535465 + i = int(time.time() * 1000) + # diff = i - m + # i = i - diff # 处理时间 这块暂时先写死 + _jq = {"b7": int(time.time()) - 200, + "b1": {"miniProgram": {"appId": "wx734c1ad7b3562129", "envVersion": "release", "version": "9.37.232"}}, + "b6": "", "b8": b8, "b2": "pages/poi/poi"} + + jq = json.dumps(_jq, separators=(',', ':')) + mtgsig = json.dumps(get_main(i, a6, a3, a7, url, jq), ensure_ascii=False, separators=(',', ':')) + return mtgsig + +if __name__ == '__main__': + url = "https://mapi.dianping.com/mapi/wechat/weshop.bin?yodaReady=wx&csecappid=wx734c1ad7b3562129&csecplatform=3&csecversionname=9.64.0&csecversion=1.4.0&optimus_uuid=18b229261a3c8-c53ac1e606702-0-0-18b229261a3c8&optimus_platform=13&optimus_partner=203&optimus_risk_level=71&optimus_code=10&redirect_from=pages%252Fdetail%252Fdetail&shopUuid=k9Kcg8I6w4GBcuGF&shopType=10&shopStyle=bigpic&online=1&shopuuid=k9Kcg8I6w4GBcuGF&pageName=shop&lat=40.055335628194634&lng=116.35128357647478&mtsiReferrer=pages%252Fdetail%252Fdetail%253Fredirect_from%253Dpages%25252Fdetail%25252Fdetail%2526shopUuid%253Dk9Kcg8I6w4GBcuGF%2526shopType%253D10%2526shopStyle%253Dbigpic%2526online%253D1%2526shopuuid%253Dk9Kcg8I6w4GBcuGF%2526shopId%253Dk9Kcg8I6w4GBcuGF%2526pageName%253Dshop&cookieid=-4TzrChF1yPgyQBn5D7NrKC2_vuFu9oL8DiAq28T-Kk&device_system=MAC&wxmp_version=9.64.0" + # print(mtgsig_run(url)) + a6 = "w1.3grvNcRFZkE6QoEQ31ALPuc415J6/VKamSdeIXCVWX/DGsGA+taQlBpn7QF0z/ffrSmLkkQW0dqtDnWECJyGr9iFEhTKHYlyKRbYWwffNlvlDZ9tmFet/PyCSfKJw7xVZe8/4QYaAcbk1eJ7tWMUQllVcQDKlxku5Smml4r566JVAOGi48LCGAHxImhjIuI2KomDqOtCQb7Ii2cbGd2Y7vmWjypGGJbTtrztH/1weiEULAxadX72+RdjpXDa8UMgGbVmEUu5LLIwoyNEi6leK6f/QvV9/EvVfb5vtKyL5IAQND5B9g5qndP4GOuTftOM2ylQKb4rguR4TEQsR3uyruBJusZlID67k1d8jPCM+ol2mbFJP88EfBwnrQ+BSDWfVQjjfIj2mWpEnI+oA72gkPxuHteESJaXzZz94udFusf1tUtdf0q15QiQPSBX7JjK2P/lLHMfe+867ZiGMyoivxisrw1d9bbal27BjMTm32IrAN+ywQFoP9bHXNThdxmai" + print(get_a6(a6)) + print(from_a6(a6[4:])) \ No newline at end of file diff --git a/douyin/__init__.py b/douyin/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/douyin/dy_abogus.py b/douyin/dy_abogus.py new file mode 100644 index 0000000..504e0c4 --- /dev/null +++ b/douyin/dy_abogus.py @@ -0,0 +1,227 @@ +import hashlib, time, random +from functools import reduce + + +def hash_sm3(data): + sm3 = hashlib.new("sm3") + if isinstance(data, str): + sm3.update(data.encode("utf-8")) + else: + sm3.update(data) + return sm3.hexdigest() + + +def get_array(timestamp): + array1 = [0] * 4 + array1[0] = (timestamp >> 24) & 255 + array1[1] = (timestamp >> 16) & 255 + array1[2] = (timestamp >> 8) & 255 + array1[3] = (timestamp >> 0) & 255 + return array1 + + +def deal(orginalString, target, step=20): + """ + 计算最后一部 获得最终的数据 + """ + result = "" + for i in range(0, len(orginalString), 3): + if i > step: + break + + M0 = orginalString[i] + if i >= len(orginalString) - 1: + M1 = M2 = 0 + else: + M1 = orginalString[i + 1] + M2 = orginalString[i + 2] + baseNum = (M0 << 16) | (M1 << 8) | M2 + num1 = target[(16515072 & baseNum) >> 18] + num2 = target[(258048 & baseNum) >> 12] + if i >= len(orginalString) - 1: + num3 = num4 = target[-1] + else: + num3 = target[(4032 & baseNum) >> 6] + num4 = target[63 & baseNum] + tmpNum = num1 + num2 + num3 + num4 + result += tmpNum + + return result + + +def get_fn(code): + fn = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255] + j = 0 + for i in range(len(fn)): + j = (j + fn[i] + ord(code[i % 3])) % 256 + tmp = fn[i] + fn[i], fn[j] = fn[j], tmp # 替换 + + return fn + + +def deal1(orginalString, fn): + """ + 计算数组 + """ + tmp1 = 0 + F_array = [] + for i in range(len(orginalString)): + j = (tmp1 + fn[i + 1]) % 256 + tmp2 = fn[j] + tmp1 = fn[i + 1] + fn[i + 1], fn[j] = tmp2, tmp1 + # print(f"ua_code: {ua_code[i]} ^ {fn[(tmp1 + tmp2) % 256]}") + F_array.append(orginalString[i] ^ fn[(tmp1 + tmp2) % 256]) + tmp1 = j + + return F_array + + +def get_ua_code(o_string, ua, code): + """ + o_string: '\u0000\u0001\u000e' + """ + fn = get_fn(o_string) # 获得256变换后的数组 + ua_code = [ord(i) for i in ua] # 需要配合计算的数组 + F_array = deal1(ua_code, fn) + ua_base = deal(F_array, code, 117) + return ua_base + + +def get_head(shift_list): + """ + 获取编码头 + """ + random_code = int(random.random() * 10000) + tmp_num1 = random_code & 255 + tmp_num2 = (random_code >> 8) & 255 + + tmp = shift_list[0] & 85 + num1 = (tmp_num1 & 170) | tmp + + tmp2 = shift_list[0] & 170 + num2 = (tmp_num1 & 85) | tmp2 + + tmp3 = shift_list[1] & 85 + num3 = (tmp_num2 & 170) | tmp3 + + tmp4 = shift_list[1] & 170 + num4 = (tmp_num2 & 85) | tmp4 + + return [num1, num2, num3, num4] + + + +def get_original(o_string, originalString, code): + fn = get_fn(o_string) + # print(f"fn => {len(fn)} {str(fn).replace(' ', '')}") + original_string1 = deal1(originalString, fn) + # print(f"original_string1 {len(original_string1)}=> {len(original_string1)} {str(original_string1).replace(' ', '')}") + original_string = [] + + # 这下面仨字符固定了 TODO: 可能是随机的 每次都不一样 + a1 = get_head([3, 45]) # header1 + a2 = get_head([1, 0]) # header2 + a3 = get_head([1, 5]) # header3 + + original_string.extend(a1) + original_string.extend(a2) + original_string.extend(a3) + # print(f"original_string => {original_string}") + + # code = "Dkdpgh2ZmsQB80/MfvV36XI1R45-WUAlEixNLwoqYTOPuzKFjJnry79HbGcaStCe=" + # + original_string.extend(original_string1) + a_bogus = deal(original_string, code, 124) + return a_bogus + + + + +def get_h2(env="1440|150|1440|900|0|0|0|0|1440|900|1440|900|1440|150|24|24|MacIntel"): + """ + 涉及环境变量 固定可 + """ + return [ord(i) for i in env] + + +def exchange_array(array1, array2, array3, array4, array5, array6, array7): + h1 = [44, array1[0], array2[0], 0, 0, 0, array3[1], array4[21], array5[21], array2[1], array6[23], array1[1], + 0, array2[2], array2[3], 1, 0, array3[0], array4[22], array5[22], array6[24], array1[2], 0, 0, array3[2], + 0, array1[3], 0, 0, 14, array7[0], array7[1], array3[2], array7[2], array7[3], 3, 400, 1, 400, 1, 67, + 0, 0, 0] + return h1 + + +def main(params, ua, timestamp1, timestamp2, base_key): + P = lambda x: [int(x[i:i + 2], 16) for i in range(0, len(x), 2)] + tags = "cus" + pageId = 6241 + aid = 6383 + + array1 = get_array(timestamp1) # 后面计算时候的时间戳 + # print(f"array1 => {str(array1).replace(' ', '')}") + + array2 = get_array(pageId) # pageId + # print(f"array2 => {str(array2).replace(' ', '')}") + + array3 = get_array(aid)[::-1] # aid + # print(f"array3 => {str(array3).replace(' ', '')}") + + array4 = P(hash_sm3(bytes.fromhex(hash_sm3(params + tags)))) # 参数加上 "cus"进行二次加密 + # print(f"array4 => {str(array4).replace(' ', '')}") + + array5 = P(hash_sm3(bytes.fromhex(hash_sm3(tags)))) # cus两次加密结果数组 + # print(f"array5 => {str(array5).replace(' ', '')}") + + # code = "ckdp1h4ZKsUB80/Mfvw36XIgR25+WQAlEi7NLboqYTOPuzmFjJnryx9HVGDaStCe" + array6 = P(hash_sm3(get_ua_code("\u0000\u0001\u000e", ua, base_key["a1"]))) # 计算请求头的数组 + # print(f"array6 => {str(array6).replace(' ', '')}") + + array7 = get_array(timestamp2) # 加载时间戳 + # print(f"array7 => {str(array7).replace(' ', '')}") + + h1 = exchange_array(array1, array2, array3, array4, array5, array6, array7) # 整合所有数组 + # print(f"h1 => {str(h1).replace(' ', '')}") + + h2 = get_h2() # 获取上半段数据 + # print(f"h2 => {str(h2).replace(' ', '')}") + + h3 = reduce(lambda x, y: int(x) ^ int(y), h1) + # print(f"h3 => {str(h3).replace(' ', '')}") + + h = [] + h.extend(h1) + h.extend(h2) + h.append(h3) + + # print(f"h => {len(h)} {str(h).replace(' ', '')}") + + a_bogus = get_original("yyy", h, base_key["a2"]) + + # print(f" a_bogus {len(a_bogus)}=> {a_bogus}") + + return a_bogus + + +def run(params, ua): + base_key = { + "a1": "ckdp1h4ZKsUB80/Mfvw36XIgR25+WQAlEi7NLboqYTOPuzmFjJnryx9HVGDaStCe", + "a2": "Dkdpgh2ZmsQB80/MfvV36XI1R45-WUAlEixNLwoqYTOPuzKFjJnry79HbGcaStCe=" + } + + timestamp1 = 1718786088339 # 后者 + timestamp2 = 1718786087904 # js加载时间 + + timestamp2 = int(time.time() * 1000) + tmp = random.randint(300, 600) + timestamp1 = timestamp2 + tmp + + return main(params, ua, timestamp1, timestamp2, base_key) + + +if __name__ == '__main__': + params = "device_platform=webapp&aid=6383&channel=channel_pc_web&aweme_id=7123849705431272712&update_version_code=170400&pc_client_type=1&version_code=190500&version_name=19.5.0&cookie_enabled=true&screen_width=1440&screen_height=900&browser_language=zh-CN&browser_platform=MacIntel&browser_name=Chrome&browser_version=125.0.0.0&browser_online=true&engine_name=Blink&engine_version=125.0.0.0&os_name=Mac+OS&os_version=10.15.7&cpu_core_num=2&device_memory=8&platform=PC&downlink=10&effective_type=4g&round_trip_time=50&webid=7382044487177143862&msToken=Ru8XaSvg7YcHk135aj68vgAK247SND6YxUW8KgdHWeRJHk_On01S3Acja3fqH4INQjtIwnpz-FDy9BtVQ_qO_MeIkErjRima9r6t461khRCmTXZcHs7NMRrj7pC43w%3D%3D" + ua = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36" + a_bogus = run(params, ua) \ No newline at end of file diff --git a/douyin/dy_ttwid.py b/douyin/dy_ttwid.py new file mode 100644 index 0000000..88eb5a8 --- /dev/null +++ b/douyin/dy_ttwid.py @@ -0,0 +1,152 @@ +# coding:utf-8 +import argparse +import os, sys +# 相对路径补充 +root_path = os.path.abspath(os.path.dirname(__file__)).split('api-py')[0] + "api-py" +sys.path.append(root_path) + +from concurrent.futures.thread import ThreadPoolExecutor +from utils.MysqlData import MysqlPoolClient, CRAWLER_DB_CONF_DY +from utils.tool import download_q +from loguru import logger + + +class DouyinTtwid(): + """ + 抖音主页生成 ttwid + 参数:signature + """ + def __init__(self, is_proxy: bool): + self.is_proxy = is_proxy + self.sql_list = [] + + def get_cookie(self, ck=None): + """ + 获取 nonce(ttwid) + :param ck: + :return: + """ + headers = { + "authority": "www.douyin.com", + "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", + "accept-language": "zh-CN,zh;q=0.9", + "cache-control": "no-cache", + "pragma": "no-cache", + "sec-ch-ua": "\"Chromium\";v=\"118\", \"Google Chrome\";v=\"118\", \"Not=A?Brand\";v=\"99\"", + "sec-ch-ua-mobile": "?0", + "sec-ch-ua-platform": "\"macOS\"", + "sec-fetch-dest": "document", + "sec-fetch-mode": "navigate", + "sec-fetch-site": "none", + "sec-fetch-user": "?1", + "upgrade-insecure-requests": "1", + "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" + } + + url = "https://www.douyin.com/" + if ck: + status, response = download_q(url, headers, cookies=ck, is_proxy=self.is_proxy) + key = response.cookies["ttwid"] + logger.info(f"获得 ttwid 成功:{key}") + self.ttwid = key + else: + status, response = download_q(url, headers, cookies={}, is_proxy=self.is_proxy) + key = response.cookies["__ac_nonce"] + logger.info(f"获得 __ac_nonce 成功:{key}") + self.nonce = key + + return key + + def get_signature(self, nonce): + """ + node 服务获取signature + :param nonce: + :return: + """ + url = f"http://127.0.0.1:3000/douyin/get_signature?nonce={nonce}" + status, response = download_q(url, {}, {}) + signature = response.text + logger.info(f"成功获取signature:{signature}; nonce: {nonce}") + return signature + + def run(self): + """ + 调用入口 + :return: + """ + try: + __ac_nonce = self.get_cookie() + if __ac_nonce: + __ac_signature = self.get_signature(__ac_nonce) + ck = {"__ac_nonce": __ac_nonce, "__ac_signature": __ac_signature, "__ac_referer": "__ac_blank"} + ttwid = self.get_cookie(ck) + if ttwid: + sql_ttwid = f"ttwid={ttwid};" + sql = "INSERT INTO `douyin_cookie_video_ly_copy2_test`(`cookie`, `status`, `source`, `time`) " \ + "VALUES('%s', '%s', '%s', NOW());" % (sql_ttwid, 2, 0) + self.sql_list.append(sql) + return ttwid + else: + logger.error("获得 ttwid 失败 ") + else: + logger.error("获得 nonce 失败 ") + except Exception as e: + # traceback.print_exc() + logger.error(e) + + +def insert_data(sql_list): + """ + 入库 + :param sql_list: + :return: + """ + client = MysqlPoolClient(CRAWLER_DB_CONF_DY) + for sql in sql_list: + try: + logger.success(f"insert cookie -> {sql}") + client.getOne(sql) + except Exception as e: + logger.error(f"insert cookie -> {sql}") + + +def write_file(l): + """ + 保存文件 + :param l: + :return: + """ + with open("ttwid.txt", "w") as f: + f.write("\n".join(l)) + f.close() + logger.info("文件保存成功") + + +def create_by_thread(douyin, count): + """ + 并发执行 + :param slid: + :param count: + :return: + """ + with ThreadPoolExecutor(max_workers=3) as t: + obj_list = [] + for i in range(count * 2): + obj = t.submit(douyin.run) + obj_list.append(obj) + + insert_data(douyin.sql_list) + # write_file(douyin.sql_list) + logger.info(f"[sum] 并发任务 需要生成数量 {count}, 实际抓取数量 {count*2}, 实际生成数量 {len(douyin.sql_list)}, 成功率 {len(douyin.sql_list)/(count*2)}") + + +if __name__ == '__main__': + dy = DouyinTtwid(is_proxy=True) + + parser = argparse.ArgumentParser(description='get douyin.com cookie') + parser.add_argument('-c', type=int, default=100, help="needed cookie count;default count=100;") + args = parser.parse_args() + + args_count = args.c + create_by_thread(dy, args_count) + diff --git a/hnw/__init__.py b/hnw/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/hnw/hnw_hook.py b/hnw/hnw_hook.py new file mode 100644 index 0000000..025addc --- /dev/null +++ b/hnw/hnw_hook.py @@ -0,0 +1,114 @@ +from hashlib import md5, sha1, sha384 +import math, random, time,requests + +def MD5(s): + m = md5() + m.update(str.encode(s, encoding="utf-8")) + return m.hexdigest() + +def SHA1(s): + sha = sha1() + sha.update(str.encode(s, encoding="utf-8")) + return sha.hexdigest() + + +def SHA384(s): + sha = sha384() + sha.update(str.encode(s, encoding="utf-8")) + return sha.hexdigest() + + +def I(nonce="03423d9c06bd4bbb45b5fb9059a9ed4f"): + return MD5(nonce) + + +def j(timeStamp): + return SHA1(timeStamp) + + +def P(nonce, client_id): + return MD5(nonce + client_id) + + +def S(time): + s = "EOi^0N5sWWHhkrF2A0gekY9U20BgnAcr" + res = SHA1(s + str(time)) + return res[len(res)-16:len(res) - 1] + +def o(e, f): + b = e + t = f + n = "" + r1 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" + while b: + o = b % 36 + l = b / 36 + n = r1[o] + n + b = round(math.floor(l)) + return ("0000000000000000" + n)[-t:] + + +def get_trace_id(e): + return o(e, 9) + o(random.randint(0, 78364164095), 7) + + +def get_uuid(t): + e = int(time.time() * 1000) + # e = 1700013194061 + template = "xxxxxxxxxxxxxyxxxxyxxxxxxxxxxxxx" if t else "xxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxx" + uuid = "" + i = -1 + uuids = [] + while i < len(template) - 1: + i += 1 + if template[i] == "-": + uuids.append(uuid) + uuid = "" + continue + elif template[i] == "4": + uuid += template[i] + continue + + n = (e + 16 * random.random()) % 16 + e = e // 16 + + char = format(int(n) if template[i] == 'x' else 3 & int(n) | 8, "x") + uuid += char + uuids.append(uuid) + return "-".join(uuids) + + +def get_header_nonce(): + return get_uuid(True) + + +def server(key): + url = f"http://127.0.0.1:3000/hn/get_signature?nonce={key}" + res = requests.get(url) + return res.text + + +def build_headers(): + times = int(time.time() * 1000) + nonce = get_header_nonce() + sid = f"S_{get_trace_id(times - 300)}" + traceid = get_trace_id(times) + client_id = get_uuid(False) + s = S(times) + + M = f'{I(nonce)}!{j(str(times))}!{P(nonce, client_id)}!{server(s)}' + + h = { + "x-b3-traceid": traceid, + "x-client-id": client_id, + "x-client-nonce": nonce, + "x-client-sign": SHA384(M), + "x-client-time": str(times), + "x-client-sid": sid + } + # print(h) + return h + + +if __name__ == '__main__': + build_headers() diff --git a/kuaishou/README.md b/kuaishou/README.md new file mode 100644 index 0000000..eb32a18 --- /dev/null +++ b/kuaishou/README.md @@ -0,0 +1,27 @@ +# 快手 + +协议过滑块,激活cookie did字段,主要分三个部分 +- 获取未激活的did +- 携带did,通过接口获取验证码信息 +- 协议过验证码,激活did + - 获取图片,进行缺口识别 + - 通过识别位置进行参数拼接,轨迹模拟 + - 调用node服务将参数加密,获得最终验证参数 + +最终数据写入sql + +代码位置: +` +172.16.10.39: /data1/api-py/kuaishou +` + +执行: +```shell +conda activate py3.8 +python ks_slide.py -h +``` + +文件说明 +- `ks_http.py`: 公共变量 +- `ks_slide.py`: 主要逻辑 +- `ks_make_trace.py`: 模拟轨迹生成算法 \ No newline at end of file diff --git a/kuaishou/__init__.py b/kuaishou/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/kuaishou/ks_http.py b/kuaishou/ks_http.py new file mode 100644 index 0000000..4d5141c --- /dev/null +++ b/kuaishou/ks_http.py @@ -0,0 +1,161 @@ +import json +import random +from enum import Enum + +import requests + + +def get_gpuInfo(): + """ + 随机生成设备信息 + :return: + """ + random_list = ["Intel(R) Iris(TM) Pro Graphics 5200", "Intel(R) Iris(TM) Graphics 5100", + "Intel(R) Iris(TM) Graphics 5000", "Intel(R) Iris(TM) Graphics 4200", + "Intel(R) Iris(TM) Graphics 4400", "Intel(R) Iris(TM) Graphics 4600", + "Intel(R) Iris(TM) Pro Graphics 6200", "Intel(R) Iris(TM) Pro Graphics 6100", + "Intel(R) Iris(TM) Graphics 6000", "Intel(R) Iris(TM) Graphics 5500", + "Intel(R) Iris(TM) Graphics 5300", f"Intel(R) Iris(TM) Graphics {random.randint(100, 999)}"] + + random_list = [f"Intel(R) Iris(TM) Graphics {random.randint(100, 999)}"] + gpuInfo = {"glRenderer":"WebKit WebGL","glVendor":"WebKit","unmaskRenderer":f"ANGLE (Intel, ANGLE Metal Renderer: {random.choice(random_list)} Unspecified Version)","unmaskVendor":"Google Inc. (Intel)"} + + return json.dumps(gpuInfo, separators=(',', ':')) + + +class BaseHeaders(Enum): + """ + + """ + + # 获取快手session(快手api接口) header + HEADERS = { + "Accept-Language": "zh-CN,zh;q=0.9", + "Cache-Control": "no-cache", + "Connection": "keep-alive", + "Origin": "https://www.kuaishou.com", + "Pragma": "no-cache", + # "Referer": "https://www.kuaishou.com/profile/3xsdu49r65skedk", + "Sec-Fetch-Dest": "empty", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Site": "same-origin", + "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36", + "accept": "*/*", + "content-type": "application/json", + "sec-ch-ua": "\"Chromium\";v=\"118\", \"Google Chrome\";v=\"118\", \"Not=A?Brand\";v=\"99\"", + "sec-ch-ua-mobile": "?0", + "sec-ch-ua-platform": "\"macOS\"" + } + + # 获取快手过验证码请求headers + VERIFY_HEADERS = { + "Accept": "application/json, text/plain, */*", + "Accept-Language": "zh-CN,zh;q=0.9", + "Cache-Control": "no-cache", + "Connection": "keep-alive", + "Content-Type": "application/x-www-form-urlencoded", + "Origin": "https://captcha.zt.kuaishou.com", + "Pragma": "no-cache", + # "Referer": Referer, + "Sec-Fetch-Dest": "empty", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Site": "same-origin", + "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36", + "sec-ch-ua": "\"Chromium\";v=\"118\", \"Google Chrome\";v=\"118\", \"Not=A?Brand\";v=\"99\"", + "sec-ch-ua-mobile": "?0", + "sec-ch-ua-platform": "\"macOS\"" + } + + PIC_HEADERS = { + "Accept": "image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", + "Accept-Language": "zh-CN,zh;q=0.9", + "Cache-Control": "no-cache", + "Connection": "keep-alive", + "Pragma": "no-cache", + # "Referer": referer, + "Sec-Fetch-Dest": "image", + "Sec-Fetch-Mode": "no-cors", + "Sec-Fetch-Site": "same-origin", + "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36", + "sec-ch-ua": "\"Chromium\";v=\"118\", \"Google Chrome\";v=\"118\", \"Not=A?Brand\";v=\"99\"", + "sec-ch-ua-mobile": "?0", + "sec-ch-ua-platform": "\"macOS\"" + } + + DOC_HEADERS = { + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", + "Accept-Language": "zh-CN,zh;q=0.9", + "Cache-Control": "no-cache", + "Connection": "keep-alive", + "Pragma": "no-cache", + "Sec-Fetch-Dest": "document", + "Sec-Fetch-Mode": "navigate", + "Sec-Fetch-Site": "none", + "Sec-Fetch-User": "?1", + "Upgrade-Insecure-Requests": "1", + "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36", + "sec-ch-ua": "\"Chromium\";v=\"118\", \"Google Chrome\";v=\"118\", \"Not=A?Brand\";v=\"99\"", + "sec-ch-ua-mobile": "?0", + "sec-ch-ua-platform": "\"macOS\"" + } + + +class BaseParam(Enum): + VERIFY_PARAM = { + "captchaSn": "", + "bgDisWidth": 316, # 固定 + "bgDisHeight": 184, # 固定 + "cutDisWidth": 56, # 固定 + "cutDisHeight": 56, # 固定 + "relativeX": "", # 滑动距离 应该是缩放过了 + "relativeY": "", # config接口里的y 缩放 136 * 56/122 () + "trajectory": "", + # "gpuInfo": "{\"glRenderer\":\"WebKit WebGL\",\"glVendor\":\"WebKit\",\"unmaskRenderer\":\"ANGLE (Apple, ANGLE Metal Renderer: Apple M1 Pro, Unspecified Version)\",\"unmaskVendor\":\"Google Inc. (Apple)\"}", + # "captchaExtraParam": "{\"ua\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36\",\"timeZone\":\"UTC+8\",\"language\":\"zh\",\"cpuCoreCnt\":\"8\",\"platform\":\"MacIntel\",\"riskBrowser\":\"false\",\"webDriver\":\"false\",\"exactRiskBrowser\":\"false\",\"webDriverDeep\":\"false\",\"exactRiskBrowser2\":\"false\",\"webDriverDeep2\":\"false\",\"battery\":\"1\",\"plugins\":\"1a68ba429dd293b14e41a28b6535aa590\",\"resolution\":\"1512x982\",\"pixelDepth\":\"30\",\"colorDepth\":\"30\",\"canvasGraphFingerPrint\":\"10681dead230ee9ca8e67e8ddb0a96013\",\"canvasGraph\":\"10681dead230ee9ca8e67e8ddb0a96013\",\"canvasTextFingerPrintEn\":\"11825830fcdd552d4d3e81af588208d71\",\"canvasTextEn\":\"11825830fcdd552d4d3e81af588208d71\",\"canvasTextFingerPrintZh\":\"19257bc614b1b886224a819517f0715e3\",\"canvasTextZh\":\"19257bc614b1b886224a819517f0715e3\",\"webglGraphFingerPrint\":\"19e85c5151728b98f00fc5a3c6c8bd2dd\",\"webglGraph\":\"19e85c5151728b98f00fc5a3c6c8bd2dd\",\"webglGPUFingerPrint\":\"1777f4110dd337e62088858e6e8df0288\",\"webglGpu\":\"1777f4110dd337e62088858e6e8df0288\",\"cssFontFingerPrintEn\":\"1329bb845104882a7754a3bdf007ff6fc\",\"fontListEn\":\"1329bb845104882a7754a3bdf007ff6fc\",\"cssFontFingerPrintZh\":\"11997d7fc5c7f90fad6abcbadabebb249\",\"fontListZh\":\"11997d7fc5c7f90fad6abcbadabebb249\",\"voiceFingerPrint\":\"14c6f007f1166921565a8aa1c5cfac1c6\",\"audioTriangle\":\"14c6f007f1166921565a8aa1c5cfac1c6\",\"nativeFunc\":\"1973dcbb27a04c3a2ee240d9d2549e105\",\"key1\":\"web_84547d0256a5ac1f023cf5cb911e70a8\",\"key2\":1698917540365,\"key3\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36\",\"key4\":\"20030107\",\"key5\":\"zh\",\"key6\":\"Gecko\",\"key7\":1512,\"key8\":982,\"key9\":1512,\"key10\":950,\"key11\":360,\"key12\":360,\"key13\":945,\"key14\":1512,\"key15\":\"00000111\",\"key16\":1,\"key17\":1,\"key18\":[],\"key19\":{},\"key20\":[],\"key21\":{},\"key22\":[],\"key23\":{},\"key24\":[],\"key25\":{},\"key26\":{\"key27\":[\"0,1,21255,58,359,prepare1\",\"1,1,21261,31,332,prepare1\",\"2,1,21268,22,324,prepare1\",\"3,1,21277,5,309,prepare1\",\"4,1,21284,1,306,prepare1\",\"5,1,21600,2,304,prepare1\",\"6,1,21608,6,305,prepare1\",\"7,1,21617,10,306,prepare1\",\"8,1,21627,14,307,prepare1\",\"9,1,21632,20,308,prepare1\",\"10,3,22111,39,307\",\"11,1,22226,39,307,prepare2\",\"12,1,22230,42,307,prepare2\",\"13,1,22239,47,307,prepare2\",\"14,1,22247,53,307,prepare2\",\"15,1,22255,62,307,prepare2\",\"16,1,22264,75,307,prepare2\",\"17,1,22272,88,307,prepare2\",\"18,1,22281,95,307,prepare2\",\"19,1,22289,99,307,prepare2\",\"20,1,22297,105,307,prepare2\",\"21,4,22356,116,307\",\"22,2,22455,116,307,prepare3\",\"23,1,22456,117,307,prepare3\"],\"key28\":[],\"key29\":[],\"key30\":[],\"key31\":{\"prepare1\":\"9,1,21632,20,308\",\"prepare2\":\"20,1,22297,105,307\",\"prepare3\":\"23,1,22456,117,307\"},\"key32\":{},\"key33\":{},\"key34\":{}},\"key35\":\"bf3957c9488bdb2a7a453824e9ee2d6a\",\"key36\":\"f22a94013fc94e90e2af2798023a1985\",\"key37\":2,\"key38\":\"not support\",\"key39\":8}" + "gpuInfo": get_gpuInfo(), + "captchaExtraParam": '{"ua":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36","userAgent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36","timeZone":"UTC+8","language":"zh-CN","cpuCoreCnt":"2","platform":"MacIntel","riskBrowser":"false","webDriver":"false","exactRiskBrowser":"false","webDriverDeep":"false","exactRiskBrowser2":"false","webDriverDeep2":"false","battery":"1","plugins":"1a68ba429dd293b14e41a28b6535aa590","resolution":"1440x900","pixelDepth":"24","colorDepth":"24","canvasGraphFingerPrint":"170a0a884fada8bac5f9e42250271aaf4","canvasGraph":"170a0a884fada8bac5f9e42250271aaf4","canvasTextFingerPrintEn":"1996477fa0627ebb63c728fa32cacce79","canvasTextEn":"1996477fa0627ebb63c728fa32cacce79","canvasTextFingerPrintZh":"1528ffe56c43c1c514d0de433838f8134","canvasTextZh":"1528ffe56c43c1c514d0de433838f8134","webglGraphFingerPrint":"11a9644c09ae3fd0a918f6f6f712f43c6","webglGraph":"11a9644c09ae3fd0a918f6f6f712f43c6","webglGPUFingerPrint":"1bd896c110303ed46f715b5ac4cbf8329","webglGpu":"1bd896c110303ed46f715b5ac4cbf8329","cssFontFingerPrintEn":"1329bb845104882a7754a3bdf007ff6fc","fontListEn":"1329bb845104882a7754a3bdf007ff6fc","cssFontFingerPrintZh":"11997d7fc5c7f90fad6abcbadabebb249","fontListZh":"11997d7fc5c7f90fad6abcbadabebb249","voiceFingerPrint":"129d646e8a0c62f5c09bead9ff4a0f29d","audioTriangle":"129d646e8a0c62f5c09bead9ff4a0f29d","nativeFunc":"1973dcbb27a04c3a2ee240d9d2549e105"}' + } + + +class BaseURL(Enum): + # nodejs服务 + NodeURL = "http://127.0.0.1:3000/kuaishou/get_verifyParam" + + +def download_q(url, headers, cookies, data=None, is_proxy=False, timeout=10): + """ + 下载器 + :param url: + :param headers: + :param cookies: + :param data: + :param is_proxy: + :param timeout: + :return: + """ + proxy_list = [f"172.24.12.23:{random.randint(45001, 45250)}", f"172.18.128.225:{random.randint(45001, 45250)}", + "16HFBVJC:897944@u270.40.tp.16yun.cn:6448"] + # proxy = f"{random.choice(proxy_list)}:{random.randint(45001, 45250)}" # 修改代理 + proxy = random.choice(proxy_list) + proxies = {'http': proxy, 'https': proxy} # 代理初始化 + + if data: + if is_proxy: + response = requests.post(url, headers=headers, data=data, proxies=proxies, cookies=cookies, timeout=timeout) + else: + response = requests.post(url, headers=headers, data=data, cookies=cookies, timeout=timeout) + else: + if is_proxy: + response = requests.get(url, headers=headers, proxies=proxies, cookies=cookies, timeout=timeout) + else: + response = requests.get(url, headers=headers, cookies=cookies, timeout=timeout) + + return response + + +def download_pic(path, content): + with open(path, "wb") as f: + f.write(content) + f.close() + # logger.info(f"图片保存成功 》》》》{path}") + return path diff --git a/kuaishou/ks_make_trace.py b/kuaishou/ks_make_trace.py new file mode 100644 index 0000000..ca9729c --- /dev/null +++ b/kuaishou/ks_make_trace.py @@ -0,0 +1,58 @@ +import random + +class Generate_trajectory: + @staticmethod + def __ease_out_expo(sep): + if sep == 1: + return 1 + else: + return 1 - pow(2, -10 * sep) + + @staticmethod + def __generate_y(): + init_y = random.randint(10, 30) + y = [init_y] + for i in range(20): + _ = random.randint(-1, 1) + y += [y[-1] + _] * random.randint(5, 10) + return y + + @classmethod + def get_slide_track(cls, distance): + """ + 根据滑动距离生成滑动轨迹 + :param distance: 需要滑动的距离 + """ + + if not isinstance(distance, int) or distance < 0: + raise ValueError(f"distance类型必须是大于等于0的整数: distance: {distance}, type: {type(distance)}") + + # 共记录count次滑块位置信息 + count = 30 + int(distance / 20) + # 初始化滑动时间 + t = random.randint(50, 100) + # 记录上一次滑动的距离 + _x = random.randint(0, 5) + # _x = 0 + _y = cls.__generate_y() + + # 初始化轨迹列表 + slide_track = [ + '|'.join([str(random.randint(15, 30)), str(_y.pop(0)), str(0)]) + ] + + for i in range(count): + # 已滑动的横向距离 + x = round(cls.__ease_out_expo(i / count) * distance) + # 滑动过程消耗的时间 + t += random.randint(30, 40) + if x == _x: + continue + slide_track.append('|'.join([str(x), str(_y[i]), str(t)])) + _x = x + slide_track.append(slide_track[-1]) + return ','.join(slide_track) + + +if __name__ == '__main__': + print(Generate_trajectory().get_slide_track(500)) diff --git a/kuaishou/ks_slide.py b/kuaishou/ks_slide.py new file mode 100644 index 0000000..1b6f358 --- /dev/null +++ b/kuaishou/ks_slide.py @@ -0,0 +1,336 @@ +# coding:utf-8 +import json +import time +import os, sys +import argparse +# 相对路径补充 +root_path = os.path.abspath(os.path.dirname(__file__)).split('api-py')[0] + "api-py" +sys.path.append(root_path) + +from concurrent.futures._base import as_completed +from concurrent.futures.thread import ThreadPoolExecutor +from urllib.parse import urlparse, quote_plus, parse_qs +from utils.MysqlData import MysqlPoolClient, CRAWLER_DB_CONF_KS + +from kuaishou.ks_http import download_q, BaseHeaders, BaseParam, download_pic, BaseURL +from utils.Logger import MyLogger +from loguru import logger + +from kuaishou.ks_make_trace import Generate_trajectory +from utils.ImageHelper import recognize_gap +import traceback + + +class KSSlide(object): + """ + 快手滑块 + """ + + def __init__(self, count=5, is_proxy=False): + self.is_proxy = is_proxy + self.count = count + self.did_url = "https://www.kuaishou.com/short-video/3xdhjtb9xs7xpaw?authorId=3xsdu49r65skedk&streamSource=profile&area=profilexxnull" + self.api_url = "https://www.kuaishou.com/graphql" + self.headers = BaseHeaders.HEADERS.value + self.doc_headers = BaseHeaders.DOC_HEADERS.value + self.pic_headers = BaseHeaders.PIC_HEADERS.value + self.verify_headers = BaseHeaders.VERIFY_HEADERS.value + self.did = "" + self.captchaSession = "" + self.captcha_refer = "" + self.sql_list = [] + self.post_data = { + "search": { + "referer": "", + "data": { + "operationName": "visionSearchPhoto", + "variables": { + "keyword": "f1", + "pcursor": "", + "page": "search" + }, + "query": "fragment photoContent on PhotoEntity {\n __typename\n id\n duration\n caption\n originCaption\n likeCount\n viewCount\n commentCount\n realLikeCount\n coverUrl\n photoUrl\n photoH265Url\n manifest\n manifestH265\n videoResource\n coverUrls {\n url\n __typename\n }\n timestamp\n expTag\n animatedCoverUrl\n distance\n videoRatio\n liked\n stereoType\n profileUserTopPhoto\n musicBlocked\n}\n\nfragment recoPhotoFragment on recoPhotoEntity {\n __typename\n id\n duration\n caption\n originCaption\n likeCount\n viewCount\n commentCount\n realLikeCount\n coverUrl\n photoUrl\n photoH265Url\n manifest\n manifestH265\n videoResource\n coverUrls {\n url\n __typename\n }\n timestamp\n expTag\n animatedCoverUrl\n distance\n videoRatio\n liked\n stereoType\n profileUserTopPhoto\n musicBlocked\n}\n\nfragment feedContent on Feed {\n type\n author {\n id\n name\n headerUrl\n following\n headerUrls {\n url\n __typename\n }\n __typename\n }\n photo {\n ...photoContent\n ...recoPhotoFragment\n __typename\n }\n canAddComment\n llsid\n status\n currentPcursor\n tags {\n type\n name\n __typename\n }\n __typename\n}\n\nquery visionSearchPhoto($keyword: String, $pcursor: String, $searchSessionId: String, $page: String, $webPageArea: String) {\n visionSearchPhoto(keyword: $keyword, pcursor: $pcursor, searchSessionId: $searchSessionId, page: $page, webPageArea: $webPageArea) {\n result\n llsid\n webPageArea\n feeds {\n ...feedContent\n __typename\n }\n searchSessionId\n pcursor\n aladdinBanner {\n imgUrl\n link\n __typename\n }\n __typename\n }\n}\n" + }, + }, + "video": {}, + "user": { + "referer": "https://www.kuaishou.com/profile/3xsdu49r65skedk", + "data": { + "operationName": "visionProfilePhotoList", + "variables": { + "userId": "3xsdu49r65skedk", + "pcursor": "", + "page": "profile" + }, + "query": "fragment photoContent on PhotoEntity {\n __typename\n id\n duration\n caption\n originCaption\n likeCount\n viewCount\n commentCount\n realLikeCount\n coverUrl\n photoUrl\n photoH265Url\n manifest\n manifestH265\n videoResource\n coverUrls {\n url\n __typename\n }\n timestamp\n expTag\n animatedCoverUrl\n distance\n videoRatio\n liked\n stereoType\n profileUserTopPhoto\n musicBlocked\n}\n\nfragment recoPhotoFragment on recoPhotoEntity {\n __typename\n id\n duration\n caption\n originCaption\n likeCount\n viewCount\n commentCount\n realLikeCount\n coverUrl\n photoUrl\n photoH265Url\n manifest\n manifestH265\n videoResource\n coverUrls {\n url\n __typename\n }\n timestamp\n expTag\n animatedCoverUrl\n distance\n videoRatio\n liked\n stereoType\n profileUserTopPhoto\n musicBlocked\n}\n\nfragment feedContent on Feed {\n type\n author {\n id\n name\n headerUrl\n following\n headerUrls {\n url\n __typename\n }\n __typename\n }\n photo {\n ...photoContent\n ...recoPhotoFragment\n __typename\n }\n canAddComment\n llsid\n status\n currentPcursor\n tags {\n type\n name\n __typename\n }\n __typename\n}\n\nquery visionProfilePhotoList($pcursor: String, $userId: String, $page: String, $webPageArea: String) {\n visionProfilePhotoList(pcursor: $pcursor, userId: $userId, page: $page, webPageArea: $webPageArea) {\n result\n llsid\n webPageArea\n feeds {\n ...feedContent\n __typename\n }\n hostName\n pcursor\n __typename\n }\n}\n" + } + }, + "comment": { + "referer": "https://www.kuaishou.com/short-video/3xdhjtb9xs7xpaw?authorId=3xsdu49r65skedk&streamSource=profile&area=profilexxnull", + "data": { + "operationName": "commentListQuery", + "variables": { + "photoId": "3xdhjtb9xs7xpaw", + "pcursor": "" + }, + "query": "query commentListQuery($photoId: String, $pcursor: String) {\n visionCommentList(photoId: $photoId, pcursor: $pcursor) {\n commentCount\n pcursor\n rootComments {\n commentId\n authorId\n authorName\n content\n headurl\n timestamp\n likedCount\n realLikedCount\n liked\n status\n authorLiked\n subCommentCount\n subCommentsPcursor\n subComments {\n commentId\n authorId\n authorName\n content\n headurl\n timestamp\n likedCount\n realLikedCount\n liked\n status\n authorLiked\n replyToUserName\n replyTo\n __typename\n }\n __typename\n }\n __typename\n }\n}\n" + } + } + } + + pass + + def get_did(self): + """ + 通过单个视频页获得 did + """ + response = download_q(self.did_url, self.doc_headers, {}, is_proxy=self.is_proxy) + self.did = response.cookies["did"] + logger.info(f"获得did -> {self.did}") + return self.did + + def get_session(self, did, token="", type_="user"): + """ + 默认从comment接口拿session + """ + if not did: + if not self.did: + return + self.did = did + headers = self.headers.copy() + headers["Referer"] = self.post_data[type_]["referer"] + if token: + headers["Identity-Verification-Token"] = token + headers["Identity-verification-type"] = "2" + + data = json.dumps(self.post_data[type_]["data"], separators=(',', ':')) + cookies = { + "kpf": "PC_WEB", + "kpn": "KUAISHOU_VISION", + "clientid": "3", + "did": self.did + } + response = download_q(self.api_url, headers, cookies, data=data, is_proxy=self.is_proxy) + res = response.json() + status = res["data"].get("captcha") + if status: # 需要验证码 非 400002 暂时抛弃40002状态码 + captchaSession_url = res["data"]["captcha"]["url"] + params = parse_qs(urlparse(captchaSession_url).query) + elif res["data"].get("result"): + logger.warning("验证码异常 !400002 由于评论不出验证码 暂时放行! ") + captchaSession_url = res["data"]["url"] + params = parse_qs(urlparse(captchaSession_url).query) + else: # 有数据或者为空 不是验证码问题 + s = res.get("data", {}).get("visionProfilePhotoList", {}).get("result") + if s and s == 1: # 这里只对user生效 + logger.info(f"did 有效; 携带 token {token}") + else: + logger.warning(f"did 无效 {res}; 携带 token {token}") + return None, None + + self.captchaSession = params["captchaSession"][0] + self.captcha_refer = captchaSession_url + # logger.info(f"获得captchaSession 》》 {self.captchaSession}") + return self.captcha_refer, self.captchaSession + + def get_config(self, did, Referer, captchaSession, is_save=False): + """ + 获取验证码信息 + + """ + headers = self.verify_headers.copy() + headers["Referer"] = Referer + timeStamp = str(int(time.time())) + cookies = { + "did": did + } + url = "https://captcha.zt.kuaishou.com/rest/zt/captcha/sliding/config" + data = { + "captchaSession": captchaSession + } + response = download_q(url, headers, cookies, data=data, is_proxy=self.is_proxy) + data = response.json() + # logger.info(f"获得config -> {data}") + captchaSn = data.get("captchaSn") + + bgPicUrl = data.get("bgPicUrl") + f"?captchaSn={captchaSn}" + cutPicUrl = data.get("cutPicUrl") + f"?captchaSn={captchaSn}" + self.pic_headers["Referer"] = Referer + bgContent = download_q(bgPicUrl, self.pic_headers, cookies).content + fgcontent = download_q(cutPicUrl, self.pic_headers, cookies).content + + if is_save: + bg_path = f"tmp/{timeStamp}_bg_pic.jpg" + fg_path = f"tmp/{timeStamp}_fg_pic.jpg" + download_pic(bg_path, bgContent) + download_pic(fg_path, fgcontent) + else: + bg_path = bgContent + fg_path = fgcontent + + disY = data.get("disY") + verifyParam = self.build_param(bg_path, fg_path, captchaSn, disY) + + return verifyParam + + def build_param(self, bg, fg, captchaSn, y): + """ + 构造验证参数 模拟轨迹 + """ + distance = recognize_gap(bg, fg) + relativeX = int(distance * 0.46) # 缩放 + trajectory = Generate_trajectory().get_slide_track(int(distance * 1.76)) # 1.76 1.764 暂时测定稳定 + logger.info(f"缩放距离为 -> {relativeX}") + param = BaseParam.VERIFY_PARAM.value + param["captchaSn"] = captchaSn + param["relativeX"] = relativeX + param["relativeY"] = int(y * 0.46) # config接口里的y 缩放 136 * 56/122 () + param["trajectory"] = trajectory + + # param["gpuInfo"] = "" ## TODO: 需要随机替换 + # param["captchaExtraParam"] = "" + + def get_plaintext(t: dict): + concat_order = ["captchaSn", "bgDisWidth", "bgDisHeight", "cutDisWidth", "cutDisHeight", + "relativeX", "relativeY", "trajectory", "gpuInfo", "captchaExtraParam"] + return "&".join([k + "=" + quote_plus(str(t[k])).replace("+", "%20") for k in concat_order]) + + info = get_plaintext(param) + verifyParam = KSSlide.encrypt(info) + + return verifyParam + + @staticmethod + def encrypt(info): + """ + 调用node-js + """ + url = BaseURL.NodeURL.value + data = { + "info": info + } + response = download_q(url, {}, {}, data=data) + # logger.info(f"node服务获取加密数据") + return response.text + + def verify(self, verifyParam, did, refer): + headers = self.verify_headers.copy() + headers["Referer"] = refer + headers["Content-Type"] = "application/json" + cookies = { + "did": did + } + url = "https://captcha.zt.kuaishou.com/rest/zt/captcha/sliding/kSecretApiVerify" + + data1 = { + "verifyParam": verifyParam + } + data = json.dumps(data1, separators=(',', ':')) + response = download_q(url, headers, cookies, data=data, is_proxy=self.is_proxy) + logger.info(f"verify 结果 -> {response.json()}") + res = response.json() + captcha_token = res.get("captchaToken", None) + # logger.info(f"获得captchaToken为: {captcha_token}") + return captcha_token + + def run(self): + """ + 调用入口 + """ + try: + did = self.get_did() + referer, session = self.get_session(did) + if session: + verifyParam = self.get_config(did, referer, session) + if verifyParam: + token = self.verify(verifyParam, did, referer) + if token: + logger.success(f"验证码成功: -> {did}") + sql_demo = "INSERT INTO `ksCookie`(`cookie`, `token`) VALUES('%s', '%s');" % (did, token) + self.sql_list.append(sql_demo) + # logger.info(f"sql_demo {sql_demo}") + self.get_session(did=did, token=token, type_="user") + else: + logger.error("verify 失败") + else: + logger.error("node 生成 参数失败") + else: + logger.error("获得 session 失败") + except Exception as e: + logger.error(e) + traceback.print_exc() + + +# def write_file(l): +# with open("webdid.txt", "w") as f: +# f.write("\n".join(l)) +# f.close() +# logger.info("文件保存成功") + + +def insert_data(sql_list): + """ + 入库 + :param sql_list: + :return: + """ + client = MysqlPoolClient(CRAWLER_DB_CONF_KS) + for sql in sql_list: + try: + logger.success(f"insert cookie -> {sql}") + client.getOne(sql) + except Exception as e: + logger.error(f"insert cookie -> {sql}") + + +def create_by_thread(slid, count): + """ + 并发执行 + :param slid: + :param count: + :return: + """ + with ThreadPoolExecutor(max_workers=2) as t: + obj_list = [] + for i in range(count * 2): + obj = t.submit(slid.run) + obj_list.append(obj) + + insert_data(slide.sql_list) + logger.info(f"[sum] 并发任务 需要生成数量 {count}, 实际抓取数量 {count*2}, 实际生成数量 {len(slide.sql_list)}, 成功率 {len(slid.sql_list)/(count*2)}") + + +def create_by_for(slid, count): + """ + for循环执行 + :param slid: + :param count: + :return: + """ + num = 100 + i = 0 + while num > i: + if len(slid.sql_list) >= count: # 超出目标数量结束 + break + slid.run() + i += 1 + + insert_data(slide.sql_list) + logger.info(f"[sum] 循环任务 需要生成数量 {count}, 实际抓取数量 {i}, 实际生成数量 {len(slide.sql_list)}, 成功率 {len(slide.sql_list)/i}") + + +if __name__ == '__main__': + slide = KSSlide(is_proxy=True) + log = MyLogger() + parser = argparse.ArgumentParser(description='pass kuaishou cookie slider') + parser.add_argument('-c', type=int, default=10, help="needed cookie count;default count=10;") + parser.add_argument('-m', type=str, default="0", help="method: {0:for, 1:thread}; default method=0;") + args = parser.parse_args() + + method = { + "0": create_by_for, + "1": create_by_thread + } + args_count = args.c + args_method = args.m + method[args_method](slide, args_count) # 执行函数 diff --git a/main.py b/main.py new file mode 100644 index 0000000..94e3a87 --- /dev/null +++ b/main.py @@ -0,0 +1,16 @@ +# This is a sample Python script. + +# Press ⌃R to execute it or replace it with your code. +# Press Double ⇧ to search everywhere for classes, files, tool windows, actions, and settings. + + +def print_hi(name): + # Use a breakpoint in the code line below to debug your script. + print(f'Hi, {name}') # Press ⌘F8 to toggle the breakpoint. + + +# Press the green button in the gutter to run the script. +if __name__ == '__main__': + print_hi('PyCharm') + +# See PyCharm help at https://www.jetbrains.com/help/pycharm/ diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..154119d --- /dev/null +++ b/requirements.txt @@ -0,0 +1,40 @@ +aiohttp==3.8.3 +aiosignal==1.3.1 +asgiref==3.8.1 +async-timeout==4.0.3 +attrs==23.2.0 +blinker==1.7.0 +bottle==0.12.25 +certifi==2023.7.22 +charset-normalizer==2.0.12 +click==8.1.7 +DBUtils==3.0.3 +Flask==3.0.2 +frozenlist==1.4.1 +furl==2.1.3 +idna==3.4 +importlib-metadata==7.0.1 +itsdangerous==2.1.2 +Jinja2==3.1.3 +kafka==1.3.5 +kafka-python==2.0.2 +loguru==0.7.2 +MarkupSafe==2.1.5 +multidict==6.0.5 +numpy==1.24.4 +opencv-python==4.5.5.64 +orderedmultidict==1.0.1 +Paste==3.7.1 +Pillow==10.1.0 +pycryptodome==3.19.0 +PyExecJS==1.5.1 +PyMySQL==1.1.0 +requests==2.27.1 +scipy==1.10.1 +six==1.16.0 +typing_extensions==4.12.1 +urllib3==1.26.16 +uWSGI==2.0.23 +Werkzeug==3.0.1 +yarl==1.9.4 +zipp==3.17.0 diff --git a/server.py b/server.py new file mode 100644 index 0000000..c101ab7 --- /dev/null +++ b/server.py @@ -0,0 +1,266 @@ +import time +import json + +from dianping.mtgsig import mtgsig_run +from douyin.dy_abogus import run +from hnw.hnw_hook import build_headers +from flask import Flask, request +import traceback +from utils.Logger import MyLogger +from wx.video.video_decode import main +from xhs.shield import shield_run +from xhs.shield_aes import get_key +from xhs.xhs_captcha import SignalCaptcha +from xhs.xhs_param import get_xs, get_a1, get_comment + +app = Flask(__name__) +log = MyLogger() + + +""" + 部署 + nohup /root/anaconda3/envs/py3.8/bin/python server.py > /dev/null 2>&1 & + + 新部署 + 启动:uwsgi -d --ini uwsgi.ini + 停止:uwsgi --stop + 重启:uwsgi --reload +""" + + +@app.route("/getData", methods=['GET']) +def get_review_list(): + # shop_id = request.query.shopId + # page_num = request.query.pageNum + # page_num = int(page_num) * 14 + # review_list = main(shop_id, str(page_num)) + # ret = {"desc": "success", "result": review_list} + ret = "" + return json.dumps(ret, ensure_ascii=False) + + +@app.route("/hnw/get_header", methods=['GET']) +def get_hnw_headers(): + ret = {"code": 200, "data": {}} + try: + headers = build_headers() + ret["data"] = headers + except Exception as e: + ret["code"] = 500 + ret["data"] = f"{e}" + log.info(f"[hnw]: {ret}") + return json.dumps(ret, ensure_ascii=False) + + +@app.route("/xhs/get_header", methods=['POST']) +def get_xhs_headers(): + """ + 小红书x-s参数接口 + 参数:请求参数/a1/timeStamp + 对于cookie信息如果不传则本地生成一个 + :return: + """ + ret = {"code": 200, "data": {}} + try: + api_type = request.args.get("api") + a1 = request.args.get("a1") if request.args.get("a1") else get_a1("Mac OS")[0] + times = request.args.get("timStamp") if request.args.get("timStamp") else str(int(time.time() * 1000)) + data = request.get_data() + params = json.dumps(json.loads(data), ensure_ascii=False, separators=(',', ':')) + res = get_xs(a1, api_type, params, times) + ret["data"] = res + except Exception as e: + log.error(e) + ret = {"code": 500, "data": str(e)} + log.info(f"[xhs]: {ret}") + + return json.dumps(ret, ensure_ascii=False) + + +@app.route("/xhs/get_header_all", methods=['POST']) +def get_xhs_headers_all(): + """ + 小红书x-s、x-comment参数接口 + 参数:请求参数/a1/timeStamp + :return: + """ + ret = {"code": 200, "data": {}} + try: + api_type = request.args.get("api") + a1 = request.args.get("a1") + times = str(int(time.time() * 1000)) + data = request.get_data() + params = json.dumps(json.loads(data), ensure_ascii=False, separators=(',', ':')) + res = get_xs(a1, api_type, params, times) + res["x-s-common"] = get_comment(a1, res['x-s'], res['x-t']) + ret["data"] = res + except Exception as e: + log.error(e) + ret = {"code": 500, "data": str(e)} + log.info(f"[xhs]: {ret}") + + return json.dumps(ret, ensure_ascii=False) + + +@app.route("/xhs/pass_captcha", methods=['POST']) +def verify_captcha(): + """ + xhs验证码 + 461触发 + :return: + """ + ret = {"code": 200, "data": {}} + try: + data = request.get_data() + data = json.loads(data) + log.info(data) + web_session = data["web_session"] + verify_uuid = data["verify_uuid"] + source = data["source"] + a1 = data["a1"] + webId = data["webId"] + is_proxy = data.get("is_proxy") if data.get("is_proxy") else False + A = SignalCaptcha(web_session, verify_uuid, a1, webId, source=source, is_proxy=is_proxy) + res = A.run() + ret["data"] = res + except Exception as e: + log.error(e) + ret = {"code": 500, "data": str(e)} + + log.info(f"[xhs]: {ret}") + + return json.dumps(ret, ensure_ascii=False) + + +@app.route("/xhs/get_cookie", methods=['GET']) +def get_xhs_cookies(): + """ + 参数:platform 针对平台产生cookie 可能会影响风控 + 种类:Android/iOS/Mac OS/Linux/Windows(暂时没发现用) + :return: + """ + ret = {"code": 200, "data": {}} + try: + platform = request.args.get("platform") if request.args.get("platform") else "Mac OS" + a1, web_id = get_a1(platform) + ret["data"] = { + "a1": a1, + "webId": web_id + } + except Exception as e: + ret["code"] = 500 + ret["data"] = f"{e}" + + log.info(f"[xhs]: {ret}") + return json.dumps(ret, ensure_ascii=False) + + +@app.route("/wx/decode", methods=["POST"]) +async def get_upload_path(): + """ + 读取视频流 + :return: + """ + if 'file' not in request.files: + return json.dumps({"code": 500, "msg": "视频流文件不存在"}, ensure_ascii=False) + file = request.files["file"] + decode = request.args.get("decodekey") + log.info(f"[wx]: 获取的decode {decode}") + upload_path = await main(file, decode) + log.info(f"[wx]: {upload_path}") + return json.dumps(upload_path, ensure_ascii=False) + + +@app.route("/wx/decode", methods=["GET"]) +async def get_upload_path1(): + """ + 读取本地文件 + :return: + """ + decode = request.args.get("decodekey") + localpath = request.args.get("localpath") + try: + files = {'file': open(localpath, 'rb')} + except Exception as e: + log.error(f"[wx] error {e}") + return json.dumps({"code":500, "msg": "视频读取失败"}, ensure_ascii=False) + + log.info(f"[wx]: 获取的decode {decode}") + upload_path = await main(files["file"], decode) + log.info(f"[wx]: {upload_path}") + return json.dumps(upload_path, ensure_ascii=False) + + +@app.route("/dy/get_abogus", methods=["POST"]) +async def get_abogus(): + """ + 读取本地文件 + :return: + """ + + try: + data = json.loads(request.get_data()) + ua = data.get("ua") + param = data.get("param") + a_bogus = run(param, ua) + res = {"code": 200, "data": a_bogus} + log.info(f"[dy]: {len(a_bogus)} => {res}") + return json.dumps(res, ensure_ascii=False) + except Exception as e: + log.error(f"[dy] error {e}") + return json.dumps({"code":500, "msg": "算法生成失败"}, ensure_ascii=False) + + +@app.route("/dp/get_mtgsig", methods=["POST"]) +async def get_mtgsig(): + """ + 获取小程序mtgsig1.2 + :return: + """ + try: + data = json.loads(request.get_data()) + url = data.get("url") + a3 = data.get("a3") + b8 = data.get("b8") # 循环的次数 + a6 = data.get("a6") + if not b8 or not a6 or not a3: + raise Exception("check b8/a6/a3 params!!!") + mtgsig = mtgsig_run(url, b8, a3, a6) + res = {"code": 200, "data": mtgsig} + log.info(f"[mtgsig]: => {res}") + return json.dumps(res, ensure_ascii=False) + except Exception as e: + log.error(f"[mtgsig] error {e}") + return json.dumps({"code":500, "msg": "算法生成失败"}, ensure_ascii=False) + + +@app.route("/xhs/get_shield", methods=['POST']) +async def get_app_xhs_headers(): + """ + 小红书app端 + shield本地生成 + :return: + """ + ret = {"code": 200, "data": {}} + try: + data = request.get_data() + data_json = json.loads(data) + hmac_main = data_json["hmac_main"] + url = data_json["url"] + xy_common_params = data_json["xy_common_params"] + deviceId = data_json["deviceId"] + api = data_json["api"] # /api/sns/v1/note/feed 默认 + keys = get_key(deviceId, hmac_main) # 获得keys + res = shield_run(url, keys, xy_common_params, deviceId, api) # 加密流程 + ret["data"] = res + except Exception as e: + log.error(e) + traceback.print_exc() + ret = {"code": 500, "data": str(e)} + log.info(f"[xhs]: {ret}") + + return json.dumps(ret, ensure_ascii=False) + + +if __name__ == '__main__': + app.run(host='0.0.0.0', port=8088) diff --git a/utils/ImageHelper.py b/utils/ImageHelper.py new file mode 100644 index 0000000..25cfcd1 --- /dev/null +++ b/utils/ImageHelper.py @@ -0,0 +1,205 @@ +import io +import random +import time +import cv2 as cv +import numpy as np +from PIL import Image +from scipy import signal + + +# format_list = [0, 10, 16, 6, 13, 3, 9, 15, 11, 19, 14, 18, 4, 12, 2, 1, 8, 17, 7, 5] +# this.canvasCtx.drawImage(this.img, +# 30 * i, 开始剪切的 x 坐标位置。 +# 0, 开始剪切的 y 坐标位置。 +# 30, 被剪切图像的宽度。 +# 400, 被剪切图像的高度。 +# 30 * keylist[i] / 1.5, 在画布上放置图像的 x 坐标位置 +# 0, 在画布上放置图像的 y 坐标位置。 +# offset / 1.5, 要使用的图像的宽度。(伸展或缩小图像) +# 200) 要使用的图像的高度。(伸展或缩小图像) +def format_slide_img(raw_img: bytes, format_list: list) -> bytes: + fp = io.BytesIO(raw_img) + img = Image.open(fp) + image_dict = {} + offset = 30 + for i in range(len(format_list)): + box = (i * offset, 0, offset + (i * offset), 400) # 左(起始),上(不变),右(宽),下(不变) + image_dict[format_list[i]] = img.crop(box) + image_list = [] + for i in sorted(image_dict): + image_list.append(image_dict[i]) + image_num = len(image_list) + image_size = image_list[0].size + height = image_size[1] + width = image_size[0] + new_img = Image.new('RGB', (image_num * width, height), 255) + x = y = 0 + for img in image_list: + new_img.paste(img, (x, y)) + x += width + box = (0, 0, 600, 400) + new_img = new_img.crop(box) + # 保存图片 + processClickImgIoFlow = io.BytesIO() + + new_img.save(processClickImgIoFlow, format="JPEG") + return processClickImgIoFlow.getvalue() + # with open("test.jpg", "wb") as f: + # f.write(processClickImgIoFlow.getvalue()) + +# 1 +def discern_gap(gapImage: bytes, sliderImage: bytes, show=False): + + def edge_detection(rawimg): + def tracebar(x): + threshold1 = cv.getTrackbarPos('threshold1', 'Test') + threshold2 = cv.getTrackbarPos('threshold2', 'Test') + edged_img = cv.Canny(img_Gaussian, threshold1, threshold2) + cv.imshow("edged_img", edged_img) + + image = np.asarray(bytearray(rawimg), dtype="uint8") + img = cv.imdecode(image, cv.IMREAD_COLOR) + grep_img = cv.cvtColor(img, cv.COLOR_BGR2GRAY) + # 高斯滤波 高斯滤波是通过对输入数组的每个点与输入的高斯滤波模板执行卷积计算然后将这些结果一块组成了滤波后的输出数组, + # 通俗的讲就是高斯滤波是对整幅图像进行加权平均的过程,每一个像素点的值都由其本身和邻域内的其他像素值经过加权平均后得到。 + # 高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。 + img_Gaussian = cv.GaussianBlur(grep_img, (5, 5), 0) + # 用于对图像的边缘检测 + edged_img = cv.Canny(img_Gaussian, 25, 45) + if show: + cv.namedWindow("Test") + # cv.imshow('raw_img', img) + # cv.imshow('grep_img', grep_img) + cv.imshow('img_Gaussian', img_Gaussian) + cv.createTrackbar("threshold1", "Test", 0, 255, tracebar) + cv.createTrackbar("threshold2", "Test", 0, 255, tracebar) + cv.imshow('edged_img', edged_img) + cv.waitKey(3000) + cv.destroyAllWindows() + return edged_img + + def similarity_calculation(background, slider): + result = cv.matchTemplate(background, slider, cv.TM_CCOEFF_NORMED) + # 获取一个/组int类型的索引值在一个多维数组中的位置。 + # x, y = np.unravel_index(result.argmax(), result.shape) + min_val, max_val, min_loc, max_loc = cv.minMaxLoc(result) + return max_loc + + """计算滑动距离方法""" + gap = edge_detection(gapImage) + slider = edge_detection(sliderImage) + x, y = similarity_calculation(gap, slider) + # print('需要滑动距离', x, y) + # todo 返回的距离 + return x + + +def discern_gap2(gap_path, slider_path, save=False): + def pic2grep(pic_path, type) -> np.ndarray: + pic_path_rgb = cv.imread(pic_path) + pic_path_gray = cv.cvtColor(pic_path_rgb, cv.COLOR_BGR2GRAY) + if save: + cv.imwrite(f"./{type}.jpg", pic_path_gray) + return pic_path_gray + + def canny_edge(image_array: np.ndarray, show=False) -> np.ndarray: + can = cv.Canny(image_array, threshold1=200, threshold2=300) + if show: + cv.imshow('candy', can) + cv.waitKey() + cv.destroyAllWindows() + return can + + def clear_white(img: str, show=False) -> np.ndarray: + img = cv.imread(img) + rows, cols, channel = img.shape + min_x = 255 + min_y = 255 + max_x = 0 + max_y = 0 + for x in range(1, rows): + for y in range(1, cols): + t = set(img[x, y]) + if len(t) >= 2: + if x <= min_x: + min_x = x + elif x >= max_x: + max_x = x + + if y <= min_y: + min_y = y + elif y >= max_y: + max_y = y + img1 = img[min_x:max_x, min_y:max_y] + if show: + cv.imshow('img1', img1) + cv.waitKey() + cv.destroyAllWindows() + return img1 + + def convolve2d(bg_array: np.ndarray, fillter: np.ndarray) -> np.ndarray: + bg_h, bg_w = bg_array.shape[:2] + fillter = fillter[::-1,::-1] + fillter_h, fillter_w = fillter.shape[:2] + c_full = signal.convolve2d(bg_array, fillter, mode="full") + kr, kc = fillter_h // 2, fillter_w // 2 + c_same = c_full[ + fillter_h - kr - 1: bg_h + fillter_h - kr - 1, + fillter_w - kc - 1: bg_w + fillter_w - kc - 1, + ] + return c_same + + def find_max_point(arrays: np.ndarray, search_on_horizontal_center=False) -> tuple: + max_point = 0 + max_point_pos = None + + array_rows, array_cols = arrays.shape + + if search_on_horizontal_center: + for col in range(array_cols): + if arrays[array_rows // 2, col] > max_point: + max_point = arrays[array_rows // 2, col] + max_point_pos = col, array_rows // 2 + else: + for row in range(array_rows): + for col in range(array_cols): + if arrays[row, col] > max_point: + max_point = arrays[row, col] + max_point_pos = col, row + return max_point_pos + + gap_grep = pic2grep(gap_path, "gap") + gap_can = canny_edge(gap_grep, False) + clear_slider = cv.imread(slider_path) # clear_white(slider_path, False) + slider_can = canny_edge(clear_slider, False) + convolve2d_result = convolve2d(gap_can, slider_can) + result = find_max_point(convolve2d_result, True) + print(result) + +def recognize_gap(bg, fg, is_show=False): + if isinstance(bg, str): + with open(fg, "rb") as f: + sliderImage = f.read() + # print(sliderImage) + with open(bg, "rb") as f: + gapImage = f.read() + else: + sliderImage = fg + gapImage = bg + + res = discern_gap(gapImage,sliderImage, is_show) + return res + + +if __name__ == '__main__': + with open("../kuaishou/tmp/img.png", "rb") as f: + sliderImage = f.read() + # print(sliderImage) + with open("../kuaishou/tmp/img_1.png", "rb") as f: + gapImage = f.read() + res = discern_gap(gapImage,sliderImage, True) + print(res * 56/122) + # print(random.randint(100, 200)) +# 256 + + diff --git a/utils/Logger.py b/utils/Logger.py new file mode 100644 index 0000000..8ea09a7 --- /dev/null +++ b/utils/Logger.py @@ -0,0 +1,112 @@ +import os +from functools import wraps +from time import perf_counter + +from loguru import logger + + +# from loguru._logger import Logger + + +class MyLogger: + """ + 根据时间、文件大小切割日志 + """ + + def __init__(self, log_dir='logs', max_size=20, retention='7 days'): + self.log_dir = log_dir + self.max_size = max_size + self.retention = retention + self.logger = self.configure_logger() + + def configure_logger(self): + """ + + Returns: + + """ + # 创建日志目录 + os.makedirs(self.log_dir, exist_ok=True) + + shared_config = { + "level": "DEBUG", + "enqueue": True, + "backtrace": True, + "format": "{time:YYYY-MM-DD HH:mm:ss} | {level} | {message}", + } + + # 添加按照日期和大小切割的文件 handler + logger.add( + sink=f"{self.log_dir}/{{time:YYYY-MM-DD}}.log", + rotation=f"{self.max_size} MB", + retention=self.retention, + **shared_config + ) + + # 配置按照等级划分的文件 handler 和控制台输出 + logger.add(sink=self.get_log_path, **shared_config) + + return logger + + def get_log_path(self, message: str) -> str: + """ + 根据等级返回日志路径 + Args: + message: + + Returns: + + """ + log_level = message.record["level"].name.lower() + log_file = f"{log_level}.log" + log_path = os.path.join(self.log_dir, log_file) + + return log_path + + def __getattr__(self, level: str): + return getattr(self.logger, level) + + def log_decorator(self, msg="快看,异常了,别唧唧哇哇,快排查"): + """ + 日志装饰器,记录函数的名称、参数、返回值、运行时间和异常信息 + Args: + logger: 日志记录器对象 + + Returns: + 装饰器函数 + + """ + + def decorator(func): + @wraps(func) + def wrapper(*args, **kwargs): + self.logger.info(f'-----------分割线-----------') + self.logger.info(f'调用 {func.__name__} args: {args}; kwargs:{kwargs}') + start = perf_counter() # 开始时间 + try: + result = func(*args, **kwargs) + end = perf_counter() # 结束时间 + duration = end - start + self.logger.info(f"{func.__name__} 返回结果:{result}, 耗时:{duration:4f}s") + return result + except Exception as e: + self.logger.exception(f"{func.__name__}: {msg}") + self.logger.info(f"-----------分割线-----------") + # raise e + + return wrapper + + return decorator + + +if __name__ == '__main__': + log = MyLogger() + + + for i in range(1000): + log.error('错误信息') + log.critical('严重错误信息') + log.debug('调试信息') + log.info('普通信息') + log.success('成功信息') + log.warning('警告信息') \ No newline at end of file diff --git a/utils/MysqlData.py b/utils/MysqlData.py new file mode 100644 index 0000000..cafee01 --- /dev/null +++ b/utils/MysqlData.py @@ -0,0 +1,234 @@ +import threading + +import pymysql +from pymysql.cursors import DictCursor +from dbutils.pooled_db import PooledDB + + +class CRAWLER_DB_CONF(object): + """ + 点评 + """ + DBHOST = '172.18.1.181' + DBPORT = 3306 + DBUSER = 'crawl' + DBPWD = 'crawl' + DBNAME = 'dianpinggfy' + DBCHAR = 'utf8' + DB_FULL_NAME = "dianpinggfy" + + +class CRAWLER_DB_CONF_KS(object): + """ + 快手 + """ + DBHOST = '172.18.1.134' + DBPORT = 3306 + DBUSER = 'crawl666' + DBPWD = 'lx2a4jN1xFT96kj20LU=' + DBNAME = 'KS_storage' + DBCHAR = 'utf8' + DB_FULL_NAME = "KS_storage" + + +class CRAWLER_DB_CONF_DY(object): + """ + 抖音 + """ + DBHOST = '172.18.1.181' + DBPORT = 3306 + DBUSER = 'crawl' + DBPWD = 'crawl' + DBNAME = 'test' + DBCHAR = 'utf8' + DB_FULL_NAME = "test" + + +class MysqlPoolClient(object): + """ + MYSQL数据库对象,负责产生数据库连接 , 此类中的连接采用连接池实现获取连接对象:conn = Mysql.getConn() + 释放连接对象;conn.close()或del conn + + 备注:单步进入 + """ + # 连接池对象 + __pool = {} + __lock = threading.Lock() + + # TODO(YaoPeng): 反复加锁影响性能,但是爬虫场景下,可以暂时容忍 + def __init__(self, db_conf): + MysqlPoolClient.__lock.acquire() + # 数据库构造函数,从连接池中取出连接,并生成操作游标 + # pip install DBUtils + self._conn = MysqlPoolClient.__getConn(db_conf) + self._cursor = self._conn.cursor() + MysqlPoolClient.__lock.release() + + def __del__(self): + self.dispose() + + @staticmethod + def __getConn(db_conf): + pool_name = db_conf.DB_FULL_NAME + """ + @summary: 静态方法,从连接池中取出连接 + @return MySQLdb.connection + """ + if pool_name not in MysqlPoolClient.__pool: + MysqlPoolClient.__pool[pool_name] = PooledDB(creator=pymysql, + mincached=1, + maxcached=20, + host=db_conf.DBHOST, + port=db_conf.DBPORT, + user=db_conf.DBUSER, + passwd=db_conf.DBPWD, + db=db_conf.DBNAME, + use_unicode=True, + charset=db_conf.DBCHAR, + cursorclass=DictCursor) + return MysqlPoolClient.__pool[pool_name].connection() + + def getAll(self, sql, param=None): + """ + @summary: 执行查询,并取出所有结果集 + @param sql:查询SQL,如果有查询条件,请只指定条件列表,并将条件值使用参数[param]传递进来 + @param param: 可选参数,条件列表值(元组/列表) + @return: result list(字典对象)/boolean 查询到的结果集 + """ + if param is None: + count = self._cursor.execute(sql) + else: + count = self._cursor.execute(sql, param) + if count > 0: + query_result = self._cursor.fetchall() + else: + query_result = False + return query_result + + def getOne(self, sql, param=None): + """ + @summary: 执行查询,并取出第一条 + @param sql:查询SQL,如果有查询条件,请只指定条件列表,并将条件值使用参数[param]传递进来 + @param param: 可选参数,条件列表值(元组/列表) + @return: result list/boolean 查询到的结果集 + """ + if param is None: + count = self._cursor.execute(sql) + else: + count = self._cursor.execute(sql, param) + if count > 0: + query_result = self._cursor.fetchone() + else: + query_result = False + return count,query_result + + def getMany(self, sql, num, param=None): + """ + @summary: 执行查询,并取出num条结果 + @param sql:查询SQL,如果有查询条件,请只指定条件列表,并将条件值使用参数[param]传递进来 + @param num:取得的结果条数 + @param param: 可选参数,条件列表值(元组/列表) + @return: result list/boolean 查询到的结果集 + """ + if param is None: + count = self._cursor.execute(sql) + else: + count = self._cursor.execute(sql, param) + if count > 0: + query_result = self._cursor.fetchmany(num) + else: + query_result = False + return query_result + + def insertOne(self, sql, value=None): + """ + @summary: 向数据表插入一条记录 + @param sql:要插入的SQL格式 + @param value:要插入的记录数据tuple/list + @return: insertId 受影响的行数 + """ + self._cursor.execute(sql, value) + return self.__getInsertId() + + def insertMany(self, sql, values): + """ + @summary: 向数据表插入多条记录 + @param sql:要插入的SQL格式 + @param values:要插入的记录数据tuple(tuple)/list[list] + @return: count 受影响的行数 + """ + count = self._cursor.executemany(sql, values) + return count + + def updateMany(self, sql, values): + """ + @summary: 向数据表更新多条记录 + @param sql:要插入的SQL格式 + @param values:要插入的记录数据tuple(tuple)/list[list] + @return: count 受影响的行数 + """ + count = self._cursor.executemany(sql, values) + return count + + def __getInsertId(self): + """ + 获取当前连接最后一次插入操作生成的id,如果没有则为0 + """ + self._cursor.execute("SELECT @@IDENTITY AS id") + result = self._cursor.fetchall() + return result[0]['id'] + + def __query(self, sql, param=None, commit=True): + if param is None: + count = self._cursor.execute(sql) + else: + count = self._cursor.execute(sql, param) + if commit: + self._conn.commit() + return count + + def update(self, sql, param=None): + """ + @summary: 更新数据表记录 + @param sql: SQL格式及条件,使用(%s,%s) + @param param: 要更新的 值 tuple/list + @return: count 受影响的行数 + """ + return self.__query(sql, param) + + def delete(self, sql, param=None): + """ + @summary: 删除数据表记录 + @param sql: SQL格式及条件,使用(%s,%s) + @param param: 要删除的条件 值 tuple/list + @return: count 受影响的行数 + """ + return self.__query(sql, param) + + def begin(self): + """ + @summary: 开启事务 + """ + self._conn.autocommit(0) + + def end(self, option='commit'): + """ + @summary: 结束事务 + """ + if option == 'commit': + self._conn.commit() + else: + self._conn.rollback() + + def dispose(self, is_end=1): + """ + @summary: 释放连接池资源 + """ + MysqlPoolClient.__lock.acquire() + if is_end == 1: + self.end('commit') + else: + self.end('rollback') + self._cursor.close() + self._conn.close() + MysqlPoolClient.__lock.release() \ No newline at end of file diff --git a/utils/__init__.py b/utils/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/utils/rotate_captcha.py b/utils/rotate_captcha.py new file mode 100644 index 0000000..5d554d6 --- /dev/null +++ b/utils/rotate_captcha.py @@ -0,0 +1,123 @@ +#!/usr/bin/env/ python +# -*- coding: utf-8 -*- +""" +@Time : 2023/2/12 11:20 +@Author : 余半盏 +@File : rotate_captcha.py +@Software: PyCharm +""" +import cv2 +import math +import numpy as np +from loguru import logger +import time + +from utils.tool import cost_time + + +def circle_point_px(img, accuracy_angle, r=None): + rows, cols, _ = img.shape + assert 360 % accuracy_angle == 0 + x0, y0 = r0, _ = (rows // 2, cols // 2) + if r: r0 = r + angles = np.arange(0, 360, accuracy_angle) + cos_angles = np.cos(np.deg2rad(angles)) + sin_angles = np.sin(np.deg2rad(angles)) + + x = x0 + r0 * cos_angles + y = y0 + r0 * sin_angles + + x = np.round(x).astype(int) + y = np.round(y).astype(int) + + circle_px_list = img[x, y] + return circle_px_list + + +def rotate(image, angle, center=None, scale=1.0): # 1 + (h, w) = image.shape[:2] # 2 + if center is None: # 3 + center = (w // 2, h // 2) # 4 + M = cv2.getRotationMatrix2D(center, angle, scale) # 5 + rotated = cv2.warpAffine(image, M, (w, h)) # 6 + return rotated + + +def HSVDistance(c1, c2): + """ + 计算两个颜色的 HSV(Hue, Saturation, Value)空间中的距离 + :param c1: + :param c2: + :return: + """ + y1 = 0.299 * c1[0] + 0.587 * c1[1] + 0.114 * c1[2] + u1 = -0.14713 * c1[0] - 0.28886 * c1[1] + 0.436 * c1[2] + v1 = 0.615 * c1[0] - 0.51498 * c1[1] - 0.10001 * c1[2] + y2 = 0.299 * c2[0] + 0.587 * c2[1] + 0.114 * c2[2] + u2 = -0.14713 * c2[0] - 0.28886 * c2[1] + 0.436 * c2[2] + v2 = 0.615 * c2[0] - 0.51498 * c2[1] - 0.10001 * c2[2] + rlt = math.sqrt((y1 - y2) * (y1 - y2) + (u1 - u2) * (u1 - u2) + (v1 - v2) * (v1 - v2)) + return rlt + + +def crop_to_square(image): + height, width = image.shape[:2] + size = min(height, width) + start_y = (height - size) // 2 + start_x = (width - size) // 2 + cropped = image[start_y:start_y+size, start_x:start_x+size] + return cropped + + +@cost_time +def single_discern(inner_image_brg:bytes, outer_image_brg:bytes): + inner_image = cv2.cvtColor(inner_image_brg, cv2.COLOR_BGR2HSV) # 颜色转换 + outer_image = cv2.cvtColor(outer_image_brg, cv2.COLOR_BGR2HSV) + outer_image = crop_to_square(outer_image) + all_deviation = [] + for result in range(0, 360): + inner = rotate(inner_image, -result) # 顺时针 + outer = rotate(outer_image, 0) + inner_circle_point_px = circle_point_px(inner, 1, 95) + outer_circle_point_px = circle_point_px(outer, 1, 105) + total_deviation = 0 + for i in range(len(inner_circle_point_px)): + in_px = inner_circle_point_px[i] + out_px = outer_circle_point_px[i] + deviation = HSVDistance(in_px, out_px) + total_deviation += deviation + all_deviation.append(total_deviation) + result = all_deviation.index(min(all_deviation)) + + return result + + +def export_single_discern(fg_path, bg_path): + """ + 对于下载的图片转为content处理 + :param fg_path: + :param bg_path: + :return: + """ + if isinstance(fg_path, str): + with open(fg_path, "rb") as f: + inner_image_brg = f.read() + with open(bg_path, "rb") as f: + outer_image_brg = f.read() + else: + inner_image_brg = fg_path + outer_image_brg = bg_path + + image = np.asarray(bytearray(inner_image_brg), dtype="uint8") + inner_image_brg = cv2.imdecode(image, cv2.IMREAD_COLOR) + + image = np.asarray(bytearray(outer_image_brg), dtype="uint8") + outer_image_brg = cv2.imdecode(image, cv2.IMREAD_COLOR) + + result = single_discern(inner_image_brg, outer_image_brg) + return result + + + +if __name__ == '__main__': + export_single_discern('./tmp/fg_2.png', './tmp/bg_2.png') # 310 \ No newline at end of file diff --git a/utils/tmp/bg_2.png b/utils/tmp/bg_2.png new file mode 100644 index 0000000000000000000000000000000000000000..e98aa099af72e4af12695035f13bfcc4afe87001 GIT binary patch literal 297055 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�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%0A-N*1}@pC{}2a@UfLD;??5X2{)9Ca(0P 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

    @G=*HF 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 literal 0 HcmV?d00001 diff --git a/utils/tmp/fg_2.png b/utils/tmp/fg_2.png new file mode 100644 index 0000000000000000000000000000000000000000..5ac519b82b4b3013691258d873c30325d11b1f5e GIT binary patch literal 84041 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�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

    wyhdNtGKR6d)j6Y%rE%xVrxYen(0H&< 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 literal 0 HcmV?d00001 diff --git a/utils/tool.py b/utils/tool.py new file mode 100644 index 0000000..f5e6c42 --- /dev/null +++ b/utils/tool.py @@ -0,0 +1,143 @@ +import json +import random + +import aiohttp +import requests +from aiohttp import FormData +from loguru import logger +import functools, time + + +def retry(exceptions: (BaseException, tuple, list)=BaseException, + max_retries: int = 2, + delay: int = 1, + sleep=time.sleep, + if_result=None): + """ + 重试 + :param exceptions: 可自定义异常 + :param max_retries: 重试次数 + :param delay: 休眠时间 + :param sleep: time.sleep + :param if_result: 是否对结果进行约束 重试 + :return: + """ + if not isinstance(exceptions, (tuple, list)): + new_exceptions = [exceptions] + else: + new_exceptions = exceptions + + def init_retry(func, count, *args, **kwargs): + if count > max_retries: + return + + try: + if if_result: + # print(f"重拾次数 is {count}") + return call(func, if_result, *args, **kwargs) + return func(*args, **kwargs) + except tuple(new_exceptions) as e: + # print("重试") + # traceback.print_exc() + if count < max_retries: + sleep(delay) + return init_retry(func, count+1, *args, **kwargs) + else: + raise e + + def call(func, if_result, *args, **kwargs): + val = func(*args, **kwargs) + if if_result(*val): + return val + raise Exception("The result is not as expected!") + + def decorator(func): + @functools.wraps(func) + def wrapped(*args, **kwargs): + return init_retry(func, 0, *args, **kwargs) + return wrapped + return decorator + + +def cost_time(func): + """ + 计算耗时 + :param func: + :return: + """ + @functools.wraps(func) + def wrapper(*args, **kwargs): + start_time = time.time() + result = func(*args, **kwargs) + logger.info(f"{func.__name__} 请求耗时:{time.time() - start_time}") + return result + return wrapper + + +def retry_if_result_none(status, content): + if status == 200: + return True + return False + + +@retry(max_retries=3, delay=1, if_result=retry_if_result_none) +def download_q(url, headers, cookies, data=None, is_proxy=False, timeout=10): + """ + 下载器 + :param url: + :param headers: + :param cookies: + :param data: + :param is_proxy: + :param timeout: + :return: + """ + + proxy = "16ABDDQU:153219@u1590.20.tp.16yun.cn:6447" + proxy = f"172.24.12.23:{random.randint(45001, 45100)}" # 修改代理 + proxies = {'http': proxy, 'https': proxy} # 代理初始化 + + try: + if data: + if is_proxy: + response = requests.post(url, headers=headers, data=data, proxies=proxies, cookies=cookies, timeout=timeout) + else: + response = requests.post(url, headers=headers, data=data, cookies=cookies, timeout=timeout) + else: + if is_proxy: + response = requests.get(url, headers=headers, proxies=proxies, cookies=cookies, timeout=timeout) + else: + response = requests.get(url, headers=headers, cookies=cookies, timeout=timeout) + status = response.status_code + except Exception as e: + response = None + status = 0 + logger.error(f"download {e}") + # print(response) + return status, response + + +async def upload_file(file_path, content, url="http://172.18.1.113:8080/upload"): + """ + 异步上传 + :param file_path: + :param url: + :return: + """ + if file_path: + # timeout = aiohttp.ClientTimeout(total=30) + async with aiohttp.ClientSession() as session: + data = FormData() + data.add_field("file", content, filename=file_path, content_type='multipart/form-data;charset=utf-8"') + data.add_field("output", "json") + async with session.post(url, data=data) as response: + result = await response.text() # 返回结果为json字符串 + result = json.loads(result) + logger.info(f"upload file {result}") + if 'url' in result.keys(): + video_path = result['url'] + return video_path + else: + raise Exception + else: + raise Exception diff --git a/uwsgi.ini b/uwsgi.ini new file mode 100644 index 0000000..afd6565 --- /dev/null +++ b/uwsgi.ini @@ -0,0 +1,11 @@ +[uwsgi] +chdir=/data1/api-py +http=0.0.0.0:8088 +stats=%(chdir)/uwsgi/uwsgi.status +pidfile=%(chdir)/uwsgi/uwsgi.pid +wsgi-file=%(chdir)/server.py +daemonize=%(chdir)/uwsgi/uwsgi.log +callable=app +processes=2 +threads=2 +buffer-size=65536 \ No newline at end of file diff --git a/wx/__init__.py b/wx/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/wx/video/__init__.py b/wx/video/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/wx/video/video_decode.py b/wx/video/video_decode.py new file mode 100644 index 0000000..bd95f3c --- /dev/null +++ b/wx/video/video_decode.py @@ -0,0 +1,59 @@ +import requests, os + +from utils.tool import upload_file +import traceback + + +def decode(content, decodekey): + """ + 调用三方服务解密 + :param content: + :param decodekey: + :return: + """ + url = "http://127.0.0.1:3000/wx/decode1" + files = {'file': content} + param = { + "decodekey": decodekey + } + response = requests.post(url, files=files, params=param) + return response.content + + +def save_video(content, filename): + """ + 保存文件到 tmp下 返回绝对路径 + :param content: + :param filename: + :return: + """ + tmp_file = f"{os.getcwd()}/wx/tmp/{filename}" + with open(tmp_file, 'wb') as f: + f.write(content) + f.close() + return filename + + +async def main(content, decodekey): + """ + 处理上传文件流 + - 成功则成功; + - 失败则保存在本地 + :param content: + :param decodekey: + :return: + """ + file_name = f"{decodekey}.mp4" + res = {"code": 200, "msg": "上传成功", "filePath": ""} + try: + content = decode(content, decodekey) + upload_file_name = await upload_file(file_name, content) + except Exception as e: # 失败则保存本地 + traceback.print_exc() + upload_file_name = save_video(content, file_name) + res["code"] = 203 + res["msg"] = "上传失败,保存到本地" + + res["filePath"] = upload_file_name + + return res \ No newline at end of file diff --git a/xhs/__init__.py b/xhs/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/xhs/shield.py b/xhs/shield.py new file mode 100644 index 0000000..95d8533 --- /dev/null +++ b/xhs/shield.py @@ -0,0 +1,132 @@ +import base64 + +from xhs.shield_aes import get_key +from xhs.shield_md5 import md5sum +from xhs.shield_rc4 import RC4 + + +def hex_string(num, step=2): + """ + step 控制二进制的长度 避免有些少零了 + """ + tmp_string = hex(num)[2:] + + if len(tmp_string) < step: + tmp_string = '0' + tmp_string + + return tmp_string + + +def expand_keys(keys, m): + md5_str1_list = [hex_string(int(keys[i] + keys[i + 1], 16) ^ m) for i in range(0, len(keys), 2)] + md5_str1 = "".join(md5_str1_list) + return md5_str1 + + +def char2hex(char): + return hex_string(ord(char)) + + +def get_md5(keys, params): + """ + 标准 hmac 操作 + :param keys: + :param params: + :return: + """ + + # 拓展key1 0x36 + md5_str1 = expand_keys(keys, 54) + # 拓展key2 0x5c + md5_str2 = expand_keys(keys, 92) + + data = bytes.fromhex(md5_str1) + params.encode("utf-8") + md1 = md5sum(data) + + data1 = bytes.fromhex(md5_str2 + md1) + md2 = md5sum(data1) # 获得最终结果 + + return md2 + + +def get_rc4(params): + """ + 标准rc4运算 + :param params: + :return: + """ + key = "std::abort();" + result = RC4(key.encode("utf-8"), bytes.fromhex(params)) + return result.hex() + + +def get_shield(keys, params, deviceId): + """ + shield生成核心部分 + 固定版本 和 app_id + :param keys: + :param params: + :param deviceId: + :return: + """ + version = "6970181" + app_id = "ecfaaf01" + p7 = "".join([char2hex(m) for m in version]) + p8 = "".join([char2hex(m) for m in deviceId]) + p9 = get_md5(keys, params) # 魔改md5 16位md5 + rc4_plaintext = f"00000001{app_id}00000002000000{hex_string(len(version))}000000{hex_string(len(deviceId))}000000{hex_string(len(p9) // 2)}{p7}{p8}{p9}" + result = get_rc4(rc4_plaintext) + _tmp = len(version) + len(deviceId) + len(p9) // 2 + 24 + tmp = f"0000000100000001000000{hex_string(_tmp)}000000{hex_string(_tmp)}" # 固定 0x53是上述 几个固定的值算出来的 + _shield = "XY" + base64.b64encode(bytes.fromhex(tmp + result)).decode() + return _shield + + +def shield(node_id, xy_common_params, xy_platform_info): + """ + + """ + # 设备一 + deviceId = "2fe75062-a528-3340-bed3-220a67f7f240" + keys = "aa82da57410dddd5b2860e534f7c0602f589c20ec8e8830baa239360c89cce62bdc304d8a1aa988d620917dbefc2a1154692fad24294f4419ea19c7dc069897b" + + api = "/api/sns/v1/note/feed" + param = f"note_id={node_id}&page=1&num=5&fetch_mode=1&source=&ads_track_id=" + plaintext = api + param + xy_common_params + xy_platform_info + return get_shield(keys, plaintext, deviceId) + + +def shield_run(url, keys, xy_common_params, deviceId, api="/api/sns/v1/note/feed"): + """ + 对外暴露接口 + :param url: 请求的链接 + :param keys: 参与运算的 hmac_main + :param xy_common_params: 对应header中字段 + :param deviceId: 对应设备号 + :param api: 对应接口 目前默认为feed流接口 + :return: + """ + param = url[url.index("?") + 1:] + xy_platform_info = f"platform=android&build=6970181&deviceId={deviceId}" + plaintext = api + param + xy_common_params + xy_platform_info + # print(plaintext) + return get_shield(keys, plaintext, deviceId) + + +if __name__ == '__main__': + # 先获得 main_hmac 处理后的key + # XYAAAAAQAAAAEAAABTAAAAUzUWEe0xG1IbD9/c+qCLOlKGmTtFa+lG43AHe+FXTKxDxI2yn7IxH534qbVaz8N7icV+2KNmRAwcQDSAZrqn3SpjhOCLuaGTuDRgbpA0sNhU/xUP 结果 + # XYAAAAAQAAAAEAAABTAAAAUzUWEe0xG1IbD9/c+qCLOlKGmTtFa+lG43AHe+FXTKxDxI2yn7IxH534qbVaz8N7icV+2KNmRAwcQDSAZrqn3SpjhOCLuaGTuDRgbpA0sNhU/xUP + # keys = "aa82da57410dddd5b2860e534f7c0602f589c20ec8e8830baa239360c89cce62bdc304d8a1aa988d620917dbefc2a1154692fad24294f4419ea19c7dc069897b" + # get_shield(keys) + url = "https://edith.xiaohongshu.com/api/sns/v1/note/feed?note_id=66ceeabe000000001d03b546&page=1&num=5&fetch_mode=1&source=&ads_track_id=" + + hmac = "NqLx0YFKNb4KraYq524SgzVpepYQ0SwhZLRs7eyxe6A26c/b1b+d6OU2LfAPwh8zpt3fkR/jsR5yzVzIqXe66EWhGJ8iWV36KKSIz0mVt436sTqt3eUYUZwb5TzpSYDa" + deviceId = "119214fc-0fe5-3ae8-91dd-baa821c11324" + xy_platform_info = "platform=android&build=6970181&deviceId=119214fc-0fe5-3ae8-91dd-baa821c11324" + xy_common_params = "fid=1721639154103483c0daaace2ca9266cba37ac9fe114&device_fingerprint=202407221758192809006e7e334e46628620f6768bcf3b0153b1977b9f6cd6&device_fingerprint1=202407221758192809006e7e334e46628620f6768bcf3b0153b1977b9f6cd6&cpu_name=Qualcomm+Technologies%2C+Inc+SM8150&device_model=phone&launch_id=1727578036&tz=Asia%2FShanghai&channel=CPA-3DSP-N3-ZSKJ&versionName=6.97.0.1&overseas_channel=0&deviceId=119214fc-0fe5-3ae8-91dd-baa821c11324&platform=android&sid=session.1721639201142076381131&identifier_flag=4&t=1727590998&project_id=ECFAAF&build=6970181&lang=zh-Hans&app_id=ECFAAF01&uis=dark&teenager=0" + + keys = get_key(deviceId, hmac) + + result = sheild_run(url, keys, xy_common_params, deviceId) + print(result) diff --git a/xhs/shield_aes.py b/xhs/shield_aes.py new file mode 100644 index 0000000..f3ddd27 --- /dev/null +++ b/xhs/shield_aes.py @@ -0,0 +1,200 @@ +from functools import reduce +import base64 +from xhs.shield_const import * + +""" + 小红书 hmac_main 的aes处理 + 自定义aes + 逆向版本 6.97.0.1 +""" + +class AES: + def __init__(self, key: bytes): + self.aes_type = len(key) * 8 + self._key_r = self._generate_key(key) + + def _sort_key(self, w_list): + """ + 重新编排key + """ + + def change_char(w): + w_4 = self._split_int(w) # 拆分成 4x8bit + s_w_4 = [SBox[w_4[0]], SBox[w_4[1]], SBox[w_4[2]], SBox[w_4[3]]] + s_s_w_4 = [dword_7F550[s_w_4[0]], dword_7F950[s_w_4[1]], dword_7FD50[s_w_4[2]], dword_80150[s_w_4[3]]] + key4 = reduce(lambda x, y: x ^ y, s_s_w_4) + return key4 + + # 交换位置 + for i in range(len(w_list) // 2): + tmp = w_list[i] + if i > 3: # 需要交换位置 + tmp = change_char(tmp) + w_list[len(w_list) - i - 1] = change_char(w_list[len(w_list) - i -1]) + + w_list[i] = w_list[len(w_list) - i -1] + w_list[len(w_list) - i -1] = tmp + # print(i, len(w_list) - i -1) + return w_list + + @staticmethod + def hex_string(num, step=2): + """ + step 控制二进制的长度 避免有些少零了 + """ + tmp_string = hex(num)[2:] + + if len(tmp_string) < step: + tmp_string = '0' * (step - len(tmp_string)) + tmp_string + + return tmp_string + + def encrypt(self, plaintext:bytes): + """ + 加密 解密 + :param plaintext: + :return: + """ + state = [[plaintext[i + j] for j in range(16)] for i in range(0, len(plaintext), 16)] # 先分组 + result = [] + # 进行加密流程 + for p in range(len(state)): + _plaintext_block = [self._joint_int(state[p][i:i+4]) for i in range(0, 16, 4)] + state[p] = _plaintext_block.copy() # 合并为每四个字节的数组 + _encrypt_block = self.encrypt_block(_plaintext_block) # 处理第一块 + if p > 0: + extra_block = [self.hex_string(_encrypt_block[i] ^ state[p - 1][i], 8) for i in range(4)] # 异或处理 + result.append("".join(extra_block)) + + return "".join(result[:4]) + + def encrypt_block(self, plaintext_block): + """ + 按照块加密 + """ + keys = self._key_r + # 第一轮由于明文和那个key是反的 单独计算 + plaintext_block[0] = plaintext_block[0] ^ keys[3] + plaintext_block[1] = plaintext_block[1] ^ keys[2] + plaintext_block[2] = plaintext_block[2] ^ keys[1] + plaintext_block[3] = plaintext_block[3] ^ keys[0] + + for i in range(0, 9): + num = (i + 1) * 4 + a1 = self._split_int(plaintext_block[0]) # 这块是按顺序的 + a2 = self._split_int(plaintext_block[1]) + a3 = self._split_int(plaintext_block[2]) + a4 = self._split_int(plaintext_block[3]) + + # 查表法进行替换 + a1_1_box = [dword_7F550[a1[0]], dword_7F950[a1[1]], dword_7FD50[a1[2]], dword_80150[a1[3]]] + a2_1_box = [dword_7F550[a2[0]], dword_7F950[a2[1]], dword_7FD50[a2[2]], dword_80150[a2[3]]] + a3_1_box = [dword_7F550[a3[0]], dword_7F950[a3[1]], dword_7FD50[a3[2]], dword_80150[a3[3]]] + a4_1_box = [dword_7F550[a4[0]], dword_7F950[a4[1]], dword_7FD50[a4[2]], dword_80150[a4[3]]] + + if i == 0: + # 矩阵运算 这块不太一样 + d1 = [a4_1_box[0], a3_1_box[1], a2_1_box[2], a1_1_box[3]] + d2 = [a3_1_box[0], a2_1_box[1], a1_1_box[2], a4_1_box[3]] + d3 = [a2_1_box[0], a1_1_box[1], a4_1_box[2], a3_1_box[3]] + d4 = [a1_1_box[0], a4_1_box[1], a3_1_box[2], a2_1_box[3]] + else: + # 矩阵运算 + d1 = [a1_1_box[0], a2_1_box[1], a3_1_box[2], a4_1_box[3]] + d2 = [a2_1_box[0], a3_1_box[1], a4_1_box[2], a1_1_box[3]] + d3 = [a3_1_box[0], a4_1_box[1], a1_1_box[2], a2_1_box[3]] + d4 = [a4_1_box[0], a1_1_box[1], a2_1_box[2], a3_1_box[3]] + + + # 拼接 + plaintext_block[0] = reduce(lambda x, y: x ^ y, d1) ^ keys[num] + plaintext_block[1] = reduce(lambda x, y: x ^ y, d2) ^ keys[num + 1] + plaintext_block[2] = reduce(lambda x, y: x ^ y, d3) ^ keys[num + 2] + plaintext_block[3] = reduce(lambda x, y: x ^ y, d4) ^ keys[num + 3] + + + + # 后四位 + a1 = self._split_int(plaintext_block[0]) # 这块是按顺序的 + a2 = self._split_int(plaintext_block[1]) + a3 = self._split_int(plaintext_block[2]) + a4 = self._split_int(plaintext_block[3]) + + a1_sum_box = [SBoxIV[a4[0]], SBoxIV[a1[1]], SBoxIV[a2[2]], SBoxIV[a3[3]]] # 合并后 + a2_sum_box = [SBoxIV[a3[0]], SBoxIV[a4[1]], SBoxIV[a1[2]], SBoxIV[a2[3]]] # 合并后 + a3_sum_box = [SBoxIV[a2[0]], SBoxIV[a3[1]], SBoxIV[a4[2]], SBoxIV[a1[3]]] # 合并后 + a4_sum_box = [SBoxIV[a1[0]], SBoxIV[a2[1]], SBoxIV[a3[2]], SBoxIV[a4[3]]] # 合并后 + + + plaintext_block[0] = self._joint_int(a1_sum_box) ^ keys[-1] + plaintext_block[1] = self._joint_int(a2_sum_box) ^ keys[-2] + plaintext_block[2] = self._joint_int(a3_sum_box) ^ keys[-3] + plaintext_block[3] = self._joint_int(a4_sum_box) ^ keys[-4] + + return plaintext_block + + + def _generate_key(self, key: bytes) -> list: + """密钥扩展""" + Rcon = [0x12310000, 0x2000100, 0x4020000, 0x8020200, 0x10102000, 0x30020400, 0x40002000, 0x80002000, 0x1B002000, 0x36200200] # 轮常数 + Nr, Nk = 10 + (self.aes_type - 128) // 32, self.aes_type // 32 # Nr:轮数,Nk:密钥长度 + w = [0 for _ in range(4 * (Nr + 1))] # 轮密钥 + + p = [4052295985, 4278194467, 4043314006, 4045621392] # 额外处理 + for i in range(Nk): # 初始化是对的 + w[i] = int.from_bytes(key[4 * i:4 * i + 4], 'big') ^ p[i] + # print(f"w{i} => {hex(w[i])}") + + for i in range(Nk, 4 * (Nr + 1)): + temp = w[i - 1] + # print("******************************") + # print(f"开始", hex(temp), i % Nk) + if i % Nk == 0: + temp = self._split_int(temp) # 拆分成 4x8bit + temp = [SBox[temp[1]], SBox[temp[2]], SBox[temp[3]], SBox[temp[0]]] # sbox 的轮数发生变化了 + temp = self._joint_int(temp) ^ Rcon[i // Nk - 1] # 合并回 32bit + + elif Nk > 6 and i % Nk == 4: + temp = self._split_int(temp) # 拆分成 4x8bit + temp = [SBox[temp[0]], SBox[temp[1]], + SBox[temp[2]], SBox[temp[3]]] + temp = self._joint_int(temp) # 合并回 32bit + + w[i] = w[i - Nk] ^ temp + + w = self._sort_key(w) # 替换处理key + return w + + @staticmethod + def _split_int(n: int) -> list: + """拆分 32bit 成 4x8bit""" + return [(n >> 24) & 0xFF, (n >> 16) & 0xFF, (n >> 8) & 0xFF, n & 0xFF] + + @staticmethod + def _joint_int(b: list) -> int: + """合并 4x8bit 成 32bit""" + return (b[0] << 24) | (b[1] << 16) | (b[2] << 8) | b[3] + + + +def get_key(deviceId, hmac_main): + """ + 外部获取 接口 + :param deviceId: 设备id + :param hmac_main: 存在于机器的 s.xml + :return: + """ + key = deviceId[:16] + plaintext = base64.b64decode(hmac_main.encode("utf-8")) + A = AES(key.encode("utf-8")) + result = A.encrypt(plaintext) + return result + + +if __name__ == '__main__': + key = "2fe75062-a528-33" + m = AES(key.encode("utf-8")) + hmac_main = "cDdMxUWZy3e2szBCUB04rZMxTdf6tVKcpCIRrDQGa/NS8Agki6U5MGN6c6QCT3t6amTAYBbcDwFlPndCV3AfaerPd36GS9sdmTeKzBU45YsIBsGAdBXyy2GnkRlDaVCO" + plaintext = base64.b64decode(hmac_main.encode("utf-8")) + pp = m.encrypt(plaintext) + print(get_key(key, hmac_main)) \ No newline at end of file diff --git a/xhs/shield_const.py b/xhs/shield_const.py new file mode 100644 index 0000000..7f50ef5 --- /dev/null +++ b/xhs/shield_const.py @@ -0,0 +1,274 @@ + +# AES 初始化化参数 +# s盒和逆s盒是原始的 其他都是自定的数组 +SBox = [0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, + 0xFE, 0xD7, 0xAB, 0x76, 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, + 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0, 0xB7, 0xFD, 0x93, 0x26, + 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15, + 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, + 0xEB, 0x27, 0xB2, 0x75, 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, + 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84, 0x53, 0xD1, 0x00, 0xED, + 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF, + 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, + 0x50, 0x3C, 0x9F, 0xA8, 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, + 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2, 0xCD, 0x0C, 0x13, 0xEC, + 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73, + 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, + 0xDE, 0x5E, 0x0B, 0xDB, 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, + 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79, 0xE7, 0xC8, 0x37, 0x6D, + 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08, + 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, + 0x4B, 0xBD, 0x8B, 0x8A, 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, + 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E, 0xE1, 0xF8, 0x98, 0x11, + 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF, + 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, + 0xB0, 0x54, 0xBB, 0x16] + +# aes 轮密钥 +Rcon = [ + 0x12310000, 0x2000100, 0x4020000, 0x8020200, 0x10102000, 0x30020400, + 0x40002000, 0x80002000, 0x1B002000, 0x36200200 +] + +SBoxIV = [0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, + 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, + 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, + 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, + 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, + 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, + 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, + 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, + 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, + 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, + 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, + 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, + 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, + 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, + 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, + 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, + 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, + 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, + 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, + 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, + 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, + 0x55, 0x21, 0x0c, 0x7d] + +dword_7F550 = [ + 0x51F4A750, 0x7E416553, 0x1A17A4C3, 0x3A275E96, 0x3BAB6BCB + ,0x1F9D45F1, 0xACFA58AB, 0x4BE30393, 0x2030FA55, 0xAD766DF6 + ,0x88CC7691, 0xF5024C25, 0x4FE5D7FC, 0xC52ACBD7, 0x26354480 + ,0xB562A38F, 0xDEB15A49, 0x25BA1B67, 0x45EA0E98, 0x5DFEC0E1 + ,0xC32F7502, 0x814CF012, 0x8D4697A3, 0x6BD3F9C6, 0x38F5FE7 + ,0x15929C95, 0xBF6D7AEB, 0x955259DA, 0xD4BE832D, 0x587421D3 + ,0x49E06929, 0x8EC9C844, 0x75C2896A, 0xF48E7978, 0x99583E6B + ,0x27B971DD, 0xBEE14FB6, 0xF088AD17, 0xC920AC66, 0x7DCE3AB4 + ,0x63DF4A18, 0xE51A3182, 0x97513360, 0x62537F45, 0xB16477E0 + ,0xBB6BAE84, 0xFE81A01C, 0xF9082B94, 0x70486858, 0x8F45FD19 + ,0x94DE6C87, 0x527BF8B7, 0xAB73D323, 0x724B02E2, 0xE31F8F57 + ,0x6655AB2A, 0xB2EB2807, 0x2FB5C203, 0x86C57B9A, 0xD33708A5 + ,0x302887F2, 0x23BFA5B2, 0x2036ABA, 0xED16825C, 0x8ACF1C2B + ,0xA779B492, 0xF307F2F0, 0x4E69E2A1, 0x65DAF4CD, 0x605BED5 + ,0xD134621F, 0xC4A6FE8A, 0x342E539D, 0xA2F355A0, 0x58AE132 + ,0xA4F6EB75, 0xB83EC39, 0x4060EFAA, 0x5E719F06, 0xBD6E1051 + ,0x3E218AF9, 0x96DD063D, 0xDD3E05AE, 0x4DE6BD46, 0x91548DB5 + ,0x71C45D05, 0x406D46F, 0x605015FF, 0x1998FB24, 0xD6BDE997 + ,0x894043CC, 0x67D99E77, 0xB0E842BD, 0x7898B88, 0xE7195B38 + ,0x79C8EEDB, 0xA17C0A47, 0x7C420FE9, 0xF8841EC9, 0 + ,0x9808683, 0x322BED48, 0x1E1170AC, 0x6C5A724E, 0xFD0EFFFB + ,0xF853856, 0x3DAED51E, 0x362D3927, 0xA0FD964, 0x685CA621 + ,0x9B5B54D1, 0x24362E3A, 0xC0A67B1, 0x9357E70F, 0xB4EE96D2 + ,0x1B9B919E, 0x80C0C54F, 0x61DC20A2, 0x5A774B69, 0x1C121A16 + ,0xE293BA0A, 0xC0A02AE5, 0x3C22E043, 0x121B171D, 0xE090D0B + ,0xF28BC7AD, 0x2DB6A8B9, 0x141EA9C8, 0x57F11985, 0xAF75074C + ,0xEE99DDBB, 0xA37F60FD, 0xF701269F, 0x5C72F5BC, 0x44663BC5 + ,0x5BFB7E34, 0x8B432976, 0xCB23C6DC, 0xB6EDFC68, 0xB8E4F163 + ,0xD731DCCA, 0x42638510, 0x13972240, 0x84C61120, 0x854A247D + ,0xD2BB3DF8, 0xAEF93211, 0xC729A16D, 0x1D9E2F4B, 0xDCB230F3 + ,0xD8652EC, 0x77C1E3D0, 0x2BB3166C, 0xA970B999, 0x119448FA + ,0x47E96422, 0xA8FC8CC4, 0xA0F03F1A, 0x567D2CD8, 0x223390EF + ,0x87494EC7, 0xD938D1C1, 0x8CCAA2FE, 0x98D40B36, 0xA6F581CF + ,0xA57ADE28, 0xDAB78E26, 0x3FADBFA4, 0x2C3A9DE4, 0x5078920D + ,0x6A5FCC9B, 0x547E4662, 0xF68D13C2, 0x90D8B8E8, 0x2E39F75E + ,0x82C3AFF5, 0x9F5D80BE, 0x69D0937C, 0x6FD52DA9, 0xCF2512B3 + ,0xC8AC993B, 0x10187DA7, 0xE89C636E, 0xDB3BBB7B, 0xCD267809 + ,0x6E5918F4, 0xEC9AB701, 0x834F9AA8, 0xE6956E65, 0xAAFFE67E + ,0x21BCCF08, 0xEF15E8E6, 0xBAE79BD9, 0x4A6F36CE, 0xEA9F09D4 + ,0x29B07CD6, 0x31A4B2AF, 0x2A3F2331, 0xC6A59430, 0x35A266C0 + ,0x744EBC37, 0xFC82CAA6, 0xE090D0B0, 0x33A7D815, 0xF104984A + ,0x41ECDAF7, 0x7FCD500E, 0x1791F62F, 0x764DD68D, 0x43EFB04D + ,0xCCAA4D54, 0xE49604DF, 0x9ED1B5E3, 0x4C6A881B, 0xC12C1FB8 + ,0x4665517F, 0x9D5EEA04, 0x18C355D, 0xFA877473, 0xFB0B412E + ,0xB3671D5A, 0x92DBD252, 0xE9105633, 0x6DD64713, 0x9AD7618C + , 0x37A10C7A, 0x59F8148E, 0xEB133C89, 0xCEA927EE, 0xB761C935 + ,0xE11CE5ED, 0x7A47B13C, 0x9CD2DF59, 0x55F2733F, 0x1814CE79 + ,0x73C737BF, 0x53F7CDEA, 0x5FFDAA5B, 0xDF3D6F14, 0x7844DB86 + ,0xCAAFF381, 0xB968C43E, 0x3824342C, 0xC2A3405F, 0x161DC372 + ,0xBCE2250C, 0x283C498B, 0xFF0D9541, 0x39A80171, 0x80CB3DE + ,0xD8B4E49C, 0x6456C190, 0x7BCB8461, 0xD532B670, 0x486C5C74 + , 0xD0B85742 +] + +dword_7F950 = [ + 0x5051F4A7, 0x537E4165, 0xC31A17A4, 0x963A275E, 0xCB3BAB6B + ,0xF11F9D45, 0xABACFA58, 0x934BE303, 0x552030FA, 0xF6AD766D + ,0x9188CC76, 0x25F5024C, 0xFC4FE5D7, 0xD7C52ACB, 0x80263544 + ,0x8FB562A3, 0x49DEB15A, 0x6725BA1B, 0x9845EA0E, 0xE15DFEC0 + ,0x2C32F75, 0x12814CF0, 0xA38D4697, 0xC66BD3F9, 0xE7038F5F + ,0x9515929C, 0xEBBF6D7A, 0xDA955259, 0x2DD4BE83, 0xD3587421 + ,0x2949E069, 0x448EC9C8, 0x6A75C289, 0x78F48E79, 0x6B99583E + ,0xDD27B971, 0xB6BEE14F, 0x17F088AD, 0x66C920AC, 0xB47DCE3A + ,0x1863DF4A, 0x82E51A31, 0x60975133, 0x4562537F, 0xE0B16477 + ,0x84BB6BAE, 0x1CFE81A0, 0x94F9082B, 0x58704868, 0x198F45FD + ,0x8794DE6C, 0xB7527BF8, 0x23AB73D3, 0xE2724B02, 0x57E31F8F + ,0x2A6655AB, 0x7B2EB28, 0x32FB5C2, 0x9A86C57B, 0xA5D33708 + ,0xF2302887, 0xB223BFA5, 0xBA02036A, 0x5CED1682, 0x2B8ACF1C + ,0x92A779B4, 0xF0F307F2, 0xA14E69E2, 0xCD65DAF4, 0xD50605BE + ,0x1FD13462, 0x8AC4A6FE, 0x9D342E53, 0xA0A2F355, 0x32058AE1 + ,0x75A4F6EB, 0x390B83EC, 0xAA4060EF, 0x65E719F, 0x51BD6E10 + ,0xF93E218A, 0x3D96DD06, 0xAEDD3E05, 0x464DE6BD, 0xB591548D + , 0x571C45D, 0x6F0406D4, 0xFF605015, 0x241998FB, 0x97D6BDE9 + ,0xCC894043, 0x7767D99E, 0xBDB0E842, 0x8807898B, 0x38E7195B + ,0xDB79C8EE, 0x47A17C0A, 0xE97C420F, 0xC9F8841E, 0 + ,0x83098086, 0x48322BED, 0xAC1E1170, 0x4E6C5A72, 0xFBFD0EFF + ,0x560F8538, 0x1E3DAED5, 0x27362D39, 0x640A0FD9, 0x21685CA6 + ,0xD19B5B54, 0x3A24362E, 0xB10C0A67, 0xF9357E7, 0xD2B4EE96 + ,0x9E1B9B91, 0x4F80C0C5, 0xA261DC20, 0x695A774B, 0x161C121A + ,0xAE293BA, 0xE5C0A02A, 0x433C22E0, 0x1D121B17, 0xB0E090D + ,0xADF28BC7, 0xB92DB6A8, 0xC8141EA9, 0x8557F119, 0x4CAF7507 + ,0xBBEE99DD, 0xFDA37F60, 0x9FF70126, 0xBC5C72F5, 0xC544663B + ,0x345BFB7E, 0x768B4329, 0xDCCB23C6, 0x68B6EDFC, 0x63B8E4F1 + , 0xCAD731DC, 0x10426385, 0x40139722, 0x2084C611, 0x7D854A24 + ,0xF8D2BB3D, 0x11AEF932, 0x6DC729A1, 0x4B1D9E2F, 0xF3DCB230 + ,0xEC0D8652, 0xD077C1E3, 0x6C2BB316, 0x99A970B9, 0xFA119448 + ,0x2247E964, 0xC4A8FC8C, 0x1AA0F03F, 0xD8567D2C, 0xEF223390 + ,0xC787494E, 0xC1D938D1, 0xFE8CCAA2, 0x3698D40B, 0xCFA6F581 + ,0x28A57ADE, 0x26DAB78E, 0xA43FADBF, 0xE42C3A9D, 0xD507892 + ,0x9B6A5FCC, 0x62547E46, 0xC2F68D13, 0xE890D8B8, 0x5E2E39F7 + ,0xF582C3AF, 0xBE9F5D80, 0x7C69D093, 0xA96FD52D, 0xB3CF2512 + ,0x3BC8AC99, 0xA710187D, 0x6EE89C63, 0x7BDB3BBB, 0x9CD2678 + ,0xF46E5918, 0x1EC9AB7, 0xA8834F9A, 0x65E6956E, 0x7EAAFFE6 + ,0x821BCCF, 0xE6EF15E8, 0xD9BAE79B, 0xCE4A6F36, 0xD4EA9F09 + ,0xD629B07C, 0xAF31A4B2, 0x312A3F23, 0x30C6A594, 0xC035A266 + ,0x37744EBC, 0xA6FC82CA, 0xB0E090D0, 0x1533A7D8, 0x4AF10498 + ,0xF741ECDA, 0xE7FCD50, 0x2F1791F6, 0x8D764DD6, 0x4D43EFB0 + ,0x54CCAA4D, 0xDFE49604, 0xE39ED1B5, 0x1B4C6A88, 0xB8C12C1F + ,0x7F466551, 0x49D5EEA, 0x5D018C35, 0x73FA8774, 0x2EFB0B41 + ,0x5AB3671D, 0x5292DBD2, 0x33E91056, 0x136DD647, 0x8C9AD761 + ,0x7A37A10C, 0x8E59F814, 0x89EB133C, 0xEECEA927, 0x35B761C9 + ,0xEDE11CE5, 0x3C7A47B1, 0x599CD2DF, 0x3F55F273, 0x791814CE + ,0xBF73C737, 0xEA53F7CD, 0x5B5FFDAA, 0x14DF3D6F, 0x867844DB + ,0x81CAAFF3, 0x3EB968C4, 0x2C382434, 0x5FC2A340, 0x72161DC3 + ,0xCBCE225, 0x8B283C49, 0x41FF0D95, 0x7139A801, 0xDE080CB3 + ,0x9CD8B4E4, 0x906456C1, 0x617BCB84, 0x70D532B6, 0x74486C5C + ,0x42D0B857 +] + +# ??不知道 少一个 +dword_7FD50 = [ + 0xA75051F4, 0x65537E41, 0xA4C31A17, 0x5E963A27, 0x6BCB3BAB + ,0x45F11F9D, 0x58ABACFA, 0x3934BE3, 0xFA552030, 0x6DF6AD76 + ,0x769188CC, 0x4C25F502, 0xD7FC4FE5, 0xCBD7C52A, 0x44802635 + ,0xA38FB562, 0x5A49DEB1, 0x1B6725BA, 0xE9845EA, 0xC0E15DFE + ,0x7502C32F, 0xF012814C, 0x97A38D46, 0xF9C66BD3, 0x5FE7038F + , 0x9C951592, 0x7AEBBF6D, 0x59DA9552, 0x832DD4BE, 0x21D35874 + ,0x692949E0, 0xC8448EC9, 0x896A75C2, 0x7978F48E, 0x3E6B9958 + ,0x71DD27B9, 0x4FB6BEE1, 0xAD17F088, 0xAC66C920, 0x3AB47DCE + ,0x4A1863DF, 0x3182E51A, 0x33609751, 0x7F456253, 0x77E0B164 + ,0xAE84BB6B, 0xA01CFE81, 0x2B94F908, 0x68587048, 0xFD198F45 + ,0x6C8794DE, 0xF8B7527B, 0xD323AB73, 0x2E2724B, 0x8F57E31F + ,0xAB2A6655, 0x2807B2EB, 0xC2032FB5, 0x7B9A86C5, 0x8A5D337 + ,0x87F23028, 0xA5B223BF, 0x6ABA0203, 0x825CED16, 0x1C2B8ACF + ,0xB492A779, 0xF2F0F307, 0xE2A14E69, 0xF4CD65DA, 0xBED50605 + ,0x621FD134, 0xFE8AC4A6, 0x539D342E, 0x55A0A2F3, 0xE132058A + ,0xEB75A4F6, 0xEC390B83, 0xEFAA4060, 0x9F065E71, 0x1051BD6E + ,0x8AF93E21, 0x63D96DD, 0x5AEDD3E, 0xBD464DE6, 0x8DB59154 + ,0x5D0571C4, 0xD46F0406, 0x15FF6050, 0xFB241998, 0xE997D6BD + ,0x43CC8940, 0x9E7767D9, 0x42BDB0E8, 0x8B880789, 0x5B38E719 + ,0xEEDB79C8, 0xA47A17C, 0xFE97C42, 0x1EC9F884, 0, 0x86830980 + ,0xED48322B, 0x70AC1E11, 0x724E6C5A, 0xFFFBFD0E, 0x38560F85 + ,0xD51E3DAE, 0x3927362D, 0xD9640A0F, 0xA621685C, 0x54D19B5B + ,0x2E3A2436, 0x67B10C0A, 0xE70F9357, 0x96D2B4EE, 0x919E1B9B + ,0xC54F80C0, 0x20A261DC, 0x4B695A77, 0x1A161C12, 0xBA0AE293 + ,0x2AE5C0A0, 0xE0433C22, 0x171D121B, 0xD0B0E09, 0xC7ADF28B + ,0xA8B92DB6, 0xA9C8141E, 0x198557F1, 0x74CAF75, 0xDDBBEE99 + ,0x60FDA37F, 0x269FF701, 0xF5BC5C72, 0x3BC54466, 0x7E345BFB + ,0x29768B43, 0xC6DCCB23, 0xFC68B6ED, 0xF163B8E4, 0xDCCAD731 + ,0x85104263, 0x22401397, 0x112084C6, 0x247D854A, 0x3DF8D2BB + ,0x3211AEF9, 0xA16DC729, 0x2F4B1D9E, 0x30F3DCB2, 0x52EC0D86 + ,0xE3D077C1, 0x166C2BB3, 0xB999A970, 0x48FA1194, 0x642247E9 + ,0x8CC4A8FC, 0x3F1AA0F0, 0x2CD8567D, 0x90EF2233, 0x4EC78749 + ,0xD1C1D938, 0xA2FE8CCA, 0xB3698D4, 0x81CFA6F5, 0xDE28A57A + ,0x8E26DAB7, 0xBFA43FAD, 0x9DE42C3A, 0x920D5078, 0xCC9B6A5F + ,0x4662547E, 0x13C2F68D, 0xB8E890D8, 0xF75E2E39, 0xAFF582C3 + ,0x80BE9F5D, 0x937C69D0, 0x2DA96FD5, 0x12B3CF25, 0x993BC8AC + ,0x7DA71018, 0x636EE89C, 0xBB7BDB3B, 0x7809CD26, 0x18F46E59 + ,0xB701EC9A, 0x9AA8834F, 0x6E65E695, 0xE67EAAFF, 0xCF0821BC + ,0xE8E6EF15, 0x9BD9BAE7, 0x36CE4A6F, 0x9D4EA9F, 0x7CD629B0 + ,0xB2AF31A4, 0x23312A3F, 0x9430C6A5, 0x66C035A2, 0xBC37744E + ,0xCAA6FC82, 0xD0B0E090, 0xD81533A7, 0x984AF104, 0xDAF741EC + ,0x500E7FCD, 0xF62F1791, 0xD68D764D, 0xB04D43EF, 0x4D54CCAA + ,0x4DFE496, 0xB5E39ED1, 0x881B4C6A, 0x1FB8C12C, 0x517F4665 + ,0xEA049D5E, 0x355D018C, 0x7473FA87, 0x412EFB0B, 0x1D5AB367 + ,0xD25292DB, 0x5633E910, 0x47136DD6, 0x618C9AD7, 0xC7A37A1 + ,0x148E59F8, 0x3C89EB13, 0x27EECEA9, 0xC935B761, 0xE5EDE11C + ,0xB13C7A47, 0xDF599CD2, 0x733F55F2, 0xCE791814, 0x37BF73C7 + ,0xCDEA53F7, 0xAA5B5FFD, 0x6F14DF3D, 0xDB867844, 0xF381CAAF + ,0xC43EB968, 0x342C3824, 0x405FC2A3, 0xC372161D, 0x250CBCE2 + ,0x498B283C, 0x9541FF0D, 0x17139A8, 0xB3DE080C, 0xE49CD8B4 + ,0xC1906456, 0x84617BCB, 0xB670D532, 0x5C74486C, 0x5742D0B8 +] + +dword_80150 = [ + 0xF4A75051, 0x4165537E, 0x17A4C31A, 0x275E963A, 0xAB6BCB3B + ,0x9D45F11F, 0xFA58ABAC, 0xE303934B, 0x30FA5520, 0x766DF6AD + ,0xCC769188, 0x24C25F5, 0xE5D7FC4F, 0x2ACBD7C5, 0x35448026 + ,0x62A38FB5, 0xB15A49DE, 0xBA1B6725, 0xEA0E9845, 0xFEC0E15D + ,0x2F7502C3, 0x4CF01281, 0x4697A38D, 0xD3F9C66B, 0x8F5FE703 + ,0x929C9515, 0x6D7AEBBF, 0x5259DA95, 0xBE832DD4, 0x7421D358 + ,0xE0692949, 0xC9C8448E, 0xC2896A75, 0x8E7978F4, 0x583E6B99 + ,0xB971DD27, 0xE14FB6BE, 0x88AD17F0, 0x20AC66C9, 0xCE3AB47D + ,0xDF4A1863, 0x1A3182E5, 0x51336097, 0x537F4562, 0x6477E0B1 + ,0x6BAE84BB, 0x81A01CFE, 0x82B94F9, 0x48685870, 0x45FD198F + ,0xDE6C8794, 0x7BF8B752, 0x73D323AB, 0x4B02E272, 0x1F8F57E3 + ,0x55AB2A66, 0xEB2807B2, 0xB5C2032F, 0xC57B9A86, 0x3708A5D3 + ,0x2887F230, 0xBFA5B223, 0x36ABA02, 0x16825CED, 0xCF1C2B8A + ,0x79B492A7, 0x7F2F0F3, 0x69E2A14E, 0xDAF4CD65, 0x5BED506 + ,0x34621FD1, 0xA6FE8AC4, 0x2E539D34, 0xF355A0A2, 0x8AE13205 + ,0xF6EB75A4, 0x83EC390B, 0x60EFAA40, 0x719F065E, 0x6E1051BD + ,0x218AF93E, 0xDD063D96, 0x3E05AEDD, 0xE6BD464D, 0x548DB591 + ,0xC45D0571, 0x6D46F04, 0x5015FF60, 0x98FB2419, 0xBDE997D6 + ,0x4043CC89, 0xD99E7767, 0xE842BDB0, 0x898B8807, 0x195B38E7 + ,0xC8EEDB79, 0x7C0A47A1, 0x420FE97C, 0x841EC9F8, 0 + ,0x80868309, 0x2BED4832, 0x1170AC1E, 0x5A724E6C, 0xEFFFBFD + ,0x8538560F, 0xAED51E3D, 0x2D392736, 0xFD9640A, 0x5CA62168 + ,0x5B54D19B, 0x362E3A24, 0xA67B10C, 0x57E70F93, 0xEE96D2B4 + ,0x9B919E1B, 0xC0C54F80, 0xDC20A261, 0x774B695A, 0x121A161C + ,0x93BA0AE2, 0xA02AE5C0, 0x22E0433C, 0x1B171D12, 0x90D0B0E + ,0x8BC7ADF2, 0xB6A8B92D, 0x1EA9C814, 0xF1198557, 0x75074CAF + ,0x99DDBBEE, 0x7F60FDA3, 0x1269FF7, 0x72F5BC5C, 0x663BC544 + ,0xFB7E345B, 0x4329768B, 0x23C6DCCB, 0xEDFC68B6, 0xE4F163B8 + ,0x31DCCAD7, 0x63851042, 0x97224013, 0xC6112084, 0x4A247D85 + ,0xBB3DF8D2, 0xF93211AE, 0x29A16DC7, 0x9E2F4B1D, 0xB230F3DC + ,0x8652EC0D, 0xC1E3D077, 0xB3166C2B, 0x70B999A9, 0x9448FA11 + ,0xE9642247, 0xFC8CC4A8, 0xF03F1AA0, 0x7D2CD856, 0x3390EF22 + ,0x494EC787, 0x38D1C1D9, 0xCAA2FE8C, 0xD40B3698, 0xF581CFA6 + ,0x7ADE28A5, 0xB78E26DA, 0xADBFA43F, 0x3A9DE42C, 0x78920D50 + ,0x5FCC9B6A, 0x7E466254, 0x8D13C2F6, 0xD8B8E890, 0x39F75E2E + ,0xC3AFF582, 0x5D80BE9F, 0xD0937C69, 0xD52DA96F, 0x2512B3CF + ,0xAC993BC8, 0x187DA710, 0x9C636EE8, 0x3BBB7BDB, 0x267809CD + ,0x5918F46E, 0x9AB701EC, 0x4F9AA883, 0x956E65E6, 0xFFE67EAA + ,0xBCCF0821, 0x15E8E6EF, 0xE79BD9BA, 0x6F36CE4A, 0x9F09D4EA + ,0xB07CD629, 0xA4B2AF31, 0x3F23312A, 0xA59430C6, 0xA266C035 + ,0x4EBC3774, 0x82CAA6FC, 0x90D0B0E0, 0xA7D81533, 0x4984AF1 + ,0xECDAF741, 0xCD500E7F, 0x91F62F17, 0x4DD68D76, 0xEFB04D43 + ,0xAA4D54CC, 0x9604DFE4, 0xD1B5E39E, 0x6A881B4C, 0x2C1FB8C1 + ,0x65517F46, 0x5EEA049D, 0x8C355D01, 0x877473FA, 0xB412EFB + ,0x671D5AB3, 0xDBD25292, 0x105633E9, 0xD647136D, 0xD7618C9A + ,0xA10C7A37, 0xF8148E59, 0x133C89EB, 0xA927EECE, 0x61C935B7 + ,0x1CE5EDE1, 0x47B13C7A, 0xD2DF599C, 0xF2733F55, 0x14CE7918 + ,0xC737BF73, 0xF7CDEA53, 0xFDAA5B5F, 0x3D6F14DF, 0x44DB8678 + ,0xAFF381CA, 0x68C43EB9, 0x24342C38, 0xA3405FC2, 0x1DC37216 + ,0xE2250CBC, 0x3C498B28, 0xD9541FF, 0xA8017139, 0xCB3DE08 + ,0xB4E49CD8, 0x56C19064, 0xCB84617B, 0x32B670D5, 0x6C5C7448 + ,0xB85742D0 +] diff --git a/xhs/shield_md5.py b/xhs/shield_md5.py new file mode 100644 index 0000000..d9acf2c --- /dev/null +++ b/xhs/shield_md5.py @@ -0,0 +1,250 @@ +import binascii +""" + 小红书 md5处理 魔改部分s盒、魔改运算过程中位移量、魔值顺序修改 + 最终shield 是进行hmac,而需要的hash值通过 shield_aes.py 生成 + 逆向版本 6.97.0.1 +""" + +# md5的s盒 其中有几位 被处理了 +SV = [0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee, 0xf57c0faf, + 0x4787c62a, 0xa8304613, 0xfd469501, 0x698098d8, 0x8b44f7af, + 0xffff5bb1, 0x895cd7be, 0x6b901122, 0xfd987193, 0xa679438e, + 0x49b40821, 0xf61e2562&0xFF00FF00, 0xc040b340, 0x265e5a51, 0xe9b6c7aa& 0xFF0011FF, + 0xd62f105d, 0x2441453, 0xd8a1e681, 0xe7d3fbc8, 0x21e1cde6, + 0xc33707d6, 0xf4d50d87, 0x455a14ed, 0xa9e3e905, 0xfcefa3f8 & 0xFF110011, + 0x676f02d9, 0x8d2a4c8a, 0xfffa3942, 0x8771f681, 0x6d9d6122, + 0xfde5380c, 0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70, + 0x289b7ec6, 0xeaa127fa, 0xd4ef3085, 0x4881d05, 0xd9d4d039, + 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665, 0xf4292244, 0x432aff97, + 0xab9423a7, 0xfc93a039, 0x655b59c3, 0x8f0ccc92, 0xffeff47d, + 0x85845dd1, 0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1, + 0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391] + + +# 根据ascil编码把字符转成对应的二进制 +def binvalue(val, bitsize): + binval = bin(val)[2:] if isinstance(val, int) else bin(ord(val))[2:] + if len(binval) > bitsize: + raise ("binary value larger than the expected size") + while len(binval) < bitsize: + binval = "0" + binval + return binval + + +def string_to_bit_array(text): + array = list() + for char in text: + binval = binvalue(char, 8) + array.extend([int(x) for x in list(binval)]) + return array + + +# 循环左移 +def leftCircularShift(k, bits): + bits = bits % 32 + k = k % (2 ** 32) + upper = (k << bits) % (2 ** 32) + result = upper | (k >> (32 - (bits))) + return (result) + + +# 分块 +def blockDivide(block, chunks): + result = [] + size = len(block) // chunks + for i in range(0, chunks): + result.append(int.from_bytes(block[i * size:(i + 1) * size], byteorder="little")) + return result + + +# F函数作用于“比特位”上 +# if x then y else z +def F(X, Y, Z): + compute = ((X & Y) | ((~X) & Z)) + return compute + + +# if z then x else y +def G(X, Y, Z): + return ((X & Z) | (Y & (~Z))) + + +# if X = Y then Z else ~Z +def H(X, Y, Z): + return (X ^ Y ^ Z) + + +def I(X, Y, Z): + return (Y ^ (X | (~Z))) + + +# 四个F函数 +def FF(a, b, c, d, M, s, t): + xhsTemp = leftCircularShift((a + F(b, c, d) + M + t), s) + result = b + xhsTemp + return (result) + + +def GG(a, b, c, d, M, s, t): + result = b + leftCircularShift((a + G(b, c, d) + M + t), s) + return (result) + + +def HH(a, b, c, d, M, s, t): + result = b + leftCircularShift((a + H(b, c, d) + M + t), s) + return (result) + + +def HH1(a, b, c, d, M, s, t): + result = b + leftCircularShift((a + H(b, c, d) + M + t), s) + return (result) + + +def II(a, b, c, d, M, s, t): + result = b + leftCircularShift((a + I(b, c, d) + M + t), s) + return (result) + + +# 数据转换 +def fmt8(num): + bighex = "{0:08x}".format(num) + binver = binascii.unhexlify(bighex) + result = "{0:08x}".format(int.from_bytes(binver, byteorder='little')) + return (result) + + +# 计算比特长度 +def bitlen(bitstring): + return len(bitstring) * 8 + + +def md5sum(msg): + # 计算比特长度,如果内容过长,64个比特放不下。就取低64bit。 + msgLen = bitlen(msg) % (2 ** 64) + # 先填充一个0x80,其实是先填充一个1,后面跟对应个数的0,因为一个明文的编码至少需要8比特,所以直接填充 0b10000000即0x80 + msg = msg + b'\x80' # 0x80 = 1000 0000 + zeroPad = (448 - (msgLen + 8) % 512) % 512 + zeroPad //= 8 + msg = msg + b'\x00' * zeroPad + msgLen.to_bytes(8, byteorder='little') + # 计算循环轮数,512个为一轮 + msgLen = bitlen(msg) + iterations = msgLen // 512 + # print(msgLen, iterations) + # 初始化变量 + # 算法魔改的第一个点,也是最明显的点 + + D = 0x67452301 + C = 0xefcdab89 + B = 0x98badcfe + A = 0x10325476 + + # main loop 魔改点 位移数基本都改了 + for i in range(0, iterations): + a = A + b = B + c = C + d = D + block = msg[i * 64:(i + 1) * 64] + M = blockDivide(block, 16) + + # Rounds 16 + a = FF(a, b, c, d, M[0], 6, SV[0]) + d = FF(d, a, b, c, M[1], 13, SV[1]) + c = FF(c, d, a, b, M[2], 17, SV[2]) + b = FF(b, c, d, a, M[3], 21, SV[3]) + a = FF(a, b, c, d, M[4], 7, SV[4]) + d = FF(d, a, b, c, M[5], 12, SV[5]) + c = FF(c, d, a, b, M[6], 17, SV[6]) + b = FF(b, c, d, a, M[7], 20, SV[7]) + a = FF(a, b, c, d, M[8], 7, SV[8]) + d = FF(d, a, b, c, M[9], 12, SV[9]) + c = FF(c, d, a, b, M[10], 16, SV[10]) + b = FF(b, c, d, a, M[11], 22, SV[11]) + a = FF(a, b, c, d, M[12], 7, SV[12]) + d = FF(d, a, b, c, M[13], 13, SV[13]) + c = FF(c, d, a, b, M[14], 17, SV[14]) + b = FF(b, c, d, a, M[15], 22, SV[15]) + + a = GG(a, b, c, d, M[1], 5, SV[16]) + d = GG(d, a, b, c, M[6], 9, SV[17]) + c = GG(c, d, a, b, M[11], 14, SV[18]) + b = GG(b, c, d, a, M[0], 20, SV[19]) + a = GG(a, b, c, d, M[5], 5, SV[20]) # 21 step + d = GG(d, a, b, c, M[10], 9, SV[21]) # 22 step + c = GG(c, d, a, b, M[15], 14, SV[22]) # 23 step + b = GG(b, c, d, a, M[4], 20, SV[23]) + a = GG(a, b, c, d, M[9], 5, SV[24]) + d = GG(d, a, b, c, M[14], 9, SV[25]) + c = GG(c, d, a, b, M[3], 14, SV[26]) # 27 step + b = GG(b, c, d, a, M[8], 20, SV[27]) + a = GG(a, b, c, d, M[13], 5, SV[28]) # 29 step + d = GG(d, a, b, c, M[2], 9, SV[29]) # 30 step + c = GG(c, d, a, b, M[7], 14, SV[30]) + b = GG(b, c, d, a, M[12], 20, SV[31]) + + # 16轮 + a = HH(a, b, c, d, M[5], 4, SV[32]) # 33 step + d = HH(d, a, b, c, M[8], 11, SV[33]) + c = HH(c, d, a, b, M[11], 16, SV[34]) + + b = HH(b, c, d, a, M[14], 23, SV[35]) # 36 + a = HH(a, b, c, d, M[1], 4, SV[36]) # 37 + d = HH(d, a, b, c, M[4], 11, SV[37]) # 38 + c = HH(c, d, a, b, M[7], 16, SV[38]) # 39 + + # 正常的第40步 + # b = HH(b, c, d, a, M[10], 23, SV[39]) + a = HH(a, b, c, d, M[13], 4, SV[40]) # 第40步 + + b = HH(b, c, a, d, M[10], 23, SV[39]) # 第41步 + c = HH(c, d, a, b, M[3], 16, SV[42]) # 第42步 + d = HH(d, a, b, c, M[0], 11, SV[41]) # 43 + b = HH(b, c, d, a, M[6], 23, SV[43]) # 44 + a = HH(a, b, c, d, M[9], 4, SV[44]) # 45 + d = HH(d, a, b, c, M[12], 11, SV[45]) # 46 + c = HH(c, d, a, b, M[15], 16, SV[46]) # 47 + b = HH(b, c, d, a, M[2], 23, SV[47]) # 48 + + a = II(a, b, c, d, M[0], 6, SV[48]) + d = II(d, a, b, c, M[7], 10, SV[49]) + c = II(c, d, a, b, M[14], 15, SV[50]) + b = II(b, c, d, a, M[5], 21, SV[51]) # 52 + a = II(a, b, c, d, M[12], 6, SV[52]) + d = II(d, a, b, c, M[3], 10, SV[53]) + c = II(c, d, a, b, M[10], 15, SV[54]) + b = II(b, c, d, a, M[1], 21, SV[55]) # 56 + a = II(a, b, c, d, M[8], 6, SV[56]) + d = II(d, a, b, c, M[15], 10, SV[57]) + c = II(c, d, a, b, M[6], 15, SV[58]) + b = II(b, c, d, a, M[13], 21, SV[59]) # 60 + a = II(a, b, c, d, M[4], 6, SV[60]) + d = II(d, a, b, c, M[11], 10, SV[61]) + c = II(c, d, a, b, M[2], 15, SV[62]) # 63 + b = II(b, c, d, a, M[9], 21, SV[63]) + A = (A + a) % (2 ** 32) + B = (B + b) % (2 ** 32) + C = (C + c) % (2 ** 32) + D = (D + d) % (2 ** 32) + + result = fmt8(A) + fmt8(B) + fmt8(C) + fmt8(D) + return result + + +def reverse(m): + return "".join([m[i+1] + m[i] for i in range(0, len(m), 2)]) + +if __name__ == "__main__": + key_list = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476] + # 第一轮计算 获得结果 c4a02b20 e93108b2 d607639f 52569057 这个和f6填充 得到结果 + data = bytes.fromhex("9cb4ec61773bebe384b03865794a3034c3bff438fedeb53d9c15a556feaaf8548bf532ee979caebb543f21edd9f4972370a4cce474a2c277a897aa4bf65fbf4d2f6170692f736e732f76312f6e6f74652f666565646e6f74655f69643d36366439323830333030303030303030316630316236383926706167653d31266e756d3d352666657463685f6d6f64653d3126736f757263653d266164735f747261636b5f69643d6669643d3137323538373037303531303636376565333737323431396563336236353064393436663763386632653137266465766963655f66696e6765727072696e743d3230323430393034313530303332663930373030323232316565343637393364323839346164323532366438383230316165626231666534646263626661266465766963655f66696e6765727072696e74313d3230323430393034313530303332663930373030323232316565343637393364323839346164323532366438383230316165626231666534646263626661266c61756e63685f69643d3137323539333737363626747a3d417369612532465368616e67686169266368616e6e656c3d504d67647431393933353733372676657273696f6e4e616d653d362e39372e302e312664657669636549643d32666537353036322d613532382d333334302d626564332d32323061363766376632343026706c6174666f726d3d616e64726f6964267369643d73657373696f6e2e31373235383730373132363338383830383638313238266964656e7469666965725f666c61673d3026743d313732353933373739372670726f6a6563745f69643d454346414146266275696c643d3639373031383126785f74726163655f706167655f63757272656e743d6578706c6f72655f66656564266c616e673d7a682d48616e73266170705f69643d4543464141463031267569733d6461726b706c6174666f726d3d616e64726f6964266275696c643d363937303138312664657669636549643d32666537353036322d613532382d333334302d626564332d323230613637663766323430") + # 2f6170692f736e732f76312f6e6f74652f666565646e6f74655f69643d36366365656162653030303030303030316430336235343626706167653d31266e756d3d352666657463685f6d6f64653d3126736f757263653d266164735f747261636b5f69643d6669643d3137323136333931353431303334383363306461616163653263613932363663626133376163396665313134266465766963655f66696e6765727072696e743d3230323430373232313735383139323830393030366537653333346534363632383632306636373638626366336230313533623139373762396636636436266465766963655f66696e6765727072696e74313d3230323430373232313735383139323830393030366537653333346534363632383632306636373638626366336230313533623139373762396636636436266370755f6e616d653d5175616c636f6d6d2b546563686e6f6c6f676965732532432b496e632b534d38313530266465766963655f6d6f64656c3d70686f6e65266c61756e63685f69643d3137323735373830333626747a3d417369612532465368616e67686169266368616e6e656c3d4350412d334453502d4e332d5a534b4a2676657273696f6e4e616d653d362e39372e302e31266f766572736561735f6368616e6e656c3d302664657669636549643d31313932313466632d306665352d336165382d393164642d62616138323163313133323426706c6174666f726d3d616e64726f6964267369643d73657373696f6e2e31373231363339323031313432303736333831313331266964656e7469666965725f666c61673d3426743d313732373539303939382670726f6a6563745f69643d454346414146266275696c643d36393730313831266c616e673d7a682d48616e73266170705f69643d4543464141463031267569733d6461726b267465656e616765723d30706c6174666f726d3d616e64726f6964266275696c643d363937303138312664657669636549643d31313932313466632d306665352d336165382d393164642d626161383231633131333234 + # data = bytes.fromhex("868da458ff5a821fcff6f8bdafc009f56debf5290e0758a5d3ba4a4ae08b55764982003382b5907464bc90c34b877308474d16dec037edcfbf0ed45c2c045e2d2f6170692f736e732f76312f6e6f74652f666565646e6f74655f69643d36366365656162653030303030303030316430336235343626706167653d31266e756d3d352666657463685f6d6f64653d3126736f757263653d266164735f747261636b5f69643d6669643d3137323136333931353431303334383363306461616163653263613932363663626133376163396665313134266465766963655f66696e6765727072696e743d3230323430373232313735383139323830393030366537653333346534363632383632306636373638626366336230313533623139373762396636636436266465766963655f66696e6765727072696e74313d3230323430373232313735383139323830393030366537653333346534363632383632306636373638626366336230313533623139373762396636636436266370755f6e616d653d5175616c636f6d6d2b546563686e6f6c6f676965732532432b496e632b534d38313530266465766963655f6d6f64656c3d70686f6e65266c61756e63685f69643d3137323735373830333626747a3d417369612532465368616e67686169266368616e6e656c3d4350412d334453502d4e332d5a534b4a2676657273696f6e4e616d653d362e39372e302e31266f766572736561735f6368616e6e656c3d302664657669636549643d31313932313466632d306665352d336165382d393164642d62616138323163313133323426706c6174666f726d3d616e64726f6964267369643d73657373696f6e2e31373231363339323031313432303736333831313331266964656e7469666965725f666c61673d3426743d313732373539303939382670726f6a6563745f69643d454346414146266275696c643d36393730313831266c616e673d7a682d48616e73266170705f69643d4543464141463031267569733d6461726b267465656e616765723d30706c6174666f726d3d616e64726f6964266275696c643d363937303138312664657669636549643d32666537353036322d613532382d333334302d626564332d323230613637663766323430") + # 第二轮计算 获得key c4a02b20e93108b2d607639f52569057 + # 7e424e3418de39d5ca9a0ba8d9dfde24 + # data = bytes.fromhex("ece7ce329530e875a59c92d7c5aa639f07819f43646d32cfb9d020208ae13f1c23e86a59e8dffa1e0ed6faa921ed19622d277cb4aa5d87a5d564be36466e34477e424e3418de39d5ca9a0ba8d9dfde24") + + print("plainText: ", data) + print("result: ", md5sum(data)) + + + diff --git a/xhs/shield_rc4.py b/xhs/shield_rc4.py new file mode 100644 index 0000000..a2cf39d --- /dev/null +++ b/xhs/shield_rc4.py @@ -0,0 +1,36 @@ + +""" +标准rc4 +""" + +def KSA(key): + """ Key-Scheduling Algorithm (KSA) """ + S = list(range(256)) + j = 0 + for i in range(256): + j = (j + S[i] + key[i % len(key)]) % 256 + S[i], S[j] = S[j], S[i] + return S + + +def PRGA(S): + """ Pseudo-Random Generation Algorithm (PRGA) """ + i, j = 0, 0 + while True: + i = (i + 1) % 256 + j = (j + S[i]) % 256 + S[i], S[j] = S[j], S[i] + K = S[(S[i] + S[j]) % 256] + yield K + + +def RC4(key, text): + """ RC4 encryption/decryption """ + S = KSA(key) + keystream = PRGA(S) + res = [] + for char in text: + res.append(char ^ next(keystream)) + return bytes(res) + + diff --git a/xhs/xhs_aes.py b/xhs/xhs_aes.py new file mode 100644 index 0000000..8912678 --- /dev/null +++ b/xhs/xhs_aes.py @@ -0,0 +1,28 @@ +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad + +""" +8.13 xhs-aes版本 +""" +def encrypt_aes_cbc(plaintext): + """ + aes-cbc + :param plaintext: + :return: + """ + key = "3061396677336d3671666c6c3264656a" + iv = "6d686171686e6a6d723072736f6f336f" + cipher = AES.new(bytes.fromhex(key), AES.MODE_CBC, bytes.fromhex(iv)) + ciphertext = cipher.encrypt(pad(bytes.fromhex(plaintext), AES.block_size)) + return ciphertext.hex() + + +def aes_encrypt(plain_text): + """ + 转换一下为 hex字符串便于加密操作 + :param plain_text: + :return: + """ + array = "".join([hex(i)[2:] for i in plain_text]) + payload = encrypt_aes_cbc(array) + return payload \ No newline at end of file diff --git a/xhs/xhs_captcha.py b/xhs/xhs_captcha.py new file mode 100644 index 0000000..1c84592 --- /dev/null +++ b/xhs/xhs_captcha.py @@ -0,0 +1,208 @@ +import math +import time +import json +import random +from kuaishou.ks_http import download_q +from utils.rotate_captcha import export_single_discern +from xhs.xhs_param import get_xs, encrypt_info, decrypt_info +from loguru import logger + + +class SignalCaptcha(object): + """ + 小红书单旋转验证码 + """ + def __init__(self, web_session, verify_uuid, + a1, webId, source="", is_proxy=False): + self.is_proxy = is_proxy + self.source = source + self.verify_uuid = verify_uuid + self.register_url = "https://edith.xiaohongshu.com/api/redcaptcha/v2/captcha/register" + self.check_url = "https://edith.xiaohongshu.com/api/redcaptcha/v2/captcha/check" + self.headers = { + "authority": "edith.xiaohongshu.com", + "accept": "application/json, text/plain, */*", + "accept-language": "zh-CN,zh;q=0.9", + "cache-control": "no-cache", + "content-type": "application/json;charset=UTF-8", + "origin": "https://www.xiaohongshu.com", + "pragma": "no-cache", + "referer": "https://www.xiaohongshu.com/", + "sec-ch-ua": "\"Not_A Brand\";v=\"8\", \"Chromium\";v=\"120\", \"Google Chrome\";v=\"120\"", + "sec-ch-ua-mobile": "?0", + "sec-ch-ua-platform": "\"macOS\"", + "sec-fetch-dest": "empty", + "sec-fetch-mode": "cors", + "sec-fetch-site": "same-site", + "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36", + "x-s": "XYW_eyJzaWduU3ZuIjoiNTEiLCJzaWduVHlwZSI6IngxIiwiYXBwSWQiOiJsb2dpbiIsInNpZ25WZXJzaW9uIjoiMSIsInBheWxvYWQiOiJkNzkxNmQ0MDAyOTZmZDg4ZmIzYjcxOGY2MWRlOGU2MTEwYzZmMTBlMjZiOWI0NTQ1OTg0M2VjMTI2NmRlMGZiNDNkZGI3MmE5MWYyOTJkZTM4Yjk3MDlmZjcyMDBmMTRjOWUzYmZkYTFmYWExZWI5MGQ3NGFhMzFiNTRjNzJjZDBkNzRhYTMxYjU0YzcyY2RhYzQ4OWI5ZGE4Y2U1ZTQ4ZjRhZmI5YWNmYzNlYTI2ZmUwYjI2NmE2YjRjYzNjYjVhMDE2NzA1NzIyMWMxZjhkMzY4YzFkMjBjZGE4MGY5OWIxMWYyZWFhMGE5ZmQ3MWQ3NmZmZTgwMmI3MjM3NWQ2OWZiY2JjYzk1OTUxMmNhZDRmZWFjNWU1MjY1MDljYTliZDA3MzE0OGZjMDEzYzJlMzU4ZWE1ZDg5ZGQ4MzZkNWU2OTM4NGJkN2FmNjQ3MjY0ZmNjZWQxMmVkMWFiNmFjY2U1YTE1MWZmZDMzODNlZDE4OGMyMWE4OTlmY2E2Y2UifQ==", + "x-s-common": "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", + "x-t": "1709171462456" + } + + self.pic_headers = { + "authority": "picasso-static.xiaohongshu.com", + "accept": "image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8", + "accept-language": "zh-CN,zh;q=0.9", + "cache-control": "no-cache", + "origin": "https://www.xiaohongshu.com", + "pragma": "no-cache", + "sec-ch-ua": "\"Not_A Brand\";v=\"8\", \"Chromium\";v=\"120\", \"Google Chrome\";v=\"120\"", + "sec-ch-ua-mobile": "?0", + "sec-ch-ua-platform": "\"macOS\"", + "sec-fetch-dest": "image", + "sec-fetch-mode": "cors", + "sec-fetch-site": "same-site", + "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" + } + + self.cookies = { + "a1": a1, + "webId": webId, + "web_session": web_session, + } + + + @staticmethod + def get_slide_track(distance): + """ + 根据滑动距离生成滑动轨迹 + :param distance: 需要滑动的距离 + :return: 滑动轨迹: [[x,y,t], ...] + x: 已滑动的横向距离 + y: 已滑动的纵向距离, 除起点外, 均为0 + t: 滑动过程消耗的时间, 单位: 毫秒 + """ + t = 246 + count = random.randint(4, 10) + _y_list = [0, 0, -1, 1, 1, 1, 1, 0] + y = 0 + x = 0 + slide_track = [[0, 0, 246]] + + for i in range(count): + if x >= distance: + break + + t += random.randint(50, 200) + y += _y_list[random.randint(0, 7)] + x += random.randint(30, 60) + slide_track.append([x, y, t]) + + if x != distance: + slide_track[-1][0] = distance + return slide_track, slide_track[-1][-1] + + @staticmethod + def get_captcha_info(fg_path, bg_path): + """ + 图片识别 以及对于captcha_info加密参数的封装 + :param fg_path: + :param bg_path: + :return: + """ + angle = export_single_discern(fg_path, bg_path) + distance = math.ceil(angle * 0.79) + logger.info(f"处理后的 距离为 : {distance}") + track, last_time = SignalCaptcha.get_slide_track(distance) + _time = last_time + random.randint(100, 200) # 处理字段 + logger.info(f"_time: {_time}") + logger.info(f"track : {track}") + captcha_info = { + "mouseEnd": encrypt_info(str(distance), _type="mouseEnd"), + "time": encrypt_info(str(_time), _type="time"), + "track": encrypt_info(str(track).replace(" ", ""), _type="track"), + "width": encrypt_info("286", _type="width") + } + + captcha_info = json.dumps(captcha_info, ensure_ascii=False, separators=(',', ':')) + + return captcha_info + + def check(self, rid, captcha_info): + """ + 验证函数:最终提交验证码验证请求 + :param rid: + :param captcha_info: + :return: + """ + data = { + "rid": rid, + "verifyType": 102, + "verifyBiz": "461", + "verifyUuid": self.verify_uuid, + "biz": "sns_web", + "sourceSite": self.source, + "version": "1.0.1", + "captchaInfo": captcha_info + } + + headers = self.headers.copy() + data = json.dumps(data, separators=(',', ':'), ensure_ascii=False) + h = get_xs(self.cookies["a1"], "/api/redcaptcha/v2/captcha/check", data, str(int(time.time() * 1000))) + headers.update(h) + logger.info(data) + response = download_q(self.check_url, headers=headers, cookies=self.cookies, + data=data, is_proxy=self.is_proxy) + return response.json() + + def register(self): + """ + 初始化函数:获得验证码初始化信息请求 + :return: + """ + data = { + "secretId": "000", + "verifyType": "102", + "verifyUuid": self.verify_uuid, + "verifyBiz": "461", + "biz": "sns_web", + "sourceSite": self.source, + "version": "1.0.1" + } + data = json.dumps(data, separators=(',', ':'), ensure_ascii=False) + h = get_xs(self.cookies["a1"], "/api/redcaptcha/v2/captcha/register", data, str(int(time.time() * 1000))) + headers = self.headers.copy() + headers["x-s-common"] = "" + headers.update(h) + response = download_q(self.register_url, headers=headers, cookies=self.cookies, + data=data, is_proxy=self.is_proxy) + return response.json() + + def run(self): + """ + main: 执行函数 + :return: + """ + try: + register_data = self.register() + logger.info(f"初始化验证码信息:{register_data}") + data = register_data["data"] + rid = data["rid"] + captcha_info = data["captchaInfo"] + source = json.loads(decrypt_info(captcha_info)[:-2]) # 因为有补位则去掉补位结果 + logger.info(f"解密验证码初始信息:{source}") + bg_url = source["backgroundUrl"] + fg_url = source["captchaUrl"] + bg_path = download_q(bg_url, headers=self.pic_headers, cookies={}).content + fg_path = download_q(fg_url, headers=self.pic_headers, cookies={}).content + captcha_info = SignalCaptcha.get_captcha_info(fg_path, bg_path) + logger.info(f"生成验证信息:{captcha_info}") + result = self.check(rid, captcha_info) + logger.info(f"验证结果:{result}") + except Exception as e: + result = {"msg": "失败", "data": {}} + logger.error(e) + + return result + + +if __name__ == '__main__': + verify_uuid = "22318d30-daf4-4fc1-8148-c26d86b0a51a*CiZjkIoB" + web_session = "030037a2d377ba382693826598224a7950081e" + a1 = "" + webId = "" + source = "https://www.xiaohongshu.com/explore/65c02be2000000002c028b93" + A = SignalCaptcha(web_session, verify_uuid, a1, webId, source=source) + res = A.run() + print(res) diff --git a/xhs/xhs_des.py b/xhs/xhs_des.py new file mode 100644 index 0000000..091556f --- /dev/null +++ b/xhs/xhs_des.py @@ -0,0 +1,226 @@ +import ctypes +from functools import reduce +from hashlib import md5 + +""" +标准des,由于不知道部分key的utf-8, +通过捕获的key还原标准des调用 +""" + +def MD5(strs): + m = md5() + m.update(strs.encode("utf-8")) + return m.hexdigest() + + +def hex_2_str(v: int): + v = v & 0xffffffff # 将结果转换为32位有符号整数 + tmp = str(hex(v))[2:] + return "0" + tmp if len(tmp) % 2 > 0 else tmp + + +def logical_left_shift(n, bits): + """ + 有符号左移 + :param n: + :param bits: + :return: + """ + return ctypes.c_int(n << bits).value + + +def logical_right_shift(n, bits): + """ + 无符号右移 + :param n: + :param bits: + :return: + """ + return (n % 0x100000000) >> bits + + +def get_s_box(i, j): + """ + sbox + :param i: + :param j: + :return: + """ + s_box1 = [-2146402272, -2147450880, 32768, 1081376, 1048576, 32, -2146435040, -2147450848, -2147483616, -2146402272, + -2146402304, -2147483648, -2147450880, 1048576, 32, -2146435040, 1081344, 1048608, -2147450848, 0, + -2147483648, 32768, 1081376, -2146435072, 1048608, -2147483616, 0, 1081344, 32800, -2146402304, + -2146435072, 32800, 0, 1081376, -2146435040, 1048576, -2147450848, -2146435072, -2146402304, 32768, + -2146435072, -2147450880, 32, -2146402272, 1081376, 32, 32768, -2147483648, 32800, -2146402304, 1048576, + -2147483616, 1048608, -2147450848, -2147483616, 1048608, 1081344, 0, -2147450880, 32800, -2147483648, + -2146435040, -2146402272, 1081344] + s_box2 = [8396801, 8321, 8321, 128, 8396928, 8388737, 8388609, 8193, 0, 8396800, 8396800, 8396929, 129, 0, 8388736, + 8388609, 1, 8192, 8388608, 8396801, 128, 8388608, 8193, 8320, 8388737, 1, 8320, 8388736, 8192, 8396928, + 8396929, 129, 8388736, 8388609, 8396800, 8396929, 129, 0, 0, 8396800, 8320, 8388736, 8388737, 1, 8396801, + 8321, 8321, 128, 8396929, 129, 1, 8192, 8388609, 8193, 8396928, 8388737, 8193, 8320, 8388608, 8396801, + 128, 8388608, 8192, 8396928] + s_box3 = [536870928, 541065216, 16384, 541081616, 541065216, 16, 541081616, 4194304, 536887296, 4210704, 4194304, + 536870928, 4194320, 536887296, 536870912, 16400, 0, 4194320, 536887312, 16384, 4210688, 536887312, 16, + 541065232, 541065232, 0, 4210704, 541081600, 16400, 4210688, 541081600, 536870912, 536887296, 16, + 541065232, 4210688, 541081616, 4194304, 16400, 536870928, 4194304, 536887296, 536870912, 16400, 536870928, + 541081616, 4210688, 541065216, 4210704, 541081600, 0, 541065232, 16, 16384, 541065216, 4210704, 16384, + 4194320, 536887312, 0, 541081600, 536870912, 4194320, 536887312] + s_box4 = [268439616, 4096, 262144, 268701760, 268435456, 268439616, 64, 268435456, 262208, 268697600, 268701760, + 266240, 268701696, 266304, 4096, 64, 268697600, 268435520, 268439552, 4160, 266240, 262208, 268697664, + 268701696, 4160, 0, 0, 268697664, 268435520, 268439552, 266304, 262144, 266304, 262144, 268701696, 4096, + 64, 268697664, 4096, 266304, 268439552, 64, 268435520, 268697600, 268697664, 268435456, 262144, 268439616, + 0, 268701760, 262208, 268435520, 268697600, 268439552, 268439616, 0, 268701760, 266240, 266240, 4160, + 4160, 262208, 268435456, 268701696] + s_box5 = [16843776, 0, 65536, 16843780, 16842756, 66564, 4, 65536, 1024, 16843776, 16843780, 1024, 16778244, + 16842756, 16777216, 4, 1028, 16778240, 16778240, 66560, 66560, 16842752, 16842752, 16778244, 65540, + 16777220, 16777220, 65540, 0, 1028, 66564, 16777216, 65536, 16843780, 4, 16842752, 16843776, 16777216, + 16777216, 1024, 16842756, 65536, 66560, 16777220, 1024, 4, 16778244, 66564, 16843780, 65540, 16842752, + 16778244, 16777220, 1028, 66564, 16843776, 1028, 16778240, 16778240, 0, 65540, 66560, 0, 16842756] + s_box6 = [520, 134349312, 0, 134348808, 134218240, 0, 131592, 134218240, 131080, 134217736, 134217736, 131072, + 134349320, 131080, 134348800, 520, 134217728, 8, 134349312, 512, 131584, 134348800, 134348808, 131592, + 134218248, 131584, 131072, 134218248, 8, 134349320, 512, 134217728, 134349312, 134217728, 131080, 520, + 131072, 134349312, 134218240, 0, 512, 131080, 134349320, 134218240, 134217736, 512, 0, 134348808, + 134218248, 131072, 134217728, 134349320, 8, 131592, 131584, 134217736, 134348800, 134218248, 520, + 134348800, 131592, 8, 134348808, 131584] + s_box7 = [256, 34078976, 34078720, 1107296512, 524288, 256, 1073741824, 34078720, 1074266368, 524288, 33554688, + 1074266368, 1107296512, 1107820544, 524544, 1073741824, 33554432, 1074266112, 1074266112, 0, 1073742080, + 1107820800, 1107820800, 33554688, 1107820544, 1073742080, 0, 1107296256, 34078976, 33554432, 1107296256, + 524544, 524288, 1107296512, 256, 33554432, 1073741824, 34078720, 1107296512, 1074266368, 33554688, + 1073741824, 1107820544, 34078976, 1074266368, 256, 33554432, 1107820544, 1107820800, 524544, 1107296256, + 1107820800, 34078720, 0, 1074266112, 1107296256, 524544, 33554688, 1073742080, 524288, 0, 1074266112, + 34078976, 1073742080] + s_box8 = [2097152, 69206018, 67110914, 0, 2048, 67110914, 2099202, 69208064, 69208066, 2097152, 0, 67108866, 2, + 67108864, 69206018, 2050, 67110912, 2099202, 2097154, 67110912, 67108866, 69206016, 69208064, 2097154, + 69206016, 2048, 2050, 69208066, 2099200, 2, 67108864, 2099200, 67108864, 2099200, 2097152, 67110914, + 67110914, 69206018, 69206018, 2, 2097154, 67108864, 67110912, 2097152, 69208064, 2050, 2099202, 69208064, + 2050, 67108866, 69208066, 69206016, 2099200, 0, 2, 69208066, 0, 2099202, 69206016, 2048, 67108866, + 67110912, 2048, 2097154] + + s_box = [s_box1, s_box2, s_box3, s_box4, s_box5, s_box6, s_box7, s_box8] + return s_box[i][j] + + +def alg_main(key, _plaintext_left, _plaintext_right): + """ + 3.轮密钥和明文块计算 + 计算后的明文还原 + :param key: + :param _plaintext_left: + :param _plaintext_right: + :return: 处理后的16进制字符串、处理后的字符串 + """ + for i in range(0, len(key), 2): + _key = key[i] # 轮密钥 + _key2 = key[i+1] + tmp = _plaintext_right ^ _key + tmp1 = (logical_right_shift(_plaintext_right, 4) | logical_left_shift(_plaintext_right, 28)) ^ _key2 + + mid = get_s_box(0, logical_right_shift(tmp, 24) & 63) | get_s_box(1, logical_right_shift(tmp, 16) & 63) | \ + get_s_box(2, logical_right_shift(tmp, 8) & 63) | get_s_box(3, tmp & 63) | \ + get_s_box(4, logical_right_shift(tmp1, 24) & 63) | get_s_box(5, logical_right_shift(tmp1, 16) & 63) | \ + get_s_box(6, logical_right_shift(tmp1, 8) & 63) | get_s_box(7, tmp1 & 63) + + tmp2 = _plaintext_left ^ mid + _plaintext_left = _plaintext_right # 左边继承右边 + _plaintext_right = tmp2 + + # print(f"第{i}轮 ; ", _plaintext_left, _plaintext_right, mid, _key, _key2, tmp, tmp1) + # break + + t1 = logical_right_shift(_plaintext_right, 1) | logical_left_shift(_plaintext_right, 31) + t2 = logical_right_shift(_plaintext_left, 1) | logical_left_shift(_plaintext_left, 31) + t3 = (logical_right_shift(t1, 1) ^ t2) & 1431655765 + t4 = t2 ^ t3 + t5 = t1 ^ logical_left_shift(t3, 1) + t6 = (logical_right_shift(t4, 8) ^ t5) & 16711935 + t7 = t5 ^ t6 + t8 = t4 ^ logical_left_shift(t6, 8) + t9 = (logical_right_shift(t8, 2) ^ t7) & 858993459 + t10 = t7 ^ t9 + t11 = logical_left_shift(t9, 2) ^ t8 + t12 = (logical_right_shift(t10, 16) ^ t11) & 65535 + t13 = t11 ^ t12 + t14 = t10 ^ logical_left_shift(t12, 16) + t15 = (logical_right_shift(t14, 4) ^ t13) & 252645135 + t16 = t15 ^ t13 + t17 = t14 ^ logical_left_shift(t15, 4) + + b1 = logical_right_shift(t17, 24) + b2 = logical_right_shift(t17, 16) & 255 + b3 = logical_right_shift(t17, 8) & 255 + b4 = t17 & 255 + + b5 = logical_right_shift(t16, 24) + b6 = logical_right_shift(t16, 16) & 255 + b7 = logical_right_shift(t16, 8) & 255 + b8 = t16 & 255 + + segment_list = [b1, b2, b3, b4, b5, b6, b7, b8] + segment = "".join([chr(s) for s in segment_list]) + segment_hex = "".join([hex_2_str(s) for s in segment_list]) + # print(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17) + # print(segment) + # print(segment_hex) + return segment_hex, segment + + +def deal_array2(array1_res, array2_res): + """ + 2. 明文块预处理(和alg_main中的后半部分是可逆的) + :param array1_res: + :param array2_res: + :return: + """ + tmp = (logical_right_shift(array1_res, 4) ^ array2_res) & 252645135 + tmp1 = array2_res ^ tmp + tmp1_ = array1_res ^ logical_left_shift(tmp, 4) + tmp2 = (logical_right_shift(tmp1_, 16) ^ tmp1) & 65535 + tmp2_ = tmp1 ^ tmp2 + tmp3 = logical_right_shift(tmp2_, 2) + tmp4 = tmp1_ ^ logical_left_shift(tmp2, 16) + tmp5 = (tmp3 ^ tmp4) & 858993459 + tmp5_ = logical_left_shift(tmp5, 2) + tmp6 = tmp5 ^ tmp4 + tmp7 = (logical_right_shift(tmp2_ ^ tmp5_, 8) ^ tmp6) & 16711935 + tmp7_ = tmp6 ^ tmp7 + tmp8 = logical_right_shift(tmp7_, 1) + tmp9 = tmp2_ ^ tmp5_ ^ logical_left_shift(tmp7, 8) + tmp10 = (tmp8 ^ tmp9) & 1431655765 + tmp10_ = tmp9 ^ tmp10 + tmp11 = tmp7_ ^ logical_left_shift(tmp10, 1) + tmp12 = logical_left_shift(tmp11, 1) | logical_right_shift(tmp11, 31) + tmp13 = logical_left_shift(tmp10_, 1) | logical_right_shift(tmp10_, 31) + + return tmp12, tmp13 + + +def deal_array(array): + """ + 1.简单处理块 + :param array: + :return: + """ + for i in range(len(array)): + array[i] = array[i] << (24 - 8 * i) + res = reduce(lambda x, y: x | y, array) + return res + + +def des_encrypt(key, plain_text): + """ + des加密入口 + :param key: list + :param plain_text: list + :return: + """ + array1_hex = [] + array1_string = [] + for m in range(0, len(plain_text), 8): + left_list, right_list = plain_text[m:m + 4], plain_text[m + 4:m + 8] + left, right = deal_array2(deal_array(left_list), deal_array(right_list)) + segment_hex, segment = alg_main(key, left, right) + array1_hex.append(segment_hex) + array1_string.append(segment) + _hex = "".join(array1_hex) + _string = "".join(array1_string) + return _hex, _string + + diff --git a/xhs/xhs_param.py b/xhs/xhs_param.py new file mode 100644 index 0000000..9eb3ff7 --- /dev/null +++ b/xhs/xhs_param.py @@ -0,0 +1,199 @@ +import binascii +import json +import random +import time + +from utils.tool import download_q +from xhs.xhs_aes import aes_encrypt +from xhs.xhs_des import MD5, des_encrypt, logical_right_shift +import base64 +""" +修补xhs xs-xt 算法为 aes +""" + +def get_xs(a1, url, data, x_t): + """ + 获得 {"x-s":"", "x-t": ""} + :param a1: + :param url: + :param data: + :param x_t: + :return: + """ + key = [187050025, 472920585, 186915882, 876157969, 255199502, 806945584, 220596020, 958210835, 757275681, 940378667, + 489892883, 705504304, 354103316, 688857884, 890312192, 219096591, 622400037, 254088489, 907618332, 52759587, + 907877143, 53870614, 839463457, 389417746, 975774727, 372382245, 437136414, 909246726, 168694017, 473575703, + 52697872, 1010440969] + + # 7.19 改 + key = [52833590, 1010372866, 188091914, 406398501, 255201040, 957421848, 741478954, 958217745, 758320394, 990653224, + 958072630, 722273561, 890968096, 185282339, 890768915, 254222393, 890835209, 86457382, 907354431, 120004616, + 906834724, 120984878, 841809977, 370543655, 405617431, 909250592, 439235128, 875174166, 187044111, 742001189, + 184950816, 1010310941] + + def get_enviroment(api="/api/sns/web/v1/feed", data="{}"): + url = f"url={api}" + info = url + data + info = MD5(info) + return info + + x1 = get_enviroment(url, data) + x2 = "0|0|0|1|0|0|1|0|0|0|1|0|0|0|0" + x3 = a1 + x4 = x_t + info = f"x1={x1};x2={x2};x3={x3};x4={x4};" + + key_46_base64 = base64.b64encode(info.encode('utf-8')).decode('utf-8') + # base64 转为十进制数 + array = [ord(i) for i in key_46_base64] + + # 对上述数组进行位移操作 初始化明文 每四个数为一组进行计算 + # payload = des_encrypt(key, array)[0] + payload = aes_encrypt(array) + + _base_data = { + "signSvn": "53", + "signType": "x2", + "appId": "xhs-pc-web", + "signVersion": "1", + "payload": payload + } + data = json.dumps(_base_data, ensure_ascii=False, separators=(',', ':')) + x_s = base64.b64encode(data.encode("utf-8")).decode("utf-8") + + return {"x-s": "XYW_" + x_s, "x-t": x4} + + +def decrypt_info(captcha_info): + """ + 对于验证码的captchaInfo进行解密 + :param captcha_info: + :return: + """ + d1_h = base64.b64decode(captcha_info).hex() + hex_string = [int(d1_h[i:i + 2], 16) for i in range(0, len(d1_h), 2)] + + key = [302776838, 875694381, 453784583, 103810086, 571285557, 371853838, 805843717, 657858610, 909711421, 117571586, + 806950164, 52892707, 890572860, 184812328, 605753650, 151859252, 890381338, 556605977, 221318145, 688470832, + 20581922, 940376595, 220597508, 706218773, 707144202, 940115729, 153491459, 892344601, 171182610, 337259779, + 36577297, 271782150] + + payload = des_encrypt(key, hex_string)[-1] + + return payload + + +def encrypt_info(plain_text, _type="mouseEnd"): + """ + 提交参数进行加密: + mouseEnd: 最终滑动的距离 比例 286/360 + time: 开始到结束的时间差 毫秒级 + track: 轨迹:[x,y,时间差] + width: 宽度 固定 286 + :param plain_text: + :param _type: + :return: + """ + key_list = { + "mouseEnd": [187040774,941175553,188094512,672732199,87169561,957943856,758133532,957159952,756225326,588057094,890963239,185401634,889790517,185020707,874067993,103227439,874058250,119748888,906756366,119942921,571280678,104203531,304941601,372245811,439101969,808593969,170278418,876218908,186782722,1010306836,187048244,942146861], + "time": [151392289,942357812,20069652,739772683,18094115,959001623,789850125,17376056,624043796,51713567,606673961,990187014,1007232771,571224112,286990908,36584204,872954931,235544848,18625028,103158589,35458076,86060551,908336391,19927066,572793385,842413842,170468621,907553325,422194994,806880270,170526239,738861861], + "track": [187578120,538642213,135659559,941298489,221391896,489174819,724704537,688193565,605502240,723068432,890766372,453786172,691602974,50791978,874190097,656489730,337328660,120465962,856495123,218504222,805646351,104007424,373040900,371339527,170658349,622200847,539437315,876100658,455352379,975704860,456002850,940583190], + "width": [187040774,941175553,188094512,672732199,87169561,957943856,758133532,957159952,756225326,588057094,890963239,185401634,889790517,185020707,874067993,103227439,874058250,119748888,906756366,119942921,571280678,104203531,304941601,372245811,439101969,808593969,170278418,876218908,186782722,1010306836,187048244,942146861] + } + key = key_list[_type] + padding = 8 - len(plain_text) % 8 + + plain_text = [ord(i) for i in plain_text] + for c in range(padding): # 补位 + plain_text.append(padding) + + array1_hex2 = des_encrypt(key, plain_text)[0] + byte_data = binascii.unhexlify(array1_hex2) + base64_data = base64.b64encode(byte_data).decode("utf-8") + return base64_data + + +def get_a1(platform_type="Mac OS"): + """ + 获取cookie a1、webId 平台类型可能会涉及风控 + :param platform_type: + :return: + """ + + def genRandomString(length): + char_list = "abcdefghijklmnopqrstuvwxyz1234567890" + return ''.join(random.sample(char_list, length)) + + def crc32(data): + table = [] + for num in range(256): + temp = num + for _ in range(8): + temp = (logical_right_shift(temp, 1)) ^ 0XEDB88320 if temp & 1 else logical_right_shift(temp, 1) + table.append(temp) + i = -1 + for a in range(len(data)): + i = logical_right_shift(i, 8) ^ table[255 & (i ^ ord(data[a]))] + return logical_right_shift((-1 ^ i), 0) + + def getPlatformCode(t): + # 根据不同系统返回结果 + if t == "Android": + return "2" + elif t == "iOS": + return "1" + elif t == "Mac OS": + return "3" + elif t == "Linux": + return "4" + # elif t == "Windows": + # return "0" + else: + return "5" + + LOCAL_ID_SECRET_VERSION = "0" + o = str(hex(int(time.time() * 1000))[2:]) + o = o + genRandomString(30) + o = o + getPlatformCode(platform_type) + LOCAL_ID_SECRET_VERSION + "000" + o = o + str(crc32(o)) + a1 = o[:52] + + web_id = MD5(a1) + return a1, web_id + + +def get_comment(a1, xs, xt): + """ + 通过调用node来获得x-comment参数 + :param a1: + :param xs: + :param xt: + :return: + """ + url = "http://127.0.0.1:3000/xhs/get_comment" + data = { + "a1": a1, + "xs": xs, + "xt": xt + } + status, response = download_q(url, {}, {}, data=data) + return response.text + +if __name__ == '__main__': + data = { + "source_note_id": "64bf4ea7000000000c035e48", + "image_formats": [ + "jpg", + "webp", + "avif" + ], + "extra": { + "need_body_topic": "1" + }, + "xsec_source": "pc_feed", + "xsec_token": "ABSnHLvO9lnVSMKpZb-K1Cpn6d3xUC3z_mhRBvAbPGIe4=" + } + data = json.dumps(data, ensure_ascii=False, separators=(',', ':')) + + res = get_xs("191452e29d5vt5m5noazsyty9z4z3z695yoiu1pn130000168225", "/api/sns/web/v1/feed",data, "1723443461839") + print(res) \ No newline at end of file