commit 3ff503dd7b5059b24df7ae0a7ae6d7795fa0ea49 Author: chickliu Date: Thu Nov 14 01:23:08 2024 +0800 上传文件至 / diff --git a/91阅读_1.6.py b/91阅读_1.6.py new file mode 100644 index 0000000..ec36a0c --- /dev/null +++ b/91阅读_1.6.py @@ -0,0 +1,52 @@ +# --------------------------------注释区-------------------------------- +# 入口:http://vpxzmxosdoepguypfyonle.gwc63ltoaizgg1usjj2.cn/index/invite/UilSMFU_aAWBWMQ +# +# 需抓取数据: +# * 填写自动过检的api接口 本地 内网ip:5000 非本地自行进行穿透 +# * 登录多少个账号就跑多少个账号 +# +# +# 抓取请求头中的user-agent填入yuanshen_useragent 无论多少个号都只填一个即可!!!! +# +# 变量名:yuanshen_api +# 满3自动微信提现 +# +# --------------------------------祈求区-------------------------------- +# _ooOoo_ +# o8888888o +# 88" . "88 +# (| -_- |) +# O\ = /O +# ____/`---'\____ +# . ' \\| |// `. +# / \\||| : |||// \ +# / _||||| -:- |||||- \ +# | | \\\ - /// | | +# | \_| ''\---/'' | | +# \ .-\__ `-` ___/-. / +# ___`. .' /--.--\ `. . __ +# ."" '< `.___\_<|>_/___.' >'"". +# | | : `- \`.;`\ _ /`;.`/ - ` : | | +# \ \ `-. \_ __\ /__ _/ .-` / / +# ======`-.____`-.___\_____/___.-`____.-'====== +# `=---=' +# +# ............................................. +# 佛祖保佑 永无BUG +# 佛祖镇楼 BUG辟邪 +# --------------------------------代码区-------------------------------- +''' +Powered By Huaji +QQ Group:901898186 +Create at [2024-11-11 19:45] + + __ __ __ __ ___ __ __ +| | | | | | | | / \ | | | | +| |__| | | | | | / ^ \ | | | | +| __ | | | | | / /_\ \ .--. | | | | +| | | | | `--' | / _____ \ | `--' | | | +|__| |__| \______/ /__/ \__\ \______/ |__| + +''' +import zlib,base64,zlib,lzma,bz2,gzip +exec((lambda O0O0O0O0O0O0O0O00O00O00O0O00O00O00O0O0O0O0O0O0O0O00O00O00O0O0O0O00O00O00O0O0O0O00O00O00O00O0O00O00O00O0O0O00O00O00O0O0O0O0O00O00O0O00O00O00O0O0O0O0O0O00O0O0O00O00O0O0O00O00O0O0O00O0O00O00O00O00O00O0O00O00O0O0O0O0O00O00O0O00O0O0O0O0O00O0O00O00O0O00O00:compile(O0O0O0O0O0O0O0O00O00O00O0O00O00O00O0O0O0O0O0O0O0O00O00O00O0O0O0O00O00O00O0O0O0O00O00O00O00O0O00O00O00O0O0O00O00O00O0O0O0O0O00O00O0O00O00O00O0O0O0O0O0O00O0O0O00O00O0O0O00O00O0O0O00O0O00O00O00O00O00O0O00O00O0O0O0O0O00O00O0O00O0O0O0O0O00O0O00O00O0O00O00,(lambda s:zlib.decompress(base64.b64decode(s)).decode())('eJyzKS4pysxLtwMADfkDEg=='),(lambda s:zlib.decompress(base64.b64decode(s)).decode())('eJxLrUhNBgAELQGm')))(zlib.decompress(lzma.decompress(bz2.decompress(gzip.decompress(base64.b64decode((lambda s:zlib.decompress(base64.b64decode(s)).decode())('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')))))).decode())) \ No newline at end of file diff --git a/叮叮联盟_api_1.6.py b/叮叮联盟_api_1.6.py new file mode 100644 index 0000000..194e6b9 --- /dev/null +++ b/叮叮联盟_api_1.6.py @@ -0,0 +1,492 @@ +# --------------------------------注释区-------------------------------- +# 入口:http://nmub7w.jlnrj.cn?mid=1786918&r=OKgDUXIa&e=1730731520 +# +# 需抓取数据: +# * 填写穿透出来的api接口 +# +# 抓取请求头中的user-agent填入yuanshen_useragent 无论多少个号都只填一个即可!!!! +# +# 变量名:yuanshen_api +# +# --------------------------------祈求区-------------------------------- +# _ooOoo_ +# o8888888o +# 88" . "88 +# (| -_- |) +# O\ = /O +# ____/`---'\____ +# . ' \\| |// `. +# / \\||| : |||// \ +# / _||||| -:- |||||- \ +# | | \\\ - /// | | +# | \_| ''\---/'' | | +# \ .-\__ `-` ___/-. / +# ___`. .' /--.--\ `. . __ +# ."" '< `.___\_<|>_/___.' >'"". +# | | : `- \`.;`\ _ /`;.`/ - ` : | | +# \ \ `-. \_ __\ /__ _/ .-` / / +# ======`-.____`-.___\_____/___.-`____.-'====== +# `=---=' +# +# ............................................. +# 佛祖保佑 永无BUG +# 佛祖镇楼 BUG辟邪 +# --------------------------------代码区-------------------------------- +import requests +import time +import os +import json +import hashlib +import random +import logging +from urllib.parse import urlparse, parse_qs,quote,unquote +import sys +import string +from base64 import b64encode +import uuid +from datetime import datetime,timedelta +import re +logging.basicConfig(level=logging.INFO, format='[%(levelname)s] ===> %(message)s') +code = "叮叮联盟_api版" +ver = "1.6" +envname = "yuanshen_api" + +debug = False #debug模式 开启即从脚本内部获取环境变量 +debugcookie = "" #debug模式cookie + +is_bulletin = False #公告开关 +is_toulu = False #偷撸公告开关 +is_with_sleep = False #是否开启随机延时 +def get_sm(): + global bizlist + try: + url = "https://api.huaji.asia/read_api/biz_ddlm.txt" + r = requests.get(url) + if r.status_code == 200: + logging.info(f"联网获取检测文章列表成功") + bizlist = r.text.split(",") + else: + logging.error("联网获取检测文章列表失败!") + bizlist = [] + except: + logging.error("联网获取检测文章列表失败!") + bizlist = [] + +class env(): + """ + env模块,获取cookie并转成列表,统计时间,提示脚本开始结束,检测一些配置,try except异常处理 + :param args: 传递给env的参数 + :param kwargs: 传递给env的关键字参数 + :return: Null + + Powered by huaji + """ + def __init__(self, *args, **kwargs): + self.cookie = None + self.env_ver = '1.5' #版本号 + self.split_chars = ['@', '&', '\n'] #分隔符 + self.identifiers = ['Powered By Huaji', 'QQ Group:901898186', 'yuanshen'] #标识符 + def check_file(self): + file_path = __file__ + try: + + with open(file_path, 'r', encoding='utf-8') as file: + content = file.read() + + results = {} + + # 批量检查每个标识符 + for identifier in self.identifiers: + if identifier in content: + results[identifier] = True + else: + results[identifier] = False + logging.error(f"文件可能被恶意篡改,请勿修改文件内容") + + all_identifiers_present = all(results.values()) + if not all_identifiers_present: + logging.error(f"文件可能被恶意篡改,请勿修改文件内容") + self.force_exit() + + except Exception as e: + print(f"读取文件时发生错误: {e}") + self.force_exit() + + def split_cookies(self): + """根据多个分隔符分割cookie""" + for sep in self.split_chars: + if sep in self.cookie: + return self.cookie.split(sep) + return [self.cookie] + + def scmain(self): + get_sm() + apiurl = 'http://' + self.cookies[0] + r = requests.get(apiurl + '/getallwx').json() + for i, cookie in enumerate(r, 1): + print(f"--------开始第{i}个账号--------") + main = yuanshen(cookie,apiurl) + main.main() + print(f"--------第{i}个账号执行完毕--------") + + + + def force_exit(self,code=0): + exit() + print("Warning: 篡改你妈") + os._exit(code) # 强制退出程序 + sys.exit(code) # 正常退出 + import ctypes + while True: + ctypes.string_at(114514) + ctypes.string_at(1919810) + ctypes.string_at(666666) + print("Warning: 篡改你妈") + + + def run(self): + if not os.getenv(envname) and not debug: + logging.warning(f"请先设置环境变量[{envname}]") + self.force_exit() + + self.cookie = os.getenv(envname, "") + + if debug: + self.cookie = debugcookie + if is_bulletin: + try: + print(requests.get("https://gitee.com/HuaJiB/yuanshen34/raw/master/pubilc.txt").text, "\n\n\n") + except: + logging.error("网络异常,链接公告服务器失败(gitee),请检查网络") + self.force_exit() + if is_toulu: + try: + txt = ''' +此为滑稽的偷撸本本 如你不在滑稽的小群却意外通过某种渠道获得了该脚本 +请联系QQ3487934983 提供证据后 你将代替泄露人员获得该群位置 +======================================================= + ''' + print(txt*5) + except: + self.force_exit() + if is_with_sleep: + random_time = random.randint(10,60) + logging.info(f"随机延时[{random_time}]秒") + time.sleep(random_time) + + self.cookies = self.split_cookies() + account_count = len(self.cookies) + logging.info(f"一共获取到{account_count}个账号") + print(f"=========🔔开始执行[{code}][{ver}]=========\n") + + + start_time = time.time() + if debug: + self.scmain() + else: + try: + self.scmain() + except Exception as e: + logging.error(f"脚本执行出错: {e}") + end_time = time.time() + + execution_time = end_time - start_time + + print(f"\n============🔔脚本[{code}]执行结束============") + print(f"本次脚本总运行时间: [{execution_time:.2f}] 秒") + self.force_exit() + + def main(self): + self.check_file() + self.run() + + def random_str(self,charset="all", length=8, to_upper=False,to_lower=False): + if charset == "all": #包含大小写字母和数字 + chars = string.ascii_letters + string.digits + elif charset == "letters": #大小写字母 + chars = string.ascii_letters + elif charset == "digits": + chars = string.digits + elif charset == "lowercase": #小写字母 + chars = string.ascii_lowercase + elif charset == "uuid": + return str(uuid.uuid4()) + elif charset == "uuid_str": + return str(uuid.uuid4()).replace("-", "") + elif charset != '' and charset is not None: + chars = charset + + + random_string = ''.join(random.choice(chars) for _ in range(length)) + + if to_upper: + return random_string.upper() + elif to_lower: + return random_string.lower() + else: + return random_string + + def aes_encrypt(self,data): + from Crypto.Cipher import AES + from Crypto.Util.Padding import pad, unpad + from binascii import hexlify, unhexlify + key = self.key.encode('utf-8') + iv = self.iv.encode('utf-8') + cipher = AES.new(key, AES.MODE_CBC, iv) + padded_plaintext = pad(data.encode('utf-8'), AES.block_size) + ciphertext = cipher.encrypt(padded_plaintext) + encrypted_base64 = b64encode(ciphertext).decode('utf-8') + + return encrypted_base64 + + + +class yuanshen: + def __init__(self,cookie,apiurl) -> None: + self.apiurl = apiurl + self.Wxid = cookie['Wxid'] + self.bz = cookie['wxname'] + logging.info(f'[{self.bz}]开始运行') + + def login(self): + headers = { + 'User-Agent': ua, + # 'Accept-Encoding': 'gzip, deflate, br, zstd', + 'Content-Type': 'application/json', + 'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Android WebView";v="126"', + 'sec-ch-ua-mobile': '?1', + 'Authorization': 'Bearer', + 'F-RTYFGHVBN': '0cb5cc12b50dddc84c3066433e88194f', + 'sec-ch-ua-platform': '"Android"', + 'Origin': 'http://bsdspbkbbt.r8it3o.cn', + 'X-Requested-With': 'com.tencent.mm', + 'Sec-Fetch-Site': 'cross-site', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Dest': 'empty', + 'Referer': 'http://bsdspbkbbt.r8it3o.cn/', + 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7', +} + + + url = 'https://api.jiudingliliang.com/login/get-auth-url' + data = {"route":"","mid":"1786918"} + r = requests.post(url,json=data,headers=headers).json() + if r['code'] == 10000: + url = r['result']['url'] + + + data = {'Wxid':self.Wxid,'url':url} + url = requests.post(self.apiurl+'/loginbyweb',json=data).json()['url'] + #print(url) + + + h = { + 'User-Agent': ua, + 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/wxpic,image/tpg,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', + # 'Accept-Encoding': 'gzip, deflate, br, zstd', + 'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Android WebView";v="126"', + 'sec-ch-ua-mobile': '?1', + 'sec-ch-ua-platform': '"Android"', + 'upgrade-insecure-requests': '1', + 'x-requested-with': 'com.tencent.mm', + 'sec-fetch-site': 'none', + 'sec-fetch-mode': 'navigate', + 'sec-fetch-user': '?1', + 'sec-fetch-dest': 'document', + 'accept-language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7', + 'priority': 'u=0, i', +} + r = requests.get(url,headers=h,allow_redirects=False) + #print(r.headers) + token = r.headers['Location'].split('token=')[1] + self.h = { + 'User-Agent': ua, + # 'Accept-Encoding': 'gzip, deflate, br, zstd', + 'Content-Type': 'application/json', + 'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Android WebView";v="126"', + 'sec-ch-ua-mobile': '?1', + 'Authorization': f'Bearer {token}', + 'X-NIUBILITY-Y': '', + 'F-RTYFGHVBN': env().random_str(length=32,to_lower=True), + 'sec-ch-ua-platform': '"Android"', + 'Origin': 'http://rdecfgw.cecua.cn', + 'X-Requested-With': 'com.tencent.mm', + 'Sec-Fetch-Site': 'cross-site', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Dest': 'empty', + 'Referer': 'http://rdecfgw.cecua.cn/', + 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7', + } + r = requests.post('https://api.jiudingliliang.com/user/info',json={},headers=self.h).json() + if r['code'] == 10000: + logging.info(f'登录成功') + self.h['X-NIUBILITY-Y'] = r["result"]["uok"] + logging.info(f'登录成功') + else: + logging.info(f'获取阅读入口失败[{r}]') + + def get_readtime(self,url): + h = { + 'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', + 'accept-language': 'zh-CN,zh;q=0.9', + 'cache-control': 'no-cache', + # 'cookie': 'RK=x93V1EQnnk; ptcz=70105284a73b47db6aa5f48a05337a8cd84e98de7bd26d75975059126646db21; pac_uid=0_ZkHRNfy6PMhrH; ua_id=SyF8Nc7qjhUZ6RH8AAAAAHO013VXlTF21GY7ajzLLgs=; _clck=19reoir|1|fpg|0; wxuin=27186344812218; eas_sid=x1Y7v2y759E6j1a811G6q158d0; qq_domain_video_guid_verify=08d525e64ffa56c3; _qimei_uuid42=18a1b130e12100363fb639c628b466967c0e1ac0aa; pgv_pvid=6915337851; _qimei_fingerprint=3c42962857167cc55475bb65b2331f0b; _qimei_h38=fded42463fb639c628b4669602000006018a1b; o_cookie=3487934983; _qimei_q32=ec50b72a0f5a646accacf4393f1271f2; _qimei_q36=9e46147a2ab8bee5904ab74e30001741890c; rewardsn=; wxtokenkey=777', + 'pragma': 'no-cache', + 'priority': 'u=0, i', + 'sec-ch-ua': '"Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"', + 'sec-ch-ua-mobile': '?0', + 'sec-ch-ua-platform': '"Windows"', + 'sec-fetch-dest': 'document', + 'sec-fetch-mode': 'navigate', + 'sec-fetch-site': 'none', + 'sec-fetch-user': '?1', + 'upgrade-insecure-requests': '1', + 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36', +} + r = requests.get(url,headers=h).text + match = re.search(r"var createTime = '(.+?)';", r) + if match: + date_string = (match.group(1)) + + date = datetime.strptime(date_string, "%Y-%m-%d %H:%M") + half_year_ago = datetime.now() - timedelta(days=30) + if date > half_year_ago: + return False,date_string + else: + return True,date_string + def getread(self): + url = 'https://api.jiudingliliang.com/task/read-batch' + data = {"u": 1} + r = requests.post(url,json=data,headers=self.h).json() + if r['code'] == 10000: + logging.info(f'获取阅读入口成功') + print(r) + #http://agifh.liliangda.cn?route=/pages/read/read&bn=2409211329003132289067&token=p5wP0pTb9eMHHJjf1fy133qF8tiaE0_k7jJzJRBtBXc&k=15G8EuNiZKx4b9W9SjgmmVJL60Tm0e_SNCQtW5IVdFdpYVsSHoL_UHd9btHBIunG + j = urlparse(r["result"]["qrcode"]); + self.domain, p = j.netloc, parse_qs(j.query); + self.k = p.get('k')[0] if p.get('k') else '' + self.readh = { + "Host": "api.jiudingliliang.com", + "Connection": "keep-alive", + "Content-Length": "28", + "sec-ch-ua": "\"Not/A)Brand\";v=\"8\", \"Chromium\";v=\"126\", \"Android WebView\";v=\"126\"", + "sec-ch-ua-mobile": "?1", + "User-Agent":ua, + "Authorization": "Bearer", + "Content-Type": "application/json", + "X-NIUBILITY-Y": "", + "F-RTYFGHVBN":self.h['F-RTYFGHVBN'], + "sec-ch-ua-platform": "\"Android\"", + "Accept": "*/*", + "Origin": f"http://{self.domain}", + "X-Requested-With": "com.tencent.mm", + "Sec-Fetch-Site": "cross-site", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Dest": "empty", + "Referer": f"http://{self.domain}/", + "Accept-Encoding": "gzip, deflate, br, zstd", + "Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7" +} + return True + + + else: + logging.error(f'获取阅读入口失败[{r}]') + return False + + def tuisong(self): + # 发送消息到wxpusher + url = f"{self.apiurl}/zdgjc" + data = {"url":self.read_url} + r = requests.post(url,json=data).json() + logging.info(f"遇到检测文章:推送结果[{r}]") + + def read(self): + #print(self.k) + + data = {"k":self.k} + url = 'https://api.jiudingliliang.com/task/read-article' + r = requests.post(url,json=data,headers=self.readh).json() + if r['code'] == 10000: + self.read_url = r["result"]["articleUrl"] + va, date_string = self.get_readtime(self.read_url) + logging.info(f'获取文章成功[{self.read_url}],发布时间[{date_string}]') + j = urlparse(self.read_url.replace('\\','')) + biz = parse_qs(j.query).get('__biz', [''])[0] if '__biz' in parse_qs(j.query) else '' + + if 'biz' not in self.read_url or biz in bizlist or va: + self.tuisong() + time.sleep(random.randint(20,25)) + else: + time.sleep(random.randint(8,10)) + + k = r["result"]["k"] + + else: + logging.error(f'获取文章失败[{r}]') + return False + + + url = 'https://api.jiudingliliang.com/task/read-article-completed' + data = {'k':k} + r = requests.post(url,json=data,headers=self.readh).json() + if r['code'] == 10000: + now = r["result"]["readingNumber"] + all = r["result"]["totalReading"] + logging.info(f'第[{now}/{all}]篇文章阅读成功') + if now == all: + logging.info("本轮阅读完成") + return False + self.k = r["result"]["k"] + return True + else: + logging.error(f'阅读失败[{r}]') + + def userinfo(self): + url = 'https://api.jiudingliliang.com/user/info' + r = requests.post(url,json={},headers=self.h).json() + if r['code'] == 10000: + name = r["result"]["nickname"] + m = int(float(r["result"]["balanceCash"])) + logging.info(f'当前账号[{name}]余额[{m}]') + url = 'https://api.jiudingliliang.com/user/withdraw' + r = requests.post(url,headers=self.h,json={}).json() + + # if r['code'] == 10000: + # lessmoney = r["result"]["transfer"][0]["m"] + # if m >= lessmoney: + # url = 'https://api.jiudingliliang.com/user/transfer' + # data = {'amount':lessmoney} + # r = requests.post(url,json=data,headers=self.h).json() + # if r['code'] == 10000: + # logging.info(f'提现成功') + # else: + # logging.error(f'提现失败[{r}]') + # else: + # logging.info(f'余额不足,跳过提现') + else: + logging.error(f'获取用户信息失败[{r}]') + + + def main(self): + self.login() + if self.getread(): + print('='*30) + while self.read(): + time.sleep(random.randint(0,1)) + else: + logging.error('获取阅读入口失败') + + self.userinfo() + + + + +if __name__ == '__main__': + ua = os.getenv("yuanshen_useragent") + #ua = 'Mozilla/5.0 (Linux; Android 14; 23113RKC6C Build/UKQ1.230804.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/126.0.6478.188 Mobile Safari/537.36 XWEB/1260183 MMWEBSDK/20240301 MMWEBID/98 MicroMessenger/8.0.48.2580(0x28003035) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64' + if not ua: + logging.info("不填ua玩你妹妹\n"*999) + exit() + env().main() + diff --git a/可乐_api_2.5.py b/可乐_api_2.5.py new file mode 100644 index 0000000..6f5c20a --- /dev/null +++ b/可乐_api_2.5.py @@ -0,0 +1,525 @@ +# --------------------------------注释区-------------------------------- +# 入口:微信打开 http://280766611011953.av9j2ff3w1.cn/r?bwr=dim&jcz=l2g&pla=pjr&t5n=xfz&upuid=2807666&zrb=av8 +# 走个头谢谢 不然没更新动力了呜呜呜 +# +# 需抓取数据: +# * 填写自动过检的api接口 本地 内网ip:5000 非本地自行进行穿透 +# * 登录多少个账号就跑多少个账号 +# +# +# 变量名:yuanshen_api +withdrawal_money = 3000 # 提现金币数量 1000金币=0.1r +Quantity_limit = 180 # 阅读上限篇数 跑满(195篇左右)概率封号 +fuck_list = [1,2,126] # 强制识别为检测文章并推送篇数 不懂默认 需要新加的话在后面用 英文逗号加篇数 新增自定义参数就行 +max_threads = 1 #运行线程数 不懂默认 +# --------------------------------一般不动区-------------------------------- +# _ooOoo_ +# o8888888o +# 88" . "88 +# (| -_- |) +# O\ = /O +# ____/`---'\____ +# . ' \\| |// `. +# / \\||| : |||// \ +# / _||||| -:- |||||- \ +# | | \\\ - /// | | +# | \_| ''\---/'' | | +# \ .-\__ `-` ___/-. / +# ___`. .' /--.--\ `. . __ +# ."" '< `.___\_<|>_/___.' >'"". +# | | : `- \`.;`\ _ /`;.`/ - ` : | | +# \ \ `-. \_ __\ /__ _/ .-` / / +# ======`-.____`-.___\_____/___.-`____.-'====== +# `=---=' +# +# ............................................. +# 佛祖保佑 永无BUG +# 佛祖镇楼 BUG辟邪 +#佛曰: +# 写字楼里写字间,写字间里程序员; +# 程序人员写程序,又拿程序换酒钱。 +# 酒醒只在网上坐,酒醉还来网下眠; +# 酒醉酒醒日复日,网上网下年复年。 +# 但愿老死电脑间,不愿鞠躬老板前; +# 奔驰宝马贵者趣,公交自行程序员。 +# 别人笑我忒疯癫,我笑自己命太贱; +# 不见满街漂亮妹,哪个归得程序员? +# +# --------------------------------代码区-------------------------------- +import requests +import string +import uuid +from base64 import b64encode +import time +import os +from urllib.parse import urlparse, parse_qs,quote +import re +import random +import math +import logging +logging.basicConfig(level=logging.INFO, format='[%(levelname)s] ===> %(message)s') +code = "可乐阅读_api版" +ver = "3.2" +envname = "yuanshen_api" +debug = False #debug模式 开启即从脚本内部获取环境变量 +debugcookie = "127.0.0.1:5000" +is_bulletin = False #公告开关 +is_toulu = False #偷撸公告开关 +is_with_sleep = False #是否开启随机延时 + +class env(): + """ + env模块,获取cookie并转成列表,统计时间,提示脚本开始结束,检测一些配置,try except异常处理 + :param args: 传递给env的参数 + :param kwargs: 传递给env的关键字参数 + :return: Null + + Powered by huaji + """ + def __init__(self, *args, **kwargs): + self.cookie = None + self.env_ver = '1.5' #版本号 + self.split_chars = ['@', '&', '\n'] #分隔符 + self.identifiers = ['Powered By Huaji', 'QQ Group:901898186', 'yuanshen'] #标识符 + def check_file(self): + file_path = __file__ + try: + + with open(file_path, 'r', encoding='utf-8') as file: + content = file.read() + + results = {} + + # 批量检查每个标识符 + for identifier in self.identifiers: + if identifier in content: + results[identifier] = True + else: + results[identifier] = False + logging.error(f"文件可能被恶意篡改,请勿修改文件内容") + + all_identifiers_present = all(results.values()) + if not all_identifiers_present: + logging.error(f"文件可能被恶意篡改,请勿修改文件内容") + self.force_exit() + + except Exception as e: + print(f"读取文件时发生错误: {e}") + self.force_exit() + + def split_cookies(self): + """根据多个分隔符分割cookie""" + for sep in self.split_chars: + if sep in self.cookie: + return self.cookie.split(sep) + return [self.cookie] + + def scmain(self): + if 'https://' not in self.cookie and 'http://' not in self.cookie: + apiurl = 'http://' + self.cookies[0] + r = requests.get(apiurl + '/getallwx').json() + for i, cookie in enumerate(r, 1): + print(f"--------开始第{i}个账号--------") + main = yuanshen(cookie,apiurl) + main.main() + print(f"--------第{i}个账号执行完毕--------") + + + + def force_exit(self,code=0): + exit() + print("Warning: 篡改你妈") + os._exit(code) # 强制退出程序 + sys.exit(code) # 正常退出 + import ctypes + while True: + ctypes.string_at(114514) + ctypes.string_at(1919810) + ctypes.string_at(666666) + print("Warning: 篡改你妈") + + + def run(self): + if not os.getenv(envname) and not debug: + logging.warning(f"请先设置环境变量[{envname}]") + self.force_exit() + + self.cookie = os.getenv(envname, "") + + if debug: + self.cookie = debugcookie + if is_bulletin: + try: + print(requests.get("https://gitee.com/HuaJiB/yuanshen34/raw/master/pubilc.txt").text, "\n\n\n") + except: + logging.error("网络异常,链接公告服务器失败(gitee),请检查网络") + self.force_exit() + if is_toulu: + try: + txt = ''' +此为滑稽的偷撸本本 如你不在滑稽的小群却意外通过某种渠道获得了该脚本 +请联系QQ3487934983 提供证据后 你将代替泄露人员获得该群位置 +======================================================= + ''' + print(txt*5) + except: + self.force_exit() + if is_with_sleep: + random_time = random.randint(10,60) + logging.info(f"随机延时[{random_time}]秒") + time.sleep(random_time) + + self.cookies = self.split_cookies() + account_count = len(self.cookies) + logging.info(f"一共获取到{account_count}个账号") + print(f"=========🔔开始执行[{code}][{ver}]=========\n") + + + start_time = time.time() + if debug: + self.scmain() + else: + try: + self.scmain() + except Exception as e: + logging.error(f"脚本执行出错: {e}") + end_time = time.time() + + execution_time = end_time - start_time + + print(f"\n============🔔脚本[{code}]执行结束============") + print(f"本次脚本总运行时间: [{execution_time:.2f}] 秒") + self.force_exit() + + def main(self): + self.check_file() + self.run() + + def random_str(self,charset="all", length=8, to_upper=False,to_lower=False): + if charset == "all": #包含大小写字母和数字 + chars = string.ascii_letters + string.digits + elif charset == "letters": #大小写字母 + chars = string.ascii_letters + elif charset == "digits": + chars = string.digits + elif charset == "lowercase": #小写字母 + chars = string.ascii_lowercase + elif charset == "uuid": + return str(uuid.uuid4()) + elif charset == "uuid_str": + return str(uuid.uuid4()).replace("-", "") + elif charset != '' and charset is not None: + chars = charset + + + random_string = ''.join(random.choice(chars) for _ in range(length)) + + if to_upper: + return random_string.upper() + elif to_lower: + return random_string.lower() + else: + return random_string + + def aes_encrypt(self,data): + from Crypto.Cipher import AES + from Crypto.Util.Padding import pad, unpad + from binascii import hexlify, unhexlify + key = self.key.encode('utf-8') + iv = self.iv.encode('utf-8') + cipher = AES.new(key, AES.MODE_CBC, iv) + padded_plaintext = pad(data.encode('utf-8'), AES.block_size) + ciphertext = cipher.encrypt(padded_plaintext) + encrypted_base64 = b64encode(ciphertext).decode('utf-8') + + return encrypted_base64 + +class yuanshen: + def __init__(self,cookie,apiurl) -> None: + self.apiurl = apiurl + self.Wxid = cookie['Wxid'] + self.bz = cookie['wxname'] + logging.info(f'[{self.bz}]开始运行') + self.is_wx = True + self.is_zfb = False + self.fuck_list = fuck_list + self.biz_list = ['MzkwNTY1MzYxOQ==','MzA3NzMzNjMwMQ=='] + + + def tuisong(self): + # 发送消息到wxpusher + url = f"{self.apiurl}/zdgjc" + data = {"url":self.readurl} + r = requests.post(url,json=data).json() + logging.info(f"遇到检测文章:推送结果[{r}]") + + def getmain(self): + headers = { + "Host": "230640607122241.asfuoqa.cn", + "Connection": "keep-alive", + "Upgrade-Insecure-Requests": "1", + "User-Agent": user_agent, + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/wxpic,image/tpg,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", + "X-Requested-With": "com.tencent.mm", + "Accept-Encoding": "gzip, deflate", + "Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7" +} + + url = 'http://230640607122241.asfuoqa.cn/r?upuid=2306406' + r = requests.get(url,headers=headers,allow_redirects=False) + if r.status_code == 302: + j = urlparse(r.headers['Location']) + self.mainurl = j.netloc + logging.info(f"获取主域名成功:[{self.mainurl}]") + self.headers = { + 'User-Agent': user_agent, + 'Accept': 'application/json, text/plain, */*', + # 'Accept-Encoding': 'gzip, deflate, br, zstd', + 'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Android WebView";v="126"', + 'X-Requested-With': 'XMLHttpRequest', + 'udtauth12': self.cookie, + 'sec-ch-ua-mobile': '?1', + 'sec-ch-ua-platform': '"Android"', + 'Origin': f'http://{self.mainurl}', + 'Sec-Fetch-Site': 'cross-site', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Dest': 'empty', + 'Referer': f'http://{self.mainurl}/', + 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7', +} + + + self.mainurl = 'm.zzyi4cf7z8.cn' + else: + logging.error('获取主域名失败') + return False + return True + + def getdomain(self): + url = f'http://{self.mainurl}/tuijian?url=' + r = requests.get(url,headers=self.headers).json() + if r['code'] == 0: + self.today_num = int(r["data"]["infoView"]["num"]) + try: + logging.info(r["data"]["infoView"]["msg"]) + return False + except: + pass + + time.sleep(3) + url = 'https://m.zzyi4cf7z8.cn/new/bbbbb' + try: + r = requests.get(url,headers=self.headers) + print(r.text) + self.domain = r.json()['jump'] + except: + logging.error('获取域名失败 原因为ck失效或遭封了') + return False + j = urlparse(self.domain) + p = parse_qs(self.domain.split('?')[1]) + self.iu = p.get('iu', [None])[0] + self.domain_url = j.netloc + logging.info(f"获取域名成功:[{self.domain_url}][{self.iu}]") + time.sleep(2) + h = { +"Host": self.domain_url, +"Connection": "keep-alive", +"Upgrade-Insecure-Requests": "1", +"User-Agent": user_agent, +"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/wxpic,image/tpg,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", +"X-Requested-With": "com.tencent.mm", +"Accept-Encoding": "gzip, deflate", +"Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7" +} + + r = requests.get(self.domain,headers=h,allow_redirects=False) + # print(r.text) + # match = re.search(r"var url = '(.*)'", r.text) + + self.is_read_a = False + self.is_read_b = False + + + + match = re.search(r"var url = '(.*)'", r.text) + if match: + self.canshu = match.group(1) + self.is_read_a = True + logging.info(f"取阅读参数A成功[{self.canshu}]") + self.readh2 = { + 'User-Agent': user_agent, + # 'Accept-Encoding': 'gzip, deflate, br, zstd', + 'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Android WebView";v="126"', + 'X-Requested-With': 'XMLHttpRequest', + 'sec-ch-ua-mobile': '?1', + 'sec-ch-ua-platform': '"Android"', + 'Origin': f'http://{self.domain_url}', + 'Sec-Fetch-Site': 'cross-site', + 'Sec-Fetch-Mode': 'cors', + 'Sec-Fetch-Dest': 'empty', + 'Referer': f'http://{self.domain_url}/', + 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7', +} + return True + else: + logging.error("取阅读参数A失败") + + if match: + match = re.search(r"var dr_url = '(.*)'", r.text) + self.canshu = match.group(1) + self.is_read_b = True + logging.info(f"取阅读参数B成功[{self.canshu}]") + self.readh2 = { + "Host": "m.zzyi4cf7z8.cn", + "Connection": "keep-alive", + "sec-ch-ua": "Chromium;v=122, Not(A:Brand;v=24, Android", + "X-Requested-With": "XMLHttpRequest", + "sec-ch-ua-mobile": "?1", + "User-Agent": user_agent, + "sec-ch-ua-platform": "Android", + "Accept": "*/*", + "Origin": f"http://{self.domain_url}", + "Sec-Fetch-Site": "cross-site", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Dest": "empty", + "Referer": f"http://{self.domain_url}/", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7" +} + return True + else: + logging.error("取阅读参数B失败") + + return False + + + + + def read(self): + + + logging.info(f"今日已读:[{self.today_num}]篇文章") + jkey = None + time.sleep(random.randint(2,5)) + while True: + if self.today_num >= Quantity_limit: + logging.info(f"今日已读数量已达设置上限") + return + self.today_num += 1 + r = random.random() + if jkey is None: + if self.is_read_a: + url = f"{self.canshu}?iu={self.iu}&pageshow&r={r}" + elif self.is_read_b: + url = f"http://{self.domain_url}{self.canshu}?iu={self.iu}&t={r}" + else: + if self.is_read_a: + url = f"{self.canshu}?iu={self.iu}&pageshow&r={r}&jkey={jkey}" + elif self.is_read_b: + url = f"http://{self.domain_url}{self.canshu}?iu={self.iu}&t={r}&jkey={jkey}" + + r = requests.get(url,headers=self.readh2).json() + try: + jkey = r["jkey"] + self.readurl = r['url'] + if r['url'] is None or r['url'] == 'close': + logging.error(f"未返回有效文章url") + return + except: + logging.error(f"获取文章链接失败[{r}]") + break + + logging.info(f"第[{self.today_num}]次获取文章成功:[{r['url']}]") + k = urlparse(self.readurl) + biz = parse_qs(k.query).get('__biz', [''])[0] if '__biz' in parse_qs(k.query) else '' + if biz in self.biz_list or self.today_num in self.fuck_list: + print('遇到检测文章,推送ing....') + self.tuisong() + time.sleep(random.randint(20,26)) + else: + time.sleep(random.randint(8,18)) + + def userinfo(self): + url = f'http://{self.mainurl}/tuijian?url=' + r = requests.get(url,headers=self.headers).json() + if r['code'] == 0: + gold = float(r['data']['user']['score']) * 100 + logging.info(f'今日已赚金币:[{float(r["data"]["infoView"]["score"])*100}]') + logging.info(f'当前账号剩余金币:[{gold}] = [{gold/10000}]元') + if gold >= withdrawal_money: + self.withdrawal() + else: + logging.info(f"金币余额不足[{withdrawal_money}] 不提现") + else: + logging.error(f"查询个人余额失败:[{r}]") + + def withdrawal(self): + url = f'http://{self.mainurl}/withdrawal' + r = requests.get(url,headers=self.headers).json() + if r['code'] == 0: + score = math.floor(float(r['data']['user']['score'])) + if self.is_wx: + data = {'amount':score,'type':'wx'} + elif self.is_zfb: + data = {'amount':score,'type':'ali','u_ali_account':self.alipay,'u_ali_real_name':self.alipayname} + + url = f'http://{self.mainurl}/withdrawal/doWithdraw' + r = requests.post(url,data=data,headers=self.headers) + logging.info(f"提现结果:[{r.text}]") + + def login(self): + h = { + "Host": "m.zzyi4cf7z8.cn", + "Connection": "keep-alive", + "sec-ch-ua": "\"Not/A)Brand\";v=\"8\", \"Chromium\";v=\"126\", \"Android WebView\";v=\"126\"", + "Accept": "application/json, text/plain, */*", + "X-Requested-With": "XMLHttpRequest", + #"udtauth12": "63e2zZogVUJV9DUya0ouQk9gXzSkwqy3tTNF2ycNMdf%2FyF5NfTVX5W7HfbxNSakX%2B7YCKBhq8lIxMS9G33sE%2B93v4bxUECwyk9J%2F4bAe0dJ1HYUtWvJoqAwRvpJmklIxajBH1HFpagDaIu0OtSAllTtyDhYlCAwpF5FGxeVTwcw", + "sec-ch-ua-mobile": "?1", + "User-Agent": user_agent, + "sec-ch-ua-platform": "\"Android\"", + "Origin": "http://klluodi-06.eos-ningbo-1.cmecloud.cn", + "Sec-Fetch-Site": "cross-site", + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Dest": "empty", + "Referer": "http://klluodi-06.eos-ningbo-1.cmecloud.cn/", + "Accept-Encoding": "gzip, deflate, br, zstd", + "Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7" +} + url = f'https://m.zzyi4cf7z8.cn/tuijian?url=fne%3D232%26g7g%3Ds0w%26lgn%3Dll7%26upuid%3D2807666%26wxl%3Dzy8%26x7f%3D76e%26t%3D1730983021&upuid=2807666' + r = requests.get(url,headers=h).json() + loginurl = r['url'] + data = {'Wxid':self.Wxid,'url':loginurl} + url = requests.post(self.apiurl+'/loginbyweb',json=data).json()['url'] + code = url.split('&code=')[1].split('&')[0] + print(code) + url = f'https://m.zzyi4cf7z8.cn/user/login3?code={code}' + r = requests.get(url,headers=h,allow_redirects=False) + self.cookie = r.headers['Set-Cookie'].split('udtauth12=')[1].split(';')[0] + print(self.cookie) + + def main(self): + try: + self.login() + if not self.getmain(): + return + time.sleep(random.randint(2,5)) + if self.getdomain(): + print("="*30) + self.read() + + print("="*30) + self.userinfo() + except Exception as e: + logging.error(f"发生错误:{e}") + + + + +if __name__ == '__main__': + user_agent = os.getenv('yuanshen_useragent') + #user_agent = '63e2zZogVUJV9DUya0ouQk9gXzSkwqy3tTNF2ycNMdf%2FyF5NfTVX5W7HfbxNSakX%2B7YCKBhq8lIxMS9G33sE%2B93v4bxUECwyk9J%2F4bAe0dJ1HYUtWvJoqAwRvpJmklIxajBH1HFpagDaIu0OtSAllTtyDhYlCAwpF5FGxeVTwcw' + if not user_agent: + logging.error("❌你还没有设置user_agent,请设置环境变量:yuanshen_useragent") + exit() + env().main() diff --git a/搜搜小亏_api_1.4.py b/搜搜小亏_api_1.4.py new file mode 100644 index 0000000..2aaa6e9 --- /dev/null +++ b/搜搜小亏_api_1.4.py @@ -0,0 +1,436 @@ +# --------------------------------注释区-------------------------------- +# 入口:微信加 +# http://share.shangjiabao.vip/#/pages/redirect/index?params=%7B%22type%22%3A4%2C%22id%22%3A34026%2C%22date%22%3A%2220241103%22%2C%22channel%22%3A%22A0000004%22%7D +# +# 需抓取数据: +# * 填写自动过检的api接口 本地 内网ip:5000 非本地自行进行穿透 +# * 登录多少个账号就跑多少个账号 +# +# +# 抓取请求头中的user-agent填入yuanshen_useragent 无论多少个号都只填一个即可!!!! +# +# 变量名:yuanshen_api +# +# --------------------------------祈求区-------------------------------- +# _ooOoo_ +# o8888888o +# 88" . "88 +# (| -_- |) +# O\ = /O +# ____/`---'\____ +# . ' \\| |// `. +# / \\||| : |||// \ +# / _||||| -:- |||||- \ +# | | \\\ - /// | | +# | \_| ''\---/'' | | +# \ .-\__ `-` ___/-. / +# ___`. .' /--.--\ `. . __ +# ."" '< `.___\_<|>_/___.' >'"". +# | | : `- \`.;`\ _ /`;.`/ - ` : | | +# \ \ `-. \_ __\ /__ _/ .-` / / +# ======`-.____`-.___\_____/___.-`____.-'====== +# `=---=' +# +# ............................................. +# 佛祖保佑 永无BUG +# 佛祖镇楼 BUG辟邪 +# --------------------------------代码区-------------------------------- +import requests +import time +import os +import json +import hashlib +import math +import random +import logging +import sys +import string +from base64 import b64encode +import base64 +import uuid +import re +from datetime import datetime, timedelta +from urllib.parse import urlparse, parse_qs,quote,unquote +logging.basicConfig(level=logging.INFO, format='[%(levelname)s] ===> %(message)s') +code = "搜搜小亏_api版" +ver = "1.4" +envname = "yuanshen_api" + +debug = False #debug模式 开启即从脚本内部获取环境变量 +debugcookie = "" #debug模式cookie + +is_bulletin = False #公告开关 +is_toulu = False #偷撸公告开关 +is_with_sleep = False #是否开启随机延时 + + +class env(): + """ + env模块,获取cookie并转成列表,统计时间,提示脚本开始结束,检测一些配置,try except异常处理 + :param args: 传递给env的参数 + :param kwargs: 传递给env的关键字参数 + :return: Null + + Powered by huaji + """ + def __init__(self, *args, **kwargs): + self.cookie = None + self.env_ver = '1.5' + self.split_chars = ['@', '&', '\n'] + self.identifiers = ['Powered By Huaji', 'QQ Group:901898186', 'yuanshen'] + def check_file(self): + file_path = __file__ + try: + + with open(file_path, 'r', encoding='utf-8') as file: + content = file.read() + + results = {} + + # 批量检查每个标识符 + for identifier in self.identifiers: + if identifier in content: + results[identifier] = True + else: + results[identifier] = False + logging.error(f"文件可能被恶意篡改,请勿修改文件内容") + + all_identifiers_present = all(results.values()) + if not all_identifiers_present: + logging.error(f"文件可能被恶意篡改,请勿修改文件内容") + self.force_exit() + + except Exception as e: + print(f"读取文件时发生错误: {e}") + self.force_exit() + + def split_cookies(self): + """根据多个分隔符分割cookie""" + for sep in self.split_chars: + if sep in self.cookie: + return self.cookie.split(sep) + return [self.cookie] + + def scmain(self): + apiurl = 'http://' + self.cookies[0] + r = requests.get(apiurl + '/getallwx').json() + for i, cookie in enumerate(r, 1): + print(f"--------开始第{i}个账号--------") + main = yuanshen(cookie,apiurl) + main.main() + print(f"--------第{i}个账号执行完毕--------") + + + + def force_exit(self,code=0): + exit() + print("Warning: 篡改你妈") + os._exit(code) # 强制退出程序 + sys.exit(code) # 正常退出 + import ctypes + while True: + ctypes.string_at(114514) + ctypes.string_at(1919810) + ctypes.string_at(666666) + print("Warning: 篡改你妈") + + + def run(self): + if not os.getenv(envname) and not debug: + logging.warning(f"请先设置环境变量[{envname}]") + self.force_exit() + + self.cookie = os.getenv(envname, "") + + if debug: + self.cookie = debugcookie + if is_bulletin: + try: + print(requests.get("https://gitee.com/HuaJiB/yuanshen34/raw/master/pubilc.txt").text, "\n\n\n") + except: + logging.error("网络异常,链接公告服务器失败(gitee),请检查网络") + self.force_exit() + if is_toulu: + try: + txt = ''' +此为滑稽的偷撸本本 如你不在滑稽的小群却意外通过某种渠道获得了该脚本 +请联系QQ3487934983 提供证据后 你将代替泄露人员获得该群位置 +======================================================= + ''' + print(txt*5) + except: + self.force_exit() + if is_with_sleep: + random_time = random.randint(10,60) + logging.info(f"随机延时[{random_time}]秒") + time.sleep(random_time) + + self.cookies = self.split_cookies() + account_count = len(self.cookies) + logging.info(f"一共获取到{account_count}个账号") + print(f"=========🔔开始执行[{code}][{ver}]=========\n") + + + start_time = time.time() + if debug: + self.scmain() + else: + try: + self.scmain() + except Exception as e: + logging.error(f"脚本执行出错: {e}") + end_time = time.time() + + execution_time = end_time - start_time + + print(f"\n============🔔脚本[{code}]执行结束============") + print(f"本次脚本总运行时间: [{execution_time:.2f}] 秒") + self.force_exit() + + def main(self): + self.check_file() + self.run() + + def random_str(self,charset="all", length=8, to_upper=False,to_lower=False): + if charset == "all": #包含大小写字母和数字 + chars = string.ascii_letters + string.digits + elif charset == "letters": #大小写字母 + chars = string.ascii_letters + elif charset == "digits": + chars = string.digits + elif charset == "lowercase": #小写字母 + chars = string.ascii_lowercase + elif charset == "uuid": + return str(uuid.uuid4()) + elif charset == "uuid_str": + return str(uuid.uuid4()).replace("-", "") + elif charset != '' and charset is not None: + chars = charset + + + random_string = ''.join(random.choice(chars) for _ in range(length)) + + if to_upper: + return random_string.upper() + elif to_lower: + return random_string.lower() + else: + return random_string + + def aes_encrypt(self,data): + from Crypto.Cipher import AES + from Crypto.Util.Padding import pad, unpad + from binascii import hexlify, unhexlify + key = self.key.encode('utf-8') + iv = self.iv.encode('utf-8') + cipher = AES.new(key, AES.MODE_CBC, iv) + padded_plaintext = pad(data.encode('utf-8'), AES.block_size) + ciphertext = cipher.encrypt(padded_plaintext) + encrypted_base64 = b64encode(ciphertext).decode('utf-8') + + return encrypted_base64 + +class yuanshen: + def __init__(self,cookie,apiurl) -> None: + self.apiurl = apiurl + self.Wxid = cookie['Wxid'] + self.bz = cookie['wxname'] + logging.info(f'[{self.bz}]开始运行') + + + def login(self): + headers = { + 'User-Agent': 'Mozilla/5.0 (Linux; Android 14; 23113RKC6C Build/UKQ1.230804.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/126.0.6478.188 Mobile Safari/537.36 XWEB/1260183 MMWEBSDK/20240301 MMWEBID/98 MicroMessenger/8.0.48.2580(0x28003035) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64', + 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/wxpic,image/tpg,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', + # 'Accept-Encoding': 'gzip, deflate', + 'Upgrade-Insecure-Requests': '1', + 'X-Requested-With': 'com.tencent.mm', + 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7', +} + r = requests.get('http://auth.51zhejia.com/v1/user/auth', headers=headers,allow_redirects=False) + login_url = (r.headers['Location']) + print(login_url) + data = {'Wxid':self.Wxid,'url':login_url} + url = requests.post(self.apiurl+'/loginbyweb2',json=data).json()['url'] + code = url.split('code=')[1].split('&state')[0] + url = f'http://auth.51zhejia.com/v1/user/back?jumpType=platform&ticket=&code={code}&state=search' + r = requests.get(url, headers=headers,allow_redirects=False) + url = r.headers['Location'] + print(code,url) + j = parse_qs(urlparse(url).query) + openid = json.loads(j.get('params')[0])['openId'] + print(openid) + cookies = { + 'openId': openid, +} + headers = { + 'Host': 'search-api.lingxiaojiang.com', + 'Connection': 'keep-alive', + 'version': '4.0.0', + 'cache-control': 'no-cache', + 'ticket': '', + 'User-Agent': 'Mozilla/5.0 (Linux; Android 14; 23113RKC6C Build/UKQ1.230804.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/126.0.6478.188 Mobile Safari/537.36 XWEB/1260213 MMWEBSDK/20240301 MMWEBID/4020 MicroMessenger/8.0.48.2580(0x28003035) WeChat/arm64 Weixin Android Tablet NetType/WIFI Language/zh_CN ABI/arm64', + 'token': 'null', + 'Content-Type': 'application/json', + 'Accept': '*/*', + 'Origin': 'http://1731024966.b27.yoga', + 'X-Requested-With': 'com.tencent.mm', + 'Referer': 'http://1731024966.b27.yoga/', + 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7', + } + + data = { + 'ticket': '' + } + r = requests.post('http://search-api.lingxiaojiang.com/v1/search/get-user-token', cookies=cookies, headers=headers, json=data).json() + self.token = r['data']['token'] + logging.info(f'登录成功[{self.token}]') + domain = str(int(time.time()*1000)) + '.j56.yoga' + self.h = { + "Host": "search-api.lingxiaojiang.com", + "Connection": "keep-alive", + "cache-control": "no-cache", + "ticket": "", + "User-Agent": "Mozilla/5.0 (Linux; Android 14; 23113RKC6C Build/UKQ1.230804.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/126.0.6478.188 Mobile Safari/537.36 XWEB/1260213 MMWEBSDK/20240301 MMWEBID/4020 MicroMessenger/8.0.48.2580(0x28003035) WeChat/arm64 Weixin Android Tablet NetType/WIFI Language/zh_CN ABI/arm64", + "token": self.token, + "version": "4.0.0", + "Accept": "*/*", + "Origin": f"http://{domain}", + "X-Requested-With": "com.tencent.mm", + "Referer": f"http://{domain}/", + "Accept-Encoding": "gzip, deflate", + "Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7", + "Cookie": f"openId={openid}" +} + + + + + def getread(self): + r = requests.get('http://search-api.lingxiaojiang.com/v1/search/index', headers=self.h).json() + if r["data"]["restLeftTime"] != 0: + logging.info(f'[{self.bz}]距离下次阅读还有[{r["data"]["restLeftTime"]}]S') + return False + r = requests.get('http://search-api.lingxiaojiang.com/v1/search/get-task-info', headers=self.h).json() + if r['code'] == 200: + pageurl = unquote(r["data"]["pageUrl"]) + domain = urlparse(pageurl.split('&query=')[1]).netloc + self.tid = pageurl.split('tid=')[1] + logging.info(f'获取入口成功[{domain}][{self.tid}]') + self.read_h = { + 'User-Agent': 'Mozilla/5.0 (Linux; Android 14; 23113RKC6C Build/UKQ1.230804.001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/126.0.6478.188 Mobile Safari/537.36 XWEB/1260183 MMWEBSDK/20240301 MMWEBID/98 MicroMessenger/8.0.48.2580(0x28003035) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64', + # 'Accept-Encoding': 'gzip, deflate', + 'cache-control': 'no-cache', + 'token': 'null', + 'version': '3.0.0', + 'Origin': f'http://{domain}', + 'X-Requested-With': 'com.tencent.mm', + 'Referer': f'http://{domain}/', + 'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7', +} + return True + else: + logging.info(f'获取入口失败[{r}]') + return False + def get_readtime(self,url): + h = { + 'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7', + 'accept-language': 'zh-CN,zh;q=0.9', + 'cache-control': 'no-cache', + # 'cookie': 'RK=x93V1EQnnk; ptcz=70105284a73b47db6aa5f48a05337a8cd84e98de7bd26d75975059126646db21; pac_uid=0_ZkHRNfy6PMhrH; ua_id=SyF8Nc7qjhUZ6RH8AAAAAHO013VXlTF21GY7ajzLLgs=; _clck=19reoir|1|fpg|0; wxuin=27186344812218; eas_sid=x1Y7v2y759E6j1a811G6q158d0; qq_domain_video_guid_verify=08d525e64ffa56c3; _qimei_uuid42=18a1b130e12100363fb639c628b466967c0e1ac0aa; pgv_pvid=6915337851; _qimei_fingerprint=3c42962857167cc55475bb65b2331f0b; _qimei_h38=fded42463fb639c628b4669602000006018a1b; o_cookie=3487934983; _qimei_q32=ec50b72a0f5a646accacf4393f1271f2; _qimei_q36=9e46147a2ab8bee5904ab74e30001741890c; rewardsn=; wxtokenkey=777', + 'pragma': 'no-cache', + 'priority': 'u=0, i', + 'sec-ch-ua': '"Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"', + 'sec-ch-ua-mobile': '?0', + 'sec-ch-ua-platform': '"Windows"', + 'sec-fetch-dest': 'document', + 'sec-fetch-mode': 'navigate', + 'sec-fetch-site': 'none', + 'sec-fetch-user': '?1', + 'upgrade-insecure-requests': '1', + 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36', +} + r = requests.get(url,headers=h).text + match = re.search(r"var createTime = '(.+?)';", r) + if match: + date_string = (match.group(1)) + + date = datetime.strptime(date_string, "%Y-%m-%d %H:%M") + half_year_ago = datetime.now() - timedelta(days=180) + if date > half_year_ago: + return False,date_string + else: + return True,date_string + + def tuisong(self): + url = f"{self.apiurl}/zdgjc" + data = {"url":self.url} + r = requests.post(url,json=data).json() + logging.info(f"遇到检测文章:推送结果[{r}]") + + def read(self): + tid = 0 + while True: + params = { + 'intranetIp': '10.1.10.1', + 'tid': self.tid, + 'taskDetailId':tid, + } + + r = requests.get('http://search-api.lingxiaojiang.com/v1/search/get-task-link', params=params, headers=self.read_h).json() + if r["code"] != 200: + logging.error(r) + return + + if r["data"]["taskFinish"]: + logging.info(f'阅读任务完成') + return + self.url = r["data"]["taskDetail"]["link"] + tid = r["data"]["taskDetail"]["taskDetailId"] + now_num = r["data"]["searchSuccessTimes"] + all_num = r["data"]["searchTimes"] + va, date_string = self.get_readtime(self.url) + logging.info(f'第[{now_num}/{all_num}]获取文章成功[{self.url}],文章时间[{date_string}]') + if now_num in [0] or va: + logging.info(f'遇到检测文章推送ing...') + self.tuisong() + time.sleep(random.uniform(18,25)) + else: + time.sleep(random.uniform(8,15)) + + + + def userinfo(self): + + r = requests.get('http://search-api.lingxiaojiang.com/v1/search/index', headers=self.h).json() + + money = math.floor(r["data"]["userInfo"]["tokenBalance"] / 10000 * 10) / 10 + logging.info(f'当前余额[{money}]元') + if money < 0.1: + return + data = { +"amount": money +} + r = requests.post('http://search-api.lingxiaojiang.com/v1/token/withdraw', headers=self.h, json=data).json() + if r["data"]["result"]: + logging.info(f'提现[{money}]成功') + else: + logging.info(f'提现[{money}]失败') + + + + def main(self): + try: + self.login() + if self.getread(): + print('='*30) + self.read() + self.userinfo() + except Exception as e: + logging.error(e) + + + + +if __name__ == '__main__': + env().main() diff --git a/鱼儿_auto_huaji.py b/鱼儿_auto_huaji.py new file mode 100644 index 0000000..4d0811a --- /dev/null +++ b/鱼儿_auto_huaji.py @@ -0,0 +1,253 @@ +import random +import requests +import time +import re +import threading +import os +# 分别为检测文章id和不提现列表 +check_id = [1,2,3] +no_cash_list = [] +# ---->注意:不会处理异常情况,请自行捕获<----- +class Compatible_auto: + def __init__(self,auto_type,api_address): + self.api_address = api_address + self.auto_type = auto_type + + def get_web_code(self,wx_id,appid_or_url): + # 鸡哥过检传入wx_id和url,返回url,不直接返回code + if self.auto_type == "jige": + data = {'Wxid': wx_id, 'url': appid_or_url} + url = requests.post(self.api_address + '/loginbyweb', json=data).json()['url'] + return url + # 汐念过检传入wx_id和appid,返回code + if self.auto_type == "xn": + data = { + "Appid": appid_or_url, + "Url": "", + "Wxid": wx_id + } + r = requests.post(f"{self.api_address}/api/Tools/ThirdAppGrant", json=data).json() + return r['Data'] + else: + print("该功能仅支持汐念(xn)和鸡哥(jige)的过检软件") + raise ValueError("仅功能支持汐念(xn)和鸡哥(jige)的过检软件") + + def get_mini_code(self,wx_id,appid,api_address): + # 直接返回code + if self.auto_type == "jige": + data = {'Wxid': wx_id, 'appid':appid} + code = requests.get(api_address + '/loginbyapp', params=data).json()["code"] + return code + else: + print("该功能仅鸡哥(jige)的过检软件支持") + raise ValueError("该功能仅鸡哥(jige)的过检软件支持") + + def send_passage(self,url): + if self.auto_type == "jige": + api_url = f"{self.api_address}/zdgjc" + data = {"url": url} + r = requests.post(api_url, json=data).json() + print(f"推送结果[{r['msg']}]") + else: + print("该功能仅鸡哥(jige)的过检软件支持") + raise ValueError("该功能仅鸡哥(jige)的过检软件支持") + + +def generate_ua(): + devices_uas =['PGP110 Build/UKQ1.230924.001', 'HONOR Build/HK1.220923.005', 'VIVO Build/UKQ1.230912.001', 'TYYH Build/UA1.220923.005'] + internet_states = ['5G','4G','WIFI'] + ua=(f'Mozilla/5.0 (Linux; Android {random.randint(8,14)}; {random.choice(devices_uas)}/UKQ1.230924.001; wv) ' + f'AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/116.0.0.0 Mobile Safari/537.36 XWEB/1160117 ' + f'MMWEBSDK/20240404 MMWEBID/7076 MicroMessenger/8.0.49.2600(0x2800313B) WeChat/arm64 Weixin NetType/{random.choice(internet_states)} ' + f'Language/zh_CN ABI/arm64') + return ua + + +class Yuer: + def __init__(self,wx_id,api_address,wx_name,invite_url=None): + self.next_time = None + self.read_pages = None + self.money = None + self.withdraw_headers = None + self.union_url = None + if not invite_url: + self.invite_url = 'http://h5.yyyeee670771.1gkjk8yhyw.cn/yeipad?ewk=ako&tay=tvo&tdq=uin&tfs=qip&ugs=avn&upuid=3387330' + else: + self.invite_url = invite_url + self.read_headers = None + self.wx_name = wx_name + self.api_address = api_address + self.wx_id = wx_id + self.ua = generate_ua() + self.cookie = None + + def login(self): + try: + login_headers = { + "Upgrade-Insecure-Requests": "1", + "User-Agent": self.ua, + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9," + "image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", + "Accept-Encoding": "gzip, deflate", + "Accept-Language": "zh-CN,zh;q=0.9" + } + r = requests.get(self.invite_url, headers=login_headers, allow_redirects=False).headers + location_url = self.invite_url[:self.invite_url.rfind(r"/")] + r["Location"] + self.cookie = r['Set-Cookie'].split(";")[0] + login_headers["Cookie"] = self.cookie + r = requests.get(location_url, headers=login_headers, allow_redirects=False).headers["Location"] + url = Compatible_auto("jige",self.api_address).get_web_code(self.wx_id,r) + requests.get(url, headers=login_headers, allow_redirects=False) + requests.get("http://yyyeee670894.1gkjk8yhyw.cn/user/login?"+url.split("?")[1], headers=login_headers, allow_redirects=False) + # print(login_headers['Cookie']) + # self.union_url = url[:url.rfind(r"/")] + self.read_headers = {'Connection': 'keep-alive', 'Upgrade-Insecure-Requests': '1', + 'User-Agent': self.ua, 'Accept': '*/*', + 'Accept-Encoding': 'gzip, deflate', + 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6,zh-TW;q=0.5', + 'Cookie': self.cookie} + self.withdraw_headers = {'Proxy-Connection': 'keep-alive', 'Accept': '*/*', 'X-Requested-With': 'XMLHttpRequest', + 'User-Agent': self.ua, 'Content-Type': 'application/x-www-form-urlencoded', + 'Origin': self.union_url, 'Referer': f'{self.union_url}/withdrawal', 'Accept-Encoding': 'gzip, deflate', + 'Accept-Language': 'zh-CN,zh;q=0.9', 'Cookie': self.cookie} + url = requests.get('http://h5.abokxeh.cn/pipa_read?upuid=2802253', headers=self.read_headers, + allow_redirects=False).headers['Location'] + self.union_url = url[:url.rfind(r"/")] + print("【{}】登录成功".format(self.wx_name)) + return True + except: + print("【{}】登录时遇到问题".format(self.wx_name)) + return False + + def user_info(self): + try: + url = f'{self.union_url}/yeipad?bqb=eom&ivb=kff&qsz=nne&upuid=3284491&vlm=ssr&xik=mzo' + user_detail = requests.get(url, headers=self.read_headers) + if "抱歉,出错了" in user_detail.text: + print("【{}】账号被拉黑".format(self.wx_name)) + return False + money = re.search(r"余额:([\d.]+)元", user_detail.text) + read_pages = re.search(r'([\d.]+)篇', user_detail.text).group(0).replace('篇', '') + next_time = re.search(r'([\d.]+)分钟后到来

', user_detail.text) + if next_time != None: + next_time = next_time.group(0).replace('分钟后到来

', '') + else: + next_time = 0 + self.money = float(money.group(1)) + self.read_pages = int(read_pages) + self.next_time = int(next_time) + print("【{}】已有{}元,已读{}篇,下次阅读时间{}".format(self.wx_name,self.money,self.read_pages,self.next_time)) + return True + except: + print("【{}】账号被拉黑".format(self.wx_name)) + + def read(self): + headers = { + "Connection": "keep-alive", + "Accept": "*/*", + "Access-Control-Request-Method": "GET", + "Access-Control-Request-Headers": "x-requested-with", + "Origin": self.union_url, + "User-Agent": self.ua, + "Sec-Fetch-Mode": "cors", + "Sec-Fetch-Site": "cross-site", + "Sec-Fetch-Dest": "empty", + "Referer": f"{self.union_url}/", + "Accept-Encoding": "gzip, deflate, br", + "Accept-Language": "zh-CN,zh;q=0.9" + } + url = requests.get(f'http://yyyeee670930.1gkjk8yhyw.cn/read_task/ggg3', + headers=self.read_headers).json()['jump'].replace('read.html?','read_task/ddr?')+'&type=7&pageshow'+'&r=' + url = 'https://h5.v2dx6gzdx5.cn/read_task' + url[url.rfind('/'):] + read_response = requests.get(url + str(random.random()), headers=headers) + if '已经被限制' in read_response.text: + print('【{}】阅读被限制,继续下一个账号'.format(self.wx_name)) + elif 'finish' in read_response.text: + print('【{}】到达最后一篇文章'.format(self.wx_name)) + return + # read_response = read_response.json() + # final_url = 'http://' + str(re.findall(r'^(?:http?://)?([^/]+)', url)).replace('[\'', '').replace('\']', + # '') + f'/read_task/{read_response["url"]}&_t=799888' + # response = requests.get(final_url, headers=headers) + # if '您已完成阅读任务' in response.text: + # user = str(BeautifulSoup(response.text, 'html.parser').find_all('p')[0]) + # print(f"【{user.replace('

', '').replace('

', '')}】本轮阅读已经完成") + # else: + # print('未知错误') + else: + key = read_response.json() + for i in range(1, 31): + print(f'第{i}次') + if i + self.read_pages in check_id: + print(f"【{self.wx_name}】到达设置的检测文章id{i + self.read_pages},等待过检") + Compatible_auto("jige",self.api_address).send_passage(key['url']) + time.sleep(10) + else: + sleep = random.randint(6, 10) + print(f"【{self.wx_name}】模拟阅读{sleep}s") + time.sleep(sleep) + read_response = requests.get(url + str(random.random()) + f'&jkey={key["jkey"]}', headers=headers) + key = read_response.json() + if '已经被限制' in read_response.text: + print(f'【{self.wx_name}】阅读被限制,继续下一个账号,被限制的id为{self.read_pages + i}') + check_id.append(self.read_pages + i) + break + elif 'finish' in read_response.text: + print(f'【{self.wx_name}】到达最后一篇文章') + break + print(f"【{self.wx_name}】阅读成功") + + def withdraw(self): + if self.money >= 0.3 and self.wx_id not in no_cash_list: + money = round(self.money * 100, 1) + data = {'channel': 'wechat', 'money': str(money)} # 微信 + # data = {'channel':'alipay','money':str(money),'u_ali_account':'账号','u_ali_real_name':'名字'}#支付宝,需要url编码 + res = requests.post(self.union_url + '/withdrawal/submit_withdraw', headers=self.withdraw_headers, + data=data) + print("【{}】提现结果:{}".format(self.wx_name,res.text)) + else: + print("【{}】不提现或不满足提现要求".format(self.wx_name)) + + +def main(wx_id, api_address, wx_name): + a = Yuer(wx_id, api_address, wx_name) + if a.login(): + pass + else: + return + try: + if a.user_info(): + pass + else: + return + except: + return + try: + a.read() + except: + pass + a.user_info() + a.withdraw() + + +if __name__ == "__main__": + env_name = "yuanshen_api" + semaphore = threading.BoundedSemaphore(value=1) + threads = [] + api_add = os.getenv(env_name) + if api_add is None: + print('无api地址,请创建环境变量yuanshen_api填入api_address') + exit(0) + else: + api_add = "http://{}".format(api_add) + sessions = requests.get(api_add+ '/getallwx').json() + for session in sessions: + try: + t = threading.Thread(target=main, args=(session["Wxid"], api_add, session["wxname"],)) + threads.append(t) + t.start() + time.sleep(5) + except Exception as e: + print("【{}】发生异常{}".format(session["wxname"], e)) + for t in threads: + t.join()