├── AppleOTA.conf ├── Ext └── NeteaseMusicUnBlock.list ├── Filter ├── AdBlock.list ├── Apple.list ├── CMedia.list ├── GMedia.list ├── IOS_OTA.list ├── Mainland.list ├── Microsoft.list ├── NeteaseMusic.list ├── Netflix.list ├── Outside.list ├── PayPal.list ├── Speedtest.list ├── Telegram.list └── YouTube.list ├── Icon ├── AdBlock.png ├── Apple.png ├── CMedia.png ├── China.png ├── GMedia.png ├── Mainland.png ├── Microsoft.png ├── Netease_Music.png ├── Netease_Music_Unlock.png ├── Netflix.png ├── Others.png ├── Outside.png ├── PayPal.png ├── Speedtest.png ├── Telegram_X.png └── YouTube.png ├── README.md ├── Rewrite ├── Bilibili.conf ├── Cookies.conf ├── Others.conf ├── Price.conf ├── Rewrite.conf ├── RewriteAll.conf ├── RewriteMac.conf ├── Wyy.conf ├── YouTube.conf ├── hackvip.conf └── zwf234.conf ├── Script ├── .DS_Store ├── 10010.cookie.js ├── 10010.js ├── 50-bean.js ├── DingXiangDrugs.js ├── JD_DailyBonus.js ├── Kaola.js ├── VUE.js ├── WeChat.js ├── aimeiju.js ├── all_in_one.js ├── aweme_douyin.js ├── bilibiliAccount.js ├── bilibiliTab.js ├── cmbchina.js ├── didaqingdan.js ├── documents.js ├── gyroscope.js ├── iQIYI.js ├── iQIYI_GetCookie_QX.js ├── jd_price.js ├── jd_red.js ├── jd_shareMa.js ├── neteasemusic.cookie.js ├── neteasemusic.js ├── surge bilibili feed.js ├── surge bilibili reply.js ├── surge bilibili view relate.js ├── tb_price.js ├── videoqq.cookie.js ├── videoqq.js ├── vsco.js ├── wb_ad.js ├── wb_launch.js └── wps.js └── config.conf /AppleOTA.conf: -------------------------------------------------------------------------------- 1 | [policy] 2 | static=AdBlock, Outside, reject, direct, img-url=https://raw.githubusercontent.com/Koolson/Qure/master/IconSet/AdBlack.png 3 | static=Apple Update, direct, reject, Outside, img-url=https://raw.githubusercontent.com/Koolson/Qure/master/IconSet/Apple_Update.png 4 | 5 | # 策略分流 6 | [filter_remote] 7 | https://raw.githubusercontent.com/GeQ1an/Rules/master/QuantumultX/Filter/AdBlock.list, tag=AdBlock (广告拦截), enabled=true 8 | 9 | # 本地分流规则(相同规则下,本地规则将覆盖远程规则,优先生效) 10 | [filter_local] 11 | # 绕过企业证书过期 12 | host, ocsp.apple.com, reject 13 | 14 | # 屏蔽系统更新 15 | host, ns.itunes.apple.com, Apple Update 16 | host, appldnld.apple.com, Apple Update 17 | host, mesu.apple.com, Apple Update 18 | host, xp.apple.com, Apple Update 19 | host, gdmf.apple.com, Apple Update 20 | 21 | # 避免迅雷版权问题 22 | host, hub5idx.v6.shub.sandai.net, reject 23 | host, hub5emu.v6.shub.sandai.net, reject 24 | host, hub5btmain.v6.shub.sandai.net, reject 25 | -------------------------------------------------------------------------------- /Ext/NeteaseMusicUnBlock.list: -------------------------------------------------------------------------------- 1 | # > NeteaseMusic Unlock List 2 | 3 | # https://github.com/DesperadoJ/Rules-for-UnblockNeteaseMusic/tree/master/QuantumultX 4 | shadowsocks=music.desperadoj.com:30003, method=aes-128-gcm, password=desperadoj.com_free_proxy_etg0, fast-open=false, udp-relay=false, tag=𝐌𝐮𝐬𝐢𝐜_1 5 | 6 | ;http=3music.poetyin.me:100, tag=𝐌𝐮𝐬𝐢𝐜_1 7 | ;http=block4music.poetyin.me:39000, tag=𝐌𝐮𝐬𝐢𝐜_2 8 | ;http=106.52.127.72:19951, tag=𝐌𝐮𝐬𝐢𝐜_3 9 | ;shadowsocks=music.desperadoj.com:30001, method=aes-128-gcm, password="desperadoj.com_free_proxy_emx2", fast-open=false, udp-relay=false, tag=𝐌𝐮𝐬𝐢𝐜_4 10 | ;shadowsocks=music.desperadoj.com:30003, method=aes-128-gcm, password=desperadoj.com_free_proxy_emx2, fast-open=false, udp-relay=false, tag=𝐌𝐮𝐬𝐢𝐜_5 11 | ;shadowsocks=blockmusic.poetyin.me:30003, method=aes-128-gcm, password=desperadoj.com_free_proxy_x80j, fast-open=false, udp-relay=false, tag=𝐌𝐮𝐬𝐢𝐜_6 12 | ;shadowsocks=proxy.plusmedia.site:58080, method=rc4-md5, password=ieG9l1nte5eo7IBZas84jLi, fast-open=false, udp-relay=false, tag=𝐌𝐮𝐬𝐢𝐜_7 13 | ;shadowsocks=proxy.plusmedia.site:58081, method=rc4-md5, password=ieG9l1nte5eo7IBZas84jLi, fast-open=false, udp-relay=false, tag=𝐌𝐮𝐬𝐢𝐜_8 14 | 15 | 16 | http=ivapp.cn/wyy.txt, fast-open=false, udp-relay=false, tag=𝐌𝐮𝐬𝐢𝐜_1 17 | http=music.lolico.me:39000, fast-open=false, udp-relay=false, tag=𝐌𝐮𝐬𝐢𝐜_2 18 | http=LOLICO.ME:443, fast-open=false, udp-relay=false, tag=𝐌𝐮𝐬𝐢𝐜_3 19 | http=SALVAN.ICU:19980, fast-open=false, udp-relay=false, tag=𝐌𝐮𝐬𝐢𝐜_4 20 | http=1.116.214.16:19980, fast-open=false, udp-relay=false, tag=𝐌𝐮𝐬𝐢𝐜_5 21 | http=106.52.127.72:19951, fast-open=false, udp-relay=false, tag=𝐌𝐮𝐬𝐢𝐜_6 22 | http=101.132.79.113:23333, fast-open=false, udp-relay=false, tag=𝐌𝐮𝐬𝐢𝐜_7 23 | http=MUSIC.LOLICO.ME:39000, fast-open=false, udp-relay=false, tag=𝐌𝐮𝐬𝐢𝐜_8 24 | http=MUSIC.GRIOUGES.CN:39000, fast-open=false, udp-relay=false, tag=𝐌𝐮𝐬𝐢𝐜_9 25 | shadowsocks=music.desperadoj.com:30001, method=aes-128-gcm, password=desperadoj.com_free_proxy_d39m, fast-open=false, udp-relay=false, tag=𝐌𝐮𝐬𝐢𝐜_10 26 | shadowsocks=music.desperadoj.com:30003, method=aes-128-gcm, password=desperadoj.com_free_proxy_d39m, fast-open=false, udp-relay=false, tag=𝐌𝐮𝐬𝐢𝐜_11 27 | -------------------------------------------------------------------------------- /Filter/Apple.list: -------------------------------------------------------------------------------- 1 | USER-AGENT,*com.apple.mobileme.fmip1,Apple 2 | USER-AGENT,*WeatherFoundation*,Apple 3 | USER-AGENT,%E5%9C%B0%E5%9B%BE*,Apple 4 | USER-AGENT,%E6%9F%A5%E6%89%BE*,Apple 5 | USER-AGENT,%E8%AE%BE%E7%BD%AE*,Apple 6 | USER-AGENT,AppStore*,Apple 7 | USER-AGENT,com.apple.appstored*,Apple 8 | USER-AGENT,com.apple.geod*,Apple 9 | USER-AGENT,com.apple.Maps,Apple 10 | USER-AGENT,FindMy*,Apple 11 | USER-AGENT,FMDClient*,Apple 12 | USER-AGENT,FMFD*,Apple 13 | USER-AGENT,fmflocatord*,Apple 14 | USER-AGENT,geod*,Apple 15 | USER-AGENT,locationd*,Apple 16 | USER-AGENT,Maps*,Apple 17 | USER-AGENT,TestFlight*,Apple 18 | HOST-SUFFIX,apple.co,Apple 19 | HOST-SUFFIX,apple.com,Apple 20 | HOST-SUFFIX,apple-cloudkit.com,Apple 21 | HOST-SUFFIX,appstore.com,Apple 22 | HOST-SUFFIX,cdn-apple.com,Apple 23 | HOST-SUFFIX,crashlytics.com,Apple 24 | HOST-SUFFIX,icloud.com,Apple 25 | HOST-SUFFIX,icloud-content.com,Apple 26 | HOST-SUFFIX,itunes.com,Apple 27 | HOST-SUFFIX,me.com,Apple 28 | HOST-SUFFIX,mzstatic.com,Apple 29 | HOST,api.smoot.apple.cn,Apple 30 | -------------------------------------------------------------------------------- /Filter/CMedia.list: -------------------------------------------------------------------------------- 1 | # > QQMusic 2 | USER-AGENT,QQ%e9%9f%b3%e4%b9%90*,CMedia 3 | USER-AGENT,QQMusic*,CMedia 4 | HOST-SUFFIX,music.qq.com,CMedia 5 | HOST-SUFFIX,y.qq.com,CMedia 6 | HOST,aqqmusic.tc.qq.com,CMedia 7 | 8 | # > AcFun 9 | USER-AGENT,AcFun*,CMedia 10 | HOST-SUFFIX,acfun.cn,CMedia 11 | HOST-SUFFIX,acfun.com,CMedia 12 | HOST-SUFFIX,acfun.tv,CMedia 13 | HOST-SUFFIX,aixifan.com,CMedia 14 | 15 | # > Bilibili 16 | USER-AGENT,*bili*,CMedia 17 | HOST-KEYWORD,bilibili,CMedia 18 | HOST-SUFFIX,acgvideo.com,CMedia 19 | HOST-SUFFIX,hdslb.com,CMedia 20 | 21 | # > iQiyi 22 | USER-AGENT,QIYI*,CMedia 23 | USER-AGENT,iQiYi*,CMedia 24 | USER-AGENT,PPStream*,CMedia 25 | USER-AGENT,QYPlayer*,CMedia 26 | HOST-SUFFIX,iqiyi.com,CMedia 27 | HOST-SUFFIX,iqiyipic.com,CMedia 28 | HOST-SUFFIX,qy.net,CMedia 29 | HOST-SUFFIX,71.am,CMedia 30 | 31 | # > Kugou & Kuwo 32 | HOST-SUFFIX,kugou.com,CMedia 33 | USER-AGENT,%E9%85%B7%E6%88%91%E9%9F%B3%E4%B9%90*,CMedia 34 | HOST-SUFFIX,kuwo.cn,CMedia 35 | HOST-SUFFIX,koowo.com,CMedia 36 | 37 | # > Letv 38 | HOST-SUFFIX,api.mob.app.letv.com,CMedia 39 | HOST-SUFFIX,letv.com,CMedia 40 | 41 | # > MGTV 42 | USER-AGENT,MGTV*,CMedia 43 | HOST-SUFFIX,hunantv.com,CMedia 44 | HOST-SUFFIX,mgtv.com,CMedia 45 | 46 | # > Migu 47 | USER-AGENT,MiguVideo*,CMedia 48 | USER-AGENT,%E5%92%AA%E5%92%95%E8%A7%86%E9%A2%91,CMedia 49 | HOST-SUFFIX,cmvideo.cn,CMedia 50 | HOST-SUFFIX,migu.cn,CMedia 51 | HOST-SUFFIX,miguvideo.com,CMedia 52 | 53 | # > MOOMusic 54 | USER-AGENT,MOO%E9%9F%B3%E4%B9%90*,CMedia 55 | 56 | # > Tencent Video 57 | USER-AGENT,live4iphone*,CMedia 58 | USER-AGENT,qqlive4iphone*,CMedia 59 | USER-AGENT,TencentMidasConnect*,CMedia 60 | HOST-SUFFIX,v.qq.com,CMedia 61 | HOST-SUFFIX,video.qq.com,CMedia 62 | 63 | # > Xiami Music 64 | USER-AGENT,xiami*,CMedia 65 | HOST-SUFFIX,xiami.com,CMedia 66 | HOST-SUFFIX,xiami.net,CMedia 67 | 68 | # > Youku 69 | USER-AGENT,Youku*,CMedia 70 | USER-AGENT,%E4%BC%98%E9%85%B7*,CMedia 71 | HOST-SUFFIX,soku.com,CMedia 72 | HOST-SUFFIX,youku.com,CMedia 73 | HOST-SUFFIX,ykimg.com,CMedia 74 | -------------------------------------------------------------------------------- /Filter/GMedia.list: -------------------------------------------------------------------------------- 1 | # > ABC 2 | HOST-SUFFIX,edgedatg.com,GMedia 3 | HOST-SUFFIX,go.com,GMedia 4 | 5 | # > AbemaTV 6 | USER-AGENT,AbemaTV*,GMedia 7 | HOST-SUFFIX,abema.io,GMedia 8 | HOST-SUFFIX,ameba.jp,GMedia 9 | HOST-SUFFIX,hayabusa.io,GMedia 10 | HOST,abematv.akamaized.net,GMedia 11 | HOST,ds-linear-abematv.akamaized.net,GMedia 12 | HOST,ds-vod-abematv.akamaized.net,GMedia 13 | HOST,linear-abematv.akamaized.net,GMedia 14 | 15 | # > Amazon Prime Video 16 | USER-AGENT,InstantVideo.US*,GMedia 17 | USER-AGENT,Prime%20Video*,GMedia 18 | HOST-SUFFIX,aiv-cdn.net,GMedia 19 | HOST-SUFFIX,amazonaws.com,GMedia 20 | HOST-SUFFIX,amazonvideo.com,GMedia 21 | HOST-SUFFIX,llnwd.net,GMedia 22 | 23 | # > Bahamut 24 | USER-AGENT,Anime*,GMedia 25 | HOST-SUFFIX,bahamut.com.tw,GMedia 26 | HOST-SUFFIX,gamer.com.tw,GMedia 27 | HOST-SUFFIX,hinet.net,GMedia 28 | 29 | # > BBC 30 | USER-AGENT,BBCiPlayer*,GMedia 31 | HOST-KEYWORD,bbcfmt,GMedia 32 | HOST-KEYWORD,co.uk,GMedia 33 | HOST-KEYWORD,uk-live,GMedia 34 | HOST-SUFFIX,bbc.co,GMedia 35 | HOST-SUFFIX,bbc.co.uk,GMedia 36 | HOST-SUFFIX,bbc.com,GMedia 37 | HOST-SUFFIX,bbci.co,GMedia 38 | HOST-SUFFIX,bbci.co.uk,GMedia 39 | 40 | # > CHOCO TV 41 | USER-AGENT,TwDramas*,GMedia 42 | HOST-SUFFIX,chocotv.com.tw,GMedia 43 | 44 | # > Disney Plus 45 | USER-AGENT,Disney*,GMedia 46 | DOMAIN-SUFFIX,disneyplus.com,GMedia 47 | DOMAIN-SUFFIX,disney-plus.net,GMedia 48 | DOMAIN-SUFFIX,dssott.com,GMedia 49 | DOMAIN-SUFFIX,bamgrid.com,GMedia 50 | DOMAIN-SUFFIX,execute-api.us-east-1.amazonaws.com,GMedia 51 | DOMAIN,cdn.registerdisney.go.com,GMedia 52 | 53 | # > Now E 54 | USER-AGENT,PCCW*,GMedia 55 | HOST-KEYWORD,nowe,GMedia 56 | HOST,bcbolthboa-a.akamaihd.net,GMedia 57 | HOST-SUFFIX,nowe.com,GMedia 58 | HOST-SUFFIX,youboranqs01.com,GMedia 59 | 60 | # > Epicgames 61 | HOST-KEYWORD,epicgames,GMedia 62 | HOST-SUFFIX,helpshift.com,GMedia 63 | 64 | # > Fox+ 65 | USER-AGENT,FOX%20NOW*,GMedia 66 | USER-AGENT,FOXPlus*,GMedia 67 | HOST-KEYWORD,foxplus,GMedia 68 | HOST-SUFFIX,config.fox.com,GMedia 69 | HOST-SUFFIX,emome.net,GMedia 70 | HOST-SUFFIX,fox.com,GMedia 71 | HOST-SUFFIX,foxdcg.com,GMedia 72 | HOST-SUFFIX,foxnow.com,GMedia 73 | HOST-SUFFIX,foxplus.com,GMedia 74 | HOST-SUFFIX,foxplay.com,GMedia 75 | HOST-SUFFIX,ipinfo.io,GMedia 76 | HOST-SUFFIX,mstage.io,GMedia 77 | HOST-SUFFIX,now.com,GMedia 78 | HOST-SUFFIX,theplatform.com,GMedia 79 | HOST-SUFFIX,urlload.net,GMedia 80 | 81 | # > HBO & HBO Go 82 | USER-AGENT,HBO%20NOW*,GMedia 83 | HOST-SUFFIX,execute-api.ap-southeast-1.amazonaws.com,GMedia 84 | HOST-SUFFIX,hbo.com,GMedia 85 | HOST-SUFFIX,hboasia.com,GMedia 86 | HOST-SUFFIX,hbogo.com,GMedia 87 | HOST-SUFFIX,hbogoasia.hk,GMedia 88 | 89 | # > Hulu 90 | USER-AGENT,Hulu*,GMedia 91 | HOST-SUFFIX,happyon.jp,GMedia 92 | HOST-SUFFIX,hulu.com,GMedia 93 | HOST-SUFFIX,hulu.jp,GMedia 94 | HOST-SUFFIX,huluim.com,GMedia 95 | HOST-SUFFIX,hulustream.com,GMedia 96 | 97 | # > Imkan 98 | HOST-SUFFIX,imkan.tv,GMedia 99 | 100 | # > JOOX 101 | USER-AGENT,WeMusic*,GMedia 102 | USER-AGENT,JOOX*,GMedia 103 | HOST-SUFFIX,joox.com,GMedia 104 | 105 | # > MytvSUPER 106 | USER-AGENT,mytv*,GMedia 107 | HOST-KEYWORD,nowtv100,GMedia 108 | HOST-KEYWORD,rthklive,GMedia 109 | HOST-SUFFIX,mytvsuper.com,GMedia 110 | HOST-SUFFIX,tvb.com,GMedia 111 | 112 | # > Pandora 113 | HOST-SUFFIX,pandora.com,GMedia 114 | 115 | # > Sky GO 116 | USER-AGENT,skygo*,GMedia 117 | HOST-SUFFIX,sky.com,GMedia 118 | HOST-SUFFIX,skygo.co.nz,GMedia 119 | 120 | # > SoundCloud 121 | USER-AGENT,SoundCloud*,GMedia 122 | 123 | # > Spotify 124 | USER-AGENT,Spotify*,GMedia 125 | HOST-SUFFIX,pscdn.co,GMedia 126 | HOST-SUFFIX,scdn.co,GMedia 127 | HOST-SUFFIX,spoti.fi,GMedia 128 | HOST-SUFFIX,spotify.com,GMedia 129 | IP-CIDR,35.186.224.47/32,GMedia 130 | 131 | # > viuTV 132 | HOST-SUFFIX,viu.tv,GMedia 133 | -------------------------------------------------------------------------------- /Filter/IOS_OTA.list: -------------------------------------------------------------------------------- 1 | HOST-SUFFIX,appldnld.apple.com,OTA 2 | HOST-SUFFIX,appldnld.apple.com.akadns.net,OTA 3 | HOST-SUFFIX,appldnld-lb.apple.com.akadns.net,OTA 4 | HOST-SUFFIX,appldnld.g.aaplimg.com,OTA 5 | HOST-SUFFIX,mesu.apple.com,OTA 6 | HOST-SUFFIX,mesu-cdn.apple.com.akadns.net,OTA 7 | HOST-SUFFIX,mesu-cdn.origin-apple.com.akadns.net,OTA 8 | HOST-SUFFIX,mesu.g.aaplimg.com,OTA 9 | HOST-SUFFIX,gdmf.apple.com,OTA 10 | HOST-SUFFIX,gdmf.apple.com.akadns.net,OTA 11 | HOST-SUFFIX,ocsp.apple.com,OTA 12 | HOST-SUFFIX,ocsp-lb.apple.com.akadns.net,OTA 13 | HOST-SUFFIX,ocsp.g.aaplimg.com,OTA 14 | -------------------------------------------------------------------------------- /Filter/Mainland.list: -------------------------------------------------------------------------------- 1 | # UA 2 | USER-AGENT,hide*,Mainland 3 | USER-AGENT,MicroMessenger*,Mainland 4 | USER-AGENT,TeamViewer*,Mainland 5 | USER-AGENT,TIM*,Mainland 6 | USER-AGENT,ting_en,Mainland 7 | USER-AGENT,WebTorrent*,Mainland 8 | USER-AGENT,WeChat*,Mainland 9 | 10 | # China Bank 11 | # > Agricultural Bank of China 12 | HOST-SUFFIX,abchina.com,Mainland 13 | 14 | # > Bank of China 15 | HOST-SUFFIX,boc.cn,Mainland 16 | 17 | # > China Citic Bank 18 | HOST-SUFFIX,citicbank.com,Mainland 19 | HOST-SUFFIX,ecitic.com,Mainland 20 | 21 | # > China Construction Bank 22 | HOST-SUFFIX,ccb.com,Mainland 23 | HOST-SUFFIX,ccb.com.cn,Mainland 24 | 25 | # > China Everbright Bank 26 | HOST-SUFFIX,cebbank.com,Mainland 27 | 28 | # > China Merchants Bank 29 | USER-AGENT,cmb*,Mainland 30 | HOST-SUFFIX,cmbchina.com,Mainland 31 | HOST-SUFFIX,cmbimg,Mainland 32 | HOST-SUFFIX,cmbt.cn,Mainland 33 | HOST-SUFFIX,mbcloud.com,Mainland 34 | 35 | # > Industrial and Commercial Bank of China 36 | USER-AGENT,%E4%B8%AD%E5%9B%BD%E5%B7%A5%E5%95%86%E9%93%B6%E8%A1%8C*,Mainland 37 | HOST-SUFFIX,icbc.com.cn,Mainland 38 | 39 | # > Ping An Bank 40 | HOST-SUFFIX,pingan.com,Mainland 41 | HOST-SUFFIX,pingan.com.cn,Mainland 42 | 43 | # Type 44 | # > Beplay 45 | HOST-KEYWORD,beplay,Mainland 46 | 47 | # > Blizzard 48 | HOST-SUFFIX,battle.net,Mainland 49 | HOST-SUFFIX,battlenet.com,Mainland 50 | HOST-SUFFIX,blizzard.com,Mainland 51 | 52 | # > Prior 53 | HOST,client.amplifi.com,Mainland 54 | HOST-SUFFIX,alphassl.com,Mainland 55 | HOST-SUFFIX,edu.cn,Mainland 56 | 57 | # > Steam 58 | HOST-SUFFIX,steamcontent.com,Mainland 59 | 60 | # > TeamViewer 61 | IP-CIDR,185.188.32.0/24,Mainland 62 | IP-CIDR,185.188.33.0/24,Mainland 63 | IP-CIDR,185.188.34.0/24,Mainland 64 | IP-CIDR,185.188.35.0/24,Mainland 65 | 66 | # Mainland 67 | HOST-SUFFIX,10010.com,Mainland 68 | HOST-SUFFIX,10089.cn,Mainland 69 | HOST-SUFFIX,12306.cn,Mainland 70 | HOST-SUFFIX,126.net,Mainland 71 | HOST-SUFFIX,163.com,Mainland 72 | HOST-SUFFIX,189.cn,Mainland 73 | HOST-SUFFIX,360.cn,Mainland 74 | HOST-SUFFIX,360.com,Mainland 75 | HOST-SUFFIX,360buy.com,Mainland 76 | HOST-SUFFIX,360buyimg.com,Mainland 77 | HOST-SUFFIX,36kr.com,Mainland 78 | HOST-SUFFIX,51ym.me,Mainland 79 | HOST-SUFFIX,58.com,Mainland 80 | HOST-SUFFIX,8686c.com,Mainland 81 | HOST-SUFFIX,abercrombie.com,Mainland 82 | HOST-SUFFIX,adobesc.com,Mainland 83 | HOST-SUFFIX,air-matters.com,Mainland 84 | HOST-SUFFIX,air-matters.io,Mainland 85 | HOST-SUFFIX,airhotels.cn,Mainland 86 | HOST-SUFFIX,akadns.net,Mainland 87 | HOST-SUFFIX,aliapp.org,Mainland 88 | HOST-SUFFIX,alicdn.com,Mainland 89 | HOST-SUFFIX,alipay.com,Mainland 90 | HOST-SUFFIX,alipayobjects.com,Mainland 91 | HOST-SUFFIX,aliyun.com,Mainland 92 | HOST-SUFFIX,amap.com,Mainland 93 | HOST-SUFFIX,apache.org,Mainland 94 | HOST-SUFFIX,api.crisp.chat,Mainland 95 | HOST-SUFFIX,api.termius.com,Mainland 96 | HOST-SUFFIX,appshike.com,Mainland 97 | HOST-SUFFIX,autohome.com.cn,Mainland 98 | HOST-SUFFIX,autonavi.com,Mainland 99 | HOST-SUFFIX,aweme.snssdk.com,Mainland 100 | HOST-SUFFIX,bababian.com,Mainland 101 | HOST-SUFFIX,baidu.com,Mainland 102 | HOST-SUFFIX,bdimg.com,Mainland 103 | HOST-SUFFIX,bdstatic.com,Mainland 104 | HOST-SUFFIX,beatsbydre.com,Mainland 105 | HOST-SUFFIX,bet365.com,Mainland 106 | HOST-SUFFIX,bitauto.com,Mainland 107 | HOST-SUFFIX,broadcasthe.net,Mainland 108 | HOST-SUFFIX,bthhotels.com,Mainland 109 | HOST-SUFFIX,caiyunapp.com,Mainland 110 | HOST-SUFFIX,ccgslb.com,Mainland 111 | HOST-SUFFIX,ccgslb.net,Mainland 112 | HOST-SUFFIX,chinacache.net,Mainland 113 | HOST-SUFFIX,chinaz.com,Mainland 114 | HOST-SUFFIX,chunbo.com,Mainland 115 | HOST-SUFFIX,chunboimg.com,Mainland 116 | HOST-SUFFIX,clashroyaleapp.com,Mainland 117 | HOST-SUFFIX,clouddn.com,Mainland 118 | HOST-SUFFIX,cloudsigma.com,Mainland 119 | HOST-SUFFIX,cloudxns.net,Mainland 120 | HOST-SUFFIX,cmct.tv,Mainland 121 | HOST-SUFFIX,cmfu.com,Mainland 122 | HOST-SUFFIX,cnbeta.com,Mainland 123 | HOST-SUFFIX,cnbetacdn.com,Mainland 124 | HOST-SUFFIX,chdbits.co,Mainland 125 | HOST-SUFFIX,cnlang.org,Mainland 126 | HOST-SUFFIX,culturedcode.com,Mainland 127 | HOST-SUFFIX,dct-cloud.com,Mainland 128 | HOST-SUFFIX,didialift.com,Mainland 129 | HOST-SUFFIX,didistatic.com,Mainland 130 | HOST-SUFFIX,digicert.com,Mainland 131 | HOST-SUFFIX,douban.com,Mainland 132 | HOST-SUFFIX,doubanio.com,Mainland 133 | HOST-SUFFIX,douyu.com,Mainland 134 | HOST-SUFFIX,douyu.tv,Mainland 135 | HOST-SUFFIX,douyutv.com,Mainland 136 | HOST-SUFFIX,duokan.com,Mainland 137 | HOST-SUFFIX,duoshuo.com,Mainland 138 | HOST-SUFFIX,dytt8.net,Mainland 139 | HOST-SUFFIX,easou.com,Mainland 140 | HOST-SUFFIX,ecitic.com,Mainland 141 | HOST-SUFFIX,ecitic.net,Mainland 142 | HOST-SUFFIX,eclipse.org,Mainland 143 | HOST-SUFFIX,eudic.net,Mainland 144 | HOST-SUFFIX,ewqcxz.com,Mainland 145 | HOST-SUFFIX,feng.com,Mainland 146 | HOST-SUFFIX,fir.im,Mainland 147 | HOST-SUFFIX,frdic.com,Mainland 148 | HOST-SUFFIX,fresh-ideas.cc,Mainland 149 | HOST-SUFFIX,geetest.com,Mainland 150 | HOST-SUFFIX,godic.net,Mainland 151 | HOST-SUFFIX,goodread.com,Mainland 152 | HOST-SUFFIX,gtimg.com,Mainland 153 | HOST-SUFFIX,haibian.com,Mainland 154 | HOST-SUFFIX,hao123.com,Mainland 155 | HOST-SUFFIX,haosou.com,Mainland 156 | HOST-SUFFIX,hdchina.org,Mainland 157 | HOST-SUFFIX,hdcmct.org,Mainland 158 | HOST-SUFFIX,hiwifi.com,Mainland 159 | HOST-SUFFIX,hollisterco.com,Mainland 160 | HOST-SUFFIX,homeinns.com,Mainland 161 | HOST-SUFFIX,hongxiu.com,Mainland 162 | HOST-SUFFIX,hxcdn.net,Mainland 163 | HOST-SUFFIX,ibeta.me,Mainland 164 | HOST-SUFFIX,iciba.com,Mainland 165 | HOST-SUFFIX,ifeng.com,Mainland 166 | HOST-SUFFIX,ifengimg.com,Mainland 167 | HOST-SUFFIX,images.unsplash.com,Mainland 168 | HOST-SUFFIX,images-amazon.com,Mainland 169 | HOST-SUFFIX,img4me.com,Mainland 170 | HOST-SUFFIX,ipify.org,Mainland 171 | HOST-SUFFIX,ipip.net,Mainland 172 | HOST-SUFFIX,ithome.com,Mainland 173 | HOST-SUFFIX,ixdzs.com,Mainland 174 | HOST-SUFFIX,jd.com,Mainland 175 | HOST-SUFFIX,jd.hk,Mainland 176 | HOST-SUFFIX,jianshu.com,Mainland 177 | HOST-SUFFIX,jianshu.io,Mainland 178 | HOST-SUFFIX,jianshuapi.com,Mainland 179 | HOST-SUFFIX,jiathis.com,Mainland 180 | HOST-SUFFIX,jomodns.com,Mainland 181 | HOST-SUFFIX,jsboxbbs.com,Mainland 182 | HOST-SUFFIX,knewone.com,Mainland 183 | HOST-SUFFIX,ksyun.com,Mainland 184 | HOST-SUFFIX,ksyunacc.cn,Mainland 185 | HOST-SUFFIX,kuaidi100.com,Mainland 186 | HOST-SUFFIX,lecloud.com,Mainland 187 | HOST-SUFFIX,lemicp.com,Mainland 188 | HOST-SUFFIX,letvcloud.com,Mainland 189 | HOST-SUFFIX,lizhi.io,Mainland 190 | HOST-SUFFIX,localizecdn.com,Mainland 191 | HOST-SUFFIX,lucifr.com,Mainland 192 | HOST-SUFFIX,luoo.net,Mainland 193 | HOST-SUFFIX,lxdns.com,Mainland 194 | HOST-SUFFIX,mai.tn,Mainland 195 | HOST-SUFFIX,meizu.com,Mainland 196 | HOST-SUFFIX,mi.com,Mainland 197 | HOST-SUFFIX,mi-img.com,Mainland 198 | HOST-SUFFIX,miaopai.com,Mainland 199 | HOST-SUFFIX,miui.com,Mainland 200 | HOST-SUFFIX,miwifi.com,Mainland 201 | HOST-SUFFIX,mob.com,Mainland 202 | HOST-SUFFIX,moji.com,Mainland 203 | HOST-SUFFIX,moke.com,Mainland 204 | HOST-SUFFIX,mxhichina.com,Mainland 205 | HOST-SUFFIX,myqcloud.com,Mainland 206 | HOST-SUFFIX,myunlu.com,Mainland 207 | HOST-SUFFIX,ngabbs.com,Mainland 208 | HOST-SUFFIX,netease.com,Mainland 209 | HOST-SUFFIX,nfoservers.com,Mainland 210 | HOST-SUFFIX,nuomi.com,Mainland 211 | HOST-SUFFIX,ourbits.club,Mainland 212 | HOST-SUFFIX,ourdvs.com,Mainland 213 | HOST-SUFFIX,passthepopcorn.me,Mainland 214 | HOST-SUFFIX,pgyer.com,Mainland 215 | HOST-SUFFIX,pniao.com,Mainland 216 | HOST-SUFFIX,privatehd.to,Mainland 217 | HOST-SUFFIX,pstatp.com,Mainland 218 | HOST-SUFFIX,qbox.me,Mainland 219 | HOST-SUFFIX,qcloud.com,Mainland 220 | HOST-SUFFIX,qdaily.com,Mainland 221 | HOST-SUFFIX,qdmm.com,Mainland 222 | HOST-SUFFIX,qhimg.com,Mainland 223 | HOST-SUFFIX,qidian.com,Mainland 224 | HOST-SUFFIX,qihucdn.com,Mainland 225 | HOST-SUFFIX,qin.io,Mainland 226 | HOST-SUFFIX,qingmang.me,Mainland 227 | HOST-SUFFIX,qingmang.mobi,Mainland 228 | HOST-SUFFIX,qiniucdn.com,Mainland 229 | HOST-SUFFIX,qiniudn.com,Mainland 230 | HOST-SUFFIX,qlogo.cn,Mainland 231 | HOST-SUFFIX,qpic.cn,Mainland 232 | HOST-SUFFIX,qq.com,Mainland 233 | HOST-SUFFIX,qqurl.com,Mainland 234 | HOST-SUFFIX,rarbg.to,Mainland 235 | HOST-SUFFIX,redacted.ch,Mainland 236 | HOST-SUFFIX,rrmj.tv,Mainland 237 | HOST-SUFFIX,ruguoapp.com,Mainland 238 | HOST-SUFFIX,sandai.net,Mainland 239 | HOST-SUFFIX,sf-express.com,Mainland 240 | HOST-SUFFIX,sinaapp.com,Mainland 241 | HOST-SUFFIX,sinaimg.cn,Mainland 242 | HOST-SUFFIX,sinaimg.com,Mainland 243 | HOST-SUFFIX,sm.ms,Mainland 244 | HOST-SUFFIX,smartisan.com,Mainland 245 | HOST-SUFFIX,smzdm.com,Mainland 246 | HOST-SUFFIX,snssdk.com,Mainland 247 | HOST-SUFFIX,snwx.com,Mainland 248 | HOST-SUFFIX,so.com,Mainland 249 | HOST-SUFFIX,sogou.com,Mainland 250 | HOST-SUFFIX,sogoucdn.com,Mainland 251 | HOST-SUFFIX,sohu.com,Mainland 252 | HOST-SUFFIX,soku.com,Mainland 253 | HOST-SUFFIX,soso.com,Mainland 254 | HOST-SUFFIX,sspai.com,Mainland 255 | HOST-SUFFIX,startssl.com,Mainland 256 | HOST-SUFFIX,store.steampowered.com,Mainland 257 | HOST-SUFFIX,suning.com,Mainland 258 | HOST-SUFFIX,symcd.com,Mainland 259 | HOST-SUFFIX,t.tt,Mainland 260 | HOST-SUFFIX,taobao.com,Mainland 261 | HOST-SUFFIX,teamviewer.com,Mainland 262 | HOST-SUFFIX,tencent.com,Mainland 263 | HOST-SUFFIX,tenpay.com,Mainland 264 | HOST-SUFFIX,tianyancha.com,Mainland 265 | HOST-SUFFIX,tietuku.com,Mainland 266 | HOST-SUFFIX,tmall.com,Mainland 267 | HOST-SUFFIX,tmzvps.com,Mainland 268 | HOST-SUFFIX,trello.com,Mainland 269 | HOST-SUFFIX,trellocdn.com,Mainland 270 | HOST-SUFFIX,totheglory.im,Mainland 271 | HOST-SUFFIX,tp.m-team.cc,Mainland 272 | HOST-SUFFIX,ttmeiju.com,Mainland 273 | HOST-SUFFIX,tudou.com,Mainland 274 | HOST-SUFFIX,udache.com,Mainland 275 | HOST-SUFFIX,umeng.com,Mainland 276 | HOST-SUFFIX,umengcloud.com,Mainland 277 | HOST-SUFFIX,umetrip.com,Mainland 278 | HOST-SUFFIX,upaiyun.com,Mainland 279 | HOST-SUFFIX,upyun.com,Mainland 280 | HOST-SUFFIX,uxengine.net,Mainland 281 | HOST-SUFFIX,wandoujia.com,Mainland 282 | HOST-SUFFIX,webqxs.com,Mainland 283 | HOST-SUFFIX,weibo.cn,Mainland 284 | HOST-SUFFIX,weibo.com,Mainland 285 | HOST-SUFFIX,weico.cc,Mainland 286 | HOST-SUFFIX,weiphone.com,Mainland 287 | HOST-SUFFIX,weiphone.net,Mainland 288 | HOST-SUFFIX,wenku8.net,Mainland 289 | HOST-SUFFIX,werewolf.53site.com,Mainland 290 | HOST-SUFFIX,wkcdn.com,Mainland 291 | HOST-SUFFIX,workflowy.com,Mainland 292 | HOST-SUFFIX,xdrig.com,Mainland 293 | HOST-SUFFIX,xhostfire.com,Mainland 294 | HOST-SUFFIX,xiaojukeji.com,Mainland 295 | HOST-SUFFIX,xiaomi.com,Mainland 296 | HOST-SUFFIX,xiaomi.net,Mainland 297 | HOST-SUFFIX,xiaomicp.com,Mainland 298 | HOST-SUFFIX,ximalaya.com,Mainland 299 | HOST-SUFFIX,xitek.com,Mainland 300 | HOST-SUFFIX,xmcdn.com,Mainland 301 | HOST-SUFFIX,xslb.net,Mainland 302 | HOST-SUFFIX,xteko.com,Mainland 303 | HOST-SUFFIX,xunlei.com,Mainland 304 | HOST-SUFFIX,yach.me,Mainland 305 | HOST-SUFFIX,yeepay.com,Mainland 306 | HOST-SUFFIX,yhd.com,Mainland 307 | HOST-SUFFIX,yiche.com,Mainland 308 | HOST-SUFFIX,yinxiang.com,Mainland 309 | HOST-SUFFIX,yixia.com,Mainland 310 | HOST-SUFFIX,ykimg.com,Mainland 311 | HOST-SUFFIX,youdao.com,Mainland 312 | HOST-SUFFIX,yunjiasu-cdn.net,Mainland 313 | HOST-SUFFIX,zealer.com,Mainland 314 | HOST-SUFFIX,zgslb.net,Mainland 315 | HOST-SUFFIX,zhihu.com,Mainland 316 | HOST-SUFFIX,zhimg.com,Mainland 317 | HOST-SUFFIX,zimuzu.tv,Mainland 318 | HOST-SUFFIX,zmz002.com,Mainland 319 | 320 | IP-CIDR,1.255.62.0/24,Mainland 321 | 322 | # GEOIP 323 | GEOIP,CN,Mainland 324 | -------------------------------------------------------------------------------- /Filter/Microsoft.list: -------------------------------------------------------------------------------- 1 | USER-AGENT,Microsoft*,Microsoft 2 | HOST-KEYWORD,microsoft,Microsoft 3 | HOST-SUFFIX,ms,Microsoft 4 | HOST-SUFFIX,bing.com,Microsoft 5 | HOST-SUFFIX,bing.net,Microsoft 6 | HOST-SUFFIX,hotmail.com,Microsoft 7 | HOST-SUFFIX,live.com,Microsoft 8 | HOST-SUFFIX,live.net,Microsoft 9 | HOST-SUFFIX,microsofttranslator.com,Microsoft 10 | HOST-SUFFIX,msauth.net,Microsoft 11 | HOST-SUFFIX,msecnd.net,Microsoft 12 | HOST-SUFFIX,msocdn.com,Microsoft 13 | HOST-SUFFIX,msedge.net,Microsoft 14 | HOST-SUFFIX,msn.com,Microsoft 15 | HOST-SUFFIX,office.com,Microsoft 16 | HOST-SUFFIX,office.net,Microsoft 17 | HOST-SUFFIX,office365.com,Microsoft 18 | HOST-SUFFIX,onenote.com,Microsoft 19 | HOST-SUFFIX,onenote.net,Microsoft 20 | HOST-SUFFIX,outlook.com,Microsoft 21 | HOST-SUFFIX,visualstudio.com,Microsoft 22 | HOST-SUFFIX,windows.com,Microsoft 23 | HOST-SUFFIX,windows.net,Microsoft 24 | HOST-SUFFIX,xbox.com,Microsoft 25 | HOST-SUFFIX,xboxlive.com,Microsoft 26 | -------------------------------------------------------------------------------- /Filter/NeteaseMusic.list: -------------------------------------------------------------------------------- 1 | # 网易云音乐可选规则,排序需在 CMedia 上方 2 | 3 | # Netease Music Advertising 4 | HOST,admusicpic.music.126.net,reject 5 | HOST,iadmat.nosdn.127.net,reject 6 | HOST,iadmusicmat.music.126.net,reject 7 | HOST,iadmusicmatvideo.music.126.net,reject 8 | 9 | # NAME: NetEaseMusic 10 | # AUTHOR: blackmatrix7 11 | # REPO: https://github.com/blackmatrix7/ios_rule_script 12 | # UPDATED: 2022-08-05 22:37:21 13 | # DOMAIN: 2 14 | # DOMAIN-SUFFIX: 8 15 | # IP-CIDR: 19 16 | # TOTAL: 29 17 | DOMAIN,iadmat.nosdn.127.net 18 | DOMAIN,netease.ugcvideoss.ourdvs.com 19 | DOMAIN-SUFFIX,163yun.com 20 | DOMAIN-SUFFIX,api.iplay.163.com 21 | DOMAIN-SUFFIX,hz.netease.com 22 | DOMAIN-SUFFIX,mam.netease.com 23 | DOMAIN-SUFFIX,music.126.com 24 | DOMAIN-SUFFIX,music.126.net 25 | DOMAIN-SUFFIX,music.163.com 26 | DOMAIN-SUFFIX,music.163.com.163jiasu.com 27 | IP-CIDR,101.71.154.241/32,no-resolve 28 | IP-CIDR,103.126.92.13/32,no-resolve 29 | IP-CIDR,103.126.92.132/31,no-resolve 30 | IP-CIDR,112.13.119.17/32,no-resolve 31 | IP-CIDR,112.13.119.18/32,no-resolve 32 | IP-CIDR,112.13.122.1/32,no-resolve 33 | IP-CIDR,112.13.122.4/32,no-resolve 34 | IP-CIDR,115.236.112.0/20,no-resolve 35 | IP-CIDR,118.24.63.156/32,no-resolve 36 | IP-CIDR,182.92.170.253/32,no-resolve 37 | IP-CIDR,193.112.159.225/32,no-resolve 38 | IP-CIDR,223.252.192.0/19,no-resolve 39 | IP-CIDR,39.105.175.128/32,no-resolve 40 | IP-CIDR,39.105.63.80/32,no-resolve 41 | IP-CIDR,45.254.48.1/32,no-resolve 42 | IP-CIDR,47.100.127.239/32,no-resolve 43 | IP-CIDR,59.111.128.0/17,no-resolve 44 | IP-CIDR,59.111.19.33/32,no-resolve 45 | IP-CIDR,59.111.21.14/31,no-resolve 46 | 47 | # Final 48 | final,direct 49 | 50 | ## bak 20220829 51 | ;HOST,api.iplay.163.com 52 | ;HOST,apm3.music.163.com 53 | ;HOST,apm.music.163.com 54 | ;HOST,interface3.music.163.com 55 | ;HOST,interface3.music.163.com.163jiasu.com 56 | ;HOST,interface.music.163.com 57 | ;HOST,music.163.com 58 | ;IP-CIDR,39.105.63.80/32 59 | ;IP-CIDR,39.105.175.128/32 60 | ;IP-CIDR,45.254.48.1/32 61 | ;IP-CIDR,47.100.127.239/32 62 | ;IP-CIDR,59.111.160.195/32 63 | ;IP-CIDR,59.111.160.197/32 64 | ;IP-CIDR,59.111.181.35/32 65 | ;IP-CIDR,59.111.181.38/32 66 | ;IP-CIDR,59.111.181.60/32 67 | ;IP-CIDR,101.71.154.241/32 68 | ;IP-CIDR,103.126.92.132/32 69 | ;IP-CIDR,103.126.92.133/32 70 | ;IP-CIDR,112.13.119.17/32 71 | ;IP-CIDR,112.13.119.18/32 72 | ;IP-CIDR,112.13.122.1/32 73 | ;IP-CIDR,112.13.122.4/32 74 | ;IP-CIDR,115.236.118.33/32 75 | ;IP-CIDR,115.236.121.1/32 76 | ;IP-CIDR,118.24.63.156/32 77 | ;IP-CIDR,182.92.170.253/32 78 | ;IP-CIDR,193.112.159.225/32 79 | ;IP-CIDR,223.252.199.66/32 80 | ;IP-CIDR,223.252.199.67/32 81 | -------------------------------------------------------------------------------- /Filter/Netflix.list: -------------------------------------------------------------------------------- 1 | USER-AGENT,Argo*,Netflix 2 | HOST-SUFFIX,netflix.com,Netflix 3 | HOST-SUFFIX,netflix.net,Netflix 4 | HOST-SUFFIX,nflxext.com,Netflix 5 | HOST-SUFFIX,nflximg.com,Netflix 6 | HOST-SUFFIX,nflximg.net,Netflix 7 | HOST-SUFFIX,nflxso.net,Netflix 8 | HOST-SUFFIX,nflxvideo.net,Netflix 9 | IP-CIDR,23.246.0.0/18,Netflix 10 | IP-CIDR,37.77.184.0/21,Netflix 11 | IP-CIDR,45.57.0.0/17,Netflix 12 | IP-CIDR,64.120.128.0/17,Netflix 13 | IP-CIDR,66.197.128.0/17,Netflix 14 | IP-CIDR,108.175.32.0/20,Netflix 15 | IP-CIDR,192.173.64.0/18,Netflix 16 | IP-CIDR,198.38.96.0/19,Netflix 17 | IP-CIDR,198.45.48.0/20,Netflix 18 | -------------------------------------------------------------------------------- /Filter/PayPal.list: -------------------------------------------------------------------------------- 1 | USER-AGENT,PayPal*,PayPal 2 | HOST-SUFFIX,paypal.com,PayPal 3 | HOST-SUFFIX,paypalobjects.com,PayPal 4 | -------------------------------------------------------------------------------- /Filter/Speedtest.list: -------------------------------------------------------------------------------- 1 | USER-AGENT,SpeedTest*,Speedtest 2 | HOST-KEYWORD,speedtest,Speedtest 3 | HOST-SUFFIX,ooklaserver.net,Speedtest 4 | -------------------------------------------------------------------------------- /Filter/Telegram.list: -------------------------------------------------------------------------------- 1 | HOST-KEYWORD,telegram,Telegram 2 | DOMAIN-SUFFIX,t.me,Telegram 3 | DOMAIN-SUFFIX,tdesktop.com,Telegram 4 | DOMAIN-SUFFIX,telegra.ph,Telegram 5 | DOMAIN-SUFFIX,telegram.me,Telegram 6 | DOMAIN-SUFFIX,telegram.org,Telegram 7 | IP-CIDR,91.108.4.0/22,Telegram 8 | IP-CIDR,91.108.56.0/22,Telegram 9 | IP-CIDR,91.108.56.0/23,Telegram 10 | IP-CIDR,109.239.140.0/24,Telegram 11 | IP-CIDR,149.154.160.0/22,Telegram 12 | IP-CIDR,149.154.164.0/22,Telegram 13 | IP-CIDR,149.154.168.0/22,Telegram 14 | IP-CIDR,149.154.172.0/22,Telegram 15 | -------------------------------------------------------------------------------- /Filter/YouTube.list: -------------------------------------------------------------------------------- 1 | USER-AGENT,*youtube*,YouTube 2 | USER-AGENT,YouTube*,YouTube 3 | HOST-KEYWORD,youtube,YouTube 4 | HOST-SUFFIX,googlevideo.com,YouTube 5 | HOST-SUFFIX,gvt2.com,YouTube 6 | HOST-SUFFIX,youtu.be,YouTube 7 | HOST,youtubei.googleapis.com,YouTube 8 | -------------------------------------------------------------------------------- /Icon/AdBlock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/an0na/R/07910ef5f04e21ff6a2ad88aa2fe644de886164b/Icon/AdBlock.png -------------------------------------------------------------------------------- /Icon/Apple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/an0na/R/07910ef5f04e21ff6a2ad88aa2fe644de886164b/Icon/Apple.png -------------------------------------------------------------------------------- /Icon/CMedia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/an0na/R/07910ef5f04e21ff6a2ad88aa2fe644de886164b/Icon/CMedia.png -------------------------------------------------------------------------------- /Icon/China.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/an0na/R/07910ef5f04e21ff6a2ad88aa2fe644de886164b/Icon/China.png -------------------------------------------------------------------------------- /Icon/GMedia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/an0na/R/07910ef5f04e21ff6a2ad88aa2fe644de886164b/Icon/GMedia.png -------------------------------------------------------------------------------- /Icon/Mainland.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/an0na/R/07910ef5f04e21ff6a2ad88aa2fe644de886164b/Icon/Mainland.png -------------------------------------------------------------------------------- /Icon/Microsoft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/an0na/R/07910ef5f04e21ff6a2ad88aa2fe644de886164b/Icon/Microsoft.png -------------------------------------------------------------------------------- /Icon/Netease_Music.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/an0na/R/07910ef5f04e21ff6a2ad88aa2fe644de886164b/Icon/Netease_Music.png -------------------------------------------------------------------------------- /Icon/Netease_Music_Unlock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/an0na/R/07910ef5f04e21ff6a2ad88aa2fe644de886164b/Icon/Netease_Music_Unlock.png -------------------------------------------------------------------------------- /Icon/Netflix.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/an0na/R/07910ef5f04e21ff6a2ad88aa2fe644de886164b/Icon/Netflix.png -------------------------------------------------------------------------------- /Icon/Others.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/an0na/R/07910ef5f04e21ff6a2ad88aa2fe644de886164b/Icon/Others.png -------------------------------------------------------------------------------- /Icon/Outside.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/an0na/R/07910ef5f04e21ff6a2ad88aa2fe644de886164b/Icon/Outside.png -------------------------------------------------------------------------------- /Icon/PayPal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/an0na/R/07910ef5f04e21ff6a2ad88aa2fe644de886164b/Icon/PayPal.png -------------------------------------------------------------------------------- /Icon/Speedtest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/an0na/R/07910ef5f04e21ff6a2ad88aa2fe644de886164b/Icon/Speedtest.png -------------------------------------------------------------------------------- /Icon/Telegram_X.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/an0na/R/07910ef5f04e21ff6a2ad88aa2fe644de886164b/Icon/Telegram_X.png -------------------------------------------------------------------------------- /Icon/YouTube.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/an0na/R/07910ef5f04e21ff6a2ad88aa2fe644de886164b/Icon/YouTube.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![an0na’s github stats](https://github-readme-stats.vercel.app/api?username=an0na&show_icons=true&theme=merko) 2 | 3 | # 使用指南 4 | 下载config.conf文件,搜索关键词【baidu.com】,按要求替换 5 | 6 | # 功能 7 | 1. 支持网易云灰色歌曲解锁 8 | 2. 其他正常的都有(不能满足的,请自行修改) 9 | 3. 有大变动的时候,会及时更新 10 | 11 | # 参考 12 | 1. [Qure](https://github.com/Koolson/Qure) 13 | 2. [sve1r](https://github.com/sve1r/Rules-For-Quantumult-X) 14 | 3. [blackmatrix7](https://github.com/blackmatrix7/ios_rule_script) 15 | 4. [bigdargon](https://github.com/bigdargon/hostsVN) 16 | 5. [Orz-3](https://github.com/Orz-3/task) 17 | 6. [58xinian](https://github.com/58xinian/icon) 18 | -------------------------------------------------------------------------------- /Rewrite/Bilibili.conf: -------------------------------------------------------------------------------- 1 | ## https://github.com/blackmatrix7/ios_rule_script/tree/master/script/bilibili 2 | 3 | hostname = *.bilibili.com,api.live.bilibili.com,api.vc.bilibili.com 4 | 5 | # 去除动态中的话题 6 | ^https?:\/\/api\.vc\.bilibili\.com\/topic_svr\/v1\/topic_svr url reject-dict 7 | # 去除动态中的最常访问 8 | ^https?:\/\/api\.vc\.bilibili\.com\/dynamic_svr\/v1\/dynamic_svr\/mix_uplist url reject-dict 9 | # 可能的一些推广(beta) 10 | ^https?:\/\/api\.bilibili\.com\/pgc\/season\/app\/related\/recommend\? url reject-dict 11 | # 推荐去广告 12 | ^https?:\/\/app\.bilibili\.com\/x\/v2\/feed\/index url script-response-body https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/bilibili/bilibili_plus.js 13 | # 追番去广告 14 | ^https?:\/\/api\.bilibili\.com\/pgc\/page\/bangumi url script-response-body https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/bilibili/bilibili_plus.js 15 | # 直播去广告 16 | ^https?:\/\/api\.live\.bilibili\.com\/xlive\/app-room\/v1\/index\/getInfoByRoom url script-response-body https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/bilibili/bilibili_plus.js 17 | # 动态去广告 18 | ^https?:\/\/api\.vc\.bilibili\.com\/dynamic_svr\/v1\/dynamic_svr\/dynamic_(history|new)\? url script-response-body https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/bilibili/bilibili_plus.js 19 | # 开屏去广告 20 | ^https?:\/\/app\.bilibili\.com\/x\/v2\/splash\/list url script-response-body https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/bilibili/bilibili_plus.js 21 | # 标签页处理 22 | ^https?:\/\/app\.bilibili\.com\/x\/resource\/show\/tab url script-response-body https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/bilibili/bilibili_plus.js 23 | # 我的页面处理 24 | ^https?:\/\/app\.bilibili\.com\/x\/v2\/account\/mine url script-response-body https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/bilibili/bilibili_plus.js 25 | # 漫画去广告 26 | ^https?:\/\/manga\.bilibili\.com\/twirp\/comic\.v\d\.Comic\/Flash url reject-dict 27 | ^https?:\/\/manga\.bilibili\.com\/twirp\/comic\.v\d\.Comic\/ListFlash url reject-dict 28 | -------------------------------------------------------------------------------- /Rewrite/Cookies.conf: -------------------------------------------------------------------------------- 1 | hostname = me-api.jd.com, passport.iqiyi.com 2 | 3 | #彩云天气 4 | https://weather-data.apple.com url script-request-header https://raw.githubusercontent.com/Peng-YM/QuanX/master/Tasks/caiyun.js 5 | 6 | #爱奇艺 7 | ^https:\/\/passport\.iqiyi\.com\/apis\/user\/info\.action url script-request-header https://raw.githubusercontent.com/NobyDa/Script/master/iQIYI-DailyBonus/iQIYI.js 8 | 9 | #网易云190及以后版本 10 | ^https:\/\/music.163.com\/weapi\/user\/level url script-request-body https://raw.githubusercontent.com/an0na/R/master/Script/neteasemusic.cookie.js 11 | 12 | #饿了么 13 | ^https:\/\/h5\.ele\.me\/restapi\/eus\/v\d\/current_user$ url script-request-header https://raw.githubusercontent.com/songyangzz/QuantumultX/master/elem/elemGetCookies.js 14 | 15 | #京东Cookie 16 | ;https:\/\/api\.m\.jd\.com\/client\.action.*functionId=signBean url script-request-header https://raw.githubusercontent.com/NobyDa/Script/master/JD-DailyBonus/JD_DailyBonus.js 17 | -------------------------------------------------------------------------------- /Rewrite/Others.conf: -------------------------------------------------------------------------------- 1 | hostname = api.weibo.com,api.weibo.cn,*.uve.weibo.com,mp.weixin.qq.com,api.zhihu.com,link.zhihu.com,app.bilibili.com,api.live.bilibili.com,*.amemv.com,*.xjxjappss.com,*.xjxjapps.com,*.xxjjappss.com,*.xjwdapps.com,*.leleapps.com,*.leyiapps.com,*.hpplay.cn,*.gqbyh.com,*.huaerdadi.com,vip1.kuwo.cn,api.bjxkhc.com,p.du.163.com,getuserinfo.321mh.com,api-163.biliapi.net,vsco.co,api.vnision.com,ios.fuliapps.com,apple.fuliapps.com,ios.xiangjiaoapps.com,apple.xiangjiaoapps.com,*.xiangxiangapps.com,www.luqijianggushi.com,account.wps.cn,api1.dobenge.cn,api.mvmtv.com,origin-prod-phoenix.jibjab.com,viva.v21xy.com,biz.caiyunapp.com,api.intsig.netapi-cs.intsig.net,api.picsart.c*,api.meiease.c*,api.gamer.com.tw,getuserinfo-globalapi.zymk.cn,newdrugs.dxy.cn,i.dxy.cn,mitaoapp.yeduapp.com,app101.avictown.cc, api.hlo.xyz, api.ijo.xyz,r.inews.qq.com,sp.kaola.com,u.kanghuayun.com,api.jiaonizuocai.com,pan.baidu.com,snailsleep.net,music.snailsleep.net,community.snailsleep.net,nmeditation.snailsleep.net,api2.getflex.co,vipapi.jxedt.com,tncj.hortorgames.com,api.gotokeep.com,59.110.149.231,129.211.156.213 2 | 3 | ## https://raw.githubusercontent.com/nzw9314/QuantumultX/master/Js.conf 4 | 5 | ### 去广告部分 ### 6 | 7 | #微博去广告 8 | ^https?://(sdk|wb)app\.uve\.weibo\.com(/interface/sdk/sdkad.php|/wbapplua/wbpullad.lua) url script-response-body https://raw.githubusercontent.com/yichahucha/surge/master/wb_launch.js 9 | ^https?://m?api\.weibo\.c(n|om)/2/(statuses/(unread|extend|positives/get|(friends|video)(/|_)(mix)?timeline)|stories/(video_stream|home_list)|(groups|fangle)/timeline|profile/statuses|comments/build_comments|photo/recommend_list|service/picfeed|searchall|cardlist|page|!/photos/pic_recommend_status|video/tiny_stream_video_list|photo/info) url script-response-body https://raw.githubusercontent.com/yichahucha/surge/master/wb_ad.js 10 | 11 | # 去微信公众号广告 (By Choler) 12 | ^https?:\/\/mp\.weixin\.qq\.com\/mp\/getappmsgad url script-response-body https://raw.githubusercontent.com/NobyDa/Script/master/QuantumultX/File/Wechat.js 13 | 14 | # 知乎去广告 (By onewayticket255) 15 | https://api.zhihu.com/(ad|drama|fringe|commercial|market/popover|search/(top|preset|tab)|.*featured-comment-ad) url reject-200 16 | https://api.zhihu.com/people/ url script-response-body https://raw.githubusercontent.com/onewayticket255/Surge-Script/master/surge%20zhihu%20people.js 17 | https://api.zhihu.com/moments/recommend url script-response-body https://raw.githubusercontent.com/onewayticket255/Surge-Script/master/surge%20zhihu%20feed.js 18 | https://api.zhihu.com/topstory/recommend url script-response-body https://raw.githubusercontent.com/onewayticket255/Surge-Script/master/surge%20zhihu%20recommend.js 19 | https://api.zhihu.com/v4/questions url script-response-body https://raw.githubusercontent.com/onewayticket255/Surge-Script/master/surge%20zhihu%20answer.js 20 | https?://link.zhihu.com/?target= url script-request-header https://raw.githubusercontent.com/onewayticket255/Surge-Script/master/surge%20zhihu%20link.js 21 | 22 | # 哔哩哔哩动画去广告 (By onewayticket255) 23 | https://app.bilibili.com/x/v2/(splash|search/(defaultword|square)) url reject-200 24 | https://api.bilibili.com/x/v2/dm/ad url reject-200 25 | https://app.bilibili.com/x/v2/space?access_key url script-response-body https://raw.githubusercontent.com/onewayticket255/Surge-Script/master/surge%20bilibili%20space.js 26 | https://app.bilibili.com/x/resource/show/tab?access_key url script-response-body https://raw.githubusercontent.com/onewayticket255/Surge-Script/master/surge%20bilibili%20tab.js 27 | https://app.bilibili.com/x/v2/feed/index?access_key url script-response-body https://raw.githubusercontent.com/onewayticket255/Surge-Script/master/surge%20bilibili%20feed.js 28 | https://app.bilibili.com/x/v2/account/mine?access_key url script-response-body https://raw.githubusercontent.com/onewayticket255/Surge-Script/master/surge%20bilibili%20account.js 29 | https://app.bilibili.com/x/v2/view?access_key url script-response-body https://raw.githubusercontent.com/onewayticket255/Surge-Script/master/surge%20bilibili%20view%20relate.js 30 | https://api.bilibili.com/x/v2/reply/main?access_key url script-response-body https://raw.githubusercontent.com/onewayticket255/Surge-Script/master/surge%20bilibili%20reply.js 31 | https://api.live.bilibili.com/xlive/app-room/v1/index/getInfoByRoom?access_key url script-response-body https://raw.githubusercontent.com/onewayticket255/Surge-Script/master/surge%20bilibili%20live.js 32 | 33 | # 抖音去广告去水印 34 | ^https?:\/\/.+?\.amemv\.com\/aweme\/v\d\/(feed|aweme\/post|follow\/feed|nearby\/feed|search\/item|general\/search\/single|hot\/search\/video\/list)\/ url script-request-header https://raw.githubusercontent.com/NobyDa/Script/master/Surge/JS/Aweme.js 35 | ^https?:\/\/.+?\.amemv\.com\/aweme\/v\d\/(feed|aweme\/post|follow\/feed|nearby\/feed|search\/item|general\/search\/single|hot\/search\/video\/list)\/ url script-response-body https://raw.githubusercontent.com/NobyDa/Script/master/Surge/JS/Aweme.js 36 | 37 | # 小小影视 去广告 38 | https:\/\/.*\..*\.com\/(ssp-svr\/ssp\/list3|ucp/index) url script-response-body https://raw.githubusercontent.com/photonmang/quantumultX/master/xxys.js 39 | 40 | # 网易漫画去开屏广告 41 | ^https://api-163.biliapi.net/cover url reject-img 42 | 43 | # 动画疯 去广告 44 | https:\/\/api\.gamer\.com\.tw\/mobile_app\/anime\/v3\/token\.php url script-request-header https://raw.githubusercontent.com/NobyDa/Script/master/Surge/JS/Bahamut.js 45 | https:\/\/api\.gamer\.com\.tw\/mobile_app\/anime\/v3\/token\.php url script-response-body https://raw.githubusercontent.com/NobyDa/Script/master/Surge/JS/Bahamut.js 46 | 47 | #### 破解部分 #### 48 | 49 | #91 short video unlock Gold&&Vip 50 | ^http:\/\/.+\.(my10api|(.*91.*))\.(com|tips|app|xyz)(:\d{2,5})?\/api.php$ url script-response-body https://raw.githubusercontent.com/photonmang/quantumultX/master/91.js 51 | 52 | # 哔哩哔哩番剧开启1080P+ 53 | ;https:\/\/api.bilibili.com\/pgc\/view\/app\/season url script-response-body CJ/bili.js 54 | 55 | # 酷我音乐SVIP 56 | ^https?:\/\/vip1\.kuwo\.cn\/(vip\/v2\/user\/vip|vip\/spi/mservice) url script-response-body https://raw.githubusercontent.com/NobyDa/Script/master/Surge/JS/Kuwo.js 57 | ^https?:\/\/musicpay\.kuwo\.cn\/music\.pay\?uid\=\d+ url 302 http://musicpay.kuwo.cn/music.pay?uid=1 58 | 59 | # 爱美剧Vip&&去广告 (by huihui)(官网:app.meiju2018.com) 60 | ^https?:\/\/api.bjxkhc.com\/index\.php\/app\/ios\/(vod\/show|(user|vod|topic|type)\/index) url script-response-body https://raw.githubusercontent.com/NobyDa/Script/master/QuantumultX/File/aimeiju.js 61 | ^https?://api.bjxkhc.com/index.php/app/ios/ads/index url reject-dict 62 | ^https?://api.bjxkhc.com/index.php/app/ios/ver/index_ios$ url reject 63 | ^https?://api.bjxkhc.com/index.php/app/ios/pay/ok$ url reject-dict 64 | 65 | # 网易蜗牛读书VIP (By yxiaocai and JO2EY) 66 | ^https?://p\.du\.163\.com/readtime/info.json url reject 67 | ^https?:\/\/p\.du\.163\.com\/gain\/readtime\/info\.json url script-response-body https://raw.githubusercontent.com/NobyDa/Script/master/QuantumultX/File/wnyd.js 68 | 69 | # 看漫画极速版vip (By HoGer) 70 | ^https?:\/\/getuserinfo\.321mh\.com\/app_api\/v5\/getuserinfo\/ url script-response-body https://raw.githubusercontent.com/NobyDa/Script/master/QuantumultX/File/kmh.js 71 | 72 | # 知音漫客VIP (By mieqq) 73 | ^https://getuserinfo-globalapi.zymk.cn/app_api/v5/(getuserinfo|coin_account|getuserinfo_ticket|getcomicinfo)/ url script-response-body https://raw.githubusercontent.com/NobyDa/Script/master/QuantumultX/File/Zymh.js 74 | 75 | # 哔哩哔哩番剧开启1080P+ 76 | ^https:\/\/ap(p|i)\.bilibili\.com\/((pgc\/player\/api\/playurl)|(x\/v2\/account\/myinfo\?)|(x\/v2\/account/mine\?)) url script-response-body https://raw.githubusercontent.com/NobyDa/Script/master/QuantumultX/File/bilifj.js 77 | 78 | # VSCO滤镜VIP 79 | ^https?:\/\/vsco\.co\/api\/subscriptions\/2.1\/user-subscriptions\/ url script-response-body https://raw.githubusercontent.com/NobyDa/Script/master/QuantumultX/File/vsco.js 80 | 81 | # 大片-视频编辑器 VIP 82 | ^https?:\/\/api\.vnision\.com\/v1\/(users\/|banners) url script-response-body https://raw.githubusercontent.com/NobyDa/Script/master/QuantumultX/File/dapian.js 83 | 84 | # 香蕉视频VIP 85 | ^https?:\/\/.*\.(fuli|xiang(jiao|xiang))apps\.com\/(ucp\/index|getGlobalData|.+\/reqplay\/) url script-response-body https://raw.githubusercontent.com/NobyDa/Script/master/QuantumultX/File/xjsp.js 86 | 87 | # 用药助手解锁专业版 (By Primovist) 88 | ^https?:\/\/(i|newdrugs)\.dxy\.cn\/(snsapi\/username\/|app\/user\/(pro\/stat\?|init\?timestamp=)) url script-response-body https://raw.githubusercontent.com/NobyDa/Script/master/Surge/JS/yyzs.js 89 | 90 | # 陆琪讲故事 91 | ^https:\/\/www\.luqijianggushi\.com\/api\/v2\/user\/get url script-response-body https://raw.githubusercontent.com/NobyDa/Script/master/Surge/JS/luqi.js 92 | 93 | # WPS (By eHpo) 94 | ^https://account.wps.cn/api/users/ url script-response-body https://raw.githubusercontent.com/NobyDa/Script/master/Surge/JS/Wps.js 95 | 96 | # 水印精灵 vip (By Alex0510) 97 | ^https:\/\/api1\.dobenge\.cn\/api\/user\/getuserinfo url script-response-body https://raw.githubusercontent.com/NobyDa/Script/master/Surge/JS/syjl.js 98 | 99 | # 大千视界 100 | ^https:\/\/api\.mvmtv\.com\/index\.php.*(c=user.*a=info|a=addr.*vid=.*) url script-response-body https://raw.githubusercontent.com/NobyDa/Script/master/Surge/JS/dqsj.js 101 | 102 | # JibJab解锁pro 103 | ^https:\/\/origin-prod-phoenix\.jibjab\.com\/v1\/user url script-response-body https://raw.githubusercontent.com/NobyDa/Script/master/Surge/JS/jibjab.js 104 | 105 | # 小影 解锁Vip (By @hiepkimcdtk55) 106 | ^https:\/\/viva\.v21xy\.com\/api\/rest\/u\/vip url script-response-body https://raw.githubusercontent.com/NobyDa/Script/master/Surge/JS/vivavideo.js 107 | 108 | # 彩云天气 Vip 109 | ^https:\/\/biz\.caiyunapp\.com\/v2\/user\?app_name\=weather url script-response-body https://raw.githubusercontent.com/NobyDa/Script/master/QuantumultX/File/ColorWeather.js 110 | 111 | # 扫描全能王 pro 112 | ^https:\/\/(api|api-cs)\.intsig\.net\/purchase\/cs\/query_property\? url script-response-body https://raw.githubusercontent.com/NobyDa/Script/master/Surge/JS/CamScanner.js 113 | 114 | # VUE pro 115 | ^https:\/\/api\.vuevideo\.net\/api\/v1\/(users\/.+\/profile|subtitle\/prepare) url script-response-body https://raw.githubusercontent.com/NobyDa/Script/master/Surge/JS/VUE.js 116 | 117 | # NiChi 解锁素材 118 | ^https?:\/\/mp\.bybutter\.com\/mood\/(official-templates|privileges) url script-response-body https://raw.githubusercontent.com/NobyDa/Script/master/Surge/JS/NiChi.js 119 | 120 | # PicsArt美易 pro 121 | ^https:\/\/api\.(picsart|meiease)\.c(n|om)\/users\/show\/me\.json url script-response-body https://raw.githubusercontent.com/NobyDa/Script/master/Surge/JS/PicsArt.js 122 | 123 | # 驾校一点通 pro 124 | ^https:\/\/vipapi\.jxedt\.com\/vip\/check url script-response-body https://raw.githubusercontent.com/nzw9314/QuantumultX/master/Script/jxydt.js 125 | 126 | #万象电视直播 127 | https:\/\/u\.kanghuayun\.com\/api\/v2\/info url script-response-body https://raw.githubusercontent.com/NobyDa/Script/master/Surge/JS/wxzb.js 128 | 129 | #头脑吃鸡 130 | ^https://tncj.hortorgames.com/chicken/fight/(answer|findQuiz) url script-response-body CJ/tncj.min.js 131 | 132 | #菜谱大全解锁vip 133 | https?:\/\/api\.jiaonizuocai\.com url script-response-body https://raw.githubusercontent.com/photonmang/quantumultX/master/cpdq.js 134 | 135 | #百度云解锁倍速 136 | https:\/\/pan\.baidu\.com\/rest\/2\.0\/membership\/user url script-response-body https://raw.githubusercontent.com/photonmang/quantumultX/master/BaiduCloud.js 137 | 138 | #蜗牛睡眠 全功能解锁VIP&付费音乐 139 | ^https:\/\/(snailsleep\.net\/|(music|community)\.snailsleep\.net\/)(snail\/v1\/profile\/get|snail-music\/music\/(sleeping|meditation)\/single\/list) url script-response-body https://github.com/photonmang/quantumultX/raw/master/wnsm.js 140 | 141 | #大象冥想vip 142 | ^https?:\/\/nmeditation\.snailsleep\.net\/meditation-(user|order|audio)\/(api|user)\/(audio\/master\/detail|get\/info|order/user\/vip\/info|ad\/get) url script-response-body https://raw.githubusercontent.com/photonmang/quantumultX/master/dxmx.js 143 | 144 | #Flex3解锁ban设备 145 | https://api2.getflex.co url script-request-body https://raw.githubusercontent.com/photonmang/quantumultX/master/Flex3.js 146 | 147 | # Keep 解锁私人课程,动作库,解锁运动课程页面会员精讲,解锁会员专属页面会员课程,解锁智能训练(胸背部无跑步无器材84天锻炼) 148 | https://api.gotokeep.com/(.+/subject|.+/dynamic|.+/coursePlus/.+|.+/status|.+/tab|.+/my|.+/start|.+/join|.+/complete|.+/detail/.+|.+/preview|.+/auth|.+/tab|.+/days) url script-response-body https://raw.githubusercontent.com/photonmang/quantumultX/master/keep.js 149 | 150 | # 抖音去广告去水印 (By Choler) 151 | ^https?+:\/\/[\w-]++\.amemv\.com\/aweme\/v\d\/feed\/ url request-header ^GET \/aweme\/v\d\/feed\/(.+)(\r\n)Host:.+ request-header GET /aweme/v1/feed/$1$2Host: aweme.snssdk.com 152 | ^https?+:\/\/[\w-]++\.amemv\.com\/aweme\/v\d\/aweme\/post\/ url request-header ^GET \/aweme\/v\d\/aweme\/post\/(.+)(\r\n)Host:.+ request-header GET /aweme/v1/aweme/post/$1$2Host: aweme.snssdk.com 153 | ^https?+:\/\/[\w-]++\.amemv\.com\/aweme\/v\d\/follow\/feed\/ url request-header ^GET \/aweme\/v\d\/follow\/feed\/(.+)(\r\n)Host:.+ request-header GET /aweme/v1/follow/feed/$1$2Host: aweme.snssdk.com 154 | ^https?+:\/\/[\w-]++\.amemv\.com\/aweme\/v\d\/nearby\/feed\/ url request-header ^GET \/aweme\/v\d\/nearby\/feed\/(.+)(\r\n)Host:.+ request-header GET /aweme/v1/nearby/feed/$1$2Host: aweme.snssdk.com 155 | ^https?+:\/\/[\w-]++\.amemv\.com\/aweme\/v\d\/search\/item\/ url request-header ^GET \/aweme\/v\d\/search\/item\/(.+)(\r\n)Host:.+ request-header GET /aweme/v1/search/item/$1$2Host: aweme.snssdk.com 156 | ^https?+:\/\/[\w-]++\.amemv\.com\/aweme\/v\d\/general\/search\/single\/ url request-header ^GET \/aweme\/v\d\/general\/search\/single\/(.+)(\r\n)Host:.+ request-header GET /aweme/v1/general/search/single/$1$2Host: aweme.snssdk.com 157 | ^https?+:\/\/[\w-]++\.amemv\.com\/aweme\/v\d\/hot\/search\/video\/list\/ url request-header ^GET \/aweme\/v\d\/hot\/search\/video\/list\/(.+)(\r\n)Host:.+ request-header GET /aweme/v1/hot/search/video/list/$1$2Host: aweme.snssdk.com 158 | 159 | # YouTube ADS 160 | ^https?:\/\/.+\.googlevideo\.com\/.+&oad url reject-img 161 | ^https?:\/\/.+\.googlevideo\.com\/.+ctier url reject-img 162 | ^https?:\/\/youtubei\.googleapis\.com\/youtubei\/.+ad_ url reject-img 163 | ^https?:\/\/youtubei\.googleapis\.com\/youtubei\/.+log_ url reject-img 164 | ^https?:\/\/.+\.youtube\.com\/get_midroll_ url reject-img 165 | ^https?:\/\/premiumyva\.appspot\.com\/vmclickstoadvertisersite url reject-img 166 | ^https?:\/\/.+\.youtube\.com\/api\/stats\/ads url reject-img 167 | ^https?:\/\/.+\.youtube\.com\/api\/stats\/.+adformat url reject-img 168 | ^https?:\/\/.+\.youtube\.com\/pagead\/ url reject-img 169 | ^https?:\/\/.+\.youtube\.com\/ptracking url reject-img 170 | -------------------------------------------------------------------------------- /Rewrite/Price.conf: -------------------------------------------------------------------------------- 1 | # JD App 显示历史价格 by yichahucha 2 | ^https?:\/\/api\.m\.jd\.com\/client\.action\?functionId=(wareBusiness|serverConfig|basicConfig) url script-response-body https://raw.githubusercontent.com/yichahucha/surge/master/jd_price.js 3 | 4 | # Taobao App 显示历史价格 by yichahucha 5 | ^https?:\/\/amdc\.m\.taobao\.com\/amdc\/mobileDispatch url script-response-body https://raw.githubusercontent.com/yichahucha/surge/master/tb_price.js 6 | ^https?:\/\/trade-acs\.m\.taobao\.com\/gw\/mtop\.taobao\.detail\.getdetail url script-response-body https://raw.githubusercontent.com/yichahucha/surge/master/tb_price.js 7 | -------------------------------------------------------------------------------- /Rewrite/Rewrite.conf: -------------------------------------------------------------------------------- 1 | hostname = *.kingsoft-office-service.com, *.uve.weibo.com, *.wikipedia.org, *.wikiwand.com, 101.201.62.22, 113.105.222.132, 113.96.109.*, 118.178.214.118, 119.18.193.135, 121.14.89.216, 121.9.212.178, 123.59.31.1, 14.21.76.30, 153.3.236.81, 180.101.212.22, 183.232.237.194, 183.232.246.225, 183.60.159.227, 218.11.3.70, 59.151.53.6, 59.37.96.220, acs.m.taobao.com, act.vip.iqiyi.com, afd.baidu.com, api.bilibili.com, api.jr.mi.com, api.live.bilibili.com, api.m.jd.com, api.m.mi.com, api.weibo.cn, api.zhihu.com, api-mifit.huami.com, api-mifit-cn.huami.com, app.10086.cn, app.58.com, app.api.ke.com, app.bilibili.com, app.m.zj.chinamobile.com, c.m.163.com, capi.douyucdn.cn, capi.mwee.cn, client.mail.163.com, connect.facebook.net, consumer.fcbox.com, creatives.ftimg.net, creditcard.ecitic.com, g1.163.com, hm.xiaomi.com, iface.iqiyi.com, iface2.iqiyi.com, img1.126.net, ios.prod.ftl.netflix.com, ios.wps.cn, lives.l.qq.com, m*.amap.com, m.client.10010.com, m.creditcard.ecitic.com, m.ibuscloud.com, m5.amap.com, mapi.weibo.com, mi.gdt.qq.com, mp.weixin.qq.com, ms.jr.jd.com, newsso.map.qq.com, pic1cdn.cmbchina.com, resource.cmbchina.com, rtbapi.douyucdn.cn, static.vuevideo.net, static1.keepcdn.com, staticlive.douyucdn.cn, storage.wax.weibo.com, support.you.163.com, trade-acs.m.taobao.com, ups.youku.com, wapwenku.baidu.com, wenku.baidu.com, www.facebook.com, www.ft.com, www.zhihu.com, zhidao.baidu.com, account.wps.cn, account.wps.com, ap*.bilibili.com, api.vuevideo.net, license.pdfexpert.com, newdrugs.dxy.cn, *.video.qq.com, v.qq.com, weclub.ccc.cmbchina.com, act.10010.com, pay.sc.weibo.com, 8.8.8.8, -redirector*.googlevideo.com, *.googlevideo.com, commerce-i18n-api.faceu.mobi, commerce-api.faceu.mobi, *.bjxkhc.com, zhuanlan.zhihu.com, links.jianshu.com, www.jianshu.com, link.zhihu.com, weibo.cn, sinaurl.cn, shop.sc.weibo.com, *.baidu.com, pan.baidu.com 2 | 3 | # 京东首页去广告 4 | ;^https?:\/\/api\.m\.jd\.com\/client\.action\?functionId=start url script-response-body https://raw.githubusercontent.com/blackmatrix7/ios_rule_script/master/script/startup/startup.js 5 | 6 | # 微博应用内去广告 by yichahucha 7 | ;^https?:\/\/m?api\.weibo\.c(n|om)\/2\/(statuses\/(unread|extend|positives\/get|(friends|video)(\/|_)timeline)|stories\/(video_stream|home_list)|(groups|fangle)\/timeline|profile\/statuses|comments\/build_comments|photo\/recommend_list|service\/picfeed|searchall|cardlist|page|\!/photos/pic_recommend_status) url script-response-body https://raw.githubusercontent.com/yichahucha/surge/master/wb_ad.js 8 | 9 | # 微博启动页去广告 by yichahucha 10 | ;^https?:\/\/(sdk|wb)app\.uve\.weibo\.com(\/interface\/sdk\/sdkad.php|\/wbapplua\/wbpullad.lua) url script-response-body https://raw.githubusercontent.com/yichahucha/surge/master/wb_launch.js 11 | 12 | # 微信公众号去广告 by Choler 13 | ;^https?:\/\/mp\.weixin\.qq\.com\/mp\/getappmsgad url script-response-body https://raw.githubusercontent.com/NobyDa/Script/master/QuantumultX/File/Wechat.js 14 | 15 | # 知乎 16 | ^https:\/\/link\.zhihu\.com\/\?target=(https?)?(%3A|:)?(\/\/|%2F%2F)?(.*?)(&source.*)?$ url 302 http://$4 17 | 18 | # 知乎(部分替换为手机百度 Quark 的 User-Agent) 19 | ^https?:\/\/www\.zhihu\.com url request-header (\r\n)User-Agent:.+(\r\n) request-header $1User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/16C50 Quark/604.1 T7/10.3 SearchCraft/2.6.3 (Baidu; P1 8.0.0)$2 20 | 21 | # 知乎直接看 22 | ^https://www\.zhihu\.com/question/ url script-response-body https://raw.githubusercontent.com/id77/QuantumultX/master/Script/zhihu.js 23 | ^https://zhuanlan\.zhihu\.com/p/ url script-response-body https://raw.githubusercontent.com/id77/QuantumultX/master/Script/zhihu.js 24 | 25 | # 知乎网页去广告&推荐列表 26 | https://www\.zhihu\.com/api/v4/questions/\d+/related-readings url reject-200 27 | https://www\.zhihu\.com/api/v4/answers/\d+/related-readings url reject-200 28 | https://www\.zhihu\.com/api/v4/hot_recommendation url reject-200 29 | https://www\.zhihu\.com/commercial_api/banners_v3/mobile_banner url reject-200 30 | https://zhuanlan\.zhihu\.com/api/articles/\d+/recommendation url reject-200 31 | 32 | # 简书跳过重定向界面 33 | ;^https:\/\/links\.jianshu\.com\/go\?to= url script-echo-response https://raw.githubusercontent.com/zZPiglet/Task/master/asset/noredirect.js 34 | ;^https:\/\/www\.jianshu\.com\/go-wild\?ac=\d&url= url script-echo-response https://raw.githubusercontent.com/zZPiglet/Task/master/asset/noredirect.js 35 | 36 | # 微博跳过重定向界面 37 | ^https?:\/\/weibo\.cn\/sinaurl\?(.*&)?(u|toasturl|goto)= url script-echo-response https://raw.githubusercontent.com/zZPiglet/Task/master/asset/noredirect.js 38 | ^https:\/\/shop\.sc\.weibo\.com\/h5\/jump\/error\?(.*&)?url= url script-echo-response https://raw.githubusercontent.com/zZPiglet/Task/master/asset/noredirect.js 39 | ^https?:\/\/(sinaurl|t)\.cn\/ url script-response-header https://raw.githubusercontent.com/zZPiglet/Task/master/asset/noredirect.js 40 | 41 | # 微博网页跳转登陆屏蔽 42 | https://m\.weibo\.cn/comments/hotflow.*max_id=.* url reject-dict 43 | 44 | # 百度(全站替换为手机百度 Quark 的 User-Agent) 45 | ^https?:\/\/(?!d\.pcs).*(? 底部Tab@ddgksf2013 8 | ;^https?:\/\/interface(\d)?\.music\.163\.com\/e?api\/link\/home\/framework\/tab url script-response-body https://gist.githubusercontent.com/ddgksf2013/4f53b7c6083678df25fecc8ff68b52c4/raw/netease.adblock.js 9 | # > 发现页@ddgksf2013 10 | ;^https?:\/\/interface(\d)?\.music\.163\.com\/e?api\/link\/page\/discovery\/resource\/show url script-response-body https://gist.githubusercontent.com/ddgksf2013/4f53b7c6083678df25fecc8ff68b52c4/raw/netease.adblock.js 11 | # > 首推荐页@ddgksf2013 12 | ^https?:\/\/interface(\d)?\.music\.163\.com\/e?api\/link\/page\/rcmd\/resource\/show url script-response-body https://gist.githubusercontent.com/ddgksf2013/4f53b7c6083678df25fecc8ff68b52c4/raw/netease.adblock.js 13 | # > 软件更新@ddgksf2013 14 | ^https?:\/\/interface(\d)?\.music\.163\.com\/e?api\/ios\/upgrade\/get url script-response-body https://gist.githubusercontent.com/ddgksf2013/4f53b7c6083678df25fecc8ff68b52c4/raw/netease.adblock.js 15 | 16 | 17 | # ======= 网易云搜索区 ======= # 18 | # > 搜索默认填词@ddgksf2013 19 | ;^https?:\/\/interface(\d)?\.music\.163\.com\/e?api\/search\/default\/keyword\/list url script-response-body https://gist.githubusercontent.com/ddgksf2013/4f53b7c6083678df25fecc8ff68b52c4/raw/netease.adblock.js 20 | # > 猜你喜欢@ddgksf2013 21 | ;^https?:\/\/interface(\d)?\.music\.163\.com\/e?api\/search\/rcmd\/keyword\/get url script-response-body https://gist.githubusercontent.com/ddgksf2013/4f53b7c6083678df25fecc8ff68b52c4/raw/netease.adblock.js 22 | # > 搜索下方Chart@ddgksf2013 23 | ;^https?:\/\/interface(\d)?\.music\.163\.com\/e?api\/search\/chart\/list url script-response-body https://gist.githubusercontent.com/ddgksf2013/4f53b7c6083678df25fecc8ff68b52c4/raw/netease.adblock.js 24 | # > 搜索Chart@ddgksf2013 25 | ;^https?:\/\/interface(\d)?\.music\.163\.com\/e?api\/search\/chart\/detail url script-response-body https://gist.githubusercontent.com/ddgksf2013/4f53b7c6083678df25fecc8ff68b52c4/raw/netease.adblock.js 26 | # > 相关搜索@ddgksf2013 27 | ;^https?:\/\/interface(\d)?\.music\.163\.com\/e?api\/search\/suggest\/keyword\/get url script-response-body https://gist.githubusercontent.com/ddgksf2013/4f53b7c6083678df25fecc8ff68b52c4/raw/netease.adblock.js 28 | # > 特殊词@ddgksf2013 29 | ;^https?:\/\/interface(\d)?\.music\.163\.com\/e?api\/search\/specialkeyword\/get url script-response-body https://gist.githubusercontent.com/ddgksf2013/4f53b7c6083678df25fecc8ff68b52c4/raw/netease.adblock.js 30 | 31 | 32 | # ======= 网易云推广区 ======= # 33 | # > 广告加载@ddgksf2013 34 | ^https?:\/\/interface(\d)?\.music\.163\.com\/e?api\/ad\/loading\/get url script-response-body https://gist.githubusercontent.com/ddgksf2013/4f53b7c6083678df25fecc8ff68b52c4/raw/netease.adblock.js 35 | # > 广告实时@ddgksf2013 36 | ^https?:\/\/interface(\d)?\.music\.163\.com\/e?api\/ad\/loading\/current url script-response-body https://gist.githubusercontent.com/ddgksf2013/4f53b7c6083678df25fecc8ff68b52c4/raw/netease.adblock.js 37 | # > 广告Get@ddgksf2013 38 | ^https?:\/\/interface(\d)?\.music\.163\.com\/e?api\/ad\/get url script-response-body https://gist.githubusercontent.com/ddgksf2013/4f53b7c6083678df25fecc8ff68b52c4/raw/netease.adblock.js 39 | # > 插入广告@ddgksf2013 40 | ^https?:\/\/interface(\d)?\.music\.163\.com\/e?api\/link\/position\/show\/resource url script-response-body https://gist.githubusercontent.com/ddgksf2013/4f53b7c6083678df25fecc8ff68b52c4/raw/netease.adblock.js 41 | # > 歌单顶部广告@ddgksf2013 42 | ^https?:\/\/interface(\d)?\.music\.163\.com\/e?api\/link\/scene\/show\/resource url script-response-body https://gist.githubusercontent.com/ddgksf2013/4f53b7c6083678df25fecc8ff68b52c4/raw/netease.adblock.js 43 | # > 活动推广@ddgksf2013 44 | ^https?:\/\/interface(\d)?\.music\.163\.com\/e?api\/content\/activity\/music\/jar\/template\/list url reject-200 45 | # > 弹窗免费听歌@ddgksf2013 46 | ^https?:\/\/interface(\d)?\.music\.163\.com\/e?api\/vip\/cashier\/tspopup\/get url script-response-body https://gist.githubusercontent.com/ddgksf2013/4f53b7c6083678df25fecc8ff68b52c4/raw/netease.adblock.js 47 | # > 启动领VIP弹窗@ddgksf2013 48 | ^https?:\/\/interface(\d)?\.music\.163\.com\/e?api\/sp\/flow\/popup\/query url reject-200 49 | 50 | # ======= 网易云侧栏区 ======= # 51 | # > 侧栏账户@ddgksf2013 52 | ;^https?:\/\/interface(\d)?\.music\.163\.com\/e?api\/vipnewcenter\/app\/resource\/newaccountpage url script-response-body https://gist.githubusercontent.com/ddgksf2013/4f53b7c6083678df25fecc8ff68b52c4/raw/netease.adblock.js 53 | # > 侧栏推广@ddgksf2013 54 | ;^https?:\/\/interface(\d)?\.music\.163\.com\/e?api\/side-bar\/mini-program\/music-service\/account url script-response-body https://gist.githubusercontent.com/ddgksf2013/4f53b7c6083678df25fecc8ff68b52c4/raw/netease.adblock.js 55 | # > 侧边VIP推广@ddgksf2013 56 | ;^https?:\/\/interface(\d)?\.music\.163\.com\/e?api\/delivery\/deliver url script-response-body https://gist.githubusercontent.com/ddgksf2013/4f53b7c6083678df25fecc8ff68b52c4/raw/netease.adblock.js 57 | # > 侧边浮层@ddgksf2013 58 | ;^https?:\/\/interface(\d)?\.music\.163\.com\/e?api\/delivery\/batch-deliver url script-response-body https://gist.githubusercontent.com/ddgksf2013/4f53b7c6083678df25fecc8ff68b52c4/raw/netease.adblock.js 59 | # > 优惠券@ddgksf2013 60 | ;^https?:\/\/interface(\d)?\.music\.163\.com\/e?api\/vipmall\/couponcfg\/get url reject-200 61 | # > 侧边兑换黑胶Tips@ddgksf2013 62 | ;^https?:\/\/interface(\d)?\.music\.163\.com\/e?api\/yunbei\/account\/entrance\/get url script-response-body https://gist.githubusercontent.com/ddgksf2013/4f53b7c6083678df25fecc8ff68b52c4/raw/netease.adblock.js 63 | # > 侧边创作福利@ddgksf2013 64 | ;^https?:\/\/interface(\d)?\.music\.163\.com\/e?api\/creator\/musician\/reminder\/message\/get url script-response-body https://gist.githubusercontent.com/ddgksf2013/4f53b7c6083678df25fecc8ff68b52c4/raw/netease.adblock.js 65 | 66 | # ======= 网易云歌曲区 ======= # 67 | # > 评论区插入推广@ddgksf2013 68 | ;^https?:\/\/interface(\d)?\.music\.163\.com\/e?api\/batch url script-response-body https://gist.githubusercontent.com/ddgksf2013/4f53b7c6083678df25fecc8ff68b52c4/raw/netease.adblock.js 69 | # > 活动推广@ddgksf2013 70 | ^https?:\/\/interface(\d)?\.music\.163\.com\/w?eapi\/(resource-exposure\/)?activity url reject-200 71 | # > 评论区插入推广@ddgksf2013 72 | ;^https?:\/\/interface(\d)?\.music\.163\.com\/e?api\/comment\/feed\/inserted\/resources url reject-200 73 | # > 购买实体专辑@ddgksf2013 74 | ;^https?:\/\/interface(\d)?\.music\.163\.com\/e?api\/resource-exposure\/config url reject-200 75 | -------------------------------------------------------------------------------- /Rewrite/YouTube.conf: -------------------------------------------------------------------------------- 1 | hostname = *.googlevideo.com,s.youtube.com,www.youtube.com 2 | 3 | ctier=(?!SH)[\w-] citer=A 302 4 | ^https?:\/\/[\w-]+\.googlevideo\.com\/((?!(dclk_video_ads|videoplayback)).)+&(oad|ctier) _ reject 5 | ^https?:\/\/(www|s)\.youtube\.com\/api\/stats\/ads _ reject 6 | ^https?:\/\/(www|s)\.youtube\.com\/(pagead|ptracking) _ reject 7 | ^https?:\/\/s\.youtube\.com\/api\/stats\/qoe?.*adformat= _ reject 8 | -------------------------------------------------------------------------------- /Rewrite/hackvip.conf: -------------------------------------------------------------------------------- 1 | hostname = mp.weixin.qq.com, api.gamer.com.tw, ios.prod.ftl.netflix.com, homepage-api.smzdm.com, haojia-api.smzdm.com, article-api.smzdm.com, haojia.m.smzdm.com, app-api.smzdm.com, s-api.smzdm.com, www.52pojie.cn, c.tieba.baidu.com, ifac*.iqiyi.com, api.kkmh.com, wapside.189.cn, act.10010.com, clientaccess.10086.cn, *.acfun.cn, apk.tw, group.baicizhan.com, sapi.beingfine.cn, *.csdn.net, www.duokan.com, api.dongqiudi.com, api.everphoto.cn, api.dushu.io, *.feng.com, pm.m.fenqile.com, www.flyertea.com, m.gdoil.cn, gameapi.hellobike.com, wxprdapplet.gac-nio.com, www.maomicd.com, i.meituan.com, credits.bz.mgtv.com, apiwz.midukanshu.com, api-takumi.mihoyo.com, app.nio.com, xiaoshuo.qm989.com, node.kg.qq.com, api.1sapp.com, user.qunar.com, sf-integral-sign-in.weixinjia.net, mcs-mimp-web.sf-express.com, passport.suning.com, luckman.suning.com, sign.suning.com, gameapi.suning.com, tieba.baidu.com, tncj.hortorgames.com, *.v2ex.com, user-api-prd-mx.wandafilm.com, *.video.qq.com, promotion.waimai.meituan.com, 110.43.90.61, m-bean.kaola.com, *.you.163.com, iphone.myzaker.com, *.rrys2019.com, ios.zmzapi.com, wx-mini.pagoda.com.cn, api.infzm.com, my.ruanmei.com, mwegame.qq.com, m.ctrip.com, h5.bianlifeng.com, as.xiaojukeji.com, superapp.kiwa-tech.com, activity-1.m.duiba.com.cn, webapi.qmai.cn, teacherapi.zmlearn.com, mall.oclean.com, api.xiaoheihe.cn, h5.ele.me, *.xmcimg.com, nebula.kuaishou.com, draw.jdfcloud.com, newsapi.sina.cn, api.inews.qq.com, *.youth.cn, www.mydigit.cn, ios.baertt.com, maicai.api.ddxq.mobi, proxy.vac.qq.com, app*.jegotrip.com.cn, task.jegotrip.com.cn, api.umer.com.cn, exp.angelalign.com, ngabbs.com, h5.youzan.com, dominos0724.shjimang.com, e.189.cn, huiyuan.163.com, app.kxp.com, geekhub.com, cxdng.cpic.com.cn, mobile01.91quzou.com, api.cashtoutiao.com, appv8.qukantianxia.com, appv7.qukantx.com, qqpet.jwetech.com, sports.lifesense.com, studygolang.com, cloud.umetrip.com, www.2xtj7.cnwww.baimaa.comwww.hnmiaosu.cc, m.ctrp.com, m.elong.com, activity.m.duiba.com.cn, icbc1.wlphp.com:8444, wx.17u.cn, ios-fenqu11.lxsjgo.com, i.snssdk.com, is.snssdk.com, wq.jd.com, ph0001.hezyq.com, wq.02gk.com, marketappapi.biyao.com, app.ymatou.com, api.tuhu.cn, now.qq.com, daojia.jd.com, yuba.douyu.com, j1.pupuapi.com, club.yili.com, wxavip-up.ezrpro.cn, common.diditaxi.com.cn, www.xiaodouzhuan.cn, biz.caiyunapp.com, non-existed-domain.com, *.non-connected-domain.com, mqqapi.reader.qq.com, greasyfork.org, openuserjs.org, api.interpreter.caiyunai.com, api.rr.tv, *.bh3.com, api.sololearn.com, bkcd.b-cdn.net, www.baidu.com2.club, *.baidu.com, duckduckgo.com, www.xmind.cn, www.xmind.net, 118.89.204.198, *.musical.ly, getuserinfo.321mh.com, user*.zymk.cn, ios.fuliapps.com, vsco.co, api.vnision.com, sp.kaola.com, app101.avictown.cc, api.hlo.xyz, api.ijo.xyz, www.luqijianggushi.com, u.kanghuayun.com, mitaoapp.yeduapp.com, www.3ivf.com, pay.guoing.com, viva.v21xy.com, mp.bybutter.com, m.iqiyi.com, z1.m1907.cn, m.youku.com, m.v.qq.com, m.bilibili.com, api.vuevidmeo.net, api.picsart.c*, ios.xiangjiaoapps.com, apple.xiangjiaoapps.com, *.lagoapps.com, *.xiangxiangapps.com, *.pipiapps.com, avatar-nct.nixcdn.com, oa.zalo.me, origin-prod-phoenix.jibjab.com, api.meiease.c*, api.unfold.app, viva-asia1.vvbrd.com, graph.nhaccuatui.com, api.memrise.com, api.sync.me, pool.elsanow.io, lambda.us-east-1.amazonaws.com, api.mondlylanguages.com, api.busuu.com, owa.videoshowiosglobalserver.com:0, accounts.elevateapp.net, purchases.ws.pho.to, api-intl.mr.meitu.com, bmall.camera360.com, api.tv.zing.vn, api.calm.com, www.calm.com, api.global.mp3.zing.vn, apimboom2.globaldelight.net, photos.adobe.io, license.pdfexpert.com, subs.platforms.team, apic.musixmatch.com, api.getmimo.com, api.revenuecat.com, engbright.com, api.lingokids.com, www.peacefulsoundsapp.com, duolingo-leaderboards-prod.duolingo.com, mobile-api.adguard.com, api.blinkist.com, api-kinemaster-assetstore.*, api.pushover.net, api.overhq.com, receipt-validator.herewetest.com, lcs-mobile-cops.adobe.io, education.github.com, backend.getdrafts.com, ssl-api.itranslateapp.com, m.douban.com, dayone.me, license.enpass.io, *.grammarly.com, api.keepkeep.com, planner5d.com, pan.baidu.com, secure.istreamer.com, www.api.monkeyuni.net, api.textnow.me, veishop.iboxpay.com, *.xjxjappss.com, sub.store, testflight.apple.com, api.polaxiong.com, *.xxjjappss.com, *.huaerdadi.com, *.xiaoxiaoapps.com, *.xiaoxiaoimg.com, *.byteoversea.com, *.tik-tokapi.com, snailsleep.net, music.snailsleep.net, community.snailsleep.net, nmeditation.snailsleep.net, api.myb6api.com:8080, lginstaacademy.com, ios-h2.prod.ftl.netflix.com, mb3admin.com, weixin110.qq.com, security.wechat.com, guide-acs.m.taobao.com, shopmember.m.jd.com, iosv2.cjapi.papa21.com, iflow.uc.cn, notability.com, app.api.versa-ai.com, api.feidee.net, userapi.feidee.net, tg.feidee.com, community.feidee.com, txv04.com, apiios.xiangha.com, 39.97.157.167, appa.lingdu2019.cn, www.zhihu.com, api.zhihu.com, spclient.wg.spotify.com, zhuanlan.zhihu.com, appcloud2.zhihu.com, 103.41.167.236, 103.41.167.234, 103.41.167.235, 103.41.167.226, *.gotokeep.com, vira.llsapp.com, nomo.dafork.com, apiios_dq.xiangha.com, appweb_dq.xiangha.com, 101.200.225.157, *.wtzw.com, sjapp.o3aqqc.work, cokemv.me, *.pornhub.com, www.lezhutv.com, www.bimi*.net, *kuwo*, *lrts*, 18comic.org, www.o8tv.com, 555dy.vip,www.5*.com,www.5*.cc, gimytv.app, www.tkys.tv, www.qianoo.cn, *.zhenbuka*.*, xluser-ssl.xunlei.com, www.libvio.me, tiebac.baidu.com, app.yiyan.art, api.tidal.com, app-live.planefinder.net, aktv111.com, *.docer.wps.cn, vipapi.wps.cn, account.wps.cn, account.wps.cn, *account.wps.com, wallpaper.soutushenqi.com, baimiao.uzero.cn, top-widgets-api.xiaozujian.com, p.du.163.com, sdk.alibaba.com.ailbaba.me, xrckeji.com, xianbeikeji.com, creen-lock.51wnl-cq.com, *.meiyan.com, *.meitu.com, mobile.flightradar24.com, dayone.app, api.effie.pro, api.effie.co, api.chuangqi.store, api.open.loveclip.site, api.saladvideo.com, -redirector*.googlevideo.com, *.googlevideo.com, www.youtube.com, s.youtube.com, youtubei.googleapis.com, ypmnkbb.saejeuj.com, fufxtyc.bytebwq.com, lcbnejx.dirptev.com, gcyivjc.qrneryt.com, dida365.com, *.xiuxiu.meitu.com, api-chat.soulapp.cn, *.aliyundrive.com, edith.xiaohongshu.com, www.xiaohongshu.com, *music.163.com, 115.236.121.4, 115.236.118.34, 115.238.119.68, 183.136.182.19, *.wps.cn, api-pay.soulapp.cn, api-user.soulapp.cn, api-chat.soulapp.cn, 8.210.3.170, 47.96.7.91, 47.96.11.46, 47.96.20.45, 47.98.54.106, 47.98.137.249, 114.215.255.94, 118.31.7.235, 118.31.112.221, 120.55.55.115, 120.55.62.124, 121.196.197.147, 121.196.203.183, *.camscanner.com, *.intsig.net 2 | 3 | # > WPS 解锁超级会员 Pro *.wps.cn 4 | ;^https?:\/\/(account|drive|vas|userinfo.docer)\.wps\.cn\/(.*api\/(v3\/(mine\/vips|spaces)|users\/\d+\/overview|v1\/list_purchase_info)|user\/v1\/vip_dl_times) url script-response-body https://raw.githubusercontent.com/yqc007/QuantumultX/master/WPSuperVIPuserCrack.js 5 | ;^https?:\/\/(mobile|client|vas|download)(\.docer)?\.wps.cn\/(android\/mb\/buy_info|api\/v1\/mobile\/mb\/detail|query\/api\/v1\/list_privilege_info|download\/adapter\/v1\/mb) url script-request-header https://raw.githubusercontent.com/yqc007/QuantumultX/master/WPSuperVIPowerCrack.js 6 | 7 | # > 网易云音乐解锁黑胶会员 *music.163.com, 115.236.121.4, 115.236.118.34, 115.238.119.68, 183.136.182.19 8 | ^https?:\/\/.*\/eapi\/(music|s(ong|ingle|earch)|album|link|zone|content|p(laylist|rivilege|laymode|urchased)|r(esni|nca)che|vip(auth|pro|(new)?center)|music-vip-membership).+ url script-request-header https://raw.githubusercontent.com/yqc007/QuantumultX/master/NeteaseMusicVipCrack.js 9 | ^https?:\/\/.*\/api\/clientlog\/encrypt\/upload url reject-array 10 | ^https?:\/\/.*\/eapi\/ad\/.+ url reject-array 11 | 12 | # 小红书 去广告,下载无水印 edith.xiaohongshu.com, www.xiaohongshu.com 13 | # 惊喜弹窗 14 | ^https:\/\/edith\.xiaohongshu\.com\/api\/sns\/v1\/surprisebox\/(get_style\?|open\?|submit_action$) url reject-dict 15 | ^https:\/\/www\.xiaohongshu\.com\/api\/marketing\/box\/trigger\? url reject-dict 16 | # 搜索页 17 | ^https:\/\/edith\.xiaohongshu\.com\/api\/sns\/v1\/search\/hot_list\?? url script-response-body https://raw.githubusercontent.com/RuCu6/QuanX/main/Scripts/xiaohongshu.js 18 | ^https:\/\/edith\.xiaohongshu\.com\/api\/sns\/v4\/search\/(hint|trending)\? url script-response-body https://raw.githubusercontent.com/RuCu6/QuanX/main/Scripts/xiaohongshu.js 19 | # 开屏广告 20 | ^https:\/\/edith\.xiaohongshu\.com\/api\/sns\/v1\/system_service\/config\? url script-response-body https://raw.githubusercontent.com/RuCu6/QuanX/main/Scripts/xiaohongshu.js 21 | ^https:\/\/edith\.xiaohongshu\.com\/api\/sns\/v2\/system_service\/splash_config$ url script-response-body https://raw.githubusercontent.com/RuCu6/QuanX/main/Scripts/xiaohongshu.js 22 | # 信息流 23 | ^https:\/\/edith\.xiaohongshu\.com\/api\/sns\/v6\/homefeed\? url script-response-body https://raw.githubusercontent.com/RuCu6/QuanX/main/Scripts/xiaohongshu.js 24 | ^https:\/\/edith\.xiaohongshu\.com\/api\/sns\/v[23]\/note\/(video)?feed\? url response-body "disable_watermark":false, response-body "disable_watermark":true, 25 | ^https:\/\/www\.xiaohongshu\.com\/api\/sns\/v1\/ads\/resource\? url reject-dict 26 | 27 | # 滴答清单 dida365.com 28 | ^https:\/\/dida365\.com\/api\/v2\/user\/status url script-response-body https://raw.githubusercontent.com/89996462/Quantumult-X/main/ycdz/ddqd.js 29 | 30 | # TopWidgets-小组件+解锁订阅 top-widgets-api.xiaozujian.com 31 | ^https:\/\/top-widgets-api\.xiaozujian\.com\/api\/app\/config\/userConfig url script-response-body https://raw.githubusercontent.com/89996462/Quantumult-X/main/ycdz/widgets.js 32 | 33 | # Spotify spclient.wg.spotify.com 34 | ^https:\/\/spclient\.wg\.spotify\.com\/(bootstrap\/v1\/bootstrap|user-customization-service\/v1\/customize)$ url script-response-body https://raw.githubusercontent.com/app2smile/rules/master/js/spotify-proto.js 35 | 36 | # aktv aktv111.com 37 | ^http:\/\/aktv111\.com\/api\/user.* url script-response-body https://raw.githubusercontent.com/zwf234/rules/master/js/aktv.js 38 | 39 | # 阿里云盘 解锁画质 *.aliyundrive.com 40 | ^https?:\/\/(api|member)\.aliyundrive\.com url script-response-body https://raw.githubusercontent.com/chxm1023/Rewrite/main/alidrive.js 41 | 42 | # cokemv.me, *.pornhub.com, www.lezhutv.com, www.bimi*.net, 18comic.org, www.o8tv.com, 555dy.vip,www.5*.com,www.5*.cc, gimytv.app, www.tkys.tv, www.qianoo.cn, *.zhenbuka*.*, www.libvio.me 43 | 44 | # > 12 Cokemv[网页优化] - 网站地址:https://cokemv.me/ 45 | ^https?:/\/cokemv\.me(\/?$|\/([?]|vod).*$) url script-response-body https://nav.qixinpro.com/rules/QuantumultX/js/backup/js/cokemv.js 46 | 47 | # > 11 PornHub[网页优化] - 网站地址:https://cn.pornhub.com 48 | ^https:\/\/(cn|www)\.pornhub\.com\/_xa\/ads url reject-dict 49 | ^https?:/\/(cn|www)\.pornhub\.com(\/?$|\/([?]|view|video).*$) url script-response-body https://nav.qixinpro.com/rules/QuantumultX/js/backup/js/pornhub.js 50 | 51 | # > 10 LeZhu[网页优化] - 网站地址:http://www.lezhutv.com 52 | ^https?:/\/www\.lezhutv\.com(\/?$|\/([?]|type|detail|play|index).*$) url script-response-body https://nav.qixinpro.com/rules/QuantumultX/js/backup/js/lezhu.js 53 | 54 | # > 09 Bimi[网页优化] - 网站地址:https://www.bimi.net 55 | ^https?:/\/www\.bimi.*\.(net\/$|net\/(vodshow|bangumi|type)\/[0-9a-z-\/]+\/$) url script-response-body https://nav.qixinpro.com/rules/QuantumultX/js/backup/js/bimi.js 56 | 57 | # > 08 禁漫天堂[网页优化] - 网站地址:https://18comic.org 58 | ^https?:\/\/18comic\.org(\/?$|\/([?]|album|photo).*$) url script-response-body https://nav.qixinpro.com/rules/QuantumultX/js/backup/js/18comic.js 59 | 60 | # > 07 555影视[网页优化] - 网站地址:https://555dy.vip 61 | ^https?:\/\/(www\.)?(5.*|o8tv)\.((cc|vip|com)\/$|(cc|vip|com)\/[a-z]+\/[0-9a-z-]+\.html) url script-response-body https://nav.qixinpro.com/rules/QuantumultX/js/backup/js/555.js 62 | 63 | # > 06 剧迷[网页优化] - 网站地址:https://gimytv.app 64 | ^https?:\/\/gimytv\.(app\/$|app\/(browse\/)?[0-9a-zA-Z-_]+\.html) url script-response-body https://nav.qixinpro.com/rules/QuantumultX/js/backup/js/gimytv.js 65 | 66 | # > 04 天空影视[网页优化]@ - 网站地址:https://www.tkys.tv 67 | ^https?:\/\/www\.tkys\.(tv\/$|tv\/(voddetail|vodplay)\/[0-9a-z-]+\.html$) url script-response-body https://nav.qixinpro.com/rules/QuantumultX/js/backup/js/tkys.js 68 | 69 | # > 03 厂长电影[网页优化]@ - 网站地址:https://www.qianoo.cn 70 | ^https?:/\/www\.qianoo\.(cn\/$|cn\/[0-9a-zA-Z_\/]+\.html$) url script-response-body https://nav.qixinpro.com/rules/QuantumultX/js/backup/js/qianoo.js 71 | 72 | # > 02 真不卡[网页优化]@ - 网站地址:https://www.zhenbuka5.com 73 | ^https?:\/\/www\.zhenbuka.*\.com(\/?$|\/([?]|vod).*$) url script-response-body https://nav.qixinpro.com/rules/QuantumultX/js/backup/js/zhenbuka.js 74 | 75 | # > 01 libvio[网页优化]@ - 网站地址:https://www.iioo.me 76 | ^https?:/\/www\.libvio\.(me\/$|me\/(detail|play)\/[0-9a-z-]+\.html$) url script-response-body https://nav.qixinpro.com/rules/QuantumultX/js/backup/js/libvio.js 77 | 78 | # 爱奇艺 79 | (^https?:\/\/m\.iqiyi\.com\/v_.*) url 307 https://z1.m1907.cn/?jx=$1 80 | # 优酷视频 81 | (^https?:\/\/m\.youku\.com\/.*) url 307 https://z1.m1907.cn/?jx=$1 82 | # 腾讯视频 83 | (^https?:\/\/m\.v\.qq\.com\/x\/(m\/)?play.*) url 307 https://z1.m1907.cn/?jx=$1 84 | # 哔哩哔哩 85 | (^https?:\/\/m\.bilibili\.com\/bangumi\/play\/.*) url 307 https://z1.m1907.cn/?jx=$1 86 | 87 | #替换支付宝内淘票票评分为豆瓣评分 88 | ;^https:\/\/guide-acs\.m\.taobao\.com\/gw\/mtop\.film\.mtopshowapi\.getextendshowbyid url script-response-body https://raw.githubusercontent.com/Peng-YM/QuanX/master/Rewrites/TaoPiaoPiao/taopiaopiao.js 89 | 90 | # 豆瓣电影和电视剧添加便捷播放按钮 m.douban.com 91 | ;^https?:\/\/m\.douban\.com\/movie\/subject\/\d+\/ url script-response-body https://raw.githubusercontent.com/I-am-R-E/QuantumultX/main/JavaScript/DouBan.js 92 | 93 | #百度网盘解锁vip,视频倍速播放 pan.baidu.com 94 | ;^https:\/\/pan\.baidu\.com\/rest\/\d\.\d\/membership\/user url script-response-body https://nav.qixinpro.com/rules/QuantumultX/js/backup/js/bdcloud.js 95 | 96 | #微信屏蔽跳转 weixin110.qq.com, security.wechat.com 97 | #在微信中打开淘宝等被屏蔽链接,点击 Surge/QuantumultX 通知跳转到 Safari 或淘宝 App 98 | ^https\:\/\/(weixin110\.qq|security.wechat)\.com\/cgi-bin\/mmspamsupport-bin\/newredirectconfirmcgi\? url script-response-body https://raw.githubusercontent.com/zwf234/rules/master/js/weixin110.js 99 | 100 | # 强制跳转百度UA *.baidu.com 101 | ^https?:\/\/(?!d\.pcs).*(?= 0) { 9 | const tokenurlVal = $request.url 10 | const tokenheaderVal = JSON.stringify($request.headers) 11 | if (tokenurlVal) chavy.setdata(tokenurlVal, tokenurlKey) 12 | if (tokenheaderVal) chavy.setdata(tokenheaderVal, tokenheaderKey) 13 | title = chavy.msg(cookieName, `获取刷新链接: 成功`, ``) 14 | } else if ($request && $request.method != 'OPTIONS' && $request.url.indexOf('daySign.do') >= 0) { 15 | const signurlVal = $request.url 16 | const signheaderVal = JSON.stringify($request.headers) 17 | if (signurlVal) chavy.setdata(signurlVal, signurlKey) 18 | if (signheaderVal) chavy.setdata(signheaderVal, signheaderKey) 19 | title = chavy.msg(cookieName, `获取Cookie: 成功`, ``) 20 | } 21 | 22 | function init() { 23 | isSurge = () => { 24 | return undefined === this.$httpClient ? false : true 25 | } 26 | isQuanX = () => { 27 | return undefined === this.$task ? false : true 28 | } 29 | getdata = (key) => { 30 | if (isSurge()) return $persistentStore.read(key) 31 | if (isQuanX()) return $prefs.valueForKey(key) 32 | } 33 | setdata = (key, val) => { 34 | if (isSurge()) return $persistentStore.write(key, val) 35 | if (isQuanX()) return $prefs.setValueForKey(key, val) 36 | } 37 | msg = (title, subtitle, body) => { 38 | if (isSurge()) $notification.post(title, subtitle, body) 39 | if (isQuanX()) $notify(title, subtitle, body) 40 | } 41 | log = (message) => console.log(message) 42 | get = (url, cb) => { 43 | if (isSurge()) { 44 | $httpClient.get(url, cb) 45 | } 46 | if (isQuanX()) { 47 | url.method = 'GET' 48 | $task.fetch(url).then((resp) => cb(null, {}, resp.body)) 49 | } 50 | } 51 | post = (url, cb) => { 52 | if (isSurge()) { 53 | $httpClient.post(url, cb) 54 | } 55 | if (isQuanX()) { 56 | url.method = 'POST' 57 | $task.fetch(url).then((resp) => cb(null, {}, resp.body)) 58 | } 59 | } 60 | done = (value = {}) => { 61 | $done(value) 62 | } 63 | return { isSurge, isQuanX, msg, log, getdata, setdata, get, post, done } 64 | } 65 | chavy.done() 66 | -------------------------------------------------------------------------------- /Script/10010.js: -------------------------------------------------------------------------------- 1 | const cookieName = '中国联通' 2 | const tokenurlKey = 'chavy_tokenurl_10010' 3 | const tokenheaderKey = 'chavy_tokenheader_10010' 4 | const signurlKey = 'chavy_signurl_10010' 5 | const signheaderKey = 'chavy_signheader_10010' 6 | const chavy = init() 7 | const tokenurlVal = chavy.getdata(tokenurlKey) 8 | const tokenheaderVal = chavy.getdata(tokenheaderKey) 9 | const signurlVal = chavy.getdata(signurlKey) 10 | let signheaderVal = chavy.getdata(signheaderKey) 11 | const signinfo = {} 12 | 13 | sign() 14 | 15 | function sign() { 16 | signapp() 17 | getinfo() 18 | // getdetail() 19 | check() 20 | } 21 | 22 | function gettel() { 23 | const reqheaders = JSON.parse(signheaderVal) 24 | const reqreferer = reqheaders.Referer 25 | const reqCookie = reqheaders.Cookie 26 | let tel = '' 27 | if (reqreferer.indexOf(`desmobile=`) >= 0) tel = reqreferer.match(/desmobile=(.*?)(&|$)/)[1] 28 | if (tel == '' && reqCookie.indexOf(`u_account=`) >= 0) tel = reqCookie.match(/u_account=(.*?);/)[1] 29 | return tel 30 | } 31 | 32 | function loginapp(cb) { 33 | const url = { url: tokenurlVal, headers: JSON.parse(tokenheaderVal) } 34 | chavy.get(url, (error, response, data) => { 35 | const respcookie = response.headers['Set-Cookie'] 36 | const signheaderObj = JSON.parse(signheaderVal) 37 | let signcookie = signheaderObj['Cookie'] 38 | signcookie = signcookie.replace(/route5=([^;]*)/, respcookie.match(/route5=([^;]*)/)[0]) 39 | signcookie = signcookie.replace(/JSESSIONID=([^;]*)/, respcookie.match(/JSESSIONID=([^;]*)/)[0]) 40 | signheaderObj['Cookie'] = signcookie 41 | signheaderVal = JSON.stringify(signheaderObj) 42 | cb() 43 | }) 44 | } 45 | 46 | function signapp() { 47 | loginapp(() => { 48 | chavy.log(`${cookieName}, signapp - signheaderVal: ${signheaderVal}`) 49 | const url = { url: signurlVal, headers: JSON.parse(signheaderVal) } 50 | url.body = `className=signinIndex` 51 | chavy.post(url, (error, response, data) => (signinfo.signapp = data)) 52 | }) 53 | } 54 | 55 | function getinfo() { 56 | //const tel = gettel() 57 | const tel = 17612131070 58 | const url = { url: `https://mina.10010.com/wxapplet/bind/getIndexData/alipay/alipaymini?user_id=${tel}` } 59 | chavy.log(`${cookieName}, getinfo - tel: ${tel}`) 60 | chavy.get(url, (error, response, data) => (signinfo.info = data)) 61 | } 62 | 63 | function getdetail() { 64 | const url = { url: `https://mina.10010.com/wxapplet/bind/getCombospare/alipay/alipaymini?stoken=&user_id=${gettel()}` } 65 | chavy.get(url, (error, response, data) => (signinfo.detail = data)) 66 | } 67 | 68 | function check(checkms = 0) { 69 | if (signinfo.signapp && signinfo.info) { 70 | chavy.log(`${cookieName}, signapp: ${signinfo.signapp}`) 71 | chavy.log(`${cookieName}, info: ${signinfo.info}`) 72 | // chavy.log(`${cookieName}, detail: ${signinfo.detail}`) 73 | signinfo.signapp = JSON.parse(signinfo.signapp) 74 | signinfo.info = JSON.parse(signinfo.info) 75 | // signinfo.detail = JSON.parse(signinfo.detail) 76 | showmsg() 77 | } else { 78 | if (checkms > 5000) { 79 | chavy.log(`${cookieName}, signapp: ${signinfo.signapp}`) 80 | chavy.log(`${cookieName}, info: ${signinfo.info}`) 81 | // chavy.log(`${cookieName}, detail: ${signinfo.detail}`) 82 | chavy.msg(`${cookieName}`, `签到失败: 超时退出`, ``) 83 | chavy.done() 84 | } else { 85 | setTimeout(() => check(checkms + 100), 100) 86 | } 87 | } 88 | } 89 | 90 | function showmsg() { 91 | let subTitle = '' 92 | let detail = '' 93 | let signday = '' 94 | 95 | // 签到结果 96 | if (signinfo.signapp.msgCode == '0000') { 97 | subTitle = `签到结果: 成功` 98 | signday = ` (连签${signinfo.signapp.continuCount}天)` 99 | detail = `连签: ${signinfo.signapp.continuCount}天, 积分: +${signinfo.signapp.prizeCount}` 100 | } else if (signinfo.signapp.msgCode == '0008') { 101 | subTitle = `签到结果: 成功 (重复签到)` 102 | } else { 103 | subTitle = `签到结果: 失败` 104 | } 105 | 106 | // 基本信息 107 | if (signinfo.info.code == '0000') { 108 | subTitle += signday 109 | detail = detail ? `${detail}\n` : `` 110 | const free = signinfo.info.dataList[0] 111 | const flow = signinfo.info.dataList[1] 112 | const voice = signinfo.info.dataList[2] 113 | detail = `话费: ${free.number}${free.unit}, 已用: ${flow.number}${flow.unit}, 剩余: ${voice.number}${voice.unit}` 114 | } 115 | 116 | // 详细信息 117 | // if (signinfo.detail.code == '0000') { 118 | // } 119 | 120 | chavy.msg(cookieName, subTitle, detail) 121 | chavy.done() 122 | } 123 | 124 | function init() { 125 | isSurge = () => { 126 | return undefined === this.$httpClient ? false : true 127 | } 128 | isQuanX = () => { 129 | return undefined === this.$task ? false : true 130 | } 131 | getdata = (key) => { 132 | if (isSurge()) return $persistentStore.read(key) 133 | if (isQuanX()) return $prefs.valueForKey(key) 134 | } 135 | setdata = (key, val) => { 136 | if (isSurge()) return $persistentStore.write(key, val) 137 | if (isQuanX()) return $prefs.setValueForKey(key, val) 138 | } 139 | msg = (title, subtitle, body) => { 140 | if (isSurge()) $notification.post(title, subtitle, body) 141 | if (isQuanX()) $notify(title, subtitle, body) 142 | } 143 | log = (message) => console.log(message) 144 | get = (url, cb) => { 145 | if (isSurge()) { 146 | $httpClient.get(url, cb) 147 | } 148 | if (isQuanX()) { 149 | url.method = 'GET' 150 | $task.fetch(url).then((resp) => cb(null, resp, resp.body)) 151 | } 152 | } 153 | post = (url, cb) => { 154 | if (isSurge()) { 155 | $httpClient.post(url, cb) 156 | } 157 | if (isQuanX()) { 158 | url.method = 'POST' 159 | $task.fetch(url).then((resp) => cb(null, resp, resp.body)) 160 | } 161 | } 162 | done = (value = {}) => { 163 | $done(value) 164 | } 165 | return { isSurge, isQuanX, msg, log, getdata, setdata, get, post, done } 166 | } 167 | -------------------------------------------------------------------------------- /Script/50-bean.js: -------------------------------------------------------------------------------- 1 | /* 2 | * @Author: whyour 3 | * @Github: https://github.com/whyour 4 | * @Date: 2020-12-15 16:11:30 5 | * @LastEditors: whyour 6 | * @LastEditTime: 2020-12-15 16:27:09 7 | */ 8 | const $ = new Env('50豆'); 9 | 10 | const JD_API_HOST = 'https://jdjoy.jd.com/'; 11 | $.currentCookie = ''; 12 | $.cookieArr = [$.getdata('CookieJD') || '', $.getdata('CookieJD2') || '']; 13 | 14 | !(async () => { 15 | for (let i = 0; i < $.cookieArr.length; i++) { 16 | $.currentCookie = $.cookieArr[i]; 17 | if ($.currentCookie) { 18 | const userName = decodeURIComponent( 19 | $.currentCookie.match(/pt_pin=(.+?);/) && $.currentCookie.match(/pt_pin=(.+?);/)[1], 20 | ); 21 | $.log(`\n开始【京东账号${i + 1}】${userName}`); 22 | await $.wait(8000); 23 | await doShopTask(); 24 | await $.wait(8000); 25 | await doChannelTask(); 26 | await $.wait(8000); 27 | await doCartTask(); 28 | } 29 | } 30 | })() 31 | .catch(e => $.logErr(e)) 32 | .finally(() => $.done()); 33 | 34 | function doShopTask() { 35 | return new Promise(resolve => { 36 | $.post(taskPostUrl('doTask', `groupType=FOLLOW_SHOP&itemId=1000096004`), async (err, resp, _data) => { 37 | try { 38 | $.log(`开始关注店铺任务`); 39 | const { success } = JSON.parse(_data); 40 | $.log(`\n${success}\n${_data}`); 41 | if (success) { 42 | await $.wait(8000); 43 | await doShopTask(); 44 | } 45 | } catch (e) { 46 | $.logErr(e, resp); 47 | } finally { 48 | resolve(); 49 | } 50 | }); 51 | }); 52 | } 53 | 54 | function doChannelTask() { 55 | return new Promise(resolve => { 56 | $.post(taskPostUrl('doTask', `groupType=FOLLOW_CHANNEL&itemId=118`), async (err, resp, _data) => { 57 | try { 58 | $.log(`开始关注频道任务`); 59 | const { success } = JSON.parse(_data); 60 | $.log(`\n${success}\n${_data}`); 61 | if (success) { 62 | await $.wait(8000); 63 | await doChannelTask(); 64 | } 65 | } catch (e) { 66 | $.logErr(e, resp); 67 | } finally { 68 | resolve(); 69 | } 70 | }); 71 | }); 72 | } 73 | 74 | function doCartTask() { 75 | return new Promise(resolve => { 76 | $.post(taskPostUrl('doTask', `groupType=ADD_CART&itemId=10024095249086`), async (err, resp, _data) => { 77 | try { 78 | $.log(`开始加购商品任务`); 79 | const { success } = JSON.parse(_data); 80 | $.log(`\n${success}\n${_data}`); 81 | if (success) { 82 | await $.wait(8000); 83 | await doCartTask(); 84 | } 85 | } catch (e) { 86 | $.logErr(e, resp); 87 | } finally { 88 | resolve(); 89 | } 90 | }); 91 | }); 92 | } 93 | 94 | function taskPostUrl(function_path, body = {}) { 95 | return { 96 | url: `${JD_API_HOST}module/task/${function_path}?configCode=cb0880b159574f0ab3400be8fe4fc484&finishCount=2&${body}&eid=REXKFWQQ3KBANI54JV5ADW44HP4VTOURHDQ6CR2BV3XIFHC4VZWXMDGJJHLDS6PIQJODYFKU2KIRXDAYSO5XGCZGOQ&fp=d8bd3f362e5c23bbbc74fea9a7d4c3e2`, 97 | headers: { 98 | Cookie: $.currentCookie, 99 | Host: `jdjoy.jd.com`, 100 | 'User-Agent': `Mozilla/5.0 (iPhone; CPU iPhone OS 14_2_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.18(0x17001231) NetType/4G Language/zh_CN`, 101 | Referer: `https://servicewechat.com/wxa5bf5ee667d91626/110/page-frame.html`, 102 | 'Accept-Language': `zh-cn`, 103 | 'Accept-Encoding': `gzip, deflate, br`, 104 | }, 105 | body: `body=${JSON.stringify( 106 | body, 107 | )}&appid=swat_miniprogram&client=tjj_m&screen=1920*1080&osVersion=5.0.0&networkType=wifi&sdkName=orderDetail&sdkVersion=1.0.0&clientVersion=3.1.3&area=11`, 108 | }; 109 | } 110 | 111 | // prettier-ignore 112 | 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,r)=>{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.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.startTime=(new Date).getTime(),Object.assign(this,e),this.log("",`\ud83d\udd14${this.name}, \u5f00\u59cb!`)}isNode(){return"undefined"!=typeof module&&!!module.exports}isQuanX(){return"undefined"!=typeof $task}isSurge(){return"undefined"!=typeof $httpClient&&"undefined"==typeof $loon}isLoon(){return"undefined"!=typeof $loon}toObj(t,e=null){try{return JSON.parse(t)}catch{return e}}toStr(t,e=null){try{return JSON.stringify(t)}catch{return e}}getjson(t,e){let s=e;const i=this.getdata(t);if(i)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 r=this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout");r=r?1*r:20,r=e&&e.timeout?e.timeout:r;const[o,h]=i.split("@"),a={url:`http://${h}/v1/scripting/evaluate`,body:{script_text:t,mock_type:"cron",timeout:r},headers:{"X-Key":o,Accept:"*/*"}};this.post(a,(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),r=JSON.stringify(this.data);s?this.fs.writeFileSync(t,r):i?this.fs.writeFileSync(e,r):this.fs.writeFileSync(t,r)}}lodash_get(t,e,s){const i=e.replace(/\[(\d+)\]/g,".$1").split(".");let r=t;for(const t of i)if(r=Object(r)[t],void 0===r)return s;return r}lodash_set(t,e,s){return Object(t)!==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),r=s?this.getval(s):"";if(r)try{const t=JSON.parse(r);e=t?this.lodash_get(t,i,""):e}catch(t){e=""}}return e}setdata(t,e){let s=!1;if(/^@/.test(e)){const[,i,r]=/^@(.*?)\.(.*?)$/.exec(e),o=this.getval(i),h=i?"null"===o?null:o||"{}":"{}";try{const e=JSON.parse(h);this.lodash_set(e,r,t),s=this.setval(JSON.stringify(e),i)}catch(e){const o={};this.lodash_set(o,r,t),s=this.setval(JSON.stringify(o),i)}}else s=this.setval(t,e);return s}getval(t){return this.isSurge()||this.isLoon()?$persistentStore.read(t):this.isQuanX()?$prefs.valueForKey(t):this.isNode()?(this.data=this.loaddata(),this.data[t]):this.data&&this.data[t]||null}setval(t,e){return this.isSurge()||this.isLoon()?$persistentStore.write(t,e):this.isQuanX()?$prefs.setValueForKey(t,e):this.isNode()?(this.data=this.loaddata(),this.data[e]=t,this.writedata(),!0):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:{},void 0===t.headers.Cookie&&void 0===t.cookieJar&&(t.cookieJar=this.ckjar))}get(t,e=(()=>{})){t.headers&&(delete t.headers["Content-Type"],delete t.headers["Content-Length"]),this.isSurge()||this.isLoon()?(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),e(t,s,i)})):this.isQuanX()?(this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>e(t))):this.isNode()&&(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:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>{const{message:s,response:i}=t;e(s,i,i&&i.body)}))}post(t,e=(()=>{})){if(t.body&&t.headers&&!t.headers["Content-Type"]&&(t.headers["Content-Type"]="application/x-www-form-urlencoded"),t.headers&&delete t.headers["Content-Length"],this.isSurge()||this.isLoon())this.isSurge()&&this.isNeedRewrite&&(t.headers=t.headers||{},Object.assign(t.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient.post(t,(t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status),e(t,s,i)});else if(this.isQuanX())t.method="POST",this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>e(t));else if(this.isNode()){this.initGotEnv(t);const{url:s,...i}=t;this.got.post(s,i).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>{const{message:s,response:i}=t;e(s,i,i&&i.body)})}}time(t){let e={"M+":(new Date).getMonth()+1,"d+":(new Date).getDate(),"H+":(new Date).getHours(),"m+":(new Date).getMinutes(),"s+":(new Date).getSeconds(),"q+":Math.floor(((new Date).getMonth()+3)/3),S:(new Date).getMilliseconds()};/(y+)/.test(t)&&(t=t.replace(RegExp.$1,((new Date).getFullYear()+"").substr(4-RegExp.$1.length)));for(let s in e)new RegExp("("+s+")").test(t)&&(t=t.replace(RegExp.$1,1==RegExp.$1.length?e[s]:("00"+e[s]).substr((""+e[s]).length)));return t}msg(e=t,s="",i="",r){const o=t=>{if(!t)return t;if("string"==typeof t)return this.isLoon()?t:this.isQuanX()?{"open-url":t}:this.isSurge()?{url:t}:void 0;if("object"==typeof t){if(this.isLoon()){let e=t.openUrl||t.url||t["open-url"],s=t.mediaUrl||t["media-url"];return{openUrl:e,mediaUrl:s}}if(this.isQuanX()){let e=t["open-url"]||t.url||t.openUrl,s=t["media-url"]||t.mediaUrl;return{"open-url":e,"media-url":s}}if(this.isSurge()){let e=t.url||t.openUrl||t["open-url"];return{url:e}}}};if(this.isMute||(this.isSurge()||this.isLoon()?$notification.post(e,s,i,o(r)):this.isQuanX()&&$notify(e,s,i,o(r))),!this.isMuteLog){let t=["","==============\ud83d\udce3\u7cfb\u7edf\u901a\u77e5\ud83d\udce3=============="];t.push(e),s&&t.push(s),i&&t.push(i),console.log(t.join("\n")),this.logs=this.logs.concat(t)}}log(...t){t.length>0&&(this.logs=[...this.logs,...t]),console.log(t.join(this.logSeparator))}logErr(t,e){const s=!this.isSurge()&&!this.isQuanX()&&!this.isLoon();s?this.log("",`\u2757\ufe0f${this.name}, \u9519\u8bef!`,t.stack):this.log("",`\u2757\ufe0f${this.name}, \u9519\u8bef!`,t)}wait(t){return new Promise(e=>setTimeout(e,t))}done(t={}){const e=(new Date).getTime(),s=(e-this.startTime)/1e3;this.log("",`\ud83d\udd14${this.name}, \u7ed3\u675f! \ud83d\udd5b ${s} \u79d2`),this.log(),(this.isSurge()||this.isQuanX()||this.isLoon())&&$done(t)}}(t,e)} 113 | -------------------------------------------------------------------------------- /Script/DingXiangDrugs.js: -------------------------------------------------------------------------------- 1 | const path1 = "/app/user/pro/stat?"; 2 | const path2 = "/app/user/init?"; 3 | const path3 = "/app/user/pay/checkIntroOfferPeriod?"; 4 | 5 | const url = $request.url; 6 | let body = $response.body; 7 | 8 | if (url.indexOf(path1) != -1){ 9 | body = JSON.parse(body); 10 | body.data.isActive = true; 11 | body.data.expireDate = "2029-10-02 10:49:24"; 12 | body = JSON.stringify(body); 13 | } 14 | 15 | if (url.indexOf(path2) != -1){ 16 | body = JSON.parse(body); 17 | body.data.isProActive = true; 18 | body.data.expireDate = "2029-10-02 10:49:24"; 19 | body = JSON.stringify(body); 20 | } 21 | 22 | if (url.indexOf(path3) != -1){ 23 | body = JSON.parse(body); 24 | body.data.hasIntroPeriod = true; 25 | body = JSON.stringify(body); 26 | } 27 | 28 | $done({body}) -------------------------------------------------------------------------------- /Script/JD_DailyBonus.js: -------------------------------------------------------------------------------- 1 | /* 2 | JingDong bonus Seven in one 3 | 4 | Description : 5 | When using for the first time. Need to manually log in to the https://bean.m.jd.com checkin to get cookie. If notification gets cookie success, you can use the check in script. 6 | Due to the validity of cookie, if the script pops up a notification of cookie invalidation in the future, you need to repeat the above steps. 7 | 8 | Daily bonus script will be performed every day at 9 am. You can modify the execution time. 9 | If reprinted, please indicate the source. My TG channel @NobyDa 10 | 11 | Update 2020.1.15 20:00 v55 12 | ~~~~~~~~~~~~~~~~ 13 | Surge 4.0 : 14 | [Script] 15 | cron "0 9 * * *" script-path=https://raw.githubusercontent.com/NobyDa/Script/master/JD-DailyBonus/JD_DailyBonus.js 16 | 17 | # Get JingDong cookie. 18 | http-request https:\/\/api\.m\.jd\.com\/client\.action.*functionId=signBean(Index|GroupStageIndex) max-size=0,script-path=https://raw.githubusercontent.com/NobyDa/Script/master/JD-DailyBonus/JD_DailyBonus.js 19 | ~~~~~~~~~~~~~~~~ 20 | QX 1.0.5 : 21 | [task_local] 22 | 0 9 * * * JD_DailyBonus.js 23 | 24 | [rewrite_local] 25 | # Get JingDong cookie. QX 1.0.5(188+): 26 | https:\/\/api\.m\.jd\.com\/client\.action.*functionId=signBean(Index|GroupStageIndex) url script-request-header JD_DailyBonus.js 27 | ~~~~~~~~~~~~~~~~ 28 | QX or Surge MITM = api.m.jd.com 29 | ~~~~~~~~~~~~~~~~ 30 | */ 31 | 32 | const log = true; 33 | const $nobyda = nobyda(); 34 | const KEY = $nobyda.read("CookieJD"); 35 | 36 | if ($nobyda.isRequest) { 37 | GetCookie() 38 | $nobyda.end() 39 | } else { 40 | JingDongBean() 41 | $nobyda.end() 42 | } 43 | 44 | function JingDongBean() { 45 | const JDBUrl = { 46 | url: 'https://api.m.jd.com/client.action?functionId=signBeanIndex&appid=ld', 47 | headers: { 48 | Cookie: KEY, 49 | } 50 | }; 51 | 52 | $nobyda.get(JDBUrl, function(error, response, data) { 53 | if (error) { 54 | const JDBean = "京东商城-京豆: 签到接口请求失败 ‼️‼️" + "\n" 55 | JingDongTurn(JDBean) 56 | } else { 57 | const cc = JSON.parse(data) 58 | if (cc.code == 3) { 59 | if (log) console.log("京东商城-京豆Cookie失效response: \n" + data) 60 | const JDBean = "京东商城-京豆: 签到失败, 原因: Cookie失效‼️" + "\n" 61 | JingDongTurn(JDBean) 62 | } else { 63 | if (data.match(/跳转至拼图/)) { 64 | const JDBean = "京东商城-京豆: 签到失败, 原因: 需要拼图验证 ⚠️" + "\n" 65 | JingDongTurn(JDBean) 66 | } else { 67 | if (cc.data.status == 1) { 68 | if (log) console.log("京东商城-京豆签到成功response: \n" + data) 69 | if (data.match(/dailyAward/)) { 70 | if (cc.data.dailyAward.beanAward.beanCount) { 71 | const JDBean = "京东商城-京豆: 签到成功, 明细: " + cc.data.dailyAward.beanAward.beanCount + "京豆 🐶" + "\n" 72 | JingDongTurn(JDBean) 73 | } else { 74 | const JDBean = "京东商城-京豆: 签到成功, 明细: 显示接口待更新 ⚠️" + "\n" 75 | JingDongTurn(JDBean) 76 | } 77 | } else { 78 | if (data.match(/continuityAward/)) { 79 | if (cc.data.continuityAward.beanAward.beanCount) { 80 | const JDBean = "京东商城-京豆: 签到成功, 明细: " + cc.data.continuityAward.beanAward.beanCount + "京豆 🐶" + "\n" 81 | JingDongTurn(JDBean) 82 | } else { 83 | const JDBean = "京东商城-京豆: 签到成功, 明细: 显示接口待更新 ⚠️" + "\n" 84 | JingDongTurn(JDBean) 85 | } 86 | } else { 87 | if (data.match(/新人签到/)) { 88 | const regex = /beanCount\":\"(\d+)\".+今天/; 89 | const quantity = regex.exec(data)[1]; 90 | const JDBean = "京东商城-京豆: 签到成功, 明细: " + quantity + "京豆 🐶" + "\n" 91 | JingDongTurn(JDBean) 92 | } else { 93 | const JDBean = "京东商城-京豆: 需修正‼️日志发至TG:@NobyDa_bot" + "\n" 94 | JingDongTurn(JDBean) 95 | } 96 | } 97 | } 98 | } else { 99 | if (log) console.log("京东商城-京豆签到失败response: \n" + data) 100 | if (data.match(/(已签到|新人签到)/)) { 101 | const JDBean = "京东商城-京豆: 签到失败, 原因: 已签过 ⚠️" + "\n" 102 | JingDongTurn(JDBean) 103 | } else { 104 | const JDBean = "京东商城-京豆: 需修正‼️日志发至TG:@NobyDa_bot" + "\n" 105 | JingDongTurn(JDBean) 106 | } 107 | } 108 | } 109 | } 110 | } 111 | }) 112 | } 113 | 114 | function JingDongTurn(JDBean) { 115 | setTimeout(function() { 116 | const JDTUrl = { 117 | url: 'https://api.m.jd.com/client.action?functionId=lotteryDraw&body=%7B%22actId%22%3A%22jgpqtzjhvaoym%22%2C%22appSource%22%3A%22jdhome%22%2C%22lotteryCode%22%3A%224wwzdq7wkqx2usx4g5i2nu5ho4auto4qxylblkxacm7jqdsltsepmgpn3b2hgyd7hiawzpccizuck%22%7D&appid=ld', 118 | headers: { 119 | Cookie: KEY, 120 | } 121 | }; 122 | 123 | $nobyda.get(JDTUrl, function(error, response, data) { 124 | if (error) { 125 | const JDturn = "京东商城-转盘: 签到接口请求失败 ‼️‼️" + "\n" 126 | JingRongBean(JDBean, JDturn) 127 | } else { 128 | const cc = JSON.parse(data) 129 | if (cc.code == 3) { 130 | if (log) console.log("京东转盘Cookie失效response: \n" + data) 131 | const JDturn = "京东商城-转盘: 签到失败, 原因: Cookie失效‼️" + "\n" 132 | JingRongBean(JDBean, JDturn) 133 | } else { 134 | if (data.match(/(\"T216\"|活动结束)/)) { 135 | const JDturn = "京东商城-转盘: 签到失败, 原因: 活动结束 ⚠️" + "\n" 136 | JingRongBean(JDBean, JDturn) 137 | } else { 138 | if (data.match(/(京豆|\"910582\")/)) { 139 | if (log) console.log("京东商城-转盘签到成功response: \n" + data) 140 | if (cc.data.prizeSendNumber) { 141 | const JDturn = "京东商城-转盘: 签到成功, 明细: " + cc.data.prizeSendNumber + "京豆 🐶" + "\n" 142 | JingRongBean(JDBean, JDturn) 143 | } else { 144 | const JDturn = "京东商城-转盘: 签到成功, 明细: 显示接口待更新 ⚠️" + "\n" 145 | JingRongBean(JDBean, JDturn) 146 | } 147 | } else { 148 | if (log) console.log("京东商城-转盘签到失败response: \n" + data) 149 | if (data.match(/chances\":\"1\".+未中奖/)) { 150 | setTimeout(function() { 151 | JingDongTurn(JDBean) 152 | }, 2000) 153 | } else if (data.match(/chances\":\"0\".+未中奖/)) { 154 | const JDturn = "京东商城-转盘: 运气稍差, 状态: 未中奖 🐶" + "\n" 155 | JingRongBean(JDBean, JDturn) 156 | } else if (data.match(/(T215|次数为0)/)) { 157 | const JDturn = "京东商城-转盘: 签到失败, 原因: 无机会 ⚠️" + "\n" 158 | JingRongBean(JDBean, JDturn) 159 | } else if (data.match(/(T210|密码)/)) { 160 | const JDturn = "京东商城-转盘: 签到失败, 原因: 无支付密码 ⚠️" + "\n" 161 | JingRongBean(JDBean, JDturn) 162 | } else { 163 | const JDturn = "京东商城-转盘: 签到失败, 原因: 未知 ⚠️" + "\n" 164 | JingRongBean(JDBean, JDturn) 165 | } 166 | } 167 | } 168 | } 169 | } 170 | }) 171 | }, 200) 172 | } 173 | 174 | function JingRongBean(JDBean, JDturn) { 175 | const login = { 176 | url: 'https://ms.jr.jd.com/gw/generic/zc/h5/m/signRecords', 177 | headers: { 178 | Cookie: KEY, 179 | Referer: "https://jddx.jd.com/m/money/index.html?from=sign", 180 | }, 181 | body: "reqData=%7B%22bizLine%22%3A2%7D" 182 | }; 183 | 184 | const JRBUrl = { 185 | url: 'https://ms.jr.jd.com/gw/generic/zc/h5/m/signRewardGift', 186 | headers: { 187 | Cookie: KEY, 188 | Referer: "https://jddx.jd.com/m/jddnew/money/index.html", 189 | "Content-Type": "application/x-www-form-urlencoded" 190 | }, 191 | body: "reqData=%7B%22bizLine%22%3A2%2C%22signDate%22%3A%221%22%2C%22deviceInfo%22%3A%7B%22os%22%3A%22iOS%22%7D%2C%22clientType%22%3A%22sms%22%2C%22clientVersion%22%3A%2211.0%22%7D" 192 | }; 193 | setTimeout(function() { 194 | $nobyda.post(login, function(error, response, data) { 195 | if (error) { 196 | const JRBean = "京东金融-京豆: 登录接口请求失败 ‼️‼️" + "\n" 197 | JingRongSteel(JDBean, JDturn, JRBean) 198 | } else { 199 | setTimeout(function() { 200 | if (data.match(/\"login\":true/)) { 201 | if (log) console.log("京东金融-京豆登录成功response: \n" + data) 202 | $nobyda.post(JRBUrl, function(error, response, data) { 203 | if (error) { 204 | const JRBean = "京东金融-京豆: 签到接口请求失败 ‼️‼️" + "\n" 205 | JingRongSteel(JDBean, JDturn, JRBean) 206 | } else { 207 | const c = JSON.parse(data) 208 | if (data.match(/\"resultCode\":\"00000\"/)) { 209 | if (log) console.log("京东金融-京豆签到成功response: \n" + data) 210 | if (c.resultData.data.rewardAmount != "0") { 211 | const JRBean = "京东金融-京豆: 签到成功, 明细: " + c.resultData.data.rewardAmount + "京豆 🐶" + "\n" 212 | JingRongSteel(JDBean, JDturn, JRBean) 213 | } else { 214 | const JRBean = "京东金融-京豆: 签到成功, 明细: 无奖励 🐶" + "\n" 215 | JingRongSteel(JDBean, JDturn, JRBean) 216 | } 217 | } else { 218 | if (log) console.log("京东金融-京豆签到失败response: \n" + data) 219 | if (data.match(/(发放失败|70111)/)) { 220 | const JRBean = "京东金融-京豆: 签到失败, 原因: 已签过 ⚠️" + "\n" 221 | JingRongSteel(JDBean, JDturn, JRBean) 222 | } else { 223 | if (data.match(/(\"resultCode\":3|请先登录)/)) { 224 | const JRBean = "京东金融-京豆: 签到失败, 原因: Cookie失效‼️" + "\n" 225 | JingRongSteel(JDBean, JDturn, JRBean) 226 | } else { 227 | const JRBean = "京东金融-京豆: 需修正‼️日志发至TG:@NobyDa_bot" + "\n" 228 | JingRongSteel(JDBean, JDturn, JRBean) 229 | } 230 | } 231 | } 232 | } 233 | }) 234 | } else { 235 | if (log) console.log("京东金融-京豆登录失败response: \n" + data) 236 | if (data.match(/\"login\":false/)) { 237 | const JRBean = "京东金融-京豆: 登录失败, 原因: Cookie失效‼️" + "\n" 238 | JingRongSteel(JDBean, JDturn, JRBean) 239 | } else { 240 | const JRBean = "京东金融-京豆: 登录接口需修正 ‼️‼️" + "\n" 241 | JingRongSteel(JDBean, JDturn, JRBean) 242 | } 243 | } 244 | }, 200) 245 | } 246 | }) 247 | }, 200) 248 | } 249 | 250 | function JingRongSteel(JDBean, JDturn, JRBean) { 251 | setTimeout(function() { 252 | const JRSUrl = { 253 | url: 'https://ms.jr.jd.com/gw/generic/gry/h5/m/signIn', 254 | headers: { 255 | Cookie: KEY, 256 | }, 257 | body: "reqData=%7B%22channelSource%22%3A%22JRAPP%22%2C%22riskDeviceParam%22%3A%22%7B%7D%22%7D" 258 | }; 259 | 260 | $nobyda.post(JRSUrl, function(error, response, data) { 261 | if (error) { 262 | const JRSteel = "京东金融-钢镚: 签到接口请求失败 ‼️‼️" + "\n" 263 | JingDongShake(JDBean, JDturn, JRBean, JRSteel) 264 | } else { 265 | const cc = JSON.parse(data) 266 | if (data.match(/\"resBusiCode\":0/)) { 267 | if (log) console.log("京东金融-钢镚签到成功response: \n" + data) 268 | if (cc.resultData.resBusiData.actualTotalRewardsValue) { 269 | const leng = "" + cc.resultData.resBusiData.actualTotalRewardsValue 270 | if (leng.length == 1) { 271 | const JRSteel = "京东金融-钢镚: 签到成功, 明细: " + "0.0" + cc.resultData.resBusiData.actualTotalRewardsValue + "钢镚 💰" + "\n" 272 | JingDongShake(JDBean, JDturn, JRBean, JRSteel) 273 | } else { 274 | const JRSteel = "京东金融-钢镚: 签到成功, 明细: " + "0." + cc.resultData.resBusiData.actualTotalRewardsValue + "钢镚 💰" + "\n" 275 | JingDongShake(JDBean, JDturn, JRBean, JRSteel) 276 | } 277 | } else { 278 | const JRSteel = "京东金融-钢镚: 签到成功, 明细: 显示接口待更新 ⚠️" + "\n" 279 | JingDongShake(JDBean, JDturn, JRBean, JRSteel) 280 | } 281 | } else { 282 | if (log) console.log("京东金融-钢镚签到失败response: \n" + data) 283 | if (data.match(/(已经领取|\"resBusiCode\":15)/)) { 284 | const JRSteel = "京东金融-钢镚: 签到失败, 原因: 已签过 ⚠️" + "\n" 285 | JingDongShake(JDBean, JDturn, JRBean, JRSteel) 286 | } else { 287 | if (data.match(/未实名/)) { 288 | const JRSteel = "京东金融-钢镚: 签到失败, 原因: 账号未实名 ⚠️" + "\n" 289 | JingDongShake(JDBean, JDturn, JRBean, JRSteel) 290 | } else { 291 | if (data.match(/(\"resultCode\":3|请先登录)/)) { 292 | const JRSteel = "京东金融-钢镚: 签到失败, 原因: Cookie失效‼️" + "\n" 293 | JingDongShake(JDBean, JDturn, JRBean, JRSteel) 294 | } else { 295 | const JRSteel = "京东金融-钢镚: 需修正‼️日志发至TG:@NobyDa_bot" + "\n" 296 | JingDongShake(JDBean, JDturn, JRBean, JRSteel) 297 | } 298 | } 299 | } 300 | } 301 | } 302 | }) 303 | }, 200) 304 | } 305 | 306 | function JingDongShake(JDBean, JDturn, JRBean, JRSteel) { 307 | setTimeout(function() { 308 | const JDSh = { 309 | url: 'https://api.m.jd.com/client.action?appid=vip_h5&functionId=vvipclub_shaking', 310 | headers: { 311 | Cookie: KEY, 312 | } 313 | }; 314 | 315 | $nobyda.get(JDSh, function(error, response, data) { 316 | if (error) { 317 | const JDShake = "京东商城-摇摇: 签到接口请求失败 ‼️‼️\n" + error 318 | JRDoubleSign(JDBean, JDturn, JRBean, JRSteel, JDShake) 319 | } else { 320 | const cc = JSON.parse(data) 321 | if (data.match(/prize/)) { 322 | if (log) console.log("京东商城-摇一摇签到成功response: \n" + data) 323 | if (cc.data.prizeBean) { 324 | const JDShake = "京东商城-摇摇: 签到成功, 明细: " + cc.data.prizeBean.count + "京豆 🐶" 325 | JRDoubleSign(JDBean, JDturn, JRBean, JRSteel, JDShake) 326 | } else { 327 | if (cc.data.prizeCoupon) { 328 | const JDShake = "京东商城-摇摇: 获得满" + cc.data.prizeCoupon.quota + "减" + cc.data.prizeCoupon.discount + "优惠券→ " + cc.data.prizeCoupon.limitStr 329 | JRDoubleSign(JDBean, JDturn, JRBean, JRSteel, JDShake) 330 | } else { 331 | const JDShake = "京东商城-摇摇: 需修正‼️日志发至TG:@NobyDa_bot" 332 | JRDoubleSign(JDBean, JDturn, JRBean, JRSteel, JDShake) 333 | } 334 | } 335 | } else { 336 | if (log) console.log("京东商城-摇一摇签到失败response: \n" + data) 337 | if (data.match(/true/)) { 338 | const JDShake = "京东商城-摇摇: 签到成功, 明细: 无奖励 🐶" 339 | JRDoubleSign(JDBean, JDturn, JRBean, JRSteel, JDShake) 340 | } else { 341 | if (data.match(/(无免费|8000005)/)) { 342 | const JDShake = "京东商城-摇摇: 签到失败, 原因: 已摇过 ⚠️" 343 | JRDoubleSign(JDBean, JDturn, JRBean, JRSteel, JDShake) 344 | } else if (data.match(/(未登录|101)/)) { 345 | const JDShake = "京东商城-摇摇: 签到失败, 原因: Cookie失效‼️" 346 | JRDoubleSign(JDBean, JDturn, JRBean, JRSteel, JDShake) 347 | } else { 348 | const JDShake = "京东商城-摇摇: 需修正‼️日志发至TG:@NobyDa_bot" 349 | JRDoubleSign(JDBean, JDturn, JRBean, JRSteel, JDShake) 350 | } 351 | } 352 | } 353 | } 354 | }) 355 | }, 200) 356 | } 357 | 358 | function JRDoubleSign(JDBean, JDturn, JRBean, JRSteel, JDShake) { 359 | setTimeout(function() { 360 | const JRDSUrl = { 361 | url: 'https://nu.jr.jd.com/gw/generic/jrm/h5/m/process?', 362 | headers: { 363 | Cookie: KEY, 364 | }, 365 | body: "reqData=%7B%22actCode%22%3A%22FBBFEC496C%22%2C%22type%22%3A3%2C%22riskDeviceParam%22%3A%22%22%7D" 366 | }; 367 | 368 | $nobyda.post(JRDSUrl, function(error, response, data) { 369 | if (error) { 370 | const JRDSign = "京东金融-双签: 签到接口请求失败 ‼️‼️" + "\n" 371 | JingRongLottery(JDBean, JDturn, JRBean, JRSteel, JDShake, JRDSign) 372 | } else { 373 | const cc = JSON.parse(data) 374 | if (data.match(/京豆X/)) { 375 | if (log) console.log("京东金融-双签签到成功response: \n" + data) 376 | if (cc.resultData.data.businessData.businessData.awardListVo[0].count) { 377 | const JRDSign = "京东金融-双签: 签到成功, 明细: " + cc.resultData.data.businessData.businessData.awardListVo[0].count + "京豆 🐶" + "\n" 378 | JingRongLottery(JDBean, JDturn, JRBean, JRSteel, JDShake, JRDSign) 379 | } else { 380 | const JRDSign = "京东金融-双签: 签到成功, 明细: 显示接口待更新 ⚠️" + "\n" 381 | JingRongLottery(JDBean, JDturn, JRBean, JRSteel, JDShake, JRDSign) 382 | } 383 | } else { 384 | if (log) console.log("京东金融-双签签到失败response: \n" + data) 385 | if (data.match(/已领取/)) { 386 | const JRDSign = "京东金融-双签: 签到失败, 原因: 已签过 ⚠️" + "\n" 387 | JingRongLottery(JDBean, JDturn, JRBean, JRSteel, JDShake, JRDSign) 388 | } else { 389 | if (data.match(/不存在/)) { 390 | const JRDSign = "京东金融-双签: 签到失败, 原因: 活动已结束 ⚠️" + "\n" 391 | JingRongLottery(JDBean, JDturn, JRBean, JRSteel, JDShake, JRDSign) 392 | } else { 393 | if (data.match(/未在/)) { 394 | const JRDSign = "京东金融-双签: 签到失败, 原因: 未在京东签到 ⚠️" + "\n" 395 | JingRongLottery(JDBean, JDturn, JRBean, JRSteel, JDShake, JRDSign) 396 | } else { 397 | if (data.match(/(\"resultCode\":3|请先登录)/)) { 398 | const JRDSign = "京东金融-双签: 签到失败, 原因: Cookie失效‼️" + "\n" 399 | JingRongLottery(JDBean, JDturn, JRBean, JRSteel, JDShake, JRDSign) 400 | } else if (cc.resultData.data.businessData.businessCode == "000sq" && cc.resultData.data.businessData.businessMsg == "成功") { 401 | const JRDSign = "京东金融-双签: 签到成功, 明细: 无奖励 🐶" + "\n" 402 | JingRongLottery(JDBean, JDturn, JRBean, JRSteel, JDShake, JRDSign) 403 | } else { 404 | const JRDSign = "京东金融-双签: 需修正‼️日志发至TG:@NobyDa_bot" + "\n" 405 | JingRongLottery(JDBean, JDturn, JRBean, JRSteel, JDShake, JRDSign) 406 | } 407 | } 408 | } 409 | } 410 | } 411 | } 412 | }) 413 | }, 500) 414 | } 415 | 416 | //Event end time: Jan. 31 417 | function JingRongLottery(JDBean, JDturn, JRBean, JRSteel, JDShake, JRDSign) { 418 | const JRLUrl = { 419 | url: 'https://lottery.jd.com/award/lottery?actKey=jYNV3i', 420 | headers: { 421 | Cookie: KEY, 422 | } 423 | }; 424 | 425 | $nobyda.get(JRLUrl, function(error, response, data) { 426 | if (error) { 427 | const JRLottery = "\n" + "京东金融-抽签: 签到接口请求失败 ‼️‼️" 428 | notice(JDBean, JDturn, JRBean, JRSteel, JDShake, JRDSign, JRLottery) 429 | } else { 430 | const cc = JSON.parse(data) 431 | if (data.match(/(\"2001\"|未登录)/)) { 432 | if (log) console.log("Cookie error response: \n" + data) 433 | const JRLottery = "\n" + "京东抽签-失败: 签到失败, 原因: Cookie失效" 434 | notice(JDBean, JDturn, JRBean, JRSteel, JDShake, JRDSign, JRLottery) 435 | } else { 436 | if (data.match(/(\"3001\"|活动不存在)/)) { 437 | const JRLottery = "\n" + "京东金融-抽签: 签到失败, 原因: 活动已结束 ⚠️" 438 | notice(JDBean, JDturn, JRBean, JRSteel, JDShake, JRDSign, JRLottery) 439 | } else { 440 | if (cc.code == "0000") { 441 | if (log) console.log("京东金融-抽签签到成功response: \n" + data) 442 | if (data.match(/京东钢镚/)) { 443 | if (cc.data.volumn) { 444 | const JRLottery = "\n" + "京东金融-抽签: 签到成功, 明细: " + cc.data.volumn + "钢镚 💰" 445 | notice(JDBean, JDturn, JRBean, JRSteel, JDShake, JRDSign, JRLottery) 446 | } else { 447 | const JRLottery = "\n" + "京东金融-抽签: 签到成功, 明细: 显示接口待更新 ⚠️" 448 | notice(JDBean, JDturn, JRBean, JRSteel, JDShake, JRDSign, JRLottery) 449 | } 450 | } else { 451 | if (log) console.log("京东金融-抽签签到成功 其他奖励: \n" + data) 452 | setTimeout(function() { 453 | JingRongLottery(JDBean, JDturn, JRBean, JRSteel, JDShake, JRDSign) 454 | }, 200) 455 | } 456 | } else { 457 | if (log) console.log("京东金融-抽签签到失败response: \n" + data) 458 | if (data.match(/\"remainTimes\":(2|1)/) && cc.code == "1000") { 459 | setTimeout(function() { 460 | JingRongLottery(JDBean, JDturn, JRBean, JRSteel, JDShake, JRDSign) 461 | }, 200) 462 | } else if (data.match(/\"remainTimes\":0/) && cc.code == "1000") { 463 | const JRLottery = "\n" + "京东金融-抽签: 运气稍差, 状态: 无钢镚 🐶" 464 | notice(JDBean, JDturn, JRBean, JRSteel, JDShake, JRDSign, JRLottery) 465 | } else if (data.match(/(\"2003\"|机会用完)/)) { 466 | const JRLottery = "\n" + "京东金融-抽签: 签到失败, 原因: 无机会 ⚠️" 467 | notice(JDBean, JDturn, JRBean, JRSteel, JDShake, JRDSign, JRLottery) 468 | } else { 469 | const JRLottery = "\n" + "京东金融-抽签: 签到失败, 原因: 未知 ⚠️" 470 | notice(JDBean, JDturn, JRBean, JRSteel, JDShake, JRDSign, JRLottery) 471 | } 472 | } 473 | } 474 | } 475 | } 476 | }) 477 | } 478 | 479 | function notice(JDBean, JDturn, JRBean, JRSteel, JDShake, JRDSign, JRLottery) { 480 | $nobyda.notify(JRDSign, JDBean, JRBean + JDturn + JRSteel + JDShake + JRLottery) 481 | } 482 | 483 | function GetCookie() { 484 | var CookieName = "京东"; 485 | if ($request.headers) { 486 | var CookieKey = "CookieJD"; 487 | var CookieValue = $request.headers['Cookie']; 488 | if ($nobyda.read(CookieKey) != (undefined || null)) { 489 | if ($nobyda.read(CookieKey) != CookieValue) { 490 | var cookie = $nobyda.write(CookieValue, CookieKey); 491 | if (!cookie) { 492 | $nobyda.notify("更新" + CookieName + "Cookie失败‼️", "", ""); 493 | } else { 494 | $nobyda.notify("更新" + CookieName + "Cookie成功 🎉", "", ""); 495 | } 496 | } 497 | } else { 498 | var cookie = $nobyda.write(CookieValue, CookieKey); 499 | if (!cookie) { 500 | $nobyda.notify("首次写入" + CookieName + "Cookie失败‼️", "", ""); 501 | } else { 502 | $nobyda.notify("首次写入" + CookieName + "Cookie成功 🎉", "", ""); 503 | } 504 | } 505 | } else { 506 | $nobyda.notify("写入" + CookieName + "Cookie失败‼️", "", "配置错误, 无法读取请求头, "); 507 | } 508 | } 509 | 510 | function nobyda() { 511 | const isRequest = typeof $request != "undefined" 512 | const isSurge = typeof $httpClient != "undefined" 513 | const isQuanX = typeof $task != "undefined" 514 | const notify = (title, subtitle, message) => { 515 | if (isQuanX) $notify(title, subtitle, message) 516 | if (isSurge) $notification.post(title, subtitle, message) 517 | } 518 | const write = (value, key) => { 519 | if (isQuanX) return $prefs.setValueForKey(value, key) 520 | if (isSurge) return $persistentStore.write(value, key) 521 | } 522 | const read = (key) => { 523 | if (isQuanX) return $prefs.valueForKey(key) 524 | if (isSurge) return $persistentStore.read(key) 525 | } 526 | const get = (options, callback) => { 527 | if (isQuanX) { 528 | if (typeof options == "string") options = { url: options } 529 | options["method"] = "GET" 530 | $task.fetch(options).then(response => { 531 | response["status"] = response.statusCode 532 | callback(null, response, response.body) 533 | }, reason => callback(reason.error, null, null)) 534 | } 535 | if (isSurge) $httpClient.get(options, callback) 536 | } 537 | const post = (options, callback) => { 538 | if (isQuanX) { 539 | if (typeof options == "string") options = { url: options } 540 | options["method"] = "POST" 541 | $task.fetch(options).then(response => { 542 | response["status"] = response.statusCode 543 | callback(null, response, response.body) 544 | }, reason => callback(reason.error, null, null)) 545 | } 546 | if (isSurge) $httpClient.post(options, callback) 547 | } 548 | const end = () => { 549 | if (isQuanX) isRequest ? $done({}) : "" 550 | if (isSurge) isRequest ? $done({}) : $done() 551 | } 552 | return { isRequest, isQuanX, isSurge, notify, write, read, get, post, end } 553 | }; -------------------------------------------------------------------------------- /Script/Kaola.js: -------------------------------------------------------------------------------- 1 | /* 2 | [Script] 3 | http-request ^https://sp\.kaola\.com/api/openad$ script-path=https://Choler.github.io/Surge/Script/Kaola.js 4 | 5 | [MITM] 6 | hostname = sp.kaola.com 7 | */ 8 | 9 | var data = { 10 | body: "{}", 11 | headers: { 12 | "Content-Type": "application/json" 13 | } 14 | }; 15 | $done({response: data}); -------------------------------------------------------------------------------- /Script/VUE.js: -------------------------------------------------------------------------------- 1 | /* 2 | VUE Vlog app unlocks pro 3 | 4 | Surge4.0: 5 | http-response https:\/\/api\.vuevideo\.net\/api\/v1\/(users\/.+\/profile|subtitle\/prepare) requires-body=1,max-size=0,script-path=https://raw.githubusercontent.com/NobyDa/Script/master/Surge/JS/VUE.js 6 | 7 | QX 1.0.0: 8 | ^https:\/\/api\.vuevideo\.net\/api\/v1\/(users\/.+\/profile|subtitle\/prepare) url script-response-body https://raw.githubusercontent.com/NobyDa/Script/master/Surge/JS/VUE.js 9 | 10 | Surge & QX Mitm = api.vuevideo.net 11 | */ 12 | 13 | body = $response.body.replace(/\"isPremium\":false/, "\"isPremium\":true").replace(/\"valid\":false/, "\"valid\":true") 14 | $done({body}); -------------------------------------------------------------------------------- /Script/WeChat.js: -------------------------------------------------------------------------------- 1 | /* 2 | [Script] 3 | http-request ^https://mp\.weixin\.qq\.com/mp/getappmsgad script-path=https://Choler.github.io/Surge/Script/WeChat.js 4 | 5 | [MITM] 6 | hostname = mp.weixin.qq.com 7 | */ 8 | 9 | var data = { 10 | body: "{}", 11 | headers: { 12 | "Content-Type": "application/json" 13 | } 14 | }; 15 | $done({response: data}); -------------------------------------------------------------------------------- /Script/aimeiju.js: -------------------------------------------------------------------------------- 1 | /* 2 | 爱美剧 unlock vip(官网:xmj.app) 3 | 4 | QX : 5 | ^https?:\/\/api.bjxkhc.com\/index\.php\/app\/ios\/(vod\/show|(user|vod|topic|type)\/index) url script-response-body https://raw.githubusercontent.com/NobyDa/Script/master/QuantumultX/File/aimeiju.js 6 | 7 | Surge4: 8 | http-response ^https?:\/\/api.bjxkhc.com\/index\.php\/app\/ios\/(vod\/show|(user|vod|topic|type)\/index) requires-body=1,max-size=0,script-path=https://raw.githubusercontent.com/NobyDa/Script/master/QuantumultX/File/aimeiju.js 9 | 10 | hostname = api.bjxkhc.com 11 | 12 | #启动广告/弹窗 13 | ^https?://api.bjxkhc.com/index.php/app/ios/ads/index url reject-dict 14 | ^https?://api.bjxkhc.com/index.php/app/ios/ver/index_ios$ url reject 15 | ^https?://api.bjxkhc.com/index.php/app/ios/pay/ok$ url reject-dict 16 | */ 17 | var body = $response.body; 18 | var url = $request.url; 19 | const user = "/index.php/app/ios/user/index"; //用户信息 20 | const show = "/index.php/app/ios/vod/show"; //视频播放页面 21 | const banner = "/index.php/app/ios/vod/index";//首页轮播广告 22 | const topic = "/index.php/app/ios/topic/index";//豆瓣热榜中间广告 23 | const type = "/index.php/app/ios/type/index"//综合专区,美剧专区中间广告 24 | 25 | if (url.indexOf(user) != -1){ 26 | let obj = JSON.parse(body); 27 | obj.data.user.viptime = "2088-08-08 08:08:08"; 28 | obj.data.user.cion = "88888"; 29 | obj.data.user.vip = "1"; 30 | body = JSON.stringify(obj); 31 | } 32 | 33 | if (url.indexOf(show) != -1) { 34 | let obj = JSON.parse(body); 35 | obj.data.looktime = -1; 36 | obj.data.vip = "4"; 37 | //obj.data.advertising = {}; 38 | delete obj.data.advertising;//视频下方轮播,删掉也不能清除广告占位 39 | obj.data.CT_App_Show_Pic1 = "";//联系客服图片 40 | obj.data.CT_App_Show_Url1 = "";//联系客服链接 41 | obj.data.CT_App_Show_Vod1 = "https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=1519044039,3175177225&fm=26&gp=0.jpg";//片头广告,留空的话不会自动播放 42 | obj.data.CT_App_Show_Vod_Time1 = "0";//片头广告显示时间(0秒也短暂显示) 43 | obj.data.CT_App_Show_Vod_Url1 = "";//片头广告链接 44 | obj.data.CT_App_Show_Vod_Type1 = "2";//片头广告显示类型,0一直显示,1暂停播放显示,2显示后自动播放 45 | obj.data.CT_App_Show_Vod_must_Time1 = "0";//片头联系客服图片显示时间,前面改VIP这里自动变0 46 | obj.data.CT_Pic_url1_pause = "";//暂停联系客服图片 47 | obj.data.CT_Pic_url1_pause_skip = "";//暂停联系客服链接 48 | body = JSON.stringify(obj); 49 | } 50 | 51 | if (url.indexOf(banner) != -1) { 52 | let obj = JSON.parse(body); 53 | let data = obj.data 54 | for (var i = data.length - 1 ; i >= 0 ; i--) { 55 | if (data[i].ad == 1) { 56 | data.splice(i, 1) 57 | } 58 | } 59 | body = JSON.stringify(obj); 60 | } 61 | 62 | if (url.indexOf(topic) != -1||url.indexOf(type) != -1) { 63 | let obj = JSON.parse(body); 64 | let data = obj.data 65 | for (var i = data.length - 1 ; i >= 0 ; i--) { 66 | if (data[i].ad == 1) { 67 | data[i].ad = 0; 68 | data[i].pic = ""; 69 | delete data[i].url 70 | } 71 | } 72 | body = JSON.stringify(obj); 73 | } 74 | $done({body}); 75 | 76 | 77 | // Made by huihui -------------------------------------------------------------------------------- /Script/aweme_douyin.js: -------------------------------------------------------------------------------- 1 | /* 2 | [URL Rewrite] 3 | ^https://(.*)\.snssdk\.com/aweme/v2/ https://$1.snssdk.com/aweme/v1/ 302 4 | 5 | [Script] 6 | http-response ^https://[\s\S]*\/aweme/v1/(feed|aweme/post|follow/feed)/ requires-body=1,max-size=-1,script-path=https://Choler.github.io/Surge/Script/Aweme.js 7 | 8 | [MITM] 9 | hostname = *.amemv.com, *.snssdk.com 10 | */ 11 | 12 | let arr = { 13 | "allow_download": true, 14 | "share_type": 0, 15 | "show_progress_bar": 0, 16 | "draft_progress_bar": 0, 17 | "allow_duet": true, 18 | "allow_react": true, 19 | "prevent_download_type": 2, 20 | "allow_dynamic_wallpaper": false 21 | }; 22 | let body = $response.body.replace(/watermark=1/g, "watermark=0"); 23 | var obj = JSON.parse(body); 24 | if (obj.aweme_list) { 25 | for (var i = obj.aweme_list.length - 1; i >= 0; i--) { 26 | if (obj.aweme_list[i].is_ads == true) { 27 | obj.aweme_list.splice(i, 1); 28 | } 29 | if (obj.aweme_list[i].poi_info) { 30 | delete obj.aweme_list[i].poi_info; 31 | } 32 | if (obj.aweme_list[i].sticker_detail) { 33 | delete obj.aweme_list[i].sticker_detail; 34 | } 35 | if (obj.aweme_list[i].simple_promotions) { 36 | delete obj.aweme_list[i].simple_promotions; 37 | } 38 | obj.aweme_list[i].status.reviewed = 1; 39 | obj.aweme_list[i].video_control = arr; 40 | } 41 | $done({body: JSON.stringify(obj)}); 42 | } else if (obj.data) { 43 | for (var i = obj.data.length - 1; i >= 0; i--) { 44 | if (obj.data[i].aweme) { 45 | if (obj.data[i].aweme.poi_info) { 46 | delete obj.data[i].aweme.poi_info; 47 | } 48 | if (obj.data[i].aweme.simple_promotions) { 49 | delete obj.data[i].aweme.simple_promotions; 50 | } 51 | obj.data[i].aweme.status.reviewed = 1; 52 | obj.data[i].aweme.video_control = arr; 53 | } else { 54 | obj.data.splice(i, 1); 55 | } 56 | } 57 | $done({body: JSON.stringify(obj)}); 58 | } else { 59 | $done({body}); 60 | } -------------------------------------------------------------------------------- /Script/bilibiliAccount.js: -------------------------------------------------------------------------------- 1 | /* 2 | bilibili remove some account modules. by onewayticket255 3 | 4 | QX: 5 | ^https://app.bilibili.com/x/v2/account/mine\?access_key url script-response-body https://raw.githubusercontent.com/NobyDa/Script/master/QuantumultX/File/bilibiliAccount.js 6 | 7 | Surge4: 8 | http-response ^https://app.bilibili.com/x/v2/account/mine\?access_key requires-body=1,max-size=0,script-path=https://raw.githubusercontent.com/NobyDa/Script/master/QuantumultX/File/bilibiliAccount.js 9 | 10 | Surge & QX MITM = app.bilibili.com 11 | */ 12 | 13 | let body = $response.body 14 | body=JSON.parse(body) 15 | body['data']['sections'].splice(2,1) 16 | body=JSON.stringify(body) 17 | $done({body}) -------------------------------------------------------------------------------- /Script/bilibiliTab.js: -------------------------------------------------------------------------------- 1 | /* 2 | bilibili home page module customization whitelist. by onewayticket255 3 | 4 | QX: 5 | ^https://app.bilibili.com/x/resource/show/tab\?access_key url script-response-body https://raw.githubusercontent.com/NobyDa/Script/master/QuantumultX/File/bilibiliTab.js 6 | 7 | Surge4: 8 | http-response ^https://app.bilibili.com/x/resource/show/tab\?access_key requires-body=1,max-size=0,script-path=https://raw.githubusercontent.com/NobyDa/Script/master/QuantumultX/File/bilibiliTab.js 9 | 10 | Surge & QX MITM = app.bilibili.com 11 | */ 12 | 13 | let whitelist=['追番','推荐','直播','热门','影视'] 14 | 15 | let body = $response.body 16 | body=JSON.parse(body) 17 | 18 | body['data']['tab'].forEach((element, index) => { 19 | if(!(whitelist.includes(element['name']))) body['data']['tab'].splice(index,1) 20 | }); 21 | 22 | body['data']['bottom'].forEach((element, index)=> { 23 | if(element['pos']==4){ 24 | body['data']['bottom'].splice(index,1) 25 | } 26 | }) 27 | 28 | body=JSON.stringify(body) 29 | $done({body}) -------------------------------------------------------------------------------- /Script/cmbchina.js: -------------------------------------------------------------------------------- 1 | /* 2 | 招商银行信用卡微信公众号:“领积分 - 🎁签到领积分” 获取 Cookie 3 | 4 | [task_local] 5 | 8 0 * * * cmbchina.js 6 | 7 | [rewrite_local] 8 | https://weclub\.ccc\.cmbchina.com/SCRMCustomActivityFront/checkin/request/get-home-data\.json\?activityCode=checkin url script-request-header cmbchina.js 9 | 10 | [mitm] 11 | hostname = weclub.ccc.cmbchina.com 12 | */ 13 | 14 | const checkinURL = 'https://weclub.ccc.cmbchina.com/SCRMCustomActivityFront/checkin/request/checkin.json'; 15 | const cookieKey = 'iNotificatioin_cmbchina_cookieKey'; 16 | const userAgentKey = 'iNotificatioin_cmbchina_userAgentKey'; 17 | 18 | let isGetCookie = typeof $request !== 'undefined'; 19 | 20 | if (isGetCookie) { 21 | // 获取 Cookie 22 | if ($request.headers['Cookie']) { 23 | var cookie = $request.headers['Cookie']; 24 | var userAgent = $request.headers['User-Agent']; 25 | $prefs.setValueForKey(cookie, cookieKey); 26 | $prefs.setValueForKey(userAgent, userAgentKey); 27 | $notify("成功获取招商银行信用卡 cookie 🎉", "", "请禁用该脚本") 28 | } 29 | $done({}); 30 | } else { 31 | // 签到 32 | var request = { 33 | url: checkinURL, 34 | method: 'POST', 35 | headers: { 36 | 'Cookie': $prefs.valueForKey(cookieKey), 37 | 'User-Agent': $prefs.valueForKey(userAgentKey), 38 | 'Content-type' : 'application/json; charset=utf-8' 39 | }, 40 | body: JSON.stringify({'activityCode' : 'checkin'}) 41 | }; 42 | 43 | $task.fetch(request).then(response => { 44 | const result = JSON.parse(response.body); 45 | if (result.respCode == 1000) { 46 | $notify("招商银行信用卡", "", "签到成功,获得 " + result.data.awardValue + " 积分🎁"); 47 | } else if (result.respCode == 1452) { 48 | $notify("招商银行信用卡", "", "签到失败,请获取 cookie"); 49 | } else if (result.respCode == 'custom_8500') { 50 | $notify("招商银行信用卡", "", "签到失败," + result.respMsg); 51 | } else { 52 | $notify("招商银行信用卡", "", "签到失败,请查看日志"); 53 | console.log(response.body) 54 | } 55 | }, reason => { 56 | $notify("招商银行信用卡", "", reason.error) 57 | }); 58 | } 59 | -------------------------------------------------------------------------------- /Script/didaqingdan.js: -------------------------------------------------------------------------------- 1 | /* 2 | TickTick (Tick list) unlock pro 3 | QX: 4 | ^https:\/\/(ticktick|dida365)\.com\/api\/v2\/user\/status url script-response-body https://raw.githubusercontent.com/NobyDa/Script/master/QuantumultX/File/DiDaQingDan.js 5 | 6 | hostname = dida365.com, ticktick.com 7 | */ 8 | 9 | var _0xf36b=["\x62\x6F\x64\x79","\x70\x61\x72\x73\x65","\x70\x72\x6F\x45\x6E\x64\x44\x61\x74\x65","\x32\x30\x39\x39\x2D\x30\x31\x2D\x30\x31\x54\x30\x30\x3A\x30\x30\x3A\x30\x30\x2E\x30\x30\x30\x2B\x30\x30\x30\x30","\x6E\x65\x65\x64\x53\x75\x62\x73\x63\x72\x69\x62\x65","\x70\x72\x6F","\x73\x74\x72\x69\x6E\x67\x69\x66\x79"];var body=$response[_0xf36b[0]];var obj=JSON[_0xf36b[1]](body);obj[_0xf36b[2]]= _0xf36b[3];obj[_0xf36b[4]]= false;obj[_0xf36b[5]]= true;body= JSON[_0xf36b[6]](obj);$done(body) 10 | -------------------------------------------------------------------------------- /Script/documents.js: -------------------------------------------------------------------------------- 1 | 2 | var obj= { 3 | "originalTransactionId" : "20000625420102", 4 | "subscriptionState" : "trial", 5 | "isInGracePeriod" : false, 6 | "subscriptionExpirationDate" : "17:48 25/11/2099", 7 | "isDocuments6User" : true, 8 | "isEligibleForIntroPeriod" : false, 9 | "subscriptionAutoRenewStatus" : "autoRenewOff", 10 | "subscriptionReceiptId" : "1530908572000" 11 | }; 12 | 13 | $done({body: JSON.stringify(obj)}); 14 | 15 | // Descriptions -------------------------------------------------------------------------------- /Script/gyroscope.js: -------------------------------------------------------------------------------- 1 | /* 2 | Gyroscope unlock pro (Script author: @Maasea ) 3 | Surge: 4 | http-response ^https:\/\/api\.gyrosco\.pe\/v1\/account\/$ requires-body=1,max-size=0,script-path=https://raw.githubusercontent.com/NobyDa/Script/master/Surge/JS/gyroscope.js 5 | 6 | QuantumultX: 7 | ^https:\/\/api\.gyrosco\.pe\/v1\/account\/$ url script-response-body https://raw.githubusercontent.com/NobyDa/Script/master/Surge/JS/gyroscope.js 8 | 9 | QX & Surge MITM = api.gyrosco.pe 10 | */ 11 | 12 | let obj = JSON.parse($response.body); 13 | obj.user["active_until_time"] = "2099-01-01T00:00:00Z"; 14 | $done({body: JSON.stringify(obj)}); -------------------------------------------------------------------------------- /Script/iQIYI_GetCookie_QX.js: -------------------------------------------------------------------------------- 1 | /* 2 | iQIYI Checkin Get Cookie. 3 | 4 | Update 2019.12.31 0:30 5 | 6 | About the author: 7 | If reproduced, indicate the source 8 | Telegram channel: @NobyDa 9 | Telegram bots: @NobyDa_bot 10 | 11 | Description : 12 | When iQiyi app is opened, click "My", If notification gets cookie success, you can use the check in script. because script will automatically judgment whether the cookie is updated, so you dont need to disable it manually. 13 | 14 | script will be performed every day at 9 am. You can modify the execution time. 15 | Note that the following config is only a local script configuration, please put both scripts into Quantumult X/Script, and the cookie script only works for iQIYI apps in china apple store 16 | 17 | [rewrite_local] 18 | # Get iQIYI cookie. 【QX TF188+】: 19 | https?:\/\/.*\.iqiyi\.com\/.*authcookie= url script-request-header iQIYI_GetCookie_QX.js 20 | 21 | # MITM = *.iqiyi.com 22 | 23 | [task_local] 24 | 0 9 * * * iQIYI_DailyBonus_QX.js 25 | 26 | */ 27 | 28 | var regex = /authcookie=([A-Za-z0-9]+)/; 29 | var iQIYI = regex.exec($request.url)[1]; 30 | 31 | if ($prefs.valueForKey("CookieQY") != undefined) { 32 | if ($prefs.valueForKey("CookieQY") != iQIYI) { 33 | var cookie = $prefs.setValueForKey(iQIYI, "CookieQY"); 34 | if (!cookie) { 35 | $notify("更新爱奇艺签到Cookie失败‼️", "", "") 36 | } else { 37 | $notify("更新爱奇艺签到Cookie成功 🎉", "", "") 38 | } 39 | } 40 | } else { 41 | var cookie = $prefs.setValueForKey(iQIYI, "CookieQY"); 42 | if (!cookie) { 43 | $notify("首次写入爱奇艺Cookie失败‼️", "", "") 44 | } else { 45 | $notify("首次写入爱奇艺Cookie成功 🎉", "", "") 46 | } 47 | } 48 | $done({}) -------------------------------------------------------------------------------- /Script/jd_shareMa.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Date: 2020-12-3 17:52:28 3 | * 4 | * https://github.com/lxk0301/jd_scripts/tree/master 5 | * 每个月1号,10号,20号凌晨2点清理一次数据库,清理后需重新点击链接提交互助码。 6 | * 7 | * ==========================Quantumultx========================= 8 | * [task_local] 9 | * # 京东助力码上车 10 | * # 每月1,10,20号的凌晨3点5分 自动上车 11 | * 0 5 3 1,10,20 * ? https://raw.githubusercontent.com/an0na/R/master/jd_shareMa.js, tag=助力码自动上车, enabled=true 12 | * 13 | */ 14 | 15 | const $ = new Env('助力码自动上车'); 16 | 17 | // 依次: 水果、种豆、萌宠、东工厂、喜工厂、赚赚、疯狂JOY 18 | let shareCodes = [ 19 | '732c806d465d427aab0c948e2ef8de17@1a3547c6feb4423487d2f450adda3f35@f1d15dd3dfa745e293b2343e85f0e065', 20 | 'mlrdw3aw26j3xogldu3rljozwt7b7lkvtlkywry@oikq73shoy33yjni64vntotbbm@4npkonnsy7xi3sny36skom3edho6thyj4hexnvy', 21 | 'MTAxODc2NTEzOTAwMDAwMDAyODExMjU5Nw==@MTAxODc2NTE0NzAwMDAwMDAzMDkxNjE0NQ==@MTE1NDQ5MzYwMDAwMDAwMzgyODU4MjE=', 22 | 'P04z54XCjVWnYaS5m9cZ2X-1XgYxv6NlmvdOLc@P04z54XCjVWnYaS5uCHu7ZRWXhLlw@P04z54XCjVWnYaS5m9cZ2fw2XQcx1lt6MuNaBc', 23 | 'lqOBaIFQnaNP1Lap6uj6lQ==@QCiqrXOSPRtGWQ-mTAyQsQ==@2aCn4lPTfeeywqZYqN7dEg==', 24 | 'AUWE5mquYyWdbCjX7jy9CwQ@A3rrlSQQUyTQK@AUWE5mKWUxWNaWWX81X1OnA', 25 | 'JVsWyIUAd-plLKZmUM98Kqt9zd5YaBeE@mJP7ib2zgKd9BGvR8BN-hw==@oslGjZdPXRelomlkJNu1xqt9zd5YaBeE' 26 | ]; 27 | 28 | !(async () => { 29 | for (let i = 0; i < shareCodes.length; i++) { 30 | var arr = shareCodes[i].split('@'); 31 | for (let j = 0; j < arr.length; j++) { 32 | var code = arr[j]; 33 | var userName = getUserName(j); 34 | var reqUrl = getReqUrl(code, i); 35 | var activityName = getActivityName(i); 36 | 37 | console.log(`\n 账号:`+ userName + `,活动:`+ activityName + `,请求地址:`+ reqUrl); 38 | 39 | await goCar(reqUrl); 40 | 41 | $.msg(`【账号` + userName +`】-`+ activityName, `resp:${$.code}, ${$.message}`, ``, {"open-url": reqUrl }); 42 | 43 | sleep(1500).then(() => { 44 | console.log(`休息1.5秒`); 45 | }); 46 | } 47 | } 48 | })().catch((e) => { 49 | $.log('', `异常!`, '') 50 | }) 51 | .finally(() => { 52 | $.done(); 53 | }) 54 | 55 | //上车URL 56 | function getReqUrl(code, i) { 57 | var url = ""; 58 | if(i == 0){ 59 | url = "http://api.turinglabs.net/api/v1/jd/farm/create/互助码/"; 60 | }else if(i == 1){ 61 | url = "http://api.turinglabs.net/api/v1/jd/bean/create/互助码/"; 62 | }else if(i == 2){ 63 | url = "http://api.turinglabs.net/api/v1/jd/pet/create/互助码/"; 64 | }else if(i == 3){ 65 | url = "http://api.turinglabs.net/api/v1/jd/ddfactory/create/互助码/"; 66 | }else if(i == 4){ 67 | url = "http://api.turinglabs.net/api/v1/jd/jxfactory/create/互助码/"; 68 | }else if(i == 5){ 69 | url = "https://code.chiang.fun/api/v1/jd/jdzz/create/互助码/"; 70 | }else if(i == 6){ 71 | url = "https://code.chiang.fun/api/v1/jd/jdcrazyjoy/create/互助码/"; 72 | } 73 | var reqUrl = url.replace("互助码", code); 74 | return reqUrl; 75 | } 76 | 77 | //活动名称 78 | function getActivityName(i) { 79 | var activityName = ""; 80 | if(i == 0){ 81 | activityName = "农场水果"; 82 | }else if(i == 1){ 83 | activityName = "种豆得豆"; 84 | }else if(i == 2){ 85 | activityName = "萌宠"; 86 | }else if(i == 3){ 87 | activityName = "东东工厂"; 88 | }else if(i == 4){ 89 | activityName = "京喜工厂"; 90 | }else if(i == 5){ 91 | activityName = "京东赚赚"; 92 | }else if(i == 6){ 93 | activityName = "疯狂JOY"; 94 | } 95 | return activityName; 96 | } 97 | 98 | //上车 99 | function goCar(reqUrl) { 100 | return new Promise(resolve => { 101 | $.get({url: reqUrl}, (err, resp, data) => { 102 | try { 103 | if (err) { 104 | console.log(`${JSON.stringify(err)}`) 105 | } else { 106 | if (data) { 107 | data = JSON.parse(data); 108 | 109 | $.code = data['code']; 110 | $.message = data['message']; 111 | 112 | console.log(`data: ${JSON.stringify(data)}`); 113 | } 114 | } 115 | } catch (e) { 116 | $.logErr(e, resp) 117 | } finally { 118 | resolve(data); 119 | } 120 | }) 121 | }) 122 | } 123 | 124 | //用户名称 125 | function getUserName(j) { 126 | var userName = ""; 127 | if(j == 0){ 128 | userName = "自己"; 129 | }else if(j == 1){ 130 | userName = "姐姐"; 131 | }else if(j == 2){ 132 | userName = "妈妈"; 133 | }else{ 134 | userName = "用户"+ (j+1); 135 | } 136 | return userName; 137 | } 138 | 139 | //休眠 140 | function sleep (time) { 141 | return new Promise((resolve) => setTimeout(resolve, time)); 142 | } 143 | 144 | // prettier-ignore 145 | 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,r)=>{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.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.startTime=(new Date).getTime(),Object.assign(this,e),this.log("",`\ud83d\udd14${this.name}, \u5f00\u59cb!`)}isNode(){return"undefined"!=typeof module&&!!module.exports}isQuanX(){return"undefined"!=typeof $task}isSurge(){return"undefined"!=typeof $httpClient&&"undefined"==typeof $loon}isLoon(){return"undefined"!=typeof $loon}toObj(t,e=null){try{return JSON.parse(t)}catch{return e}}toStr(t,e=null){try{return JSON.stringify(t)}catch{return e}}getjson(t,e){let s=e;const i=this.getdata(t);if(i)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 r=this.getdata("@chavy_boxjs_userCfgs.httpapi_timeout");r=r?1*r:20,r=e&&e.timeout?e.timeout:r;const[o,h]=i.split("@"),a={url:`http://${h}/v1/scripting/evaluate`,body:{script_text:t,mock_type:"cron",timeout:r},headers:{"X-Key":o,Accept:"*/*"}};this.post(a,(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),r=JSON.stringify(this.data);s?this.fs.writeFileSync(t,r):i?this.fs.writeFileSync(e,r):this.fs.writeFileSync(t,r)}}lodash_get(t,e,s){const i=e.replace(/\[(\d+)\]/g,".$1").split(".");let r=t;for(const t of i)if(r=Object(r)[t],void 0===r)return s;return r}lodash_set(t,e,s){return Object(t)!==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),r=s?this.getval(s):"";if(r)try{const t=JSON.parse(r);e=t?this.lodash_get(t,i,""):e}catch(t){e=""}}return e}setdata(t,e){let s=!1;if(/^@/.test(e)){const[,i,r]=/^@(.*?)\.(.*?)$/.exec(e),o=this.getval(i),h=i?"null"===o?null:o||"{}":"{}";try{const e=JSON.parse(h);this.lodash_set(e,r,t),s=this.setval(JSON.stringify(e),i)}catch(e){const o={};this.lodash_set(o,r,t),s=this.setval(JSON.stringify(o),i)}}else s=this.setval(t,e);return s}getval(t){return this.isSurge()||this.isLoon()?$persistentStore.read(t):this.isQuanX()?$prefs.valueForKey(t):this.isNode()?(this.data=this.loaddata(),this.data[t]):this.data&&this.data[t]||null}setval(t,e){return this.isSurge()||this.isLoon()?$persistentStore.write(t,e):this.isQuanX()?$prefs.setValueForKey(t,e):this.isNode()?(this.data=this.loaddata(),this.data[e]=t,this.writedata(),!0):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:{},void 0===t.headers.Cookie&&void 0===t.cookieJar&&(t.cookieJar=this.ckjar))}get(t,e=(()=>{})){t.headers&&(delete t.headers["Content-Type"],delete t.headers["Content-Length"]),this.isSurge()||this.isLoon()?(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),e(t,s,i)})):this.isQuanX()?(this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>e(t))):this.isNode()&&(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();this.ckjar.setCookieSync(s,null),e.cookieJar=this.ckjar}}catch(t){this.logErr(t)}}).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>{const{message:s,response:i}=t;e(s,i,i&&i.body)}))}post(t,e=(()=>{})){if(t.body&&t.headers&&!t.headers["Content-Type"]&&(t.headers["Content-Type"]="application/x-www-form-urlencoded"),t.headers&&delete t.headers["Content-Length"],this.isSurge()||this.isLoon())this.isSurge()&&this.isNeedRewrite&&(t.headers=t.headers||{},Object.assign(t.headers,{"X-Surge-Skip-Scripting":!1})),$httpClient.post(t,(t,s,i)=>{!t&&s&&(s.body=i,s.statusCode=s.status),e(t,s,i)});else if(this.isQuanX())t.method="POST",this.isNeedRewrite&&(t.opts=t.opts||{},Object.assign(t.opts,{hints:!1})),$task.fetch(t).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>e(t));else if(this.isNode()){this.initGotEnv(t);const{url:s,...i}=t;this.got.post(s,i).then(t=>{const{statusCode:s,statusCode:i,headers:r,body:o}=t;e(null,{status:s,statusCode:i,headers:r,body:o},o)},t=>{const{message:s,response:i}=t;e(s,i,i&&i.body)})}}time(t){let e={"M+":(new Date).getMonth()+1,"d+":(new Date).getDate(),"H+":(new Date).getHours(),"m+":(new Date).getMinutes(),"s+":(new Date).getSeconds(),"q+":Math.floor(((new Date).getMonth()+3)/3),S:(new Date).getMilliseconds()};/(y+)/.test(t)&&(t=t.replace(RegExp.$1,((new Date).getFullYear()+"").substr(4-RegExp.$1.length)));for(let s in e)new RegExp("("+s+")").test(t)&&(t=t.replace(RegExp.$1,1==RegExp.$1.length?e[s]:("00"+e[s]).substr((""+e[s]).length)));return t}msg(e=t,s="",i="",r){const o=t=>{if(!t)return t;if("string"==typeof t)return this.isLoon()?t:this.isQuanX()?{"open-url":t}:this.isSurge()?{url:t}:void 0;if("object"==typeof t){if(this.isLoon()){let e=t.openUrl||t.url||t["open-url"],s=t.mediaUrl||t["media-url"];return{openUrl:e,mediaUrl:s}}if(this.isQuanX()){let e=t["open-url"]||t.url||t.openUrl,s=t["media-url"]||t.mediaUrl;return{"open-url":e,"media-url":s}}if(this.isSurge()){let e=t.url||t.openUrl||t["open-url"];return{url:e}}}};this.isMute||(this.isSurge()||this.isLoon()?$notification.post(e,s,i,o(r)):this.isQuanX()&&$notify(e,s,i,o(r)));let h=["","==============\ud83d\udce3\u7cfb\u7edf\u901a\u77e5\ud83d\udce3=============="];h.push(e),s&&h.push(s),i&&h.push(i),console.log(h.join("\n")),this.logs=this.logs.concat(h)}log(...t){t.length>0&&(this.logs=[...this.logs,...t]),console.log(t.join(this.logSeparator))}logErr(t,e){const s=!this.isSurge()&&!this.isQuanX()&&!this.isLoon();s?this.log("",`\u2757\ufe0f${this.name}, \u9519\u8bef!`,t.stack):this.log("",`\u2757\ufe0f${this.name}, \u9519\u8bef!`,t)}wait(t){return new Promise(e=>setTimeout(e,t))}done(t={}){const e=(new Date).getTime(),s=(e-this.startTime)/1e3;this.log("",`\ud83d\udd14${this.name}, \u7ed3\u675f! \ud83d\udd5b ${s} \u79d2`),this.log(),(this.isSurge()||this.isQuanX()||this.isLoon())&&$done(t)}}(t,e)} 146 | -------------------------------------------------------------------------------- /Script/neteasemusic.cookie.js: -------------------------------------------------------------------------------- 1 | const $ = new Env('网易云音乐') 2 | 3 | !(async () => { 4 | $.log('', `🔔 ${$.name}, 获取会话: 开始!`, '') 5 | const session = {} 6 | session.url = $request.url 7 | session.body = $request.body 8 | session.headers = $request.headers 9 | delete session.headers['Content-Length'] 10 | $.log('', `url: ${session.url}`, `body: ${session.body}`, `headers: ${JSON.stringify(session.headers)}`) 11 | if ($.setdata(JSON.stringify(session), 'chavy_cookie_neteasemusic')) { 12 | $.subt = '获取会话: 成功!' 13 | } else { 14 | $.subt = '获取会话: 失败!' 15 | } 16 | })() 17 | .catch((e) => { 18 | $.subt = '获取会话: 失败!' 19 | $.desc = `原因: ${e}` 20 | $.log(`❌ ${$.name}, 获取会话: 失败! 原因: ${e}!`) 21 | }) 22 | .finally(() => { 23 | $.msg($.name, $.subt, $.desc), $.log('', `🔔 ${$.name}, 获取会话: 结束!`, ''), $.done() 24 | }) 25 | 26 | // prettier-ignore 27 | function Env(t){this.name=t,this.logs=[],this.isSurge=(()=>"undefined"!=typeof $httpClient),this.isQuanX=(()=>"undefined"!=typeof $task),this.log=((...t)=>{this.logs=[...this.logs,...t],t?console.log(t.join("\n")):console.log(this.logs.join("\n"))}),this.msg=((t=this.name,s="",i="")=>{this.isSurge()&&$notification.post(t,s,i),this.isQuanX()&&$notify(t,s,i);const e=["","==============\ud83d\udce3\u7cfb\u7edf\u901a\u77e5\ud83d\udce3=============="];t&&e.push(t),s&&e.push(s),i&&e.push(i),console.log(e.join("\n"))}),this.getdata=(t=>this.isSurge()?$persistentStore.read(t):this.isQuanX()?$prefs.valueForKey(t):void 0),this.setdata=((t,s)=>this.isSurge()?$persistentStore.write(t,s):this.isQuanX()?$prefs.setValueForKey(t,s):void 0),this.get=((t,s)=>this.send(t,"GET",s)),this.wait=((t,s=t)=>i=>setTimeout(()=>i(),Math.floor(Math.random()*(s-t+1)+t))),this.post=((t,s)=>this.send(t,"POST",s)),this.send=((t,s,i)=>{if(this.isSurge()){const e="POST"==s?$httpClient.post:$httpClient.get;e(t,(t,s,e)=>{s&&(s.body=e,s.statusCode=s.status),i(t,s,e)})}this.isQuanX()&&(t.method=s,$task.fetch(t).then(t=>{t.status=t.statusCode,i(null,t,t.body)},t=>i(t.error,t,t)))}),this.done=((t={})=>$done(t))} 28 | -------------------------------------------------------------------------------- /Script/neteasemusic.js: -------------------------------------------------------------------------------- 1 | //来源:https://github.com/chavyleung/scripts/blob/master/neteasemusic/quanx/neteasemusic.js 2 | 3 | const $ = new Env('网易云音乐') 4 | $.VAL_session = $.getdata('chavy_cookie_neteasemusic') 5 | $.CFG_retryCnt = ($.getdata('CFG_neteasemusic_retryCnt') || '10') * 1 6 | $.CFG_retryInterval = ($.getdata('CFG_neteasemusic_retryInterval') || '500') * 1 7 | 8 | !(async () => { 9 | $.log('', `🔔 ${$.name}, 开始!`, '') 10 | init() 11 | await signweb() 12 | await signapp() 13 | await getInfo() 14 | //await showmsg() 15 | })() 16 | .catch((e) => { 17 | $.log('', `❌ ${$.name}, 失败! 原因: ${e}!`, '') 18 | }) 19 | .finally(() => { 20 | $.msg($.name, $.subt, $.desc), $.log('', `🔔 ${$.name}, 结束!`, ''), $.done() 21 | }) 22 | 23 | function init() { 24 | $.isNewCookie = /https:\/\/music.163.com\/weapi\/user\/level/.test($.VAL_session) 25 | $.Cookie = $.isNewCookie ? JSON.parse($.VAL_session).headers.Cookie : $.VAL_session 26 | } 27 | 28 | async function signweb() { 29 | for (let signIdx = 0; signIdx < $.CFG_retryCnt; signIdx++) { 30 | await new Promise((resove) => { 31 | const url = { url: `http://music.163.com/api/point/dailyTask?type=1`, headers: {} } 32 | url.headers['Cookie'] = $.Cookie 33 | url.headers['Host'] = 'music.163.com' 34 | url.headers['User-Agent'] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Safari/605.1.15' 35 | $.get(url, (error, response, data) => { 36 | try { 37 | $.isWebSuc = JSON.parse(data).code === -2 38 | $.log(`[Web] 第 ${signIdx + 1} 次: ${data}`) 39 | } catch (e) { 40 | $.isWebSuc = false 41 | $.log(`❗️ ${$.name}, 执行失败!`, ` error = ${error || e}`, `response = ${JSON.stringify(response)}`, '') 42 | } finally { 43 | resove() 44 | } 45 | }) 46 | }) 47 | await new Promise($.wait($.CFG_retryInterval)) 48 | if ($.isWebSuc) break 49 | } 50 | } 51 | 52 | async function signapp() { 53 | for (let signIdx = 0; signIdx < $.CFG_retryCnt; signIdx++) { 54 | await new Promise((resove) => { 55 | const url = { url: `http://music.163.com/api/point/dailyTask?type=0`, headers: {} } 56 | url.headers['Cookie'] = $.Cookie 57 | url.headers['Host'] = 'music.163.com' 58 | url.headers['User-Agent'] = 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1' 59 | $.get(url, (error, response, data) => { 60 | try { 61 | $.isAppSuc = JSON.parse(data).code === -2 62 | $.log(`[App] 第 ${signIdx + 1} 次: ${data}`) 63 | } catch (e) { 64 | $.isAppSuc = false 65 | $.log(`❗️ ${$.name}, 执行失败!`, ` error = ${error || e}`, `response = ${JSON.stringify(response)}`, '') 66 | } finally { 67 | resove() 68 | } 69 | }) 70 | }) 71 | await new Promise($.wait($.CFG_retryInterval)) 72 | if ($.isAppSuc) break 73 | } 74 | } 75 | 76 | function getInfo() { 77 | if (!$.isNewCookie) return 78 | return new Promise((resove) => { 79 | $.post(JSON.parse($.VAL_session), (error, response, data) => { 80 | try { 81 | $.userInfo = JSON.parse(data) 82 | } catch (e) { 83 | $.log(`❗️ ${$.name}, 执行失败!`, ` error = ${error || e}`, `response = ${JSON.stringify(response)}`, '') 84 | } finally { 85 | resove() 86 | } 87 | }) 88 | }) 89 | } 90 | 91 | function showmsg() { 92 | return new Promise((resove) => { 93 | $.subt = $.isWebSuc ? 'PC: 成功' : 'PC: 失败' 94 | $.subt += $.isAppSuc ? ', APP: 成功' : ', APP: 失败' 95 | if ($.isNewCookie && $.userInfo) { 96 | $.desc = `等级: ${$.userInfo.data.level}, 听歌: ${$.userInfo.data.nowPlayCount} => ${$.userInfo.data.nextPlayCount} 升级 (首)` 97 | $.desc = $.userInfo.data.level === 10 ? `等级: ${$.userInfo.data.level}, 你的等级已爆表!` : $.desc 98 | } else { 99 | $.desc = `[签到失败]请查看cookie!` 100 | } 101 | resove() 102 | }) 103 | } 104 | 105 | // prettier-ignore 106 | function Env(t){this.name=t,this.logs=[],this.isSurge=(()=>"undefined"!=typeof $httpClient),this.isQuanX=(()=>"undefined"!=typeof $task),this.log=((...t)=>{this.logs=[...this.logs,...t],t?console.log(t.join("\n")):console.log(this.logs.join("\n"))}),this.msg=((t=this.name,s="",i="")=>{this.isSurge()&&$notification.post(t,s,i),this.isQuanX()&&$notify(t,s,i);const e=["","==============\ud83d\udce3\u7cfb\u7edf\u901a\u77e5\ud83d\udce3=============="];t&&e.push(t),s&&e.push(s),i&&e.push(i),console.log(e.join("\n"))}),this.getdata=(t=>this.isSurge()?$persistentStore.read(t):this.isQuanX()?$prefs.valueForKey(t):void 0),this.setdata=((t,s)=>this.isSurge()?$persistentStore.write(t,s):this.isQuanX()?$prefs.setValueForKey(t,s):void 0),this.get=((t,s)=>this.send(t,"GET",s)),this.wait=((t,s=t)=>i=>setTimeout(()=>i(),Math.floor(Math.random()*(s-t+1)+t))),this.post=((t,s)=>this.send(t,"POST",s)),this.send=((t,s,i)=>{if(this.isSurge()){const e="POST"==s?$httpClient.post:$httpClient.get;e(t,(t,s,e)=>{s&&(s.body=e,s.statusCode=s.status),i(t,s,e)})}this.isQuanX()&&(t.method=s,$task.fetch(t).then(t=>{t.status=t.statusCode,i(null,t,t.body)},t=>i(t.error,t,t)))}),this.done=((t={})=>$done(t))} 107 | -------------------------------------------------------------------------------- /Script/surge bilibili feed.js: -------------------------------------------------------------------------------- 1 | //Customize blacklist 2 | let blacklist=['共青团中央','广东共青团','浙江共青团','山东共青团','安徽共青团','河南共青团','央视频','徐大sao','翔翔大作战','徐大虾咯','科技美学','敬汉卿','NathanRich火锅大王','千户长生'] 3 | 4 | let body = $response.body 5 | body=JSON.parse(body) 6 | body['data']['items'].forEach((element, index)=> { 7 | if(element.hasOwnProperty('ad_info')||element.hasOwnProperty('banner_item')||element['card_type']!='small_cover_v2'||blacklist.includes(element['args']['up_name'])){ 8 | body['data']['items'].splice(index,1) 9 | } 10 | }) 11 | body=JSON.stringify(body) 12 | $done({body}) 13 | -------------------------------------------------------------------------------- /Script/surge bilibili reply.js: -------------------------------------------------------------------------------- 1 | let body = $response.body 2 | body=JSON.parse(body) 3 | delete body['data']['notice'] 4 | body=JSON.stringify(body) 5 | $done({body}) 6 | -------------------------------------------------------------------------------- /Script/surge bilibili view relate.js: -------------------------------------------------------------------------------- 1 | let body = $response.body 2 | body=JSON.parse(body) 3 | body['data']['relates'].forEach((element, index)=> { 4 | if(element.hasOwnProperty('is_ad')||!element.hasOwnProperty('aid')){ 5 | body['data']['relates'].splice(index,1) 6 | } 7 | }) 8 | delete body['data']['cms'] 9 | body=JSON.stringify(body) 10 | $done({body}) 11 | -------------------------------------------------------------------------------- /Script/tb_price.js: -------------------------------------------------------------------------------- 1 | /* 2 | README:https://github.com/yichahucha/surge/tree/master 3 | */ 4 | 5 | const $tool = tool() 6 | const $base64 = new Base64() 7 | const consoleLog = false 8 | const url = $request.url 9 | const body = $response.body 10 | const path1 = "/amdc/mobileDispatch" 11 | const path2 = "/gw/mtop.taobao.detail.getdetail" 12 | 13 | if (url.indexOf(path1) != -1) { 14 | let obj = JSON.parse($base64.decode(body)) 15 | let dns = obj.dns 16 | if (dns && dns.length > 0) { 17 | let i = dns.length; 18 | while (i--) { 19 | const element = dns[i]; 20 | let host = "trade-acs.m.taobao.com" 21 | if (element.host == host) { 22 | element.ips = [] 23 | if (consoleLog) console.log(JSON.stringify(element)) 24 | } 25 | } 26 | } 27 | $done({ body: $base64.encode(JSON.stringify(obj)) }) 28 | } 29 | 30 | if (url.indexOf(path2) != -1) { 31 | const body = $response.body 32 | let obj = JSON.parse(body) 33 | let apiStack = obj.data.apiStack[0] 34 | let value = JSON.parse(apiStack.value) 35 | if (value.global) { 36 | let tradeConsumerProtection = value.global.data.tradeConsumerProtection 37 | if (!tradeConsumerProtection) { 38 | value.global.data["tradeConsumerProtection"] = customTradeConsumerProtection() 39 | } 40 | tradeConsumerProtection = value.global.data.tradeConsumerProtection 41 | let service = tradeConsumerProtection.tradeConsumerService.service 42 | let nonService = tradeConsumerProtection.tradeConsumerService.nonService 43 | 44 | let item = obj.data.item 45 | let shareUrl = `https://item.taobao.com/item.htm?id=${item.itemId}` 46 | 47 | requestPrice(shareUrl, function (data) { 48 | if (data) { 49 | let historyItem = customItem() 50 | if (data.ok == 1 && data.single) { 51 | const lower = lowerMsgs(data.single) 52 | const result = historyItems(data.single) 53 | const tbitems = result[1] 54 | service.items = service.items.concat(nonService.items) 55 | historyItem.desc = lower[0] 56 | historyItem.title = lower[1] 57 | service.items.unshift(historyItem) 58 | nonService.title = "价格走势" 59 | nonService.items = tbitems 60 | } 61 | if (data.ok == 0 && data.msg.length > 0) { 62 | historyItem.desc = data.msg 63 | service.items.push(historyItem) 64 | } 65 | apiStack.value = JSON.stringify(value) 66 | $done({ body: JSON.stringify(obj) }) 67 | } else { 68 | $done({ body }) 69 | } 70 | }) 71 | } else { 72 | $done({ body }) 73 | } 74 | } 75 | 76 | function requestPrice(shareUrl, callback) { 77 | let options = { 78 | url: "https://apapia-history.manmanbuy.com/ChromeWidgetServices/WidgetServices.ashx", 79 | headers: { 80 | "Content-Type": "application/x-www-form-urlencoded;charset=utf-8", 81 | "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_1_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 - mmbWebBrowse - ios" 82 | }, 83 | body: "methodName=getBiJiaInfo_wxsmall&p_url=" + encodeURIComponent(shareUrl) 84 | } 85 | $tool.post(options, function (error, response, data) { 86 | if (!error) { 87 | callback(JSON.parse(data)); 88 | if (consoleLog) console.log("Data:\n" + data); 89 | } else { 90 | callback(null, null); 91 | if (consoleLog) console.log("Error:\n" + error); 92 | } 93 | }) 94 | } 95 | 96 | function lowerMsgs(data) { 97 | const lower = data.lowerPriceyh 98 | const lowerDate = dateFormat(data.lowerDateyh) 99 | const lowerMsg = "历史最低到手价: ¥" + String(lower) + " " + lowerDate 100 | const curret_msg = (data.currentPriceStatus ? " 当前价格" + data.currentPriceStatus : "") + " (仅供参考)" 101 | const lower1 = lowerMsg + curret_msg 102 | const lower2 = "历史最低¥" + String(lower) 103 | return [lower1, lower2] 104 | } 105 | 106 | function historyItems(data) { 107 | const rexMatch = /\[.*?\]/g; 108 | const rexExec = /\[(.*),(.*),"(.*)"\]/; 109 | const list = data.jiagequshiyh.match(rexMatch); 110 | let tbitems = []; 111 | let startDate = ""; 112 | let endDate = ""; 113 | list.reverse().forEach((item, index) => { 114 | if (item.length > 0) { 115 | const result = rexExec.exec(item); 116 | const dateUTC = new Date(eval(result[1])); 117 | const date = dateUTC.format("yyyy-MM-dd"); 118 | if (index == 0) { 119 | endDate = date; 120 | } 121 | if (index == list.length - 1) { 122 | startDate = date; 123 | } 124 | let price = result[2]; 125 | price = "¥" + String(parseFloat(price)); 126 | const msg = date + getSpace(50 - date.length) + price; 127 | tbitem = { 128 | icon: "https://s2.ax1x.com/2020/01/03/lU2AYD.png", 129 | title: msg 130 | } 131 | tbitems.push(tbitem); 132 | } 133 | }); 134 | const dateMsg = `(${startDate} ~ ${endDate})`; 135 | return [dateMsg, tbitems]; 136 | } 137 | 138 | function dateFormat(cellval) { 139 | const date = new Date(parseInt(cellval.replace("/Date(", "").replace(")/", ""), 10)); 140 | const month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1; 141 | const currentDate = date.getDate() < 10 ? "0" + date.getDate() : date.getDate(); 142 | return date.getFullYear() + "-" + month + "-" + currentDate; 143 | } 144 | 145 | function getSpace(length) { 146 | let blank = ""; 147 | for (let index = 0; index < length; index++) { 148 | blank += " "; 149 | } 150 | return blank; 151 | } 152 | 153 | function customItem() { 154 | return { 155 | icon: "https://s2.ax1x.com/2020/01/03/lU2Pw6.png", 156 | title: "历史价格", 157 | desc: "" 158 | } 159 | } 160 | 161 | function customTradeConsumerProtection() { 162 | return { 163 | "tradeConsumerService": { 164 | "service": { 165 | "items": [ 166 | ], 167 | "icon": "", 168 | "title": "基础服务" 169 | }, 170 | "nonService": { 171 | "items": [ 172 | ], 173 | "title": "其他" 174 | } 175 | }, 176 | "passValue": "all", 177 | "url": "https://h5.m.taobao.com/app/detailsubpage/consumer/index.js", 178 | "type": "0" 179 | } 180 | } 181 | 182 | Array.prototype.insert = function (index, item) { 183 | this.splice(index, 0, item); 184 | }; 185 | 186 | Date.prototype.format = function (fmt) { 187 | var o = { 188 | "y+": this.getFullYear(), 189 | "M+": this.getMonth() + 1, 190 | "d+": this.getDate(), 191 | "h+": this.getHours(), 192 | "m+": this.getMinutes(), 193 | "s+": this.getSeconds(), 194 | "q+": Math.floor((this.getMonth() + 3) / 3), 195 | "S+": this.getMilliseconds() 196 | }; 197 | for (var k in o) { 198 | if (new RegExp("(" + k + ")").test(fmt)) { 199 | if (k == "y+") { 200 | fmt = fmt.replace(RegExp.$1, ("" + o[k]).substr(4 - RegExp.$1.length)); 201 | } 202 | else if (k == "S+") { 203 | var lens = RegExp.$1.length; 204 | lens = lens == 1 ? 3 : lens; 205 | fmt = fmt.replace(RegExp.$1, ("00" + o[k]).substr(("" + o[k]).length - 1, lens)); 206 | } 207 | else { 208 | fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length))); 209 | } 210 | } 211 | } 212 | return fmt; 213 | } 214 | 215 | function tool() { 216 | const isSurge = typeof $httpClient != "undefined" 217 | const isQuanX = typeof $task != "undefined" 218 | const notify = (title, subtitle, message) => { 219 | if (isQuanX) $notify(title, subtitle, message) 220 | if (isSurge) $notification.post(title, subtitle, message) 221 | } 222 | const setCache = (value, key) => { 223 | if (isQuanX) return $prefs.setValueForKey(value, key) 224 | if (isSurge) return $persistentStore.write(value, key) 225 | } 226 | const getCache = (key) => { 227 | if (isQuanX) return $prefs.valueForKey(key) 228 | if (isSurge) return $persistentStore.read(key) 229 | } 230 | const get = (options, callback) => { 231 | if (isQuanX) { 232 | if (typeof options == "string") options = { url: options } 233 | options["method"] = "GET" 234 | $task.fetch(options).then(response => { 235 | response["status"] = response.statusCode 236 | callback(null, response, response.body) 237 | }, reason => callback(reason.error, null, null)) 238 | } 239 | if (isSurge) $httpClient.get(options, callback) 240 | } 241 | const post = (options, callback) => { 242 | if (isQuanX) { 243 | if (typeof options == "string") options = { url: options } 244 | options["method"] = "POST" 245 | $task.fetch(options).then(response => { 246 | response["status"] = response.statusCode 247 | callback(null, response, response.body) 248 | }, reason => callback(reason.error, null, null)) 249 | } 250 | if (isSurge) $httpClient.post(options, callback) 251 | } 252 | return { isQuanX, isSurge, notify, setCache, getCache, get, post } 253 | } 254 | 255 | function Base64() { 256 | // private property 257 | _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; 258 | // public method for encoding 259 | this.encode = function (input) { 260 | var output = ""; 261 | var chr1, chr2, chr3, enc1, enc2, enc3, enc4; 262 | var i = 0; 263 | input = _utf8_encode(input); 264 | while (i < input.length) { 265 | chr1 = input.charCodeAt(i++); 266 | chr2 = input.charCodeAt(i++); 267 | chr3 = input.charCodeAt(i++); 268 | enc1 = chr1 >> 2; 269 | enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); 270 | enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); 271 | enc4 = chr3 & 63; 272 | if (isNaN(chr2)) { 273 | enc3 = enc4 = 64; 274 | } else if (isNaN(chr3)) { 275 | enc4 = 64; 276 | } 277 | output = output + 278 | _keyStr.charAt(enc1) + _keyStr.charAt(enc2) + 279 | _keyStr.charAt(enc3) + _keyStr.charAt(enc4); 280 | } 281 | return output; 282 | } 283 | // public method for decoding 284 | this.decode = function (input) { 285 | var output = ""; 286 | var chr1, chr2, chr3; 287 | var enc1, enc2, enc3, enc4; 288 | var i = 0; 289 | input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); 290 | while (i < input.length) { 291 | enc1 = _keyStr.indexOf(input.charAt(i++)); 292 | enc2 = _keyStr.indexOf(input.charAt(i++)); 293 | enc3 = _keyStr.indexOf(input.charAt(i++)); 294 | enc4 = _keyStr.indexOf(input.charAt(i++)); 295 | chr1 = (enc1 << 2) | (enc2 >> 4); 296 | chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); 297 | chr3 = ((enc3 & 3) << 6) | enc4; 298 | output = output + String.fromCharCode(chr1); 299 | if (enc3 != 64) { 300 | output = output + String.fromCharCode(chr2); 301 | } 302 | if (enc4 != 64) { 303 | output = output + String.fromCharCode(chr3); 304 | } 305 | } 306 | output = _utf8_decode(output); 307 | return output; 308 | } 309 | // private method for UTF-8 encoding 310 | _utf8_encode = function (string) { 311 | string = string.replace(/\r\n/g, "\n"); 312 | var utftext = ""; 313 | for (var n = 0; n < string.length; n++) { 314 | var c = string.charCodeAt(n); 315 | if (c < 128) { 316 | utftext += String.fromCharCode(c); 317 | } else if ((c > 127) && (c < 2048)) { 318 | utftext += String.fromCharCode((c >> 6) | 192); 319 | utftext += String.fromCharCode((c & 63) | 128); 320 | } else { 321 | utftext += String.fromCharCode((c >> 12) | 224); 322 | utftext += String.fromCharCode(((c >> 6) & 63) | 128); 323 | utftext += String.fromCharCode((c & 63) | 128); 324 | } 325 | 326 | } 327 | return utftext; 328 | } 329 | // private method for UTF-8 decoding 330 | _utf8_decode = function (utftext) { 331 | var string = ""; 332 | var i = 0; 333 | var c = c1 = c2 = 0; 334 | while (i < utftext.length) { 335 | c = utftext.charCodeAt(i); 336 | if (c < 128) { 337 | string += String.fromCharCode(c); 338 | i++; 339 | } else if ((c > 191) && (c < 224)) { 340 | c2 = utftext.charCodeAt(i + 1); 341 | string += String.fromCharCode(((c & 31) << 6) | (c2 & 63)); 342 | i += 2; 343 | } else { 344 | c2 = utftext.charCodeAt(i + 1); 345 | c3 = utftext.charCodeAt(i + 2); 346 | string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); 347 | i += 3; 348 | } 349 | } 350 | return string; 351 | } 352 | } 353 | -------------------------------------------------------------------------------- /Script/videoqq.cookie.js: -------------------------------------------------------------------------------- 1 | const cookieName = '腾讯视频' 2 | const cookieKey = 'chavy_cookie_videoqq' 3 | const authUrlKey = 'chavy_auth_url_videoqq' 4 | const authHeaderKey = 'chavy_auth_header_videoqq' 5 | const msignurlKey = 'chavy_msign_url_videoqq' 6 | const msignheaderKey = 'chavy_msign_header_videoqq' 7 | const chavy = init() 8 | 9 | const cookieVal = $request.headers['Cookie'] 10 | if (cookieVal) { 11 | if ($request.url.indexOf('auth_refresh') > 0) { 12 | const authurl = $request.url 13 | const authHeader = JSON.stringify($request.headers) 14 | if (cookieVal) chavy.setdata(cookieVal, cookieKey) 15 | if (authurl) chavy.setdata(authurl, authUrlKey) 16 | if (authHeader) chavy.setdata(authHeader, authHeaderKey) 17 | chavy.msg(`${cookieName}`, '获取Cookie: 成功', '') 18 | chavy.log(`[${cookieName}] 获取Cookie: 成功, Cookie: ${cookieVal}`) 19 | chavy.log(`[${cookieName}] 获取Cookie: 成功, AuthUrl: ${authurl}`) 20 | chavy.log(`[${cookieName}] 获取Cookie: 成功, AuthHeader: ${authHeader}`) 21 | } else if ($request.url.indexOf('mobile_checkin') > 0) { 22 | const msignurl = $request.url 23 | const msignheader = JSON.stringify($request.headers) 24 | if (msignurl) chavy.setdata(msignurl, msignurlKey) 25 | if (msignheader) chavy.setdata(msignheader, msignheaderKey) 26 | chavy.msg(`${cookieName}`, '获取Cookie: 成功', '') 27 | chavy.log(`[${cookieName}] 获取Cookie: 成功, msignurl: ${msignurl}`) 28 | chavy.log(`[${cookieName}] 获取Cookie: 成功, msignheader: ${msignheader}`) 29 | } else { 30 | chavy.setdata(cookieVal, cookieKey) 31 | chavy.setdata(``, authUrlKey) 32 | chavy.setdata(``, authHeaderKey) 33 | chavy.msg(`${cookieName}`, '获取Cookie: 成功', '') 34 | chavy.log(`[${cookieName}] 获取Cookie: 成功, Cookie: ${cookieVal}`) 35 | } 36 | } 37 | 38 | function init() { 39 | isSurge = () => { 40 | return undefined === this.$httpClient ? false : true 41 | } 42 | isQuanX = () => { 43 | return undefined === this.$task ? false : true 44 | } 45 | getdata = (key) => { 46 | if (isSurge()) return $persistentStore.read(key) 47 | if (isQuanX()) return $prefs.valueForKey(key) 48 | } 49 | setdata = (key, val) => { 50 | if (isSurge()) return $persistentStore.write(key, val) 51 | if (isQuanX()) return $prefs.setValueForKey(key, val) 52 | } 53 | msg = (title, subtitle, body) => { 54 | if (isSurge()) $notification.post(title, subtitle, body) 55 | if (isQuanX()) $notify(title, subtitle, body) 56 | } 57 | log = (message) => console.log(message) 58 | get = (url, cb) => { 59 | if (isSurge()) { 60 | $httpClient.get(url, cb) 61 | } 62 | if (isQuanX()) { 63 | url.method = 'GET' 64 | $task.fetch(url).then((resp) => cb(null, {}, resp.body)) 65 | } 66 | } 67 | post = (url, cb) => { 68 | if (isSurge()) { 69 | $httpClient.post(url, cb) 70 | } 71 | if (isQuanX()) { 72 | url.method = 'POST' 73 | $task.fetch(url).then((resp) => cb(null, {}, resp.body)) 74 | } 75 | } 76 | done = (value = {}) => { 77 | $done(value) 78 | } 79 | return { isSurge, isQuanX, msg, log, getdata, setdata, get, post, done } 80 | } 81 | chavy.done() -------------------------------------------------------------------------------- /Script/videoqq.js: -------------------------------------------------------------------------------- 1 | const cookieName = '腾讯视频' 2 | const cookieKey = 'chavy_cookie_videoqq' 3 | const authUrlKey = 'chavy_auth_url_videoqq' 4 | const authHeaderKey = 'chavy_auth_header_videoqq' 5 | const msignurlKey = 'chavy_msign_url_videoqq' 6 | const msignheaderKey = 'chavy_msign_header_videoqq' 7 | const chavy = init() 8 | let cookieVal = chavy.getdata(cookieKey) 9 | const authUrlVal = chavy.getdata(authUrlKey) 10 | const authHeaderVal = chavy.getdata(authHeaderKey) 11 | const msignurlVal = chavy.getdata(msignurlKey) 12 | const msignheaderVal = chavy.getdata(msignheaderKey) 13 | const signinfo = {} 14 | 15 | sign() 16 | 17 | function sign() { 18 | if (authUrlVal && authHeaderVal) { 19 | const url = { url: authUrlVal, headers: JSON.parse(authHeaderVal) } 20 | chavy.get(url, (error, response, data) => { 21 | // chavy.log(`${cookieName}, auth_refresh - data: ${data}`) 22 | // chavy.log(`${cookieName}, auth_refresh - old-cookie: ${cookieVal}`) 23 | // chavy.log(`${cookieName}, auth_refresh - set-cookie: ${response.headers['Set-Cookie']}`) 24 | const result = JSON.parse(data.match(/\(([^\)]*)\)/)[1]) 25 | let respcookie = response.headers['Set-Cookie'] 26 | // chavy.log(`${cookieName}, auth_refresh - Expires: ${respcookie.indexOf('Expires=') >= 0 ? respcookie.match(/Expires=(.*?)GMT/)[1] : '无'}`) 27 | respcookie = respcookie.replace(/Expires=(.*?)GMT,? ?/g, '') 28 | respcookie = respcookie.replace(/Path=(.*?); ?/g, '') 29 | respcookie = respcookie.replace(/Domain=(.*?); ?/g, '') 30 | respcookie = respcookie.replace(/;$/g, '') 31 | if (result.errcode == 0) { 32 | let setcookies = [] 33 | for (setcookie of respcookie.split(';')) { 34 | const setcookieKey = setcookie.split('=')[0] 35 | const setcookieVal = setcookie.split('=')[1] 36 | if (setcookieKey && cookieVal.indexOf(setcookieKey) >= 0) { 37 | cookieVal = cookieVal.replace(new RegExp(`${setcookieKey}=[^;]*`), `${setcookieKey}=${setcookieVal}`) 38 | } else { 39 | cookieVal += `; ${setcookieKey}=${setcookieVal}` 40 | } 41 | setcookies.push({ key: setcookieKey, val: setcookieVal }) 42 | // chavy.log(`${cookieName}, auth_refresh - set-cookie: ${setcookieKey} = ${setcookieVal}`) 43 | } 44 | for (resultcookie in result) { 45 | if (cookieVal.indexOf(resultcookie) >= 0) { 46 | cookieVal = cookieVal.replace(new RegExp(`${resultcookie}=[^;]*`, 'g'), `${resultcookie}=${result[resultcookie]}`) 47 | setcookies.push({ key: resultcookie, val: result[resultcookie] }) 48 | // chavy.log(`${cookieName}, auth_refresh - ret-cookie: ${resultcookie} = ${result[resultcookie]}`) 49 | } 50 | } 51 | // chavy.log(`${cookieName}, auth_refresh - new-cookie: ${cookieVal}`) 52 | // chavy.log(`${cookieName}, auth_refresh - setcookies: ${JSON.stringify(setcookies)}`) 53 | chavy.setdata(cookieVal, cookieKey) 54 | signapp() 55 | signmobile(setcookies) 56 | chavy.done() 57 | } 58 | }) 59 | } else { 60 | signapp() 61 | } 62 | } 63 | 64 | function refreshSetCookie() {} 65 | 66 | function signapp() { 67 | const timestamp = Math.round(new Date().getTime() / 1000).toString() 68 | let url = { url: `https://vip.video.qq.com/fcgi-bin/comm_cgi?name=hierarchical_task_system&cmd=2&_=${timestamp}`, headers: { Cookie: cookieVal } } 69 | url.headers['User-Agent'] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.4 Safari/605.1.15' 70 | chavy.get(url, (error, response, data) => { 71 | chavy.log(`${cookieName}, data: ${data}`) 72 | let result = JSON.parse(data.match(/QZOutputJson=\(([^\)]*)\)/)[1]) 73 | const title = `${cookieName}` 74 | let subTitle = '' 75 | let detail = '' 76 | if (result.ret == 0) { 77 | getexp(result) 78 | } else if (result.ret == -10006) { 79 | subTitle = '签到结果: 失败' 80 | detail = `原因: 未登录, 说明: ${result.msg}` 81 | chavy.msg(title, subTitle, detail) 82 | } else if (result.ret == -10019) { 83 | subTitle = '签到结果: 失败' 84 | detail = `原因: 非VIP会员, 说明: ${result.msg}` 85 | chavy.msg(title, subTitle, detail) 86 | } else { 87 | subTitle = '签到结果: 未知' 88 | detail = `编码: ${result.ret}, 说明: ${result.msg}` 89 | chavy.msg(title, subTitle, detail) 90 | } 91 | }) 92 | // chavy.done() 93 | } 94 | 95 | function signmobile(cookies) { 96 | if (msignheaderVal) { 97 | let msignheaderObj = JSON.parse(msignheaderVal) 98 | let msignCookies = msignheaderObj.Cookie 99 | // chavy.log(`${cookieName} updatemobile old-cookie: ${msignCookies}`) 100 | for (c of cookies) { 101 | if (msignCookies.indexOf(c.key) >= 0) { 102 | msignCookies = msignCookies.replace(new RegExp(`${c.key}=[^;]*`, 'g'), `${c.key}=${c.val}`) 103 | } 104 | } 105 | // chavy.log(`${cookieName} updatemobile new-cookie: ${msignCookies}`) 106 | msignheaderObj.Cookie = msignCookies 107 | 108 | const url = { url: msignurlVal, headers: msignheaderObj } 109 | chavy.get(url, (error, response, data) => { 110 | const dmatch = data.match(/window\.__STATE__=(.*?)<\/script>/) 111 | let result = {} 112 | result.msg = '未知' 113 | result.ret = -9999 114 | if (dmatch) { 115 | try { 116 | result = JSON.parse(dmatch[1]).payloads.execCheck 117 | } catch (e) { 118 | chavy.log(`${cookieName} catch - error: ${e}`) 119 | } 120 | } 121 | const title = `${cookieName} (移动端)` 122 | let subtitle = `` 123 | let detail = `` 124 | if (result.ret == -9999) { 125 | // chavy.log(`${cookieName} updatemobile data: ${data}`) 126 | subtitle = `签到结果: 失败` 127 | detail = `说明: 未知` 128 | } else { 129 | if (result.ret == 0) { 130 | subtitle = `签到结果: 成功` 131 | if (result.data && result.data.show_text_1) detail = `说明: ${result.data.show_text_1}` 132 | else detail = `说明: ${result.msg}` 133 | } else if (result.ret == -2021) { 134 | subtitle = `签到结果: 成功(重复签到)` 135 | } 136 | } 137 | chavy.msg(title, subtitle, detail) 138 | }) 139 | } 140 | } 141 | 142 | function getexp(signresult) { 143 | const timestamp = Math.round(new Date().getTime() / 1000).toString() 144 | let url = { url: `https://vip.video.qq.com/fcgi-bin/comm_cgi?name=spp_PropertyNum&cmd=1&growth_value=1&otype=json&_=${timestamp}`, headers: { Cookie: cookieVal } } 145 | url.headers['User-Agent'] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.4 Safari/605.1.15' 146 | chavy.get(url, (error, response, data) => { 147 | chavy.log(`${cookieName}, data: ${data}`) 148 | let result = JSON.parse(data.match(/QZOutputJson=\(([^\)]*)\)/)[1]) 149 | const title = `${cookieName}` 150 | let subTitle = '' 151 | let detail = '' 152 | if (signresult.checkin_score) { 153 | subTitle = '签到结果: 成功' 154 | detail = `V力值: ${result.GrowthValue.num} (+${signresult.checkin_score}), 观影券: ${result.MovieTicket.num}, 赠片资格: ${result.GiveMovie.num}` 155 | } else { 156 | subTitle = '签到结果: 成功 (重复签到)' 157 | detail = `V力值: ${result.GrowthValue.num}, 观影券: ${result.MovieTicket.num}, 赠片资格: ${result.GiveMovie.num}` 158 | } 159 | chavy.msg(title, subTitle, detail) 160 | }) 161 | } 162 | 163 | function init() { 164 | isSurge = () => { 165 | return undefined === this.$httpClient ? false : true 166 | } 167 | isQuanX = () => { 168 | return undefined === this.$task ? false : true 169 | } 170 | getdata = (key) => { 171 | if (isSurge()) return $persistentStore.read(key) 172 | if (isQuanX()) return $prefs.valueForKey(key) 173 | } 174 | setdata = (key, val) => { 175 | if (isSurge()) return $persistentStore.write(key, val) 176 | if (isQuanX()) return $prefs.setValueForKey(key, val) 177 | } 178 | msg = (title, subtitle, body) => { 179 | if (isSurge()) $notification.post(title, subtitle, body) 180 | if (isQuanX()) $notify(title, subtitle, body) 181 | } 182 | log = (message) => console.log(message) 183 | get = (url, cb) => { 184 | if (isSurge()) { 185 | $httpClient.get(url, cb) 186 | } 187 | if (isQuanX()) { 188 | url.method = 'GET' 189 | $task.fetch(url).then((resp) => cb(null, resp, resp.body)) 190 | } 191 | } 192 | post = (url, cb) => { 193 | if (isSurge()) { 194 | $httpClient.post(url, cb) 195 | } 196 | if (isQuanX()) { 197 | url.method = 'POST' 198 | $task.fetch(url).then((resp) => cb(null, resp, resp.body)) 199 | } 200 | } 201 | done = (value = {}) => { 202 | $done(value) 203 | } 204 | return { isSurge, isQuanX, msg, log, getdata, setdata, get, post, done } 205 | } -------------------------------------------------------------------------------- /Script/vsco.js: -------------------------------------------------------------------------------- 1 | /* 2 | VSCO unlock vip 3 | 4 | QX: 5 | ^https?:\/\/vsco\.co\/api\/subscriptions\/2.1\/user-subscriptions\/ url script-response-body https://raw.githubusercontent.com/NobyDa/Script/master/QuantumultX/File/vsco.js 6 | 7 | Surge4: 8 | http-response ^https?:\/\/vsco\.co\/api\/subscriptions\/2.1\/user-subscriptions\/ requires-body=1,max-size=0,script-path=https://raw.githubusercontent.com/NobyDa/Script/master/QuantumultX/File/vsco.js 9 | 10 | Surge & QX MITM = vsco.co 11 | */ 12 | 13 | var body = $response.body; 14 | var url = $request.url; 15 | 16 | const path1 = '/api/subscriptions/2.1/user-subscriptions/'; 17 | 18 | let obj = JSON.parse(body); 19 | 20 | if (url.indexOf(path1) != -1) { 21 | obj.user_subscription["expires_on_sec"] = 1655536094; 22 | obj.user_subscription["expired"] = false; 23 | obj.user_subscription["payment_type"] = 2; 24 | obj.user_subscription["is_trial_period"] = true; 25 | obj.user_subscription["starts_on_sec"] = 1560831070; 26 | obj.user_subscription["is_active"] = true; 27 | obj.user_subscription["auto_renew"] = true; 28 | obj.user_subscription["last_verified_sec"] = 1560831070; 29 | obj.user_subscription["subscription_code"] = "VSCOANNUAL"; 30 | obj.user_subscription["user_id"] = 54624336; 31 | obj.user_subscription["source"] = 1; 32 | body = JSON.stringify(obj); 33 | } 34 | 35 | $done({body}); 36 | 37 | // 自用 转载需注明出处 38 | // TG频道: https://t.me/NobyDa -------------------------------------------------------------------------------- /Script/wb_ad.js: -------------------------------------------------------------------------------- 1 | /* 2 | README:https://github.com/yichahucha/surge/tree/master 3 | */ 4 | 5 | const path1 = "/groups/timeline"; 6 | const path2 = "/statuses/unread"; 7 | const path3 = "/statuses/extend"; 8 | const path4 = "/comments/build_comments"; 9 | const path5 = "/photo/recommend_list"; 10 | const path6 = "/stories/video_stream"; 11 | const path7 = "/statuses/positives/get"; 12 | const path8 = "/stories/home_list"; 13 | const path9 = "/profile/statuses"; 14 | const path10 = "/statuses/friends/timeline"; 15 | const path11 = "/service/picfeed"; 16 | const path12 = "/fangle/timeline"; 17 | const path13 = "/searchall"; 18 | const path14 = "/cardlist"; 19 | const path15 = "/statuses/video_timeline"; 20 | const path16 = "/page"; 21 | const path17 = "/statuses/friends_timeline"; 22 | const path18 = "/!/photos/pic_recommend_status"; 23 | 24 | const url = $request.url; 25 | var body = $response.body; 26 | 27 | if ( 28 | url.indexOf(path1) != -1 || 29 | url.indexOf(path2) != -1 || 30 | url.indexOf(path10) != -1 || 31 | url.indexOf(path15) != -1 || 32 | url.indexOf(path17) != -1 33 | ) { 34 | let obj = JSON.parse(body); 35 | if (obj.statuses) obj.statuses = filter_timeline_statuses(obj.statuses); 36 | if (obj.advertises) obj.advertises = []; 37 | if (obj.ad) obj.ad = []; 38 | if (obj.num) obj.num = obj.original_num; 39 | if (obj.trends) obj.trends = []; 40 | body = JSON.stringify(obj); 41 | } 42 | 43 | if (url.indexOf(path3) != -1) { 44 | let obj = JSON.parse(body); 45 | if (obj.trend) delete obj.trend; 46 | body = JSON.stringify(obj); 47 | } 48 | 49 | if (url.indexOf(path4) != -1) { 50 | let obj = JSON.parse(body); 51 | obj.recommend_max_id = 0; 52 | if (obj.status) { 53 | if (obj.top_hot_structs) { 54 | obj.max_id = obj.top_hot_structs.call_back_struct.max_id; 55 | delete obj.top_hot_structs; 56 | } 57 | if (obj.datas) obj.datas = filter_comments(obj.datas); 58 | } else { 59 | obj.datas = []; 60 | } 61 | body = JSON.stringify(obj); 62 | } 63 | 64 | if (url.indexOf(path5) != -1 || 65 | url.indexOf(path18) != -1) { 66 | let obj = JSON.parse(body); 67 | obj.data = {}; 68 | body = JSON.stringify(obj); 69 | } 70 | 71 | if (url.indexOf(path6) != -1) { 72 | let obj = JSON.parse(body); 73 | let segments = obj.segments; 74 | if (segments && segments.length > 0) { 75 | let i = segments.length; 76 | while (i--) { 77 | const element = segments[i]; 78 | let is_ad = element.is_ad; 79 | if (is_ad && is_ad == true) segments.splice(i, 1); 80 | } 81 | } 82 | body = JSON.stringify(obj); 83 | } 84 | 85 | if (url.indexOf(path7) != -1) { 86 | let obj = JSON.parse(body); 87 | obj.datas = []; 88 | body = JSON.stringify(obj); 89 | } 90 | 91 | if (url.indexOf(path8) != -1) { 92 | let obj = JSON.parse(body); 93 | obj.story_list = []; 94 | body = JSON.stringify(obj); 95 | } 96 | 97 | if (url.indexOf(path11) != -1) { 98 | let obj = JSON.parse(body); 99 | obj.data = []; 100 | body = JSON.stringify(obj); 101 | } 102 | 103 | if ( 104 | url.indexOf(path9) != -1 || 105 | url.indexOf(path12) != -1 || 106 | url.indexOf(path13) != -1 || 107 | url.indexOf(path14) != -1 || 108 | url.indexOf(path16) != -1 109 | ) { 110 | let obj = JSON.parse(body); 111 | if (obj.cards) obj.cards = filter_timeline_cards(obj.cards); 112 | body = JSON.stringify(obj); 113 | } 114 | 115 | $done({ body }); 116 | 117 | function filter_timeline_statuses(statuses) { 118 | if (statuses && statuses.length > 0) { 119 | let i = statuses.length; 120 | while (i--) { 121 | let element = statuses[i]; 122 | if (is_timeline_likerecommend(element.title)) statuses.splice(i, 1); 123 | if (is_timeline_ad(element)) statuses.splice(i, 1); 124 | } 125 | } 126 | return statuses; 127 | } 128 | 129 | function filter_comments(datas) { 130 | if (datas && datas.length > 0) { 131 | let i = datas.length; 132 | while (i--) { 133 | const element = datas[i]; 134 | let type = element.type; 135 | if (type == 5 || type == 1 || type == 6) datas.splice(i, 1); 136 | } 137 | } 138 | return datas; 139 | } 140 | 141 | function filter_timeline_cards(cards) { 142 | if (cards && cards.length > 0) { 143 | let j = cards.length; 144 | while (j--) { 145 | let item = cards[j]; 146 | let card_group = item.card_group; 147 | if (card_group && card_group.length > 0) { 148 | let i = card_group.length; 149 | while (i--) { 150 | let card_group_item = card_group[i]; 151 | let card_type = card_group_item.card_type; 152 | if (card_type && card_type == 9) { 153 | if (is_timeline_ad(card_group_item.mblog)) card_group.splice(i, 1); 154 | } else if (card_type && card_type == 118) { 155 | card_group.splice(i, 1); 156 | } else if (card_type && card_type == 42) { 157 | if (card_group_item.desc == '\u53ef\u80fd\u611f\u5174\u8da3\u7684\u4eba') { 158 | cards.splice(j, 1); 159 | break; 160 | } 161 | } 162 | } 163 | } else { 164 | let card_type = item.card_type; 165 | if (card_type && card_type == 9) { 166 | if (is_timeline_ad(item.mblog)) cards.splice(j, 1); 167 | } 168 | } 169 | } 170 | } 171 | return cards; 172 | } 173 | 174 | function is_timeline_ad(mblog) { 175 | if (!mblog) return false; 176 | let promotiontype = mblog.promotion && mblog.promotion.type && mblog.promotion.type == "ad"; 177 | let mblogtype = mblog.mblogtype && mblog.mblogtype == 1; 178 | return (promotiontype || mblogtype) ? true : false; 179 | } 180 | 181 | function is_timeline_likerecommend(title) { 182 | return title && title.type && title.type == "likerecommend" ? true : false; 183 | } 184 | -------------------------------------------------------------------------------- /Script/wb_launch.js: -------------------------------------------------------------------------------- 1 | /* 2 | README:https://github.com/yichahucha/surge/tree/master 3 | */ 4 | 5 | const path1 = "/interface/sdk/sdkad.php"; 6 | const path2 = "/wbapplua/wbpullad.lua"; 7 | 8 | const url = $request.url; 9 | var body = $response.body; 10 | 11 | if (url.indexOf(path1) != -1) { 12 | let re = /\{.*\}/; 13 | body = body.match(re); 14 | var obj = JSON.parse(body); 15 | if (obj.background_delay_display_time) obj.background_delay_display_time = 60*60*24*365; 16 | if (obj.show_push_splash_ad) obj.show_push_splash_ad = false; 17 | if (obj.ads) obj.ads = []; 18 | body = JSON.stringify(obj) + 'OK'; 19 | } 20 | 21 | if (url.indexOf(path2) != -1) { 22 | var obj = JSON.parse(body); 23 | if (obj.cached_ad && obj.cached_ad.ads) obj.cached_ad.ads = []; 24 | body = JSON.stringify(obj); 25 | } 26 | 27 | $done({body}); 28 | -------------------------------------------------------------------------------- /Script/wps.js: -------------------------------------------------------------------------------- 1 | /* 2 | 国区wps 3 | 4 | [MITM] 5 | hostname = account.wps.cn 6 | 7 | [Script] 8 | http-response ^https?:\/\/account\.wps\.cn\/api\/users requires-body=1,max-size=-1,script-path=https://raw.githubusercontent.com/eHpo1/Surge/master/Script/wps.js 9 | */ 10 | 11 | var obj = JSON.parse($response.body); 12 | 13 | var id = obj.userid; 14 | 15 | obj = { 16 | exp: 0, 17 | level: 3, 18 | privilege: [ 19 | { spid: "data_recover", times: 0, expire_time: 2524650109 }, 20 | { spid: "ocr", times: 0, expire_time: 1631619709 }, 21 | { spid: "pdf2doc", times: 0, expire_time: 1631619709 }, 22 | { spid: "pdf_merge", times: 0, expire_time: 2524650109 }, 23 | { spid: "pdf_sign", times: 0, expire_time: 1631619709 }, 24 | { spid: "pdf_split", times: 0, expire_time: 2524650109 } 25 | ], 26 | result: "ok", 27 | total_buy: 0, 28 | total_cost: -30, 29 | userid: 0000, 30 | vip: { 31 | name: "超级会员", 32 | has_ad: 0, 33 | memberid: 40, 34 | expire_time: 2524650109, 35 | enabled: [ 36 | { memberid: 40, name: "超级会员", expire_time: 2524650109 }, 37 | { memberid: 20, name: "WPS会员", expire_time: 2524650109 }, 38 | { memberid: 12, name: "稻壳会员", expire_time: 2524650109 } 39 | ] 40 | }, 41 | wealth: 0, 42 | expire_time: 2524650109 43 | }; 44 | 45 | obj.userid = id; 46 | 47 | $done({ body: JSON.stringify(obj) }); -------------------------------------------------------------------------------- /config.conf: -------------------------------------------------------------------------------- 1 | [general] 2 | excluded_routes = 192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12, 100.64.0.0/10, 17.0.0.0/8 3 | 4 | server_check_url = http://www.gstatic.cn/generate_404 5 | 6 | resource_parser_url= https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/master/Scripts/resource-parser.js 7 | 8 | geo_location_checker = http://ip-api.com/json/?lang=zh-CN, https://github.com/KOP-XIAO/QuantumultX/raw/master/Scripts/IP_API.js 9 | 10 | [dns] 11 | server = 1.2.4.8 12 | server = 182.254.116.116 13 | 14 | server=114.114.114.114 15 | server=202.141.176.93 16 | server=202.141.178.13 17 | server=117.50.10.10 18 | server=223.5.5.5 19 | server=119.29.29.29:53 20 | server=119.28.28.28 21 | 22 | server=/*.taobao.com/223.5.5.5 23 | server=/*.tmall.com/223.5.5.5 24 | server=/*.alipay.com/223.5.5.5 25 | server=/*.alicdn.com/223.5.5.5 26 | server=/*.aliyun.com/223.5.5.5 27 | server=/*.jd.com/119.28.28.28 28 | server=/*.qq.com/119.28.28.28 29 | server=/*.tencent.com/119.28.28.28 30 | server=/*.weixin.com/119.28.28.28 31 | server=/*.bilibili.com/119.29.29.29 32 | server=/hdslb.com/119.29.29.29 33 | server=/*.163.com/119.29.29.29 34 | server=/*.126.com/119.29.29.29 35 | server=/*.126.net/119.29.29.29 36 | server=/*.127.net/119.29.29.29 37 | server=/*.netease.com/119.29.29.29 38 | server=/*.mi.com/119.29.29.29 39 | server=/*.xiaomi.com/119.29.29.29 40 | 41 | # 策略 42 | [policy] 43 | # 其中 CMedia 策略组为中国媒体,GMedia 为国际媒体,Outside 为境外链接,Mainland 为大陆链接,Others 为最终规则 44 | static=AdBlock, reject, direct, img-url=https://raw.githubusercontent.com/an0na/R/master/Icon/AdBlock.png 45 | static=Apple, direct, Outside, img-url=https://raw.githubusercontent.com/an0na/R/master/Icon/Apple.png 46 | static=OTA, reject, direct, img-url=https://raw.githubusercontent.com/Koolson/Qure/master/IconSet/Apple_Update.png 47 | static=CMedia, direct, proxy, img-url=https://raw.githubusercontent.com/an0na/R/master/Icon/CMedia.png 48 | static=GMedia, Outside, direct, img-url=https://raw.githubusercontent.com/an0na/R/master/Icon/GMedia.png 49 | static=Netflix, Outside, direct, img-url=https://raw.githubusercontent.com/an0na/R/master/Icon/Netflix.png 50 | static=YouTube, Outside, direct, img-url=https://raw.githubusercontent.com/an0na/R/master/Icon/YouTube.png 51 | #网易云音乐灰色歌曲,需要节点支持解锁 52 | #证书:https://cdn.jsdelivr.net/gh/nondanee/UnblockNeteaseMusic@master/ca.crt 53 | static=Netease Music, direct, NeteaseMusicUnblock, img-url= https://raw.githubusercontent.com/an0na/R/master/Icon/Netease_Music.png 54 | static=NeteaseMusicUnblock, server-tag-regex=music|𝐌𝐮𝐬𝐢𝐜|Unbolck|云音乐, img-url= https://raw.githubusercontent.com/an0na/R/master/Icon/Netease_Music_Unlock.png 55 | static=Telegram, Outside, direct, img-url=https://raw.githubusercontent.com/an0na/R/master/Icon/Telegram_X.png 56 | static=Microsoft, direct, Outside, img-url=https://raw.githubusercontent.com/an0na/R/master/Icon/Microsoft.png 57 | static=PayPal, Outside, direct, img-url=https://raw.githubusercontent.com/an0na/R/master/Icon/PayPal.png 58 | static=Outside, proxy, direct, img-url=https://raw.githubusercontent.com/an0na/R/master/Icon/Outside.png 59 | static=Mainland, direct, proxy, img-url=https://raw.githubusercontent.com/an0na/R/master/Icon/Mainland.png 60 | static=Speedtest, Outside, direct, img-url=https://raw.githubusercontent.com/an0na/R/master/Icon/Speedtest.png 61 | static=Others, Outside, direct, img-url=https://raw.githubusercontent.com/an0na/R/master/Icon/Others.png 62 | 63 | [server_remote] 64 | #Mini 把 https://www.baidu.com 替换为你自己使用的节点订阅地址 65 | https://www.baidu.com, tag=Mini, as-policy=available, img-url=https://raw.githubusercontent.com/an0na/R/master/Icon/China.png, update-interval=86400, opt-parser=false, enabled=true 66 | #Netease Music:https://git.io/JfNq3 67 | https://raw.githubusercontent.com/an0na/R/master/Ext/NeteaseMusic.list, tag=Netease Music, img-url=https://raw.githubusercontent.com/an0na/R/master/Icon/Netease_Music_Unlock.png, update-interval=2592000, opt-parser=true, enabled=true 68 | 69 | [filter_remote] 70 | #去广告 71 | #AdBlock 72 | https://raw.githubusercontent.com/an0na/R/master/Filter/AdBlock.list, tag=AdBlock, update-interval=2592000, opt-parser=false, enabled=true 73 | https://limbopro.com/Adblock4limbo.list, tag=Adblock4limbo, update-interval=604800, opt-parser=false, enabled=true 74 | #Netease Music 75 | https://raw.githubusercontent.com/an0na/R/master/Filter/NeteaseMusic.list, tag=Netease Music, force-policy=Netease Music, update-interval=2592000, opt-parser=true, enabled=true 76 | #Netflix 77 | https://raw.githubusercontent.com/an0na/R/master/Filter/Netflix.list, tag=Netflix, update-interval=2592000, opt-parser=false, enabled=true 78 | #YouTube 79 | https://raw.githubusercontent.com/an0na/R/master/Filter/YouTube.list, tag=YouTube, update-interval=2592000, opt-parser=false, enabled=true 80 | #Microsoft 81 | https://raw.githubusercontent.com/an0na/R/master/Filter/Microsoft.list, tag=Microsoft, update-interval=2592000, opt-parser=false, enabled=true 82 | #CMedia 83 | https://raw.githubusercontent.com/an0na/R/master/Filter/CMedia.list, tag=CMedia, update-interval=2592000, opt-parser=false, enabled=true 84 | #GMedia 85 | https://raw.githubusercontent.com/an0na/R/master/Filter/GMedia.list, tag=GMedia, update-interval=2592000, opt-parser=false, enabled=true 86 | #PayPal 87 | https://raw.githubusercontent.com/an0na/R/master/Filter/PayPal.list, tag=PayPal, update-interval=2592000, opt-parser=false, enabled=true 88 | #Speedtest 89 | https://raw.githubusercontent.com/an0na/R/master/Filter/Speedtest.list, tag=Speedtest, update-interval=2592000, opt-parser=false, enabled=true 90 | #Telegram 91 | https://raw.githubusercontent.com/an0na/R/master/Filter/Telegram.list, tag=Telegram, update-interval=2592000, opt-parser=false, enabled=true 92 | #Outside 93 | https://raw.githubusercontent.com/an0na/R/master/Filter/Outside.list, tag=Outside, update-interval=2592000, opt-parser=false, enabled=true 94 | #Mainland 95 | https://raw.githubusercontent.com/an0na/R/master/Filter/Mainland.list, tag=Mainland, update-interval=2592000, opt-parser=false, enabled=true 96 | #Apple 97 | https://raw.githubusercontent.com/an0na/R/master/Filter/Apple.list, tag=Apple, update-interval=2592000, opt-parser=false, enabled=true 98 | 99 | [rewrite_remote] 100 | #BoxJs 101 | https://raw.githubusercontent.com/chavyleung/scripts/master/box/rewrite/boxjs.rewrite.quanx.conf, tag=BoxJs, update-interval=604800, opt-parser=false, enabled=true 102 | #Rewrite 103 | https://raw.githubusercontent.com/an0na/R/master/Rewrite/Rewrite.conf, tag=Rewrite, update-interval=2592000, opt-parser=false, enabled=true 104 | #Bilibili 105 | https://raw.githubusercontent.com/an0na/R/master/Rewrite/Bilibili.conf, tag=Bilibili, update-interval=604800, opt-parser=false, enabled=true 106 | https://raw.githubusercontent.com/zZPiglet/Task/master/UnblockURLinWeChat.conf, tag=WeChat, update-interval=604800, opt-parser=false, enabled=true 107 | https://limbopro.com/Adblock4limbo.conf, tag=Adblock4limbo, update-interval=604800, opt-parser=false, enabled=true 108 | https://raw.githubusercontent.com/app2smile/rules/master/module/spotify.conf, tag=Spotify解锁, update-interval=604800, opt-parser=false, enabled=true 109 | #Cookies 110 | https://raw.githubusercontent.com/an0na/R/master/Rewrite/Cookies.conf, tag=Cookies, update-interval=2592000, opt-parser=false, enabled=false 111 | #Price 112 | https://raw.githubusercontent.com/an0na/R/master/Rewrite/Price.conf, tag=Price, update-interval=2592000, opt-parser=false, enabled=false 113 | 114 | [server_local] 115 | 116 | [filter_local] 117 | host-suffix, local, direct 118 | ip-cidr, 10.0.0.0/8, direct 119 | ip-cidr, 17.0.0.0/8, direct 120 | ip-cidr, 100.64.0.0/10, direct 121 | ip-cidr, 127.0.0.0/8, direct 122 | ip-cidr, 172.16.0.0/12, direct 123 | ip-cidr, 192.168.0.0/16, direct 124 | # 绕过企业证书过期 125 | host, ocsp.apple.com, reject 126 | # 屏蔽系统更新 127 | host, ns.itunes.apple.com, OTA 128 | host, appldnld.apple.com, OTA 129 | host, mesu.apple.com, OTA 130 | host, xp.apple.com, OTA 131 | host, gdmf.apple.com, OTA 132 | 133 | geoip, cn, Mainland 134 | final, Others 135 | 136 | [task_local] 137 | event-interaction https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/master/Scripts/streaming-ui-check.js, tag=流媒体-解锁查询, img-url=checkmark.seal.system, enabled=true 138 | 139 | [rewrite_local] 140 | 141 | [mitm] 142 | passphrase = DlerCloud 143 | p12 = MIIJKQIBAzCCCO8GCSqGSIb3DQEHAaCCCOAEggjcMIII2DCCA48GCSqGSIb3DQEHBqCCA4AwggN8AgEAMIIDdQYJKoZIhvcNAQcBMBwGCiqGSIb3DQEMAQYwDgQI3fJWfZaNaxgCAggAgIIDSCr2zGhO28dMTINwrCLFUrAePu+yc98x5cpqeACRV6fgBYfamVTP705koLsh0Ex98azK5w5yTm5kVeW2kBsTN23j6sYYy8mvYzsECYzjPy6EUnTjcvAazejxofO/p5mB/ErHDGNXhS++2Q/bvMHTIDpmuvCPnjVePpiBz3E8kAV0CqW+XNWMjMVyITWEJF729LC9IxttznCISZzENzoYHMLBXJExEOnia68Mv4PezOah+Op1ZcJfXZb/f5gSmdCJKmVTDl2fKS7BCPltDgttgBFCHRbgEP2DVsWHuZnnvDoW0GgR+WAdFQnv+Rf6tZ2Y4TIg4T/ko+yLLSbUludm6Ymueb06OXWrM7bqmBR5RqrQRQkIbzDJZ7mnyzYJySp7Jt9IhTmavl3O+vH7bfWD0VmNVOI54yVFETfGq+L+crDdL2MosKMxlKnQa2DrOHVFahwocQd0S5y5I25hieODjoogGOndS08tax7BDNC6YE/H/rQ+F3Eb9kK8ec1mj/HSwvKSX6/360ftR9/f96mAQ+SFi+TF7Y6S8RBtUhy9ioJGV5adQqnHcDkYxRM/ajhPF4KCLSpSqNclZ7jRBmNi48GeDV6CmqaR9CFERzEY/5jn5cDJjskHvmB3O0v2CPZq6EiAQP8r29GBq3RoSjIQCRM0lozGedaXlfWJZq9XAoGGyICeLfLdnbOemRBEreAzhQBdhz1NUygpUU1tI9UaqYy2a8M8hUKsl/AkaMs816iIV6IXfAl5jTbj68S1zgn0pPqDYEPLpjniMAqr6iCmUv07oJJrb3Ybe3oQ+Bb3XKgTQo98s50sBYNw9mOHSTfYxGMCCQXzXUH6lGviy7AW18T0b85RUtWrRCTnH2xKqE/0m70KCkLzNjLJCPuQIkzZ5VraPGKqsWtOt+4aOfwqyY5n7bxl41C7FFlW1Xyl4QGuKOD/BCB3R0gekgXfD9fIKZdany0YhI9DWyWLvzqar0i0e/6t0DborLfLSuDZfbXI7rkcdM76ApC12Io0yo12XxZkgejYeTri3vjMbtKVYZ0R99OikMimPs+GIg5KAB79u0Mj9c3D4/eYw8NpGrlwrpko0sjlC99WZIpJe0tQlNaWKh0lGH29VDCCBUEGCSqGSIb3DQEHAaCCBTIEggUuMIIFKjCCBSYGCyqGSIb3DQEMCgECoIIE7jCCBOowHAYKKoZIhvcNAQwBAzAOBAhaEE/1daqfgQICCAAEggTIceK6BIQs8ZhGQ04mZ3BOqELL08KS3sYlGskG4EhCUawbsUI3TXFoXuJV1A9je0uWw2drTdicIK9unJJkxsvNLkJsQnORQBFyNS3XIiRbUrJka7SvF0p7fqB+eVM1jiG1CEP2sQ4uQ0BrtZZ0Aaqv7Pi33OrR/9w79K1iGWYGOD/eqp4UmIPCuFWPJ3zta9iD1lTXhl7FlDBlW6JY1/b5lRqsh2CP4W5rvXvyFoL5XjDHshFVtVC/Z/wKdI5m8zCOh6a/D94gk5qiRYGPqlAra56Sebe7b2a/iDKe2rNqL76DQj2PgeqnrVL95L8lgkDoWD0FUpTt4TwyWiK8DIEwux/MqtYJYuqxHzg1NSalNLBcDN/GDaGB3HkQ7L9Fm6eQnqQUXqJ9UrBy+UqhlnAGagoYrkUkrlzFSGE8CIvBi/L1gSND9dVzi8at5FglA2fV57Xg3McN2h/ox5C/uafFYuoBDrDtNE8J7s6zGGlWwqysuvMnmic5wiu4hHYn6Ydiw/BMfNjlnNSQjis7KDoon9yght7Gaot3Of5fgmJ+sAZSqHsZ3EcgIiEBPLjtMWY+gyOJ3HDhcc3Xobi/aIBfoYKTJR/Uox3oH4wL5iLHbF33aJBDC53Zb6/jxZow1esx+qdf+aXWhto9BPWpl/ZupOLuC5w0QPVmbIniCW3OzywxD1jK2HbNfQvDR+vTVaXCakp8B9dnHnj9I9DQYRdpQ39WmU+vt/x8tNJj31aivIg097YcgKfvfRm1bZ3xk9tKGQvxtftvmZAPN/MCRugptz7UH2QS2hjiOIpAbQHoyLpcLMEeOXokD2ITaYeZRjHe2v/BsWg5nbIb/eknFA5TJb51VJwjJJayrlT+jSvpF4RhNe6xm9I45fUPxfByDibzvAZByfXXLZRccNr0VQxBUIyaIVnqJZjcE+6e5PSc1jmK4qft6U1cwJKJTbcQUOsfW9HYP3705tm1+YN1DcdTrCzBIY6P/YeqYvtWaVoQPKHkWTmitOyvmK7+ebtB+0BU4/kgKzgkg5/Be/6ylGfkGYeKMUwe3Ir/edze55sbDaNHpj/mm2FOimNTS6BPBjjjmSwZYNEInOoVIVBVJ3Gyk9gspoZhOBfZN94+eqaCGjlmN354Sowxn4qYkpG1iU/Ta+1rNQoiGPKpKQw/P10rwss6FqC92OsPVGx0m9ba1lWW4UZKuhSkaYFfQwREt5R4ULdbToUOGVug5dq27rquGaP75E+gRAqVqmNb+oUPUW4qc8+jg3qr9AEulf0iCgTrMKirVAuqVDYTaxDgiDZNSAVZVzM43QRa7eXoX8Q16BU3T2h4Ug2H52vFC8xHARnpKgHO+5IY+Jmcu1CyDZD6sjwrSBSSWSvek+L4/8Wx8/IqyADnifA0VL5BcBIZ0TBn1+J8n72zqyf//Jo8ArsAdXZQjsMlncIj0ExJLz81s2eRurz6zSSCyryZDVp63i4odCrcQEbwtU0AvGToh+juch4JS7lQUuzFdrlmCNVTBLTMVEMUeNDd35a0Jp/n1fDnu5gYfX1JLlcDCEvVgGGXcPk5Naz2KzKCP3L8ghjTUxCNuo9qCIX+NZ0aNkRmDOzdqYbO4XIwpIjxZlVGW79CP4hiK2qjYUWEMSUwIwYJKoZIhvcNAQkVMRYEFE3xOZ+wrYQDW41V+Cj2OUJ6emEQMDEwITAJBgUrDgMCGgUABBTROXmDbpHtaAz/G0iTdJ3JDfw2DAQI59HRQ27QxqYCAggA 144 | --------------------------------------------------------------------------------