├── LICENSE ├── README.md ├── arknights.py ├── click_to_run.bat ├── init_script.sh ├── install_ubuntu.sh ├── setup_mitmproxy.sh └── update_run.sh /LICENSE: -------------------------------------------------------------------------------- 1 | 本项目仅供参考学习使用 2 | 禁止一切未经允许的传播 -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 利用mitmproxy实现时段外登陆 2 | ***本教程仅供参考学习使用,严禁用于其他用途*** 3 | ## 步骤大纲: 4 | 1. **搭建代理服务器** 5 | 2. **配置客户端** 6 | 3. **B服需要在法定时间登陆一次** 7 | 4. **完成** 8 | ## 步骤一 搭建代理服务器 9 | > 代理服务器,相当于一个每时每刻都在监视或修改网络数据的工具,我们需要根据系统对它先进行搭建 10 | **找到自己的系统按教程进行即可** 11 | ### 安卓系统 12 | 1. 服务端在安卓系统搭建是通过termux进行的,我们需要先下载termux 13 | [termux下载地址](https://f-droid.org/packages/com.termux/) 14 | (进去找到最新版本点下载APK即可) 15 | [下载速度慢可以用网盘](https://pan.baidu.com/s/1L3P_Uq-1zngROkQYrXICuQ) 16 | 提取码:mrfz 17 | 2. 自行安装termux并打开 18 | 3. 进行liunx环境的安装,复制下面这段命令到termux,并回车,按照指示安装即可(整个过程请保持网络通畅,这是失败的主要原因) 19 | ``` 20 | bash <(curl -s -S -L https://gitee.com/jxr2006/ark-fatigue/raw/main/install_ubuntu.sh) 21 | ``` 22 | **注意:update的时候需要手动输入两次y** 23 | *这一步有时候会失败,大部分是网络问题,多试几遍即可* 24 | ![安装](https://images.gitee.com/uploads/images/2021/1029/150552_e616577b_7638561.png "Screenshot_20211029-130639.png") 25 | ▲安装 26 | ![输入图片说明](https://images.gitee.com/uploads/images/2021/1029/151352_a8987044_7638561.png "Screenshot_20211029-130954.png") 27 | ▲安装完成效果 28 | 4. 显示`进入ubuntu`后,输入下面这行命令来安装mitmproxy 29 | ``` 30 | bash <(curl -s -S -L https://gitee.com/jxr2006/ark-fatigue/raw/main/setup_mitmproxy.sh) 31 | ``` 32 | *注意:期间需要设置时区,请先后输入6(亚洲),70,70(上海)* 33 | ![安装](https://images.gitee.com/uploads/images/2021/1029/150845_6a3ea038_7638561.png "Screenshot_20211029-131025.png") 34 | ▲安装mitmproxy 35 | ![设置大洲](https://images.gitee.com/uploads/images/2021/1029/150922_8390d541_7638561.png "Screenshot_20211028-180953.png") 36 | ▲输入6 37 | ![设置城市](https://images.gitee.com/uploads/images/2021/1029/150954_21fd196b_7638561.png "Screenshot_20211029-131316.png") 38 | ▲输入70,应该要输入两次 39 | 5. 显示`mitmproxy`安装完成后,输入下面这行命令来导入并运行程序 40 | ``` 41 | bash <(curl -s -S -L https://gitee.com/jxr2006/ark-fatigue/raw/main/init_script.sh) 42 | ``` 43 | ![运行](https://images.gitee.com/uploads/images/2021/1029/152114_41ac3f3a_7638561.png "Screenshot_20211029-130149.png") 44 | ▲再次打开termux将自动更新并运行代码 45 | 6. 设置完四位端口后,代理服务器已经搭建完毕,可以进入客户端的配置 46 | ***之后每次登陆前请确保termux上的程序已经开始运行(启动termux默认运行,也可以输入`python3 arknights.py`来运行)*** 47 | ### Windows 48 | 1. 去[mitmproxy官网](https://mitmproxy.org/#mitmproxy)选择windows版本下载,自行安装(如果是windows10以下版本需要下载[mitmproxy5.3.0](https://mitmproxy.org/downloads/)的mitmproxy-5.3.0-windows-installer.exe) 49 | ![点击下载windows版本](https://images.gitee.com/uploads/images/2021/1023/174442_e05b8115_7638561.png "8%XI4@WA652P]RL{[LX67]7.png") 50 | ![安装](https://images.gitee.com/uploads/images/2021/1023/174603_4fddf567_7638561.png "K{[0DZ1$H2RBA]24$5C48KU.png") 51 | 2. 下载click_to_run.bat到一个新建的文件夹(下载最新版本的即可) 52 | ![bat下载](https://images.gitee.com/uploads/images/2021/1031/183618_46bdefdc_7638561.png "3GS8R}@%6[~M@8}4`NY)F56.png") 53 | 3. 运行click_to_run.bat,接下来进行客户端(模拟器)的设置 54 | ## 步骤二 配置客户端 55 | > 客户端,既运行游戏的系统,我们需要将其对服务端进行对接,使服务端能够监视或修改客户端的数据 56 | #### 以下所有步骤需要在代理服务器运行程序后进行 57 | ### 安卓系统 58 | 由于直接在主机配置wifi网络需要来回切换,直接在真机上容易出自动登录证书问题,且流量党无法使用,这里介绍使用安卓虚拟机的办法 59 | *注意:termux服务端若安装在同一手机上,需要安装在真机,而不是虚拟机* 60 | 1. 下载Vmos pro破解版 61 | [网盘地址](https://pan.baidu.com/s/1MIis1SuL_Yvhm2bbj2jQLQ) 62 | 提取码mrfz 63 | 2. 添加虚拟机,选择安卓7.1 64位 精简版 64 | 3. 通过浏览器下载方舟,或者打开文件传输,把方舟导入虚拟机,或者下载或导入b站及taptap,再下载方舟;请进入游戏下载完游戏文件 65 | 4. 关闭虚拟机,打开root权限,此时推荐把竖屏模式关闭,如果以后想在后台刷关的话可以打开后台保活 66 | ![打开root](https://images.gitee.com/uploads/images/2021/1029/235430_edafce17_7638561.png "Screenshot_20211029-234106.png") 67 | ▲打开右上角root开关 68 | ![设置竖屏模式](https://images.gitee.com/uploads/images/2021/1029/235618_94df6e0b_7638561.png "Screenshot_20211029-234321.png") 69 | ▲关闭竖屏模式 70 | ![后台保活](https://images.gitee.com/uploads/images/2021/1029/235647_3ea354bf_7638561.png "Screenshot_20211029-235607.png") 71 | ▲打开后台保活 72 | 5. 设置->WLAN->选择连接的VMOSwifi长按–>修改网络–>高级选项,将代理选项设置为手动,在代理服务器主机名中填写`127.0.0.1`,在端口上填写你在搭建服务端时输入的端口,完成设置后点击保存即可 73 | ![设置代理](https://images.gitee.com/uploads/images/2021/1029/235926_5eb1b7b9_7638561.png "Screenshot_20211029-234219.png") 74 | ▲设置wifi代理 75 | 6. 在虚拟机浏览器打开`http://mitm.it`,点击安卓的第一个选项下载,随后打开,会需要设置锁屏密码,跳出证书安装器,起一个英文名字,确认即可 76 | ![安装证书](https://images.gitee.com/uploads/images/2021/1030/000152_c3704100_7638561.png "Screenshot_20211029-234515.png") 77 | ▲安装安卓证书(绿色的第一个选项) 78 | ***如果网站打开异常,请检查上一步代理服务器的程序是否运行,端口和地址设置是否无问题*** 79 | 7. 在文件传输中找到ES文件浏览器下载,运行 80 | ![下载ES文件浏览器](https://images.gitee.com/uploads/images/2021/1030/000553_2658aad7_7638561.png "Screenshot_20211029-234403.png") 81 | ▲上图中的MT管理器暂时无法在虚拟机内使用 82 | 8. 进入/data/misc/user/0/cacerts-added文件夹,剪切你刚刚安装的证书(名字不是你刚刚设置的。如果没有安装过其他证书,应该只有一个文件) 83 | 9. 进入/etc/security/cacerts文件夹,粘贴证书到系统证书目录 84 | 10. 在设置->安全->信任的凭据->系统下面能找到你设置的证书名字,则说明安装成功 85 | ### 模拟器 86 | 1. 打开cmd 87 | ![打开cmd](https://images.gitee.com/uploads/images/2021/1023/195404_22b4d808_7638561.png "]_LNKLG~{~~A0EH0}VTTDDE.png") 88 | 2. 输入ipconfig查看自己的ip地址 89 | ![查看ip](https://images.gitee.com/uploads/images/2021/1023/195606_47f602f1_7638561.png "QZ}5F329IO7M{3@MX%}FVOG.png") 90 | 3. 进入模拟器(我这里用的是mumu模拟器),设置WiFi代理为手动,地址为自己ip,端口为8008 91 | ![设置代理](https://images.gitee.com/uploads/images/2021/1023/195942_49555077_7638561.png "OH2I)_LP%GSZPO5ZR1``ZEG.png") 92 | 4. 在浏览器打开`http://mitm.it`,下载安卓证书并安装(期间会设置锁屏密码,并起一个英文名字) 93 | ![下载证书](https://images.gitee.com/uploads/images/2021/1023/200126_aa850b70_7638561.png "]5O5A1WM1VVH6%[ZQK0{D}6.png") 94 | 5. 打开模拟器root权限 95 | ![设置root](https://images.gitee.com/uploads/images/2021/1023/200444_82fbb766_7638561.png "0~7(7}QA(M~H%1@95E}@WOS.png") 96 | 6. 打开模拟器的文件浏览器,打开超级用户模式 97 | ![设置超级用户模式](https://images.gitee.com/uploads/images/2021/1023/200541_70e10cbb_7638561.png "7IW%{[EST7SU_%0[2RLT3@D.png") 98 | 7. 进入/data/misc/user/0/cacerts-added文件夹,选中你刚刚安装的证书(名字不是你刚刚设置的。如果没有安装过其他证书,应该只有一个文件) 99 | ![选中证书](https://images.gitee.com/uploads/images/2021/1023/201059_1d928ee3_7638561.png "FOX}~RJ1U@MD71J31Q609%L.png") 100 | 8. 进入/etc/security/cacerts文件夹,粘贴选中的证书到系统证书目录 101 | ![粘贴](https://images.gitee.com/uploads/images/2021/1023/201128_13686839_7638561.png "R1_K9]X`1~N6PKLS{U`~$$4.png") 102 | 9. 在设置->安全->信任的凭据->系统下面能找到你设置的证书名字,则说明安装成功 103 | ![查看](https://images.gitee.com/uploads/images/2021/1023/201502_ee7e839a_7638561.png "4_)$HF6DD89M@75W6GLWIW5.png") 104 | 10. ***之后每次登陆前请确保click_to_run.bat已经开始运行(另外,如果更换了网络导致ip变化,请重新执行第2,3步)*** 105 | ## 步骤三 \在法定时间内登陆 106 | 由于要获取正常时段的用户信息来实现时段外登陆,你需要在时段内登陆一次 107 | ## 步骤四 完工! 108 | 你已经可以在时段外登陆了,不过要注意,闪断更新和大更新会刷新服务器数据导致B服登陆数据失效,需要下一次法定时间登陆来获得新的登陆信息 109 | **最后要说的是,不要过度的投入以影响到自己的学业哟~** 110 | ## 注意事项 111 | - **登录过程中一定需要打开代理服务器程序来获得登录信息** 112 | - **输入命令的时候请确认输入法没有导致命令修改** 113 | - **如果想将代理服务器和客户端用于不同设备,则客户端的地址需要设置为服务端ip地址,端口设置为服务端端口** 114 | - **更新游戏的时候可以关闭代理,更新完再打开** 115 | ## 其他 116 | - 手机端的代码在termux启动时代码会自动更新,电脑端运行click_to_run.bat时会下载新版本代码 117 | - *此项目为我一人花了一周的研究成果,由于课业紧张,难免会有疏忽 118 | **请勿随意传播此教程(◍˃̶ᗜ˂̶◍)✩** 119 | -------------------------------------------------------------------------------- /arknights.py: -------------------------------------------------------------------------------- 1 | #此代码经过混淆,要源码请加qq 2 | VERSION ='v2.2.1.8'#line:1 3 | PULISH_TIME ='2021-11-07 16-37-00'#line:2 4 | import time as O0000O0000Q0000 #line:4 5 | import os as O00QQ0OO00O0 #line:5 6 | Q00000QOOOOO00O =O0000O0000Q0000 .strftime ('%Y-%m-%d %H-%M-%S')#line:6 7 | if O00QQ0OO00O0 .name =='nt':#line:7 8 | from colorama import init #line:8 9 | init (autoreset =True )#line:9 10 | def O00OOO00000O00OO00000O (*OOOOOOOO0OO0O0OO0 ,conf =[(1 ,36 ,48 )]):#line:11 11 | print (''.join (['\033[%s;%s;%sm%s\033[0m'%(conf [OO0OO0000O00000OO if OO0OO0000O00000OO <=len (conf )-1 else len (conf )-1 ][0 ],conf [OO0OO0000O00000OO if OO0OO0000O00000OO <=len (conf )-1 else len (conf )-1 ][1 ],conf [OO0OO0000O00000OO if OO0OO0000O00000OO <=len (conf )-1 else len (conf )-1 ][2 ],OOOOOOOO0OO0O0OO0 [OO0OO0000O00000OO ])for OO0OO0000O00000OO in range (len (OOOOOOOO0OO0O0OO0 ))]))#line:12 12 | OO00000OOQ000O ='╔══════════════════════════════════════╗\n'+'║ 程序开始时间: %s%s║\n'%(Q00000QOOOOO00O ,((60 if O00QQ0OO00O0 .name =='nt'else 22 )-len (Q00000QOOOOO00O ))*' ')+'╠══════════════════════════════════════╣\n'+'║ 程序版本: %s%s║\n'%(VERSION ,((64 if O00QQ0OO00O0 .name =='nt'else 26 )-len (VERSION ))*' ')+'╠══════════════════════════════════════╣\n'+'║ 程序修改时间: %s%s║\n'%(PULISH_TIME ,((60 if O00QQ0OO00O0 .name =='nt'else 22 )-len (PULISH_TIME ))*' ')+'╚══════════════════════════════════════╝'#line:14 13 | O00OOO00000O00OO00000O (OO00000OOQ000O ,conf =[(1 ,32 ,48 )])#line:15 14 | import mitmproxy .http as mp #line:17 15 | import re as O00000QQQ00 #line:18 16 | import json as OQ00000000OO0QO #line:19 17 | p =O00QQ0OO00O0 .getcwd ().replace ('\\','/')+'/'#line:21 18 | if not O00QQ0OO00O0 .path .exists (p +'ark_history'):#line:22 19 | O00QQ0OO00O0 .makedirs (p +'ark_history')#line:23 20 | his =p +'ark_history/'+Q00000QOOOOO00O #line:24 21 | with open (his ,'w',encoding ='utf-8')as f :#line:25 22 | f .write (OO00000OOQ000O +'\n\n')#line:26 23 | f .close ()#line:27 24 | try :#line:28 25 | f =open (p +'ark_data.json','r+',encoding ='utf-8')#line:29 26 | data =f .read ()#line:30 27 | except Exception as e :#line:31 28 | print (e )#line:32 29 | f =open (p +'ark_data.json','w',encoding ='utf-8')#line:33 30 | data ='{}'#line:34 31 | try :#line:35 32 | data =OQ00000000OO0QO .loads (data )#line:36 33 | O00OOOQ0000O0000O00OO0 =OQ00000000OO0QO .dumps (data ,indent =2 ,separators =(', ',': '),ensure_ascii =False )#line:37 34 | f .seek (0 )#line:38 35 | f .truncate ()#line:39 36 | f .write (O00OOOQ0000O0000O00OO0 )#line:40 37 | f .close ()#line:41 38 | except Exception as e :#line:42 39 | O00OOO00000O00OO00000O ('加载ark_data.json时出错:\r\n',e ,conf =[(1 ,33 ,48 ),(1 ,31 ,48 )])#line:43 40 | data ={}#line:44 41 | O00OOOQ0000O0000O00OO0 ='{}(加载出错,已将其作为空处理)'#line:45 42 | O00OOO00000O00OO00000O ('data文件内容:\r\n',O00OOOQ0000O0000O00OO0 ,conf =[(1 ,36 ,48 ),(1 ,33 ,48 )])#line:46 43 | del f #line:47 44 | del O00OOOQ0000O0000O00OO0 #line:48 45 | def O00OOO00000OO00O00OO0 ():#line:50 46 | return True if O0000O0000Q0000 .localtime ().tm_hour ==20 else False #line:51 47 | class O00OOO00000O00OO0O0 :#line:53 48 | heartbeat ='http://line.*?realO0000O0000Q0000.*?api.biligame.net/app/v2/time/heartbeat'#line:54 49 | login_1 ='https://p.biligame.com/api/external/user.token.oauth.login/v3'#line:55 50 | login_2 ='https://line.*?sdk.*?center.*?login.*?biligame.*?/api/external/login/v3'#line:56 51 | login_3 ='https://line.*?sdk.*?center.*?login.*?biligame.*?/api/external/user.token.oauth.login/v3'#line:57 52 | login_4 ='https://line.*?sdk.*?center.*?login.*?biligame.*?/api/external/token.exchange/v3'#line:58 53 | get_token ='https://as.hypergryph.com/u8/user/v1/getToken'#line:59 54 | account_login ='https://.*?hypergryph.com/account/login'#line:60 55 | remote_config ='https://ak.*?conf.hypergryph.com/config/prod/.*?/remote_config'#line:61 56 | hyper ='https://.*?hypergryph.com'#line:62 57 | time_conf ='https://line.*?realO0000O0000Q0000.*?api.biligame.net/app/time/conf'#line:63 58 | gf_auth ='https://as.hypergryph.com/user/auth'#line:64 59 | gf_login ='https://as.hypergryph.com/user/login'#line:65 60 | ping ='https://.*?hypergryph.com/online/v1/ping'#line:66 61 | login_out ='https://.*?hypergryph.com/online/v1/loginout'#line:67 62 | hyper_host ='hypergryph'#line:68 63 | bili_host ='biligame'#line:69 64 | account_sync ='https://ak-gs-b.hypergryph.com/account/syncData'#line:70 65 | def umatch (OO000O0OOO0OOOOO0 ,*OO0O000O0OOOOO000 ):#line:72 66 | return False in (O00000QQQ00 .match (O00OO000000O0OOO0 ,OO000O0OOO0OOOOO0 )==None for O00OO000000O0OOO0 in OO0O000O0OOOOO000 )or True in (O00OOO00OO00OO0O0 in OO000O0OOO0OOOOO0 for O00OOO00OO00OO0O0 in OO0O000O0OOOOO000 )#line:73 67 | class O00OOO00000OO000OO0 :#line:75 68 | def response (O00O0OO00000000OO ,O00OO0O00000000OO :mp .HTTPFlow ):#line:76 69 | if not O00OOO00000O00OO0O0 .umatch (O00OO0O00000000OO .request .url ,O00OOO00000O00OO0O0 .hyper_host ,O00OOO00000O00OO0O0 .bili_host ):#line:77 70 | return #line:78 71 | O0O000O0OO0O00O0O ='\n\n\n=================='+O0000O0000Q0000 .strftime ('%Y-%m-%d %H:%M:%S')+'===============\n'#line:79 72 | O0O000O0OO0O00O0O +='请求url: '+O00OO0O00000000OO .request .url +'\n'#line:80 73 | O0O000O0OO0O00O0O +='请求头'+str (O00OO0O00000000OO .request .headers )+'\n'#line:81 74 | try :#line:82 75 | O0O000O0OO0O00O0O +=('请求体: '+O00OO0O00000000OO .request .get_text ()if O00OO0O00000000OO .request .get_text ()!=None else '')+'\n'#line:83 76 | except :#line:84 77 | O0O000O0OO0O00O0O +='请求体: '+'(decode失败或者为空)'#line:85 78 | O0O000O0OO0O00O0O +='状态码: '+str (O00OO0O00000000OO .response .status_code )+'\n'#line:86 79 | O0O000O0OO0O00O0O +='返回头'+str (O00OO0O00000000OO .response .headers )+'\n'#line:87 80 | try :#line:88 81 | O0O000O0OO0O00O0O +='返回体: '+O00OO0O00000000OO .response .text if O00OO0O00000000OO .response .text !=None else ''#line:89 82 | except :#line:90 83 | O0O000O0OO0O00O0O +='返回体: '+'(decode失败或者为空)'#line:91 84 | global his #line:92 85 | with open (his ,'a+',encoding ='utf-8')as O0OO0OO000O0O0OO0 :#line:93 86 | O0OO0OO000O0O0OO0 .write (O0O000O0OO0O00O0O )#line:94 87 | O0OO0OO000O0O0OO0 .close ()#line:95 88 | class O00OOO00000O00OO0000O0O :#line:97 89 | def request (O0OO00OO0OOO0O0O0 ,OO0OO00OOOO0O0O0O :mp .HTTPFlow ):#line:98 90 | O0O0O0OOO00OO000O =OO0OO00OOOO0O0O0O .request .url #line:99 91 | if O00OOO00000O00OO0O0 .umatch (O0O0O0OOO00OO000O ,O00OOO00000O00OO0O0 .account_login )and not O00OOO00000OO00O00OO0 ():#line:100 92 | O00OOO00000O00OO00000O ('当前为时间段外')#line:101 93 | OO0OOO0OOO0000O0O =[OO0OOO00O0O00O0O0 for OO0OOO00O0O00O0O0 in data if data [OO0OOO00O0O00O0O0 ]['uid']==int (OQ00000000OO0QO .loads (OO0OO00OOOO0O0O0O .request .get_content ())['uid'])]#line:102 94 | O000OOO0O00O0OOOO =OO0OOO0OOO0000O0O [0 ]if len (OO0OOO0OOO0000O0O )>=1 else None #line:103 95 | del OO0OOO0OOO0000O0O #line:104 96 | if O000OOO0O00O0OOOO :#line:105 97 | OO0OO00OOOO0O0O0O .request .host ='none.com'#line:106 98 | O000O0OO00OOOOO00 =bytes (OQ00000000OO0QO .dumps ({'result':0 ,'uid':str (data [O000OOO0O00O0OOOO ]['uid']),'secret':data [O000OOO0O00O0OOOO ]['secret']if 'secret'in data [O000OOO0O00O0OOOO ]else None ,'serviceLicenseVersion':0 }),encoding ='utf-8')#line:112 99 | OO0OO00OOOO0O0O0O .response =mp .Response .make (status_code =200 ,content =O000O0OO00OOOOO00 ,headers ={'Cache-Control':'no-cache','Content-Length':bytes (len (O000O0OO00OOOOO00 )),'Content-Type':'application/json; charset=utf-8','Date':'Sat, 06 Nov 2021 13:41:52 GMT','seqnum':bytes (str (data [O000OOO0O00O0OOOO ]['seqnum']),encoding ='utf-8')},)#line:123 100 | del O000O0OO00OOOOO00 #line:124 101 | O00OOO00000O00OO00000O ('已进行返回头和返回体修改:\r\n',str (OO0OO00OOOO0O0O0O .response .headers )+'\r\n'+OO0OO00OOOO0O0O0O .response .text ,conf =[(1 ,36 ,48 ),(1 ,33 ,48 )])#line:125 102 | else :#line:126 103 | O00OOO00000O00OO00000O ('查找不到此账号信息,','请在法定时间内登陆一次','以获得账号信息',conf =[(1 ,36 ,48 ),(1 ,31 ,48 ),(1 ,36 ,48 )])#line:127 104 | elif O00OOO00000O00OO0O0 .umatch (O0O0O0OOO00OO000O ,O00OOO00000O00OO0O0 .login_out )and not O00OOO00000OO00O00OO0 ():#line:128 105 | OO0OO00OOOO0O0O0O .request .host ='none.com'#line:129 106 | OO0OO00OOOO0O0O0O .response =mp .Response .make (status_code =200 ,content =b'{"result":0}',headers ={'Cache-Control':'no-cache','Content-Length':'12','Content-Type':'application/json; charset=utf-8','Date':'Sat, 06 Nov 2021 13:41:52 GMT','Vary':'origin'},)#line:140 107 | def response (OO0OO00OO0OO0OOOO ,OO0OO0O000O0000OO :mp .HTTPFlow ):#line:142 108 | global data #line:143 109 | OOOOOOOOO0O00O00O =OO0OO0O000O0000OO .request .url #line:144 110 | OO0O00O0O000000OO =False #line:145 111 | if O00OOO00000O00OO0O0 .umatch (OOOOOOOOO0O00O00O ,O00OOO00000O00OO0O0 .remote_config ):#line:146 112 | OO0OO00OO0OOOO000 =OQ00000000OO0QO .loads (OO0OO0O000O0000OO .response .content )#line:147 113 | OO0OO00OO0OOOO000 ['enableBestHttp']=False #line:148 114 | OO0OO0O000O0000OO .response .set_text (OQ00000000OO0QO .dumps (OO0OO00OO0OOOO000 ))#line:149 115 | O00OOO00000O00OO00000O ('修改完remote_config')#line:150 116 | elif O00OOO00000O00OO0O0 .umatch (OOOOOOOOO0O00O00O ,O00OOO00000O00OO0O0 .time_conf ):#line:151 117 | OO0OO00OO0OOOO000 =OQ00000000OO0QO .loads (OO0OO0O000O0000OO .response .content )#line:152 118 | OO0OO00OO0OOOO000 ['recEnable']='false'#line:153 119 | OO0OO0O000O0000OO .response .set_text (OQ00000000OO0QO .dumps (OO0OO00OO0OOOO000 ))#line:154 120 | O00OOO00000O00OO00000O ('对time-config完成修改')#line:155 121 | elif O00OOO00000O00OO0O0 .umatch (OOOOOOOOO0O00O00O ,O00OOO00000O00OO0O0 .get_token ):#line:156 122 | O00OOO00000O00OO00000O ('getToken包内容:\r\n',OO0OO0O000O0000OO .response .text ,conf =[(1 ,36 ,48 ),(1 ,33 ,48 )])#line:157 123 | if OO0OO0O000O0000OO .response .status_code !=200 :#line:158 124 | O00OOO0O00O0000O0 =[O0OO0OOO0O0O00OO0 for O0OO0OOO0O0O00OO0 in data if data [O0OO0OOO0O0O00OO0 ]['login']['access_key']==OQ00000000OO0QO .loads (OQ00000000OO0QO .loads (OO0OO0O000O0000OO .request .get_content ())['extension'])['access_token']]#line:159 125 | O00O0O0O00O0O0O0O =O00OOO0O00O0000O0 [0 ]if len (O00OOO0O00O0000O0 )>=1 else None #line:160 126 | del O00OOO0O00O0000O0 #line:161 127 | if O00O0O0O00O0O0O0O :#line:162 128 | OO0OO0O000O0000OO .response .status_code =200 #line:163 129 | OO0OO00OO0OOOO000 ={'result':0 ,'error':'','uid':str (data [O00O0O0O00O0O0O0O ]['uid']),'channelUid':int (O00O0O0O00O0O0O0O ),'token':data [O00O0O0O00O0O0O0O ]['token'],'isGuest':0 ,'extension':'{\"nickName\":\"'+data [O00O0O0O00O0O0O0O ]['login']['uname']+'\"}'if OQ00000000OO0QO .loads (OO0OO0O000O0000OO .request .text )['channelId']=='2'else '{\"isGuest\":false}'}#line:172 130 | OO0OO0O000O0000OO .response .set_text (OQ00000000OO0QO .dumps (OO0OO00OO0OOOO000 ))#line:173 131 | O00OOO00000O00OO00000O ('密钥获取错误,已进行返回体修改:\r\n',OO0OO0O000O0000OO .response .text ,conf =[(1 ,36 ,48 ),(1 ,33 ,48 )])#line:174 132 | else :#line:175 133 | O00OOO00000O00OO00000O ('查找不到此账号信息,','请在法定时间内登陆一次','以获得账号信息',conf =[(1 ,36 ,48 ),(1 ,31 ,48 ),(1 ,36 ,48 )])#line:176 134 | else :#line:177 135 | OO0OO00OO0OOOO000 =OQ00000000OO0QO .loads (OO0OO0O000O0000OO .response .content )#line:178 136 | O00OOO0O00O0000O0 =[OOO000O00O00000O0 for OOO000O00O00000O0 in data if int (OOO000O00O00000O0 )==OO0OO00OO0OOOO000 ['channelUid']]#line:179 137 | O00O0O0O00O0O0O0O =O00OOO0O00O0000O0 [0 ]if len (O00OOO0O00O0000O0 )>=1 else None #line:180 138 | del O00OOO0O00O0000O0 #line:181 139 | OOO0OOO00OO0O0O00 =OQ00000000OO0QO .loads (OQ00000000OO0QO .loads (OO0OO0O000O0000OO .request .get_content ())['extension'])['access_token']#line:182 140 | if O00O0O0O00O0O0O0O :#line:183 141 | data [O00O0O0O00O0O0O0O ]['login']['access_key']=OOO0OOO00OO0O0O00 #line:184 142 | data [O00O0O0O00O0O0O0O ]['uid']=int (OO0OO00OO0OOOO000 ['uid'])#line:185 143 | data [O00O0O0O00O0O0O0O ]['token']=OO0OO00OO0OOOO000 ['token']#line:186 144 | OO0O00O0O000000OO =True #line:187 145 | O00OOO00000O00OO00000O ('正常获得token')#line:188 146 | elif OQ00000000OO0QO .loads (OO0OO0O000O0000OO .request .text )['channelId']=='1':#line:189 147 | O00O00000O00OOOO0 =str (OO0OO00OO0OOOO000 ['channelUid'])#line:190 148 | if O00O00000O00OOOO0 in data :#line:191 149 | data [O00O00000O00OOOO0 ]['login']['access_key']=OOO0OOO00OO0O0O00 #line:192 150 | data [O00O00000O00OOOO0 ]['uid']=int (OO0OO00OO0OOOO000 ['uid'])#line:193 151 | data [O00O00000O00OOOO0 ]['token']=OO0OO00OO0OOOO000 ['token']#line:194 152 | OO0O00O0O000000OO =True #line:195 153 | O00OOO00000O00OO00000O ('检测到官服账号成功登陆,已同步账号信息')#line:196 154 | else :#line:197 155 | data [str (OO0OO00OO0OOOO000 ['channelUid'])]={'login':{'access_key':OOO0OOO00OO0O0O00 ,},'uid':int (OO0OO00OO0OOOO000 ['uid']),'seqnum':'1','token':OO0OO00OO0OOOO000 ['token'],}#line:205 156 | OO0O00O0O000000OO =True #line:206 157 | O00OOO00000O00OO00000O ('检测到官服新账号成功登陆,已建立账号信息')#line:207 158 | del O00O00000O00OOOO0 #line:208 159 | else :#line:209 160 | O00OOO00000O00OO00000O ('正常获得token,但未获得账号信息,','请在法定时间内重新登陆一次','以获得账号信息',conf =[(1 ,36 ,48 ),(1 ,31 ,48 ),(1 ,36 ,48 )])#line:210 161 | del OOO0OOO00OO0O0O00 #line:211 162 | elif O00OOO00000O00OO0O0 .umatch (OOOOOOOOO0O00O00O ,O00OOO00000O00OO0O0 .account_login )and O00OOO00000OO00O00OO0 ():#line:212 163 | O00OOO00000O00OO00000O ('account/login包内容:\r\n',OO0OO0O000O0000OO .response .text ,conf =[(1 ,36 ,48 ),(1 ,33 ,48 )])#line:213 164 | OO0OO00OO0OOOO000 =OQ00000000OO0QO .loads (OO0OO0O000O0000OO .response .content )#line:214 165 | O00OOO0O00O0000O0 =[O000000000O0O0O0O for O000000000O0O0O0O in data if data [O000000000O0O0O0O ]['uid']==int (OQ00000000OO0QO .loads (OO0OO0O000O0000OO .request .get_content ())['uid'])]#line:215 166 | O00O0O0O00O0O0O0O =O00OOO0O00O0000O0 [0 ]if len (O00OOO0O00O0000O0 )>=1 else None #line:216 167 | del O00OOO0O00O0000O0 #line:217 168 | if O00O0O0O00O0O0O0O :#line:218 169 | if OO0OO00OO0OOOO000 ['result']==0 :#line:219 170 | data [O00O0O0O00O0O0O0O ]['secret']=OO0OO00OO0OOOO000 ['secret']#line:220 171 | OO0O00O0O000000OO =True #line:221 172 | O00OOO00000O00OO00000O ('正常获得secret,已保存')#line:222 173 | else :#line:223 174 | O00OOO00000O00OO00000O ('法定时间段内登陆失败,原因未知')#line:224 175 | else :#line:225 176 | O00OOO00000O00OO00000O ('查找不到此账号信息,','请在法定时间内登陆一次','以获得账号信息',conf =[(1 ,36 ,48 ),(1 ,31 ,48 ),(1 ,36 ,48 )])#line:226 177 | elif O00OOO00000O00OO0O0 .umatch (OOOOOOOOO0O00O00O ,O00OOO00000O00OO0O0 .account_sync ):#line:227 178 | OO0OO00OO0OOOO000 =OQ00000000OO0QO .loads (OO0OO0O000O0000OO .response .content )#line:228 179 | if (OO0OO00OO0OOOO000 ['msg']=='stale sequence number'if 'msg'in OO0OO00OO0OOOO000 else False ):#line:229 180 | try :#line:230 181 | O00OOO0O00O0000O0 =[O0O00O0O000O0O0OO for O0O00O0O000O0O0OO in data if data [O0O00O0O000O0O0OO ]['uid']==int (OO0OO0O000O0000OO .request .headers ['uid'])]#line:231 182 | O00O0O0O00O0O0O0O =O00OOO0O00O0000O0 [0 ]if len (O00OOO0O00O0000O0 )>=1 else None #line:232 183 | del O00OOO0O00O0000O0 #line:233 184 | if O00O0O0O00O0O0O0O :#line:234 185 | data [O00O0O0O00O0O0O0O ]['seqnum']=str (int (data [O00O0O0O00O0O0O0O ]['seqnum'])+2000 )#line:235 186 | OO0O00O0O000000OO =True #line:236 187 | O00OOO00000O00OO00000O ('同步账号信息异常,已经尝试增加seqnum',conf =[(1 ,31 ,48 )])#line:237 188 | else :#line:238 189 | O00OOO00000O00OO00000O ('查找不到此账号信息,','请在法定时间内登陆一次','以获得账号信息',conf =[(1 ,36 ,48 ),(1 ,31 ,48 ),(1 ,36 ,48 )])#line:239 190 | except Exception as OOOO0O0OOO0000O00 :#line:240 191 | O00OOO00000O00OO00000O ('同步账号信息异常,尝试增加seqnum失败:',OOOO0O0OOO0000O00 ,conf =[(1 ,31 ,48 )])#line:241 192 | elif (OO0OO00OO0OOOO000 ['message']=='invalid version'if 'message'in OO0OO00OO0OOOO000 else False ):#line:242 193 | O00OOO00000O00OO00000O ('同步数据时服务器返回invalid version,官服未解决,若是b服可能是上一次登陆信息未保存或者闪断更新导致',conf =[(1 ,31 ,48 )])#line:243 194 | elif 'msg'in OO0OO00OO0OOOO000 or 'message'in OO0OO00OO0OOOO000 :#line:244 195 | O00OOO00000O00OO00000O ('未知错误',conf =[(1 ,31 ,48 )])#line:245 196 | else :#line:246 197 | O00OOO00000O00OO00000O ('同步账号信息正常')#line:247 198 | elif O00OOO00000O00OO0O0 .umatch (OOOOOOOOO0O00O00O ,O00OOO00000O00OO0O0 .hyper ):#line:248 199 | O00OOO00000O00OO00000O ('[%s]游戏数据包url: '%O0000O0000Q0000 .strftime ('%H:%M:%S'),OOOOOOOOO0O00O00O ,conf =[(1 ,36 ,48 ),(1 ,33 ,48 )])#line:249 200 | if not 'seqnum'in OO0OO0O000O0000OO .response .headers :#line:250 201 | return #line:251 202 | O00OOO0O00O0000O0 =[OOO0OO00OO000OOO0 for OOO0OO00OO000OOO0 in data if data [OOO0OO00OO000OOO0 ]['uid']==int (OO0OO0O000O0000OO .request .headers ['uid'])]#line:252 203 | O00O0O0O00O0O0O0O =O00OOO0O00O0000O0 [0 ]if len (O00OOO0O00O0000O0 )>=1 else None #line:253 204 | del O00OOO0O00O0000O0 #line:254 205 | if O00O0O0O00O0O0O0O :#line:255 206 | if (OO0OO0O000O0000OO .response .headers ['seqnum']!='null'):#line:256 207 | data [O00O0O0O00O0O0O0O ]['seqnum']=OO0OO0O000O0000OO .response .headers ['seqnum']#line:257 208 | OO0O00O0O000000OO =True #line:258 209 | O00OOO00000O00OO00000O ('已保存编号: '+str (OO0OO0O000O0000OO .response .headers ['seqnum']))#line:259 210 | else :#line:260 211 | O00OOO00000O00OO00000O ('未检测到编号,可能是上一次登陆信息未保存或者闪断更新导致',conf =[(1 ,31 ,48 )])#line:261 212 | else :#line:262 213 | O00OOO00000O00OO00000O ('查找不到此账号信息,','请在法定时间内登陆一次','以获得账号信息',conf =[(1 ,36 ,48 ),(1 ,31 ,48 ),(1 ,36 ,48 )])#line:263 214 | if OO0O00O0O000000OO :#line:264 215 | with open (p +'ark_data.json','w',encoding ='utf-8')as O00OO000O0O0O0OOO :#line:265 216 | O00OO000O0O0O0OOO .write (OQ00000000OO0QO .dumps (data ,indent =2 ,separators =(', ',': '),ensure_ascii =False ))#line:266 217 | O00OO000O0O0O0OOO .close ()#line:267 218 | class O00OOO00000OOO00000OO0 :#line:269 219 | ""#line:285 220 | def response (O00OO00000O0OO0OO ,O000OOOO00O00000O :mp .HTTPFlow ):#line:286 221 | global data #line:287 222 | OO0000OO00O00O00O =O000OOOO00O00000O .request .url #line:288 223 | OOO00OOO00OOO0O00 =False #line:289 224 | if O00OOO00000O00OO0O0 .umatch (OO0000OO00O00O00O ,O00OOO00000O00OO0O0 .heartbeat ):#line:290 225 | O00O0000OO00OOO0O =OQ00000000OO0QO .loads (O000OOOO00O00000O .response .content )#line:291 226 | O00OOO00000O00OO00000O ('heartbeat包内容:\r\n',O000OOOO00O00000O .response .text ,conf =[(1 ,36 ,48 ),(1 ,33 ,48 )])#line:292 227 | if (O00O0000OO00OOO0O ['data']['user_info']['adult_status']==0 ):#line:293 228 | O00O0000OO00OOO0O ['data']['trigger_status']=0 #line:294 229 | O00O0000OO00OOO0O ['data']['event_list']=[]#line:295 230 | O000OOOO00O00000O .response .set_text (OQ00000000OO0QO .dumps (O00O0000OO00OOO0O ))#line:296 231 | O00OOO00000O00OO00000O ('检测到未成年人,已进行返回体修改:\r\n',O000OOOO00O00000O .response .text ,conf =[(1 ,36 ,48 ),(1 ,33 ,48 )])#line:297 232 | else :#line:298 233 | O00OOO00000O00OO00000O ('检测到已经成年,未进行修改')#line:299 234 | elif O00OOO00000O00OO0O0 .umatch (OO0000OO00O00O00O ,O00OOO00000O00OO0O0 .login_1 ,O00OOO00000O00OO0O0 .login_2 ,O00OOO00000O00OO0O0 .login_3 ,O00OOO00000O00OO0O0 .login_4 ):#line:300 235 | O00O0000OO00OOO0O =OQ00000000OO0QO .loads (O000OOOO00O00000O .response .content )#line:301 236 | O00OOO00000O00OO00000O ('向BililiGame SDK服务器登陆包内容:\r\n',O000OOOO00O00000O .response .text ,conf =[(1 ,36 ,48 ),(1 ,33 ,48 )])#line:302 237 | OOOOOO0OOO0OOO0O0 =[O0O00OOO0OO0O0OOO for O0O00OOO0OO0O0OOO in data if data [O0O00OOO0OO0O0OOO ]['login']['access_key']==O000OOOO00O00000O .request .urlencoded_form ['access_key']or (str (data [O0O00OOO0OO0O0OOO ]['login']['uuid'])==O000OOOO00O00000O .request .urlencoded_form ['user_id']if 'user_id'in O000OOOO00O00000O .request .urlencoded_form else False )]#line:303 238 | OOO0O00OOO0OOO0OO =OOOOOO0OOO0OOO0O0 [0 ]if len (OOOOOO0OOO0OOO0O0 )>=1 else None #line:304 239 | del OOOOOO0OOO0OOO0O0 #line:305 240 | if O00O0000OO00OOO0O ['code']!=0 :#line:306 241 | if OOO0O00OOO0OOO0OO :#line:307 242 | O00O0000OO00OOO0O ['code']=0 #line:308 243 | O00000QQQ00 .pop ('message')#line:309 244 | O00O0000OO00OOO0O ['access_key']=data [OOO0O00OOO0OOO0OO ]['login']['access_key']#line:310 245 | O00O0000OO00OOO0O ['uid']=int (OOO0O00OOO0OOO0OO )#line:311 246 | O00O0000OO00OOO0O ['face']=data [OOO0O00OOO0OOO0OO ]['login']['face']#line:312 247 | O00O0000OO00OOO0O ['s_face']=data [OOO0O00OOO0OOO0OO ]['login']['s_face']#line:313 248 | O00O0000OO00OOO0O ['uname']=data [OOO0O00OOO0OOO0OO ]['login']['uname']#line:314 249 | O00O0000OO00OOO0O ['expires']=int (O0000O0000Q0000 .time ()+3000000 )#line:315 250 | O000OOOO00O00000O .response .set_text (OQ00000000OO0QO .dumps (O00O0000OO00OOO0O ))#line:316 251 | O00OOO00000O00OO00000O ('检测到登陆code问题,已进行返回体修改:\r\n',O000OOOO00O00000O .response .text ,conf =[(1 ,36 ,48 ),(1 ,33 ,48 )])#line:317 252 | if not 'uuid'in data [str (O00O0000OO00OOO0O ['uid'])]['login']or data [str (O00O0000OO00OOO0O ['uid'])]['login']['uuid']==O00O0000OO00OOO0O ['uid']or data [str (O00O0000OO00OOO0O ['uid'])]['login']['uuid']=='':#line:318 253 | O00OOO00000O00OO00000O ('检测到此账号登录时的账号、手机号码或邮箱未保存,请自行输入登录时的账号,只有一次机会,注意不要输错:',conf =[(1 ,36 ,41 )])#line:319 254 | data [str (O00O0000OO00OOO0O ['uid'])]['login']['uuid']=str (input ())#line:320 255 | OOO00OOO00OOO0O00 =True #line:321 256 | else :#line:322 257 | O00OOO00000O00OO00000O ('查找不到此账号信息,','请在法定时间内登陆一次','以获得账号信息',conf =[(1 ,36 ,48 ),(1 ,31 ,48 ),(1 ,36 ,48 )])#line:323 258 | else :#line:324 259 | if OOO0O00OOO0OOO0OO :#line:325 260 | data [OOO0O00OOO0OOO0OO ]['login']['face']=O00O0000OO00OOO0O ['face']#line:326 261 | data [OOO0O00OOO0OOO0OO ]['login']['s_face']=O00O0000OO00OOO0O ['s_face']#line:327 262 | data [OOO0O00OOO0OOO0OO ]['login']['uname']=O00O0000OO00OOO0O ['uname']#line:328 263 | OOO00OOO00OOO0O00 =True #line:329 264 | O00OOO00000O00OO00000O ('检测到b服成功登陆,已同步账号信息')#line:330 265 | if not 'uuid'in data [str (O00O0000OO00OOO0O ['uid'])]['login']or data [str (O00O0000OO00OOO0O ['uid'])]['login']['uuid']==O00O0000OO00OOO0O ['uid']or data [str (O00O0000OO00OOO0O ['uid'])]['login']['uuid']=='':#line:331 266 | O00OOO00000O00OO00000O ('检测到此账号登录时的账号、手机号码或邮箱未保存,请自行输入登录时的账号,只有一次机会,注意不要输错:',conf =[(1 ,36 ,41 )])#line:332 267 | data [str (O00O0000OO00OOO0O ['uid'])]['login']['uuid']=str (input ())#line:333 268 | else :#line:334 269 | data [str (O00O0000OO00OOO0O ['uid'])]={'login':{'access_key':O00O0000OO00OOO0O ['access_key'],'face':O00O0000OO00OOO0O ['face'],'s_face':O00O0000OO00OOO0O ['s_face'],'uname':O00O0000OO00OOO0O ['uname'],'uuid':''},'uid':None ,'seqnum':1 ,'token':None ,'secret':None }#line:347 270 | OOO00OOO00OOO0O00 =True #line:348 271 | if len (O000OOOO00O00000O .request .urlencoded_form ['uid'])>=1 :#line:349 272 | data [str (O00O0000OO00OOO0O ['uid'])]['login']['uuid']=O000OOOO00O00000O .request .urlencoded_form ['uid']#line:350 273 | O00OOO00000O00OO00000O ('检测到新账号成功登陆,已建立账号信息')#line:351 274 | elif not 'uuid'in data [str (O00O0000OO00OOO0O ['uid'])]['login']or data [str (O00O0000OO00OOO0O ['uid'])]['login']['uuid']==O00O0000OO00OOO0O ['uid']or data [str (O00O0000OO00OOO0O ['uid'])]['login']['uuid']=='':#line:352 275 | O00OOO00000O00OO00000O ('检测到此账号登录时的账号、手机号码或邮箱未保存,请自行输入登录时的账号,只有一次机会,注意不要输错:',conf =[(1 ,36 ,41 )])#line:353 276 | data [str (O00O0000OO00OOO0O ['uid'])]['login']['uuid']=str (input ())#line:354 277 | if OOO00OOO00OOO0O00 :#line:355 278 | with open (p +'ark_data.json','w',encoding ='utf-8')as OOOOOO00O0OOO0O0O :#line:356 279 | OOOOOO00O0OOO0O0O .write (OQ00000000OO0QO .dumps (data ,indent =2 ,separators =(', ',': '),ensure_ascii =False ))#line:357 280 | OOOOOO00O0OOO0O0O .close ()#line:358 281 | ''' 282 | def error(self, flow: mp.HTTPFlow): 283 | pass 284 | '''#line:362 285 | class O00OOO00000000O00OOOOOOOO000 :#line:364 286 | def response (O000O00000000OO0O ,OO0O00OO0O0OO00O0 :mp .HTTPFlow ):#line:365 287 | OO00O0000O000000O =OO0O00OO0O0OO00O0 .request .url #line:366 288 | if O00OOO00000O00OO0O0 .umatch (OO00O0000O000000O ,O00OOO00000O00OO0O0 .gf_login ,O00OOO00000O00OO0O0 .gf_auth ):#line:367 289 | O00OO0OO0O000O0OO =OQ00000000OO0QO .loads (OO0O00OO0O0OO00O0 .response .content )#line:368 290 | O00OO0OO0O000O0OO ['isMinor']=False #line:369 291 | OO0O00OO0O0OO00O0 .response .set_text (OQ00000000OO0QO .dumps (O00OO0OO0O000O0OO ))#line:370 292 | elif O00OOO00000O00OO0O0 .umatch (OO00O0000O000000O ,O00OOO00000O00OO0O0 .ping ):#line:371 293 | O00OO0OO0O000O0OO ={'result':0 ,'message':'OK','interval':5400 ,'timeLeft':-1 ,'alertTime':600 }#line:378 294 | OO0O00OO0O0OO00O0 .response .set_text (OQ00000000OO0QO .dumps (O00OO0OO0O000O0OO ))#line:379 295 | addons =[O00OOO00000OO000OO0 (),O00OOO00000O00OO0000O0O (),O00OOO00000OOO00000OO0 (),O00OOO00000000O00OOOOOOOO000 ()]#line:386 296 | if __name__ =='__main__':#line:388 297 | from mitmproxy import options #line:389 298 | from mitmproxy .tools .dump import DumpMaster #line:390 299 | O00OOO00000O00OO00000O ('请输入数字设置抓包端口(尽量大于1000,必须小于等于65535):')#line:391 300 | port =int (input ())#line:392 301 | opts =options .Options (listen_host ='127.0.0.1',listen_port =port )#line:393 302 | m =DumpMaster (options =opts )#line:394 303 | try :#line:395 304 | O00OOO00000O00OO00000O ('开始抓包,请确保wifi代理地址设置为127.0.0.1,端口为%d,如未下载证书可现在下载'%port )#line:396 305 | m .addons .add (*addons )#line:397 306 | m .run ()#line:398 307 | except :#line:399 308 | O00OOO00000O00OO00000O ('写入data文件内容:\r\n'+OQ00000000OO0QO .dumps (data ,indent =2 ,separators =(', ',': '),ensure_ascii =False ),conf =[(1 ,33 ,48 )])#line:400 309 | m .shutdown () 310 | -------------------------------------------------------------------------------- /click_to_run.bat: -------------------------------------------------------------------------------- 1 | powershell (new-object System.Net.WebClient).DownloadFile('https://gitee.com/jxr2006/ark-fatigue/raw/main/arknights.py','%~dp0arknights.py') 2 | mitmweb -p 8008 -s %~dp0arknights.py -------------------------------------------------------------------------------- /init_script.sh: -------------------------------------------------------------------------------- 1 | # !/bin/bash 2 | 3 | cd /root 4 | curl -o .bash_profile https://gitee.com/jxr2006/ark-fatigue/raw/main/update_run.sh 5 | bash /root/.bash_profile -------------------------------------------------------------------------------- /install_ubuntu.sh: -------------------------------------------------------------------------------- 1 | # !$PATH/bash 2 | # 换termux源 3 | sed -i 's@^\(deb.*stable main\)$@#\1\ndeb https://mirrors.tuna.tsinghua.edu.cn/termux/termux-packages-24 stable main@' $PREFIX/etc/apt/sources.list 4 | sed -i 's@^\(deb.*games stable\)$@#\1\ndeb https://mirrors.tuna.tsinghua.edu.cn/termux/game-packages-24 games stable@' $PREFIX/etc/apt/sources.list.d/game.list 5 | sed -i 's@^\(deb.*science stable\)$@#\1\ndeb https://mirrors.tuna.tsinghua.edu.cn/termux/science-packages-24 science stable@' $PREFIX/etc/apt/sources.list.d/science.list 6 | 7 | echo -e '\033[1;34;47m将开始安装ubuntu,请确保网络通畅,期间有些选项需要输入y\033[0m 8 | \033[1;34m输入1并回车来确认,输入其他则终止进程:\033[0m' 9 | read res 10 | test $res = '1' || (echo -e '进程被手动终止'; exit) 11 | # update 12 | dpkg --configure -a 13 | echo -e '\033[1;33m开始安装update\033[0m' 14 | pkg update -y || (echo -e '\033[1;33;41mupdate失败\033[0m'; exit) 15 | # 安装proot-distro 16 | echo -e '\033[1;33m开始安装proot-distro\033[0m' 17 | pkg install proot-distro -y || (echo -e '\033[1;33;41mproot-distro安装失败\033[0m'; exit) 18 | # 安装ubuntu 19 | echo -e '\033[1;33m开始安装ubuntu\033[0m' 20 | sed -i 's@"https://github.com@"https://ghproxy.com/https://github.com@g' $ANDROID_DATA/data/com.termux/files/usr/etc/proot-distro/ubuntu.sh 21 | proot-distro install ubuntu || (echo -e '\033[1;33;41mubuntu安装失败\033[0m'; exit) 22 | echo 'proot-distro login ubuntu' > ~/.bashrc 23 | # 登陆ubuntu 24 | echo -e '\033[1;34m开始运行ubuntu\033[0m' 25 | proot-distro login ubuntu || (echo -e '\033[1;33;41mubuntu运行失败\033[0m'; exit) -------------------------------------------------------------------------------- /setup_mitmproxy.sh: -------------------------------------------------------------------------------- 1 | # !/bin/bash 2 | # 换源 3 | sed -i s@ports.ubuntu.com/ubuntu-ports@mirrors.tuna.tsinghua.edu.cn/ubuntu-ports@g /etc/apt/sources.list 4 | echo 'nameserver 8.8.8.8 5 | nameserver 8.8.4.4' > /etc/resolv.conf 6 | #update&upgrade 7 | echo -e '\033[1;33m开始安装update\033[0m' 8 | apt-get update -y || echo -e '\033[1;33;41mupdate失败\033[0m' 9 | echo -e '\033[1;33m开始安装upgrade\033[0m' 10 | apt-get upgrade -y || echo -e '\033[1;33;41mupgrade失败\033[0m' 11 | #安装python和pip 12 | echo -e '\033[1;33m开始安装python\033[0m 13 | \033[1;34;47m期间将进行时区设置,请先后输入6(Asia),70,70(Shanghai)\033[0m 14 | \033[1;34m输入1并回车来确认,输入其他则终止进程:\033[0m' 15 | read res 16 | test $res = '1' || echo -e '进程被手动终止' 17 | apt-get install python3 -y || echo -e '\033[1;33;41mpython安装失败\033[0m' 18 | echo -e '\033[1;33m开始安装python3-pip\033[0m' 19 | apt-get install pip -y || echo -e '\033[1;33;41mpip安装失败\033[0m' 20 | #安装mitmproxy 21 | echo -e '\033[1;33m开始安装mitmproxy\033[0m' 22 | pip install mitmproxy -i https://pypi.tuna.tsinghua.edu.cn/simple || echo -e '\033[1;33;41mpython3-pip安装失败\033[0m' 23 | 24 | echo -e '\033[1;34;42mmitmproxy安装完毕\033[0m' -------------------------------------------------------------------------------- /update_run.sh: -------------------------------------------------------------------------------- 1 | # !/bin/bash 2 | cd /root 3 | curl -O https://gitee.com/jxr2006/ark-fatigue/raw/main/arknights.py 4 | echo -e '\033[1;34;47m开始运行抓包程序\033[0m 5 | \033[1;34m输入1并回车来确认,输入其他则终止进程(终止后可以输入python3 arknights.py来运行):\033[0m' 6 | read res 7 | test $res = '1' && python3 /root/arknights.py || echo -e '取消运行程序' --------------------------------------------------------------------------------