├── README.md ├── baiducloud.plugin ├── baiducloudjs.js ├── bloomberg.js ├── br.js ├── context.js ├── ffxj.js ├── ft.js ├── get_product_entitlement_mapping.js ├── get_product_entitlement_mapping.plugin ├── glass.js ├── gn6.js ├── limicam.js ├── liulishuoyuedu.js ├── liulishuoyuedu.plugin ├── notebook.js ├── nymf.js ├── prisma.js ├── procamera.js ├── revenuecat.js ├── revenuecat.plugin ├── revenuecatcatcher.js ├── revenuecatcatcher.plugin ├── sa.js ├── simuflight.js ├── theguardian.js ├── weread.js ├── weread.plugin ├── xinmanhua.js └── xiuren.js /README.md: -------------------------------------------------------------------------------- 1 | # pyer -------------------------------------------------------------------------------- /baiducloud.plugin: -------------------------------------------------------------------------------- 1 | #!name = 百度网盘 2 | #!desc = 破解部分vip 3 | #!openUrl = 4 | #!author = 5 | #!homepage = https://github.com/leey668 6 | #!icon = https://raw.githubusercontent.com/deezertidal/private/main/icons/baiducloud.png 7 | #!date = 2024-01-28 00:00:00 8 | 9 | [Script] 10 | http-response ^https?:\/\/pan\.baidu\.com\/(youai\/(user\/.+\/getminfo|membership\/.+\/adswitch)|(rest\/.+\/membership\/user|act\/.+\/(bchannel|welfare)\/list)) script-path=https://raw.githubusercontent.com/leey668/pyer/main/baiducloudjs.js, requires-body=true, timeout=60, tag=baiducloud 11 | 12 | [Mitm] 13 | hostname = pan.baidu.com -------------------------------------------------------------------------------- /baiducloudjs.js: -------------------------------------------------------------------------------- 1 | var obj = JSON.parse($response.body); 2 | const yike = '/getminfo'; 3 | const ad = '/adswitch'; 4 | const wangpan = '/membership/user'; 5 | const list = '/bchannel/list'; 6 | const hf = '/welfare/list'; 7 | 8 | if ($request.url.indexOf(yike) != -1){ 9 | obj = { 10 | "errno": 0, 11 | "request_id": 342581654394297772, 12 | "has_purchased": 1, 13 | "has_buy_1m_auto_first": 0, 14 | "can_buy_1m_auto_first": 0, 15 | "can_buy_1m_auto_first_6": 0, 16 | "has_received_7dfree": 1, 17 | "product_tag": 3, 18 | "sign_status": 1, 19 | "sign_infos": [{ 20 | "product_id": "12745849497343294855", 21 | "order_no": "2203060931530010416", 22 | "ctime": 1646537208, 23 | "mtime": "2022-05-06 11:26:48", 24 | "status": 1, 25 | "sign_price": 1000, 26 | "sign_channel": 0 27 | }], 28 | "vip_tags": ["album_vip"], 29 | "product_infos": [{ 30 | "product_id": "12745849497343294855", 31 | "start_time": 1646534568, 32 | "end_time": 4092599349, 33 | "buy_time": 1649994533, 34 | "tag": "album_vip", 35 | "order_no": "2203060931530010416" 36 | }], 37 | "vip_infos": [{ 38 | "tag": "album_vip", 39 | "start_time": 1646537208, 40 | "end_time": 4092599349 41 | }], 42 | "expire_time": 0 43 | }; 44 | } 45 | 46 | if ($request.url.indexOf(ad) != -1){ 47 | obj.switch = "open"; 48 | } 49 | 50 | if ($request.url.indexOf(wangpan) != -1){ 51 | obj.product_infos = [ 52 | { 53 | "product_id" : "5310897792128633390", 54 | "end_time" : 4092600296, 55 | "buy_time" : "1417260485", 56 | "cluster" : "offlinedl", 57 | "start_time" : 1417260485, 58 | "detail_cluster" : "offlinedl", 59 | "product_name" : "gz_telecom_exp" 60 | }, 61 | { 62 | "product_name" : "svip2_nd", 63 | "product_description" : "超级会员", 64 | "function_num" : 0, 65 | "start_time" : 1417260485, 66 | "buy_description" : "", 67 | "buy_time" : 1417260485, 68 | "product_id" : "1", 69 | "auto_upgrade_to_svip" : 1, 70 | "end_time" : 4092600296, 71 | "cluster" : "vip", 72 | "detail_cluster" : "svip", 73 | "status" : 1 74 | } 75 | ]; 76 | obj.guide_data = { 77 | "title" : "超级会员 SVIP", 78 | "content" : "已拥有极速下载+视频倍速特权", 79 | "button" : { 80 | "text" : "会员中心", 81 | "action_url" : "https://pan.baidu.com/wap/vip/user?from=myvip2#svip" 82 | } 83 | }; 84 | obj.identity_icon = { 85 | "vip" : "https://internal-amis-res.cdn.bcebos.com/images/2019-8/1566452237582/78b88bf113b7.png", 86 | "common" : "https://internal-amis-res.cdn.bcebos.com/images/2019-8/1566452539056/bf72cf66fae1.png", 87 | "svip" : "https://internal-amis-res.cdn.bcebos.com/images/2019-8/1566452115696/38c1d743bfe9.png", 88 | "contentvip" : "" 89 | }; 90 | obj.error_code = 1; 91 | delete obj.tips_data_list; 92 | delete obj.status_data_arr; 93 | delete obj.sub_card_list; 94 | } 95 | 96 | if ($request.url.indexOf(list) != -1){ 97 | obj.data = [ 98 | { 99 | "sub_title" : "", 100 | "id" : 856, 101 | "bg_icon" : "", 102 | "button_text" : "", 103 | "web_url" : "", 104 | "type" : 3, 105 | "name" : "已解锁SVIP,未完整解锁" 106 | }, 107 | { 108 | "sub_title" : "", 109 | "id" : 460, 110 | "bg_icon" : "", 111 | "button_text" : "", 112 | "web_url" : "", 113 | "type" : 3, 114 | "name" : "已拥有极速下载+视频倍速特权" 115 | } 116 | ]; 117 | } 118 | 119 | if ($request.url.indexOf(hf) != -1){ 120 | delete obj.data; 121 | } 122 | 123 | $done({body : JSON.stringify(obj)}); -------------------------------------------------------------------------------- /bloomberg.js: -------------------------------------------------------------------------------- 1 | /************************************* 2 | 3 | 项目名称: Bloomberg 4 | 脚本作者:leepyer 5 | 电报频道:https://t.me/chxm1023 6 | 使用声明:⚠️仅供参考,🈲转载与售卖! 7 | 8 | ************************************** 9 | 10 | [rewrite_local] 11 | ^https:\/\/mobapi\.bloomberg\.com\/wssmobile\/v1\/user\/subscription url script-response-body https://raw.githubusercontent.com/leey668/pyer/main/bloomberg.js 12 | [mitm] 13 | hostname = mobapi.bloomberg.com 14 | 15 | *************************************/ 16 | 17 | if ($response.body) { 18 | let obj = JSON.parse($response.body); 19 | obj.subscriptions = [{ 20 | "active": true, 21 | "product": "BBG", 22 | "provider": "ZUORA", 23 | "id": "88888888", 24 | "subscriptionNumber": "88888888", 25 | "status": "ACTIVE", 26 | "endDate": "2099-12-31", 27 | "startDate": "2024-01-01T00:00:00", 28 | "entitlements": [{ 29 | "product": "BBG", 30 | "type": "DIGITAL" 31 | }], 32 | "type": "DIGITAL" 33 | }]; 34 | $done({ body: JSON.stringify(obj) }); 35 | } else { 36 | $done({}); 37 | } -------------------------------------------------------------------------------- /br.js: -------------------------------------------------------------------------------- 1 | /************************************* 2 | 3 | 项目名称:经济学人·商论 4 | 脚本作者:leepyer 5 | 电报频道:https://t.me/chxm1023 6 | 使用声明:⚠️仅供参考,🈲转载与售卖! 7 | 8 | ************************************** 9 | 10 | [rewrite_local] 11 | ^https:\/\/api\.hummingbird\.businessreview\.global\/api\/subscriptions\/get_active url script-response-body https://raw.githubusercontent.com/leey668/pyer/main/br.js 12 | ^http:\/\/tim\.static-economist\.com\/discover url reject 13 | [mitm] 14 | hostname = api.hummingbird.businessreview.global 15 | 16 | *************************************/ 17 | 18 | let obj = JSON.parse($response.body); 19 | obj = {"error":false,"account_member_since":"Jul 15th, 2022","subscriptions":[{"account":{"$ref":"accounts","$id":{"$oid":""}},"platform":"web","store_product_id":"GBR Yearly SO-0920","purchase_date":{"sec":"1657843200"},"expiration_date":{"sec":"4070880000"},"active":true,"subscription_data":"{"stripe_event_id":"","charge_id":""}","payment_type":"alipay","stripe_event_id":"","charge_id":"","amount":29900,"source":"web-alipay","renewal_flag":true,"created_date":{"$date":{"$numberLong":"1657889224714"}},"id":"","state":"paid","payment_frequency":"GBR Yearly SO-0920"}],"subscription_type":"Paid"}; 20 | $done({ body: JSON.stringify(obj) }); -------------------------------------------------------------------------------- /context.js: -------------------------------------------------------------------------------- 1 | /************************************* 2 | 3 | 项目名称:context 0元购 4 | 脚本作者:leepyer 5 | 电报频道:https://t.me/chxm1023 6 | 使用声明:⚠️仅供参考,🈲转载与售卖! 7 | 8 | ************************************** 9 | 10 | [rewrite_local] 11 | ^https:\/\/api\.revenuecat\.com\/v1\/subscribers\/(.+)\/offerings url script-response-body https://raw.githubusercontent.com/leey668/pyer/main/context.js 12 | [mitm] 13 | hostname = api.revenuecat.com 14 | 15 | *************************************/ 16 | 17 | var obj = JSON.parse($response.body); 18 | obj.current_offering_id = "review"; 19 | $done({body: JSON.stringify(obj)}); 20 | 21 | -------------------------------------------------------------------------------- /ffxj.js: -------------------------------------------------------------------------------- 1 | /************************************* 2 | 3 | 项目名称:方弗相机 4 | 脚本作者:leepyer 5 | 电报频道:https://t.me/chxm1023 6 | 使用声明:⚠️仅供参考,🈲转载与售卖! 7 | 8 | ************************************** 9 | 10 | [rewrite_local] 11 | ^https:\/\/api\.revenuecat\.com\/v1\/subscribers\/(.+)\/offerings url script-response-body https://raw.githubusercontent.com/leey668/pyer/main/ffxj.js 12 | [mitm] 13 | hostname = api.revenuecat.com 14 | 15 | *************************************/ 16 | 17 | var obj = JSON.parse($response.body); 18 | obj = { 19 | "placements": { 20 | "fallback_offering_id": "sale" 21 | }, 22 | "offerings": [ 23 | { 24 | "metadata": null, 25 | "identifier": "sale", 26 | "description": "pro versions", 27 | "packages": [ 28 | { 29 | "platform_product_identifier": "com.uzero.funforcam.monthlysub", 30 | "identifier": "$rc_monthly" 31 | }, 32 | { 33 | "platform_product_identifier": "com.uzero.funforcam.anualsub", 34 | "identifier": "$rc_annual" 35 | }, 36 | { 37 | "platform_product_identifier": "com.uzero.funforcam.lifetimepurchase.upfrommonth", 38 | "identifier": "$rc_lifetime" 39 | }, 40 | { 41 | "platform_product_identifier": "com.uzero.funforcam.lifetimepurchase.upgrade", 42 | "identifier": "lifetime2" 43 | }, 44 | { 45 | "platform_product_identifier": "com.uzero.funforcam.lifetimepurchase.upfrommonth", 46 | "identifier": "lifetimefrommonth" 47 | } 48 | ] 49 | } 50 | ], 51 | "current_offering_id": "sale" 52 | }; 53 | $done({body: JSON.stringify(obj)}); 54 | 55 | -------------------------------------------------------------------------------- /ft.js: -------------------------------------------------------------------------------- 1 | /************************************* 2 | 3 | 项目名称:FT中文网 4 | 脚本作者:leepyer 5 | 电报频道:https://t.me/chxm1023 6 | 使用声明:⚠️仅供参考,🈲转载与售卖! 7 | 8 | ************************************** 9 | 10 | [rewrite_local] 11 | ^https:\/\/dqbam2jv6gg9m\.cloudfront\.net\/index\.php\/jsapi\/paywall url script-response-body https://raw.githubusercontent.com/leey668/pyer/main/ft.js 12 | [mitm] 13 | hostname = dqbam2jv6gg9m.cloudfront.net 14 | 15 | *************************************/ 16 | 17 | var obj = JSON.parse($response.body); 18 | obj = {"paywall":0,"premium":1,"expire":"4092599349","standard":1,"v":2099,"campaign_code":"","latest_duration":"yearly","addon":1}; 19 | $done({body: JSON.stringify(obj)}); 20 | 21 | -------------------------------------------------------------------------------- /get_product_entitlement_mapping.js: -------------------------------------------------------------------------------- 1 | const url = "https://api.revenuecat.com/v1/product_entitlement_mapping"; 2 | const headers = { ...$request.headers }; 3 | console.log(headers['user-agent']); 4 | let params = { 5 | url:url, 6 | timeout:5000, 7 | headers:headers, 8 | }; 9 | $httpClient.get(params, function(errormsg,response,data) { 10 | if (errormsg) { 11 | console.log(errormsg); 12 | } else { 13 | $notification.post('revenuecat', '信息已获取', data); 14 | console.log(JSON.parse(data)); 15 | } 16 | $done(); 17 | }); -------------------------------------------------------------------------------- /get_product_entitlement_mapping.plugin: -------------------------------------------------------------------------------- 1 | #!name = get_product_entitlement_mapping 2 | #!desc = 获取 revenuecat 会员信息 3 | #!openUrl = 4 | #!author = @leepyer 5 | #!homepage = https://github.com/leey668 6 | #!icon = https://www.revenuecat.com/icons/icon-512x512.png 7 | #!date = 2024-04-11 00:00:00 8 | 9 | [Script] 10 | http-request https:\/\/(api\.revenuecat\.com|api\.rc-backup\.com)\/v1\/subscribers\/.+\/offerings script-path=https://raw.githubusercontent.com/leey668/pyer/main/get_product_entitlement_mapping.js, timeout=60, tag=get_product_entitlement_mapping 11 | 12 | [Mitm] 13 | hostname = api.revenuecat.com,api.rc-backup.com -------------------------------------------------------------------------------- /glass.js: -------------------------------------------------------------------------------- 1 | /************************************* 2 | 3 | 项目名称:glass 4 | 脚本作者:leepyer 5 | 电报频道:https://t.me/chxm1023 6 | 使用声明:⚠️仅供参考,🈲转载与售卖! 7 | 8 | ************************************** 9 | 10 | [rewrite_local] 11 | ^https:\/\/glass\.photo\/api\/(v2\/users\/[0-9a-zA-Z-]+$|v1\/account$|v3\/token$) url script-response-body https://raw.githubusercontent.com/leey668/pyer/main/glass.js 12 | [mitm] 13 | hostname = glass.photo 14 | 15 | *************************************/ 16 | 17 | if (-1 !== $request.url.indexOf("api/v1/account")){ 18 | var obj = JSON.parse($response.body); 19 | obj.needs_subscription = false; 20 | obj.is_patron = true; 21 | $done({body: JSON.stringify(obj)}); 22 | }else if (-1 !== $request.url.indexOf("api/v2/users")){ 23 | var obj = JSON.parse($response.body); 24 | obj.is_patron = true; 25 | $done({body: JSON.stringify(obj)}); 26 | }else if (-1 !== $request.url.indexOf("api/v3/token")){ 27 | var obj = JSON.parse($response.body); 28 | obj.user.needs_subscription = false; 29 | obj.user.is_patron = true; 30 | $done({body: JSON.stringify(obj)}); 31 | } 32 | -------------------------------------------------------------------------------- /gn6.js: -------------------------------------------------------------------------------- 1 | /************************************* 2 | 3 | 项目名称:Goodnotes6 4 | 下载地址:https://t.cn/A6K6ZSZS 5 | 脚本作者:chxm1023 6 | 电报频道:https://t.me/chxm1023 7 | 使用声明:⚠️仅供参考,🈲转载与售卖! 8 | 9 | ************************************** 10 | 11 | [rewrite_local] 12 | ^https:\/\/isi\.csan\.goodnotes\.com\/.+\/(receipts$|subscribers\/?(.*?)*$) url script-response-body https://raw.githubusercontent.com/leey668/pyer/main/gn6.js 13 | ^https:\/\/isi\.csan\.goodnotes\.com\/.+\/(receipts$|subscribers\/?(.*?)*$) url script-request-header https://raw.githubusercontent.com/leey668/pyer/main/gn6.js 14 | 15 | [mitm] 16 | hostname = isi.csan.goodnotes.com 17 | 18 | *************************************/ 19 | 20 | 21 | const chxm1023 = {}; 22 | const chxm1024 = JSON.parse(typeof $response != "undefined" && $response.body || null); 23 | 24 | const namea = "apple_access"; 25 | const nameb = "crossplatform_access"; 26 | const jsid = "com.goodnotes.gn6_one_time_unlock_3999"; 27 | 28 |   29 | if (typeof $response == "undefined") { 30 | delete $request.headers["x-revenuecat-etag"]; 31 | delete $request.headers["X-RevenueCat-ETag"]; 32 | chxm1023.headers = $request.headers; 33 | } else if (chxm1024 && chxm1024.subscriber) { 34 | data = { 35 | "Author": "chxm1023", 36 | "Telegram" : "https://t.me/chxm1023", 37 | "warning": "仅供学习,禁止转载或售卖", 38 | "purchase_date": "2022-09-09T09:09:09Z" 39 | }; 40 | chxm1024.subscriber.subscriptions[(jsid)] = { 41 | "Author": "chxm1023", 42 | "Telegram" : "https://t.me/chxm1023", 43 | "warning": "仅供学习,禁止转载或售卖", 44 | "original_purchase_date": "2022-09-09T09:09:09Z", 45 | "purchase_date": "2022-09-09T09:09:09Z", 46 | "store" : "app_store", 47 | "ownership_type": "PURCHASED" 48 | }; 49 | chxm1024.subscriber.entitlements[(namea)] = JSON.parse(JSON.stringify(data)); 50 | chxm1024.subscriber.entitlements[(nameb)] = JSON.parse(JSON.stringify(data)); 51 | chxm1024.subscriber.entitlements[(namea)].product_identifier = (jsid); 52 | chxm1024.subscriber.entitlements[(nameb)].product_identifier = (jsid); 53 | chxm1023.body = JSON.stringify(chxm1024); 54 | } 55 | 56 | $done(chxm1023); -------------------------------------------------------------------------------- /limicam.js: -------------------------------------------------------------------------------- 1 | /************************************* 2 | 3 | 项目名称:Limi Cam 4 | 脚本作者:leepyer 5 | 电报频道:https://t.me/chxm1023 6 | 使用声明:⚠️仅供参考,🈲转载与售卖! 7 | 8 | ************************************** 9 | 10 | [rewrite_local] 11 | ^https:\/\/api\.revenuecat\.com\/v1\/subscribers\/(.+)\/offerings url script-response-body https://raw.githubusercontent.com/leey668/pyer/main/limicam.js 12 | [mitm] 13 | hostname = api.revenuecat.com 14 | 15 | *************************************/ 16 | 17 | var obj = JSON.parse($response.body); 18 | obj = { 19 | "placements": { 20 | "fallback_offering_id": "sale" 21 | }, 22 | "offerings": [ 23 | { 24 | "metadata": null, 25 | "identifier": "sale", 26 | "description": "sale active", 27 | "packages": [ 28 | { 29 | "platform_product_identifier": "com.uzero.cn.fojicam.month1", 30 | "identifier": "$rc_monthly" 31 | }, 32 | { 33 | "platform_product_identifier": "com.uzero.cn.fojicam.annual1", 34 | "identifier": "$rc_annual" 35 | }, 36 | { 37 | "platform_product_identifier": "com.uzero.cn.fojicam.life2", 38 | "identifier": "$rc_lifetime" 39 | }, 40 | { 41 | "platform_product_identifier": "com.uzero.cn.fojicam.life2", 42 | "identifier": "Lifetime2" 43 | } 44 | ] 45 | } 46 | ], 47 | "current_offering_id": "sale" 48 | }; 49 | $done({body: JSON.stringify(obj)}); 50 | 51 | -------------------------------------------------------------------------------- /liulishuoyuedu.js: -------------------------------------------------------------------------------- 1 | var responseBody = $response.body; 2 | var requestUrl = $request.url; 3 | 4 | if (!responseBody) $done({}); 5 | 6 | if (requestUrl.includes('/api/v2/member/subscription')) { 7 | var obj = { 8 | expiredAt: 4070880000, 9 | remainDays: 9999, 10 | active: true, 11 | startedAt: 1715749975 12 | }; 13 | $done({body: JSON.stringify(obj)}); 14 | } else if (requestUrl.includes('/api/v2/user_goods_subscriptions')) { 15 | var obj = { 16 | items: [{ 17 | startedAt: 1715749975, 18 | category: 4, 19 | status: 2, 20 | expiredAt: 4070880000, 21 | goodsTitle: 'member', 22 | remainDays: 9999, 23 | goodsUid: 'XnV1EW', 24 | firstStartedAt: 1715749975 25 | }] 26 | }; 27 | $done({body: JSON.stringify(obj)}); 28 | } -------------------------------------------------------------------------------- /liulishuoyuedu.plugin: -------------------------------------------------------------------------------- 1 | #!name = 流利说阅读 2 | #!desc = 破解vip 3 | #!homepage = https://github.com/leey668 4 | #!icon = https://is1-ssl.mzstatic.com/image/thumb/Purple221/v4/e7/cb/99/e7cb9996-91ff-5fcc-c544-505d902a3978/AppIcon-0-1x_U007emarketing-0-5-0-0-85-220-0.png/512x512bb.png 5 | #!date = 2024-05-15 00:00:00 6 | 7 | [Script] 8 | http-response ^https:\/\/vira\.llsapp\.com\/api\/v2\/(member\/subscription|user_goods_subscriptions(\/overall)?) script-path=https://raw.githubusercontent.com/leey668/pyer/main/liulishuoyuedu.js, requires-body=true, timeout=60, tag=liulishuoyuedu 9 | 10 | [Mitm] 11 | hostname = vira.llsapp.com -------------------------------------------------------------------------------- /notebook.js: -------------------------------------------------------------------------------- 1 | /************************************* 2 | 3 | 项目名称:众山小笔记 解锁本地功能 4 | 脚本作者:leepyer 5 | 电报频道:https://t.me/chxm1023 6 | 使用声明:⚠️仅供参考,🈲转载与售卖! 7 | 8 | ************************************** 9 | 10 | [rewrite_local] 11 | ^https:\/\/umeecorn\.com\/notebook\/(loginedUser\/(info|tier|balance)|user\/(login|loginApple)) url script-response-body https://raw.githubusercontent.com/leey668/pyer/main/notebook.js 12 | [mitm] 13 | hostname = umeecorn.com 14 | 15 | *************************************/ 16 | 17 | if ($request.url.includes("/notebook/loginedUser/tier")){ 18 | if ($response.body) { 19 | try { 20 | var obj = JSON.parse($response.body); 21 | obj.data = { 22 | "expireTime": 4070880000000, 23 | "tierName": "永久尊享", 24 | "tier": 2,//????? 25 | "maxSyncCount": 99999,//数据同步额度 26 | "premiumDays": 10000,//永久尊享型会员获赠进度 27 | "permanentProTierValue": 10000,//????? 28 | "isPro": true, 29 | "permanentProTire": "none", 30 | "permanentProTier": "none", 31 | "isPermanentPro": true,//永久会员 32 | "isDataCountBeta": true, 33 | "economyDays": 10000//永久标准型会员获赠进度 34 | }; 35 | $done({body: JSON.stringify(obj)}); 36 | } catch(e) { 37 | console.log("解析错误或者body不是JSON格式"); 38 | $done({}); 39 | } 40 | } else { 41 | console.log("No response body found"); 42 | $done({}); 43 | } 44 | }else if (/\/notebook\/loginedUser\/info|notebook\/user\/login|notebook\/user\/loginApple/.test($request.url)){ 45 | if ($response.body) { 46 | try { 47 | var obj = JSON.parse($response.body); 48 | obj.data.featherBalance = 999999999;//羽毛余额 49 | obj.data.restOcrQuota = 19998; 50 | obj.data.ocrQuota = { 51 | "month": 9999, 52 | "total": 19998, 53 | "permanent": 9999 54 | }; 55 | obj.data.tier = { 56 | "expireTime": 4070880000000, 57 | "tierName": "永久尊享", 58 | "tier": 2,//????? 59 | "maxSyncCount": 99999,//数据同步额度 60 | "premiumDays": 10000,//永久尊享型会员获赠进度 61 | "permanentProTierValue": 10000,//????? 62 | "isPro": true, 63 | "permanentProTire": "none", 64 | "permanentProTier": "none", 65 | "isPermanentPro": true,//永久会员 66 | "isDataCountBeta": true, 67 | "economyDays": 10000//永久标准型会员获赠进度 68 | }; 69 | $done({body: JSON.stringify(obj)}); 70 | } catch(e) { 71 | console.log("解析错误或者body不是JSON格式"); 72 | $done({}); 73 | } 74 | } else { 75 | console.log("No response body found"); 76 | $done({}); 77 | } 78 | }else if ($request.url.includes("/notebook/loginedUser/balance")){ 79 | if ($response.body) { 80 | try { 81 | var obj = JSON.parse($response.body); 82 | obj.data.featherBalance = 999999999;//羽毛余额 83 | obj.data.restOcrQuota = 19998; 84 | obj.data.ocrQuota = { 85 | "month": 9999, 86 | "total": 19998, 87 | "permanent": 9999 88 | }; 89 | $done({body: JSON.stringify(obj)}); 90 | } catch(e) { 91 | console.log("解析错误或者body不是JSON格式"); 92 | $done({}); 93 | } 94 | } else { 95 | console.log("No response body found"); 96 | $done({}); 97 | } 98 | } -------------------------------------------------------------------------------- /nymf.js: -------------------------------------------------------------------------------- 1 | /************************************* 2 | 项目名称:NYMF下载无水印图片 3 | ************************************** 4 | [rewrite_local] 5 | https:\/\/nymfapp\.com\/api\/photos url script-response-body https://raw.githubusercontent.com/leey668/pyer/main/nymf.js 6 | [mitm] 7 | hostname = nymfapp.com 8 | *************************************/ 9 | var obj = JSON.parse($response.body); 10 | obj.forEach(element => { 11 | let url = element.main; 12 | Object.assign(element, { 13 | source: url, 14 | pro_main: url, 15 | watermark: url 16 | }); 17 | }); 18 | $done({ body: JSON.stringify(obj) }); -------------------------------------------------------------------------------- /prisma.js: -------------------------------------------------------------------------------- 1 | /************************************* 2 | 3 | 项目名称:Prisma 4 | 脚本作者:leepyer 5 | 电报频道:https://t.me/chxm1023 6 | 使用声明:⚠️仅供参考,🈲转载与售卖! 7 | 8 | ************************************** 9 | 10 | [rewrite_local] 11 | https:\/\/api\.neuralprisma\.com\/receipt\/ios\/(upload|status\/prisma\/) url script-response-body https://raw.githubusercontent.com/leey668/pyer/main/prisma.js 12 | [mitm] 13 | hostname = api.neuralprisma.com 14 | 15 | *************************************/ 16 | 17 | var obj = JSON.parse($response.body); 18 | obj = { 19 | "is_grace_period": false, 20 | "is_valid": true, 21 | "promotional_offer_id": "premium.promo_cancel_survey_discount", 22 | "is_in_billing_retry_period": true, 23 | "is_introductory_used": true, 24 | "device_user_info": { 25 | "subscription_valid": true, 26 | "auth_type": "cancel_survey_free_discount" 27 | }, 28 | "subscription_type": "cancel_survey_free_discount", 29 | "platform": "ios", 30 | "product_id": "premium.annual2", 31 | "auto_renew_enabled": true, 32 | "expiration_date_unix": 9999, 33 | "expiration_date": "2099-01-01T00:00:00Z", 34 | "processing_count": 0, 35 | "status": "ok", 36 | "is_trial": false 37 | }; 38 | $done({body: JSON.stringify(obj)}); -------------------------------------------------------------------------------- /procamera.js: -------------------------------------------------------------------------------- 1 | /************************************* 2 | 3 | 项目名称:ProCamera 4 | 脚本作者:leepyer 5 | 6 | ************************************** 7 | 8 | [rewrite_local] 9 | ^https?:\/\/api\.revenuecat\.com\/.+\/(receipts$|subscribers\/?(.*?)*$) url script-response-body https://raw.githubusercontent.com/leey668/pyer/main/procamera.js 10 | ^https?:\/\/api\.revenuecat\.com\/.+\/(receipts$|subscribers\/?(.*?)*$) url script-request-header https://raw.githubusercontent.com/leey668/pyer/main/procamera.js 11 | [mitm] 12 | hostname = api.revenuecat.com 13 | 14 | *************************************/ 15 | 16 | var obj1 = {}; 17 | var obj2 = JSON.parse( 18 | (typeof $response != "undefined" && $response.body) || null 19 | ); 20 | 21 | if (typeof $response == "undefined") { 22 | delete $request.headers["x-revenuecat-etag"]; 23 | delete $request.headers["X-RevenueCat-ETag"]; 24 | obj1.headers = $request.headers; 25 | } else if (obj2 && obj2.subscriber) { 26 | obj2 = { 27 | request_date_ms: 1708878933750, 28 | request_date: "2024-02-25T16:35:33Z", 29 | subscriber: { 30 | non_subscriptions: {}, 31 | first_seen: "2024-02-25T15:46:00Z", 32 | original_application_version: "4192", 33 | other_purchases: {}, 34 | management_url: null, 35 | subscriptions: { 36 | "com.cocologics.ProCamera.Up.Purchase1": { 37 | store: "app_store", 38 | purchase_date: "2023-09-09T09:09:09Z", 39 | product_identifier: "com.cocologics.ProCamera.Up.Purchase1", 40 | original_purchase_date: "2023-09-09T09:09:09Z", 41 | ownership_type: "PURCHASED", 42 | expires_date: "2099-09-09T09:09:09Z", 43 | }, 44 | "com.cocologics.ProCamera.vividHDR001": { 45 | store: "app_store", 46 | purchase_date: "2023-09-09T09:09:09Z", 47 | product_identifier: "com.cocologics.ProCamera.vividHDR001", 48 | original_purchase_date: "2023-09-09T09:09:09Z", 49 | ownership_type: "PURCHASED", 50 | expires_date: "2099-09-09T09:09:09Z", 51 | }, 52 | }, 53 | entitlements: { 54 | pro_camera_up_entitlement: { 55 | product_identifier: "com.cocologics.ProCamera.Up.Purchase1", 56 | expires_date: "2099-09-09T09:09:09Z", 57 | purchase_date: "2023-09-09T09:09:09Z", 58 | }, 59 | vivid_hdr_entitlement: { 60 | product_identifier: "com.cocologics.ProCamera.vividHDR001", 61 | expires_date: "2099-09-09T09:09:09Z", 62 | purchase_date: "2023-09-09T09:09:09Z", 63 | }, 64 | }, 65 | original_purchase_date: "2023-11-24T04:16:06Z", 66 | original_app_user_id: 67 | "$RCAnonymousID:2abb1454cde84fca87d0465d0f3623c2", 68 | last_seen: "2024-02-25T16:32:02Z", 69 | }, 70 | }; 71 | obj1.body = JSON.stringify(obj2); 72 | } 73 | 74 | $done(obj1); 75 | -------------------------------------------------------------------------------- /revenuecat.js: -------------------------------------------------------------------------------- 1 | const pyer1 = {}; 2 | const pyer2 = JSON.parse(typeof $response != "undefined" && $response.body || null); 3 | 4 | const names = $persistentStore.read("name") ? $persistentStore.read("name").split(",") : []; 5 | const appids = $persistentStore.read("appid") ? $persistentStore.read("appid").split(",") : []; 6 | const forever = JSON.parse($persistentStore.read("forever")); 7 | 8 | if (typeof $response == "undefined") { 9 | delete $request.headers["x-revenuecat-etag"]; 10 | delete $request.headers["X-RevenueCat-ETag"]; 11 | pyer1.headers = $request.headers; 12 | } else if (pyer2 && pyer2.subscriber) { 13 | pyer2.subscriber.subscriptions = pyer2.subscriber.subscriptions || {}; 14 | pyer2.subscriber.entitlements = pyer2.subscriber.entitlements || {}; 15 | 16 | for (let i = 0; i < names.length && i < appids.length; i++) { 17 | const name = names[i]; 18 | const appid = appids[i]; 19 | let data = { 20 | "product_identifier": appid 21 | }; 22 | if (forever) { 23 | data = { 24 | ...data, 25 | "purchase_date": "2023-09-09T09:09:09Z" 26 | }; 27 | } else { 28 | data = { 29 | ...data, 30 | "expires_date": "2099-09-09T09:09:09Z", 31 | "purchase_date": "2023-09-09T09:09:09Z" 32 | }; 33 | } 34 | 35 | pyer2.subscriber.entitlements[name] = data; 36 | pyer2.subscriber.subscriptions[appid] = { 37 | ...data, 38 | "original_purchase_date": "2023-09-09T09:09:09Z", 39 | "store": "app_store", 40 | "ownership_type": "PURCHASED", 41 | "period_type": "normal" 42 | }; 43 | } 44 | 45 | pyer1.body = JSON.stringify(pyer2); 46 | } 47 | 48 | $done(pyer1); -------------------------------------------------------------------------------- /revenuecat.plugin: -------------------------------------------------------------------------------- 1 | #!name = revenuecat 2 | #!desc = 恢复订阅模板,多个值以“,”分隔。 3 | #!openUrl = 4 | #!author = @leepyer 5 | #!homepage = https://github.com/leey668 6 | #!icon = https://www.revenuecat.com/icons/icon-512x512.png 7 | #!input = name 8 | #!input = appid 9 | #!select = forever,true,false 10 | #!date = 2024-04-19 00:00:00 11 | 12 | [Script] 13 | http-response ^https?:\/\/(api\.revenuecat\.com|api\.rc-backup\.com)\/.+\/(receipts$|subscribers\/?(.*?)*$) script-path=https://raw.githubusercontent.com/leey668/pyer/main/revenuecat.js, requires-body=true, timeout=60, tag=revenuecat_1 14 | 15 | http-request ^https?:\/\/(api\.revenuecat\.com|api\.rc-backup\.com)\/.+\/(receipts$|subscribers\/?(.*?)*$) script-path=https://raw.githubusercontent.com/leey668/pyer/main/revenuecat.js, timeout=60, tag=revenuecat_2 16 | 17 | 18 | [Mitm] 19 | hostname = api.revenuecat.com,api.rc-backup.com -------------------------------------------------------------------------------- /revenuecatcatcher.js: -------------------------------------------------------------------------------- 1 | if($response.body){ 2 | $notification.post('', '已捕获', $request.url); 3 | console.log(JSON.parse($response.body)); 4 | } 5 | $done({}); -------------------------------------------------------------------------------- /revenuecatcatcher.plugin: -------------------------------------------------------------------------------- 1 | #!name = revenuecat 匹配 2 | #!desc = 抓取会员信息 3 | #!openUrl = 4 | #!author = @leepyer 5 | #!homepage = https://github.com/leey668 6 | #!icon = https://www.revenuecat.com/icons/icon-512x512.png 7 | #!date = 2023-12-15 00:00:00 8 | 9 | [Script] 10 | http-response https:\/\/api\.revenuecat\.com\/v1\/(product_entitlement_mapping|subscribers\/.+\/(offerings|products)) script-path=https://raw.githubusercontent.com/leey668/pyer/main/revenuecatcatcher.js, requires-body=true, timeout=60, tag=revenuecatcatcher 11 | 12 | [Mitm] 13 | hostname = api.revenuecat.com -------------------------------------------------------------------------------- /sa.js: -------------------------------------------------------------------------------- 1 | /************************************* 2 | 3 | 项目名称:SCIENTIFIC AMERICAN 4 | 脚本作者:leepyer 5 | 电报频道:https://t.me/chxm1023 6 | 使用声明:⚠️仅供参考,🈲转载与售卖! 7 | 8 | ************************************** 9 | 10 | [rewrite_local] 11 | ^https:\/\/main-sciam-nature\.content\.pugpig\.com\/subs\/(itunes_store|pianomediaoauth_subs)\/verify_subscription url script-response-body https://raw.githubusercontent.com/leey668/pyer/main/sa.js 12 | [mitm] 13 | hostname = main-sciam-nature.content.pugpig.com 14 | 15 | *************************************/ 16 | 17 | let modifiedXml = $response.body; 18 | modifiedXml = modifiedXml.replace(/state="inactive"/g, 'state="active"'); 19 | modifiedXml = modifiedXml.replace(/message="[^"]*"/g, 'message="cracked by leepyer"'); 20 | modifiedXml = modifiedXml.replace(/false/g, 'true'); 21 | $done({body: modifiedXml}); 22 | -------------------------------------------------------------------------------- /simuflight.js: -------------------------------------------------------------------------------- 1 | /************************************* 2 | 3 | 项目名称:SimuFlight 4 | 脚本作者:leepyer 5 | 电报频道:https://t.me/chxm1023 6 | 使用声明:⚠️仅供参考,🈲转载与售卖! 7 | 8 | ************************************** 9 | 10 | [rewrite_local] 11 | ^https:\/\/api\.hangxing123\.top\/drone\/userInfo\/v2 url script-response-body https://raw.githubusercontent.com/leey668/pyer/main/simuflight.js 12 | [mitm] 13 | hostname = api.hangxing123.top 14 | 15 | *************************************/ 16 | 17 | var obj = JSON.parse($response.body); 18 | obj.info.member = "1"; 19 | obj.info.memberExpire = "2099-09-09 09:09:09"; 20 | $done({body: JSON.stringify(obj)}); -------------------------------------------------------------------------------- /theguardian.js: -------------------------------------------------------------------------------- 1 | /************************************* 2 | 3 | 项目名称:The Guardian 4 | 脚本作者:leepyer 5 | 电报频道:https://t.me/chxm1023 6 | 使用声明:⚠️仅供参考,🈲转载与售卖! 7 | 8 | ************************************** 9 | 10 | [rewrite_local] 11 | ^https:\/\/members-data-api\.theguardian\.com\/user-attributes\/me url script-response-body https://raw.githubusercontent.com/leey668/pyer/main/theguardian.js 12 | [mitm] 13 | hostname = members-data-api.theguardian.com 14 | 15 | *************************************/ 16 | 17 | var obj = JSON.parse($response.body); 18 | obj.showSupportMessaging = false; 19 | var accessLevels = ['member', 'paidMember', 'guardianPatron', 'paperSubscriber', 'recurringContributor', 'supporterPlus', 'digitalPack', 'guardianWeeklySubscriber']; 20 | accessLevels.forEach(level => obj.contentAccess[level] = true); 21 | $done({ body: JSON.stringify(obj) }); 22 | -------------------------------------------------------------------------------- /weread.js: -------------------------------------------------------------------------------- 1 | const $ = new Env("微信读书解锁下架书籍"); 2 | 3 | const headers = { 4 | "cookie": "wr_logined=1", 5 | ...$request.headers 6 | }; 7 | const bookId = JSON.parse($request.body).globalId; 8 | $.log(JSON.stringify(headers)); 9 | 10 | let option1 = { 11 | url: "https://i.weread.qq.com/review/add", 12 | headers: headers, 13 | body: { 14 | "isPrivate": 1, 15 | "bookId": bookId, 16 | "content": "推荐阅读", 17 | "star": null, 18 | "type": null, 19 | "bookVersion": null 20 | } 21 | }; 22 | let option2 = { 23 | url: `https://i.weread.qq.com/book/chapterdownload?bookId=${bookId}&bookType=txt&bookVersion=0&chapters=1&modernVersion=8.1.0.22&pf=weread_wx-2001-iap-2001-iphone&pfkey=pfkey&preload=2&release=1&screenSize=16x9&synckey=&zoneId=1`, 24 | headers: headers 25 | }; 26 | let option3 = { 27 | url: "https://i.weread.qq.com/shelf/add", 28 | headers: headers, 29 | body: { 30 | "bookIds": [ bookId ] 31 | } 32 | }; 33 | 34 | try { 35 | let response = await $.http.post(option1); 36 | let reviewId = JSON.parse(response.body).reviewId; 37 | await $.http.get(option2); 38 | await $.http.post(option3); 39 | let option4 = { 40 | url: "https://i.weread.qq.com/review/delete", 41 | headers: headers, 42 | body: { 43 | "reviewId": reviewId 44 | } 45 | }; 46 | await $.http.post(option4); 47 | } catch (error) { 48 | $.error('An error occurred:', error); 49 | } 50 | 51 | $.done(); 52 | 53 | 54 | function Env(t,e){class s{constructor(t){this.env=t}send(t,e="GET"){t="string"==typeof t?{url:t}:t;let s=this.get;return"POST"===e&&(s=this.post),new Promise(((e,i)=>{s.call(this,t,((t,s,o)=>{t?i(t):e(s)}))}))}get(t){return this.send.call(this.env,t)}post(t){return this.send.call(this.env,t,"POST")}}return new class{constructor(t,e){this.logLevels={debug:0,info:1,warn:2,error:3},this.logLevelPrefixs={debug:"[DEBUG] ",info:"[INFO] ",warn:"[WARN] ",error:"[ERROR] "},this.logLevel="info",this.name=t,this.http=new s(this),this.data=null,this.dataFile="box.dat",this.logs=[],this.isMute=!1,this.isNeedRewrite=!1,this.logSeparator="\n",this.encoding="utf-8",this.startTime=(new Date).getTime(),Object.assign(this,e),this.log("",`🔔${this.name}, 开始!`)}getEnv(){return"undefined"!=typeof $environment&&$environment["surge-version"]?"Surge":"undefined"!=typeof $environment&&$environment["stash-version"]?"Stash":"undefined"!=typeof module&&module.exports?"Node.js":"undefined"!=typeof $task?"Quantumult X":"undefined"!=typeof $loon?"Loon":"undefined"!=typeof $rocket?"Shadowrocket":void 0}isNode(){return"Node.js"===this.getEnv()}isQuanX(){return"Quantumult X"===this.getEnv()}isSurge(){return"Surge"===this.getEnv()}isLoon(){return"Loon"===this.getEnv()}isShadowrocket(){return"Shadowrocket"===this.getEnv()}isStash(){return"Stash"===this.getEnv()}toObj(t,e=null){try{return JSON.parse(t)}catch{return e}}toStr(t,e=null,...s){try{return JSON.stringify(t,...s)}catch{return e}}getjson(t,e){let s=e;if(this.getdata(t))try{s=JSON.parse(this.getdata(t))}catch{}return s}setjson(t,e){try{return this.setdata(JSON.stringify(t),e)}catch{return!1}}getScript(t){return new Promise((e=>{this.get({url:t},((t,s,i)=>e(i)))}))}runScript(t,e){return new Promise((s=>{let i=this.getdata("@chavy_boxjs_userCfgs.httpapi");i=i?i.replace(/\n/g,"").trim():i;let o=this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout");o=o?1*o:20,o=e&&e.timeout?e.timeout:o;const[r,a]=i.split("@"),n={url:`http://${a}/v1/scripting/evaluate`,body:{script_text:t,mock_type:"cron",timeout:o},headers:{"X-Key":r,Accept:"*/*"},timeout:o};this.post(n,((t,e,i)=>s(i)))})).catch((t=>this.logErr(t)))}loaddata(){if(!this.isNode())return{};{this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),e=this.path.resolve(process.cwd(),this.dataFile),s=this.fs.existsSync(t),i=!s&&this.fs.existsSync(e);if(!s&&!i)return{};{const i=s?t:e;try{return JSON.parse(this.fs.readFileSync(i))}catch(t){return{}}}}}writedata(){if(this.isNode()){this.fs=this.fs?this.fs:require("fs"),this.path=this.path?this.path:require("path");const t=this.path.resolve(this.dataFile),e=this.path.resolve(process.cwd(),this.dataFile),s=this.fs.existsSync(t),i=!s&&this.fs.existsSync(e),o=JSON.stringify(this.data);s?this.fs.writeFileSync(t,o):i?this.fs.writeFileSync(e,o):this.fs.writeFileSync(t,o)}}lodash_get(t,e,s){const i=e.replace(/\[(\d+)\]/g,".$1").split(".");let o=t;for(const t of i)if(o=Object(o)[t],void 0===o)return s;return o}lodash_set(t,e,s){return Object(t)!==t||(Array.isArray(e)||(e=e.toString().match(/[^.[\]]+/g)||[]),e.slice(0,-1).reduce(((t,s,i)=>Object(t[s])===t[s]?t[s]:t[s]=Math.abs(e[i+1])>>0==+e[i+1]?[]:{}),t)[e[e.length-1]]=s),t}getdata(t){let e=this.getval(t);if(/^@/.test(t)){const[,s,i]=/^@(.*?)\.(.*?)$/.exec(t),o=s?this.getval(s):"";if(o)try{const t=JSON.parse(o);e=t?this.lodash_get(t,i,""):e}catch(t){e=""}}return e}setdata(t,e){let s=!1;if(/^@/.test(e)){const[,i,o]=/^@(.*?)\.(.*?)$/.exec(e),r=this.getval(i),a=i?"null"===r?null:r||"{}":"{}";try{const e=JSON.parse(a);this.lodash_set(e,o,t),s=this.setval(JSON.stringify(e),i)}catch(e){const r={};this.lodash_set(r,o,t),s=this.setval(JSON.stringify(r),i)}}else s=this.setval(t,e);return s}getval(t){switch(this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":return $persistentStore.read(t);case"Quantumult X":return $prefs.valueForKey(t);case"Node.js":return this.data=this.loaddata(),this.data[t];default:return this.data&&this.data[t]||null}}setval(t,e){switch(this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":return $persistentStore.write(t,e);case"Quantumult X":return $prefs.setValueForKey(t,e);case"Node.js":return this.data=this.loaddata(),this.data[e]=t,this.writedata(),!0;default:return this.data&&this.data[e]||null}}initGotEnv(t){this.got=this.got?this.got:require("got"),this.cktough=this.cktough?this.cktough:require("tough-cookie"),this.ckjar=this.ckjar?this.ckjar:new this.cktough.CookieJar,t&&(t.headers=t.headers?t.headers:{},t&&(t.headers=t.headers?t.headers:{},void 0===t.headers.cookie&&void 0===t.headers.Cookie&&void 0===t.cookieJar&&(t.cookieJar=this.ckjar)))}get(t,e=(()=>{})){switch(t.headers&&(delete t.headers["Content-Type"],delete t.headers["Content-Length"],delete t.headers["content-type"],delete t.headers["content-length"]),t.params&&(t.url+="?"+this.queryStr(t.params)),void 0===t.followRedirect||t.followRedirect||((this.isSurge()||this.isLoon())&&(t["auto-redirect"]=!1),this.isQuanX()&&(t.opts?t.opts.redirection=!1:t.opts={redirection:!1})),this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":default:this.isSurge()&&this.isNeedRewrite&&(t.headers=t.headers||{},Object.assign(t.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient.get(t,((t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status?s.status:s.statusCode,s.status=s.statusCode),e(t,s,i)}));break;case"Quantumult X":this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then((t=>{const{statusCode:s,statusCode:i,headers:o,body:r,bodyBytes:a}=t;e(null,{status:s,statusCode:i,headers:o,body:r,bodyBytes:a},r,a)}),(t=>e(t&&t.error||"UndefinedError")));break;case"Node.js":let s=require("iconv-lite");this.initGotEnv(t),this.got(t).on("redirect",((t,e)=>{try{if(t.headers["set-cookie"]){const s=t.headers["set-cookie"].map(this.cktough.Cookie.parse).toString();s&&this.ckjar.setCookieSync(s,null),e.cookieJar=this.ckjar}}catch(t){this.logErr(t)}})).then((t=>{const{statusCode:i,statusCode:o,headers:r,rawBody:a}=t,n=s.decode(a,this.encoding);e(null,{status:i,statusCode:o,headers:r,rawBody:a,body:n},n)}),(t=>{const{message:i,response:o}=t;e(i,o,o&&s.decode(o.rawBody,this.encoding))}));break}}post(t,e=(()=>{})){const s=t.method?t.method.toLocaleLowerCase():"post";switch(t.body&&t.headers&&!t.headers["Content-Type"]&&!t.headers["content-type"]&&(t.headers["content-type"]="application/x-www-form-urlencoded"),t.headers&&(delete t.headers["Content-Length"],delete t.headers["content-length"]),void 0===t.followRedirect||t.followRedirect||((this.isSurge()||this.isLoon())&&(t["auto-redirect"]=!1),this.isQuanX()&&(t.opts?t.opts.redirection=!1:t.opts={redirection:!1})),this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":default:this.isSurge()&&this.isNeedRewrite&&(t.headers=t.headers||{},Object.assign(t.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient[s](t,((t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status?s.status:s.statusCode,s.status=s.statusCode),e(t,s,i)}));break;case"Quantumult X":t.method=s,this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then((t=>{const{statusCode:s,statusCode:i,headers:o,body:r,bodyBytes:a}=t;e(null,{status:s,statusCode:i,headers:o,body:r,bodyBytes:a},r,a)}),(t=>e(t&&t.error||"UndefinedError")));break;case"Node.js":let i=require("iconv-lite");this.initGotEnv(t);const{url:o,...r}=t;this.got[s](o,r).then((t=>{const{statusCode:s,statusCode:o,headers:r,rawBody:a}=t,n=i.decode(a,this.encoding);e(null,{status:s,statusCode:o,headers:r,rawBody:a,body:n},n)}),(t=>{const{message:s,response:o}=t;e(s,o,o&&i.decode(o.rawBody,this.encoding))}));break}}time(t,e=null){const s=e?new Date(e):new Date;let i={"M+":s.getMonth()+1,"d+":s.getDate(),"H+":s.getHours(),"m+":s.getMinutes(),"s+":s.getSeconds(),"q+":Math.floor((s.getMonth()+3)/3),S:s.getMilliseconds()};/(y+)/.test(t)&&(t=t.replace(RegExp.$1,(s.getFullYear()+"").substr(4-RegExp.$1.length)));for(let e in i)new RegExp("("+e+")").test(t)&&(t=t.replace(RegExp.$1,1==RegExp.$1.length?i[e]:("00"+i[e]).substr((""+i[e]).length)));return t}queryStr(t){let e="";for(const s in t){let i=t[s];null!=i&&""!==i&&("object"==typeof i&&(i=JSON.stringify(i)),e+=`${s}=${i}&`)}return e=e.substring(0,e.length-1),e}msg(e=t,s="",i="",o={}){const r=t=>{const{$open:e,$copy:s,$media:i,$mediaMime:o}=t;switch(typeof t){case void 0:return t;case"string":switch(this.getEnv()){case"Surge":case"Stash":default:return{url:t};case"Loon":case"Shadowrocket":return t;case"Quantumult X":return{"open-url":t};case"Node.js":return}case"object":switch(this.getEnv()){case"Surge":case"Stash":case"Shadowrocket":default:{const r={};let a=t.openUrl||t.url||t["open-url"]||e;a&&Object.assign(r,{action:"open-url",url:a});let n=t["update-pasteboard"]||t.updatePasteboard||s;if(n&&Object.assign(r,{action:"clipboard",text:n}),i){let t,e,s;if(i.startsWith("http"))t=i;else if(i.startsWith("data:")){const[t]=i.split(";"),[,o]=i.split(",");e=o,s=t.replace("data:","")}else{e=i,s=(t=>{const e={JVBERi0:"application/pdf",R0lGODdh:"image/gif",R0lGODlh:"image/gif",iVBORw0KGgo:"image/png","/9j/":"image/jpg"};for(var s in e)if(0===t.indexOf(s))return e[s];return null})(i)}Object.assign(r,{"media-url":t,"media-base64":e,"media-base64-mime":o??s})}return Object.assign(r,{"auto-dismiss":t["auto-dismiss"],sound:t.sound}),r}case"Loon":{const s={};let o=t.openUrl||t.url||t["open-url"]||e;o&&Object.assign(s,{openUrl:o});let r=t.mediaUrl||t["media-url"];return i?.startsWith("http")&&(r=i),r&&Object.assign(s,{mediaUrl:r}),console.log(JSON.stringify(s)),s}case"Quantumult X":{const o={};let r=t["open-url"]||t.url||t.openUrl||e;r&&Object.assign(o,{"open-url":r});let a=t["media-url"]||t.mediaUrl;i?.startsWith("http")&&(a=i),a&&Object.assign(o,{"media-url":a});let n=t["update-pasteboard"]||t.updatePasteboard||s;return n&&Object.assign(o,{"update-pasteboard":n}),console.log(JSON.stringify(o)),o}case"Node.js":return}default:return}};if(!this.isMute)switch(this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":default:$notification.post(e,s,i,r(o));break;case"Quantumult X":$notify(e,s,i,r(o));break;case"Node.js":break}if(!this.isMuteLog){let t=["","==============📣系统通知📣=============="];t.push(e),s&&t.push(s),i&&t.push(i),console.log(t.join("\n")),this.logs=this.logs.concat(t)}}debug(...t){this.logLevels[this.logLevel]<=this.logLevels.debug&&(t.length>0&&(this.logs=[...this.logs,...t]),console.log(`${this.logLevelPrefixs.debug}${t.map((t=>t??String(t))).join(this.logSeparator)}`))}info(...t){this.logLevels[this.logLevel]<=this.logLevels.info&&(t.length>0&&(this.logs=[...this.logs,...t]),console.log(`${this.logLevelPrefixs.info}${t.map((t=>t??String(t))).join(this.logSeparator)}`))}warn(...t){this.logLevels[this.logLevel]<=this.logLevels.warn&&(t.length>0&&(this.logs=[...this.logs,...t]),console.log(`${this.logLevelPrefixs.warn}${t.map((t=>t??String(t))).join(this.logSeparator)}`))}error(...t){this.logLevels[this.logLevel]<=this.logLevels.error&&(t.length>0&&(this.logs=[...this.logs,...t]),console.log(`${this.logLevelPrefixs.error}${t.map((t=>t??String(t))).join(this.logSeparator)}`))}log(...t){t.length>0&&(this.logs=[...this.logs,...t]),console.log(t.map((t=>t??String(t))).join(this.logSeparator))}logErr(t,e){switch(this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":case"Quantumult X":default:this.log("",`❗️${this.name}, 错误!`,e,t);break;case"Node.js":this.log("",`❗️${this.name}, 错误!`,e,void 0!==t.message?t.message:t,t.stack);break}}wait(t){return new Promise((e=>setTimeout(e,t)))}done(t={}){const e=((new Date).getTime()-this.startTime)/1e3;switch(this.log("",`🔔${this.name}, 结束! 🕛 ${e} 秒`),this.log(),this.getEnv()){case"Surge":case"Loon":case"Stash":case"Shadowrocket":case"Quantumult X":default:$done(t);break;case"Node.js":process.exit(1)}}}(t,e)} -------------------------------------------------------------------------------- /weread.plugin: -------------------------------------------------------------------------------- 1 | #!name=微信读书 2 | #!desc=点击订阅上架通知,解锁下架书籍。 3 | #!author = @leepyer 4 | #!homepage = https://github.com/leey668 5 | #!icon=https://rescdn.qqmail.com/node/wr/wrpage/style/images/independent/appleTouchIcon/apple-touch-icon-152x152.png 6 | #!date = 2024-04-25 00:00:00 7 | 8 | [Script] 9 | http-response ^https:\/\/i\.weread\.qq\.com\/book\/notfound script-path=https://raw.githubusercontent.com/leey668/pyer/main/weread.js, requires-body=true, timeout=60, tag=微信读书 10 | 11 | [MITM] 12 | hostname = i.weread.qq.com -------------------------------------------------------------------------------- /xinmanhua.js: -------------------------------------------------------------------------------- 1 | /************************************* 2 | 3 | 项目名称:新漫画 4 | 脚本作者:leepyer 5 | 电报频道:https://t.me/chxm1023 6 | 使用声明:⚠️仅供参考,🈲转载与售卖! 7 | 8 | ************************************** 9 | 10 | [rewrite_local] 11 | ^https:\/\/xapi\.xinmanhua\.net\/(chapters\/\d+\/isreadable|member|worksinfos\/\d+\?) url script-response-body https://raw.githubusercontent.com/leey668/pyer/main/xinmanhua.js 12 | ^https:\/\/xapi\.xinmanhua\.net\/splashgroups url reject-dict 13 | [mitm] 14 | hostname = xapi.xinmanhua.net 15 | 16 | *************************************/ 17 | 18 | if ($request.url.includes("/member")){ 19 | if($response.body){ 20 | var obj = JSON.parse($response.body); 21 | obj.data.attributes.isvip = 1; 22 | obj.data.attributes.ios_coins = 999999; 23 | obj.data.attributes.ios_coupon = 999999; 24 | obj.data.attributes.overduedate = 4070880000; 25 | $done({body: JSON.stringify(obj)}); 26 | }else { 27 | $done({}); 28 | } 29 | }else if ($request.url.match(/\/chapters\/\d+\/isreadable/)){ 30 | var obj = JSON.parse($response.body); 31 | obj.data.attributes.allowdownload = 1; 32 | obj.data.attributes.ischarge = 0; 33 | obj.data.attributes.isvipchap = 0; 34 | obj.data.attributes.isreadable = 1; 35 | $done({body: JSON.stringify(obj)}); 36 | }else if ($request.url.match(/\/worksinfos\/\d+\?/)){ 37 | if($response.body){ 38 | var modified = $response.body; 39 | modified = modified.replace(/"ischarge":1/g, '"ischarge":0') 40 | .replace(/"isvipchap":1/g, '"isvipchap":0') 41 | .replace(/"allowdownload":0/g, '"allowdownload":1'); 42 | $done({body: modified}); 43 | }else { 44 | $done({}); 45 | } 46 | } -------------------------------------------------------------------------------- /xiuren.js: -------------------------------------------------------------------------------- 1 | // ==UserScript== 2 | // @name XIUREN Enhanced Gallery Loader 3 | // @version 0.1 4 | // @description m.newxiuren.com(移动版) 显示全部图片,开启百度网盘下载页面,增加提取百度网盘链接按钮 5 | // @author leepyer 6 | // @match *//m.newxiuren.com.cn/piclist.aspx?id=* 7 | // @match *//m.newxiuren.com/piclist.aspx?id=* 8 | // @icon http://m.newxiuren.com.cn/images/style/favicon.ico 9 | // ==/UserScript== 10 | 11 | (function() { 12 | 'use strict'; 13 | if (!/piclist\.aspx\?id=/.test(window.location.href)) return; 14 | 15 | let downloadLinkElement = document.querySelector(".piclist_dl_l"); 16 | let passwordElement = document.getElementById("copy-content"); 17 | if (downloadLinkElement && passwordElement) { 18 | const downloadLink = downloadLinkElement.getAttribute('onclick'); 19 | const urlMatch = downloadLink && downloadLink.match(/window.open\('([^']+)'\)/); 20 | let url = urlMatch && urlMatch[1]; 21 | if (url) { 22 | const targetElement = document.getElementById('downlaod'); 23 | if (targetElement) { 24 | targetElement.style.display = 'block'; 25 | } 26 | 27 | const password = passwordElement.value; 28 | const fullLink = url + "?pwd=" + password; 29 | const icon = document.createElement('img'); 30 | icon.src = 'https://nd-static.bdstatic.com/m-static/wp-brand/favicon.ico'; 31 | icon.style.cssText = 'cursor:pointer;position:fixed;right:10px;bottom:10px;zIndex:1000;width:32px;height:32px;'; 32 | icon.onclick = function() { 33 | alert('解压密码:www.newxiuren.com'); 34 | window.open(fullLink, '_blank'); 35 | }; 36 | document.body.appendChild(icon); 37 | } 38 | } 39 | 40 | const contentDiv = document.getElementById('content'); 41 | if (!contentDiv) return; 42 | 43 | const firstImageAnchor = contentDiv.querySelector('figure a'); 44 | const firstImage = firstImageAnchor ? firstImageAnchor.querySelector('img') : null; 45 | if (!firstImage) return; 46 | 47 | const match = firstImage.alt.match(/\[(\d+)P.*\]/); 48 | if (!match) return; 49 | 50 | const totalImages = parseInt(match[1], 10); 51 | let baseImageUrl = firstImage.src.substring(0, firstImage.src.lastIndexOf("/") + 1); 52 | let imagePrefix = firstImage.src.substring(firstImage.src.lastIndexOf("/") + 1, firstImage.src.lastIndexOf("/") + 9); 53 | let docFragment = document.createDocumentFragment(); 54 | 55 | for (let i = 1; i <= totalImages; i++) { 56 | let numStr = i.toString().padStart(2, '0'); 57 | let imageUrl = `${baseImageUrl}${imagePrefix}${numStr}.jpg`; 58 | let figure = document.createElement('figure'); 59 | figure.style.margin = '4px auto'; 60 | let anchor = document.createElement('a'); 61 | anchor.href = imageUrl; 62 | anchor.dataset.size = "100x100"; 63 | anchor.dataset.author = "newxiuren.cc"; 64 | let img = document.createElement('img'); 65 | img.src = imageUrl; 66 | img.alt = firstImage.alt; 67 | anchor.appendChild(img); 68 | figure.appendChild(anchor); 69 | docFragment.appendChild(figure); 70 | } 71 | contentDiv.innerHTML = ''; 72 | contentDiv.appendChild(docFragment); 73 | })(); --------------------------------------------------------------------------------