这是新版本(3.3.1)云运动代跑脚本,可以进行云运动全自动代跑。接口是合肥工业大学特化(可能)的版本,细节会在后面说明。
提前说明:本项目是针对合工大翡翠湖校区的,用的是新版本的接口,其他学校接口一样或者其他校区也可以用,只不过要配置,下面会有详细的教程。这个仓库比较适合有基础的同学。
2024/10/12:
合并ANormalDD代码,提供屯溪路校区地图和自动抓包(配置教程见proxy.md)支持。
允许传递参数执行main.py
,提供./tools/EasyAutoRunServer/run.sh
批量并行运行多个config的任务,配合crontab即可定时批量运行跑步任务(挂一个云服务器上就可以全自动)。
2024/9/21:其实我什么都没干,然后它自己又能过了,实锤了是学校服务器问题。
注意事项:
2024/9/10:给points添加了时间戳数据,目前已经通过splitPointCheating接口测试,finish包还没过测试(神tm要求大二在2月到7月跑步,穿越时空是吧,看上去学校忘记调时间了)
2024/5/3:更新随机提速脚本,用python复现了Ma-minghao/Yunyundong (github.com),因为原作者说python不熟...
2024/5/2:更新了一个小工具,用java实现了端到端的解密,Source code,各位再也不用麻烦费事的找在线解密网页了。
2024/4/3:更新多图随机打表模式,现在可以随机选择多套图中的一套来跑步了,同时也更新了定时系统,现在可以直接输入时间,自动随机选图打表。
2024/3/31:更新main.py,现在打表模式再也不需要高德地图key了。顺便给了一个计数器工具,帮助各位自动7:30晨跑(但是你还是要支付电脑放一夜的电费)
2024/3/14:添加打表模式,修复路径问题。(可惜finish返回500的问题还是没解决,不过不影响用,就是看着难受)
概览:
pip install -r requirements.txt
config.ini
文件map.json
选点tasklist.json
伪造痕迹(可选)pyhton main.py
细节:
config.ini
大多数参数填写参照yun项目即可。
补充几点:
headers: 合工大的新版本补充了utc,uuid,sign等参数,同token和deviceId一样需要获取,建议抓包获取,登录接口因为跳转门户,已经失效,本脚本只支持抓包方法。
Cheating: 新版本点的提交改了接口,返回的也不一样,不能直接使用老方法。
map: 合工大的地图就一个操场,原版本的找点方法不建议使用,我手动挑选了几个点,现在已经改成了新方法。
这个脚本提供了快速模式,无需等待直接通过,不过没有轨迹,但是程序算你过(不是实在没时间别用,被人工干了别找我.jpg)
config.ini
里面的起始点已经移动到map.json
了。
据测试,合工大服务器发送结束信号有时候返回是服务异常稍后再试
,但是事实上是算达标的,目前还没摸清楚规律(不过能用了你还管什么.jpg)只有明确说你不合格,还让你加油,那个才是寄了。
看似寄了:
实际上活着: 还是没人给我提供finish信息,悲~。不过话说如果想自己跑步,谁还用脚本 (解决不了这个不影响使用,懒改了,让我跑步打死不去)
配置config.ini
的具体事项(本校区所有功能改config.ini就行了,下面复杂的你可以不看,不过最好看一下,对自己的跑步路线负责一点):
utc
,uuid
,sign
,事实上uuid
是固定的,utc
是时间生成的随机数,sign
是这2者的md5值,服务器只会验证sign
是不是前二者的md5,所以可以一套用到死。(这个是新的接口)关于config.ini
与 tasklist.json
,可以使用proxy.py
快速配置。详细教程请参考说明
更新--打表模式:
简介:
24/4/3: 打表模式每次路径和里程都一样还是太挫,所以这次更新是多套地图随机选择了。
实现:
合工大翡翠湖校区同学无需配置tasklist.json
,点开脚本选择打表模式就行,我默认提供多套路线方案,不过不保证路线完全可靠,想高配速还得自己刷几套。
更新--自动晨跑定时器:
更新--java解密小工具,专门用于解包:
./tools/decrypt_java.jar
就行了(jdk-17.0.9)。其他校区或者学校要额外配置:
抓历史跑步记录包,云运动点开任意一次的跑步记录(可以是上学期的),抓取返回的response body。
解密密钥,解密返回CipherKey(sm2),因为gmssl和Java验签的问题,这个解密不能用提供的decode_sm2函数,要用Java的cn.hutool
包,公钥和私钥在config.ini里面有,模式选c1c3c2。(云运动用的加密库就是这个)。(更新)我用java实现了一个解密小工具,在./tools/decrypt_java.jar
,各位有java直接双击执行就可以了。
解密数据,用解密的密钥作为key,用我脚本里面的decode_sm4解密或者你也用工具网站解密都行,解密的内容就是历史跑步记录的信息了(一整个大的json体,特别长,100+kb),包括路径点。
拷贝到tasklist_{x=1,2,3...example}.json,把解密的整个json拷贝过来就行,不用你提取data部分,返回值200等信息我知道没用,但给大家方便点,直接解密的json整个拷贝过来到tasklist.json就行了。这其中大多数信息是用不上的,是跑步者的个人信息,不过你不删也无所谓。(我提供的当然删个人信息了,别想害我【其实是损友的)
跑代码,我自己跑的是没问题的,如果跑不起来多检查一下,这教程也不是写给纯小白看的,各位看懂报错信息Debug一下应该不是难事。
效果展示:
更多细节:
tasklist.json
的点了。本校区是无脑用的。(如果要改成自定义的点,把finish_by_points_map函数里面'manageList': self.task_map['data']['manageList']
改成'manageList': self.manageList,
就行了)finish_by_points_map()
改成finish()
就行,不过路线和里程速度对不上。(无路线都给过,你怕什么)tasklist_i.json
要连续且从0开始,要不然可能有问题。补充抓包教学:
发现很多老哥卡在抓包上了,其实这个云运动是学校架设服务端,还用的http,所以基本上随便抓包,不用什么群里说的fiddler远程、CA证书、ss代理等,甚至还有群友kali都整上了...
其实没这么复杂,我这里介绍一个最简单的方法,不用root,有一部手机就可以:
Google Play上随便搜一个抓包软件(搞不定Google?你都能上github还搞不定Google?【笑)
安装它,配置VPN给它过(演示用的群友给的PCAPdroid
,你用哪个都差不多)
进云运动,随便翻一翻
如果是对于合工大的,找到ip
是210.xxx.xxx.xxx:8080
的包就行
copy里面headers的一切,照着填上去就行了
还有老哥问sys_edit这个参数,这个是安卓大版本,随便填一个就行,我一般填12,当然我手机是安卓13,服务器不会检查这个
其他校区要改的(其他学校也差不多):
map.json
的点,你自己post一下getHomeInfo那个,对着地图选几个好看的点填上去就行。我把原作者的随机选点方法弃用改成了手动选点的方法,因为学校很贴心的把位置限定在了一个操场,选的点太乱会导致轨迹魔怔(虽然现在轨迹也很魔怔,不过起码不会抽搐了)
补充:issue里面有老哥提到了轨迹问题,我详细介绍一下map.json
的作用:
1. 这个`map.json`记录的是跑步的控制点,控制着给高德导航目的地的顺序,导航会从里面的上一个点走向下一个点。
2. config.ini里面有一个参数是初始点,这是导航最开始的点,别只改map忘记改这个了。
3. getHomeInfo的点是关键点,就是你跑步要踩点的几个点。
4. 把getHomeInfo的点copy过来相当于作者原本的导航直冲关键点方法,好处是方便,缺点是可能路径直来直去会魔怔。
5. 你可以自己对着地图选优质的点,按顺序填入,从而准确的控制脚本走的路径。
6. 当点距离足够近的时候还是推荐用导航,因为导航会返回距离,当然如果你有用经纬度精确计算里程的把握,你可以设计算法手动跑,这样就不需要高德的map_key了。
7. 经过测试,服务器的关键点也是以你给的点为准,你说什么点是关键点,有没有踩点,服务器就信什么。
代码实现细节(偷懒):
普通模式,脚本默认会把map.json
里面的点当成控制点上传给服务器(回跑的时候不会重复上传关键点)。这是一个偷懒的方式,如果你直接用getHomeInfo的点就不会有问题,当然如果你微操每一个点,打上100个,可能出现一次跑步100个关键点的逆天情况,这时候你可以改代码,比如每20个点add_task后才给manageList.append()一次关键点。(你可以自己实现,我反正现在都是打表了)
如果是其他学校要改主机,这个很简单,替换一下就行,当然接口如果用的不一样你直接访问上面另一个人的实现就好,那个老哥github答疑很勤快,靠得住。
之前的工作:感谢yun大佬的初代脚本kontori/yun: 云运动一键跑步脚本,理论上适用于一切使用云运动的学校的健跑任务,包括但不限于合肥工业大学 (github.com),为整个脚本提供逻辑框架,可惜作者停更了。
远古的最新消息:仓库公开前已经有人完成了相关工作,StarYuhen/Yun: 云运动,协议一键刷路程脚本 (github.com),不过用的接口和合工大的不同,已经测试了合工大用的是/splitPointCheating
接口,headers
也大改加了检测,所以合工大学生不能直接使用那个版本。那个项目issue里面提到的更新版本也是这个原因。(随口一提:其实我猜项目作者学校使用的才是老接口,合工大其实是新接口,那位打的其实是简单局,虽然难度也没差多少就是了)(错了当我没说...)
crs-sdk.so
中,包括公钥和私钥。/run/splitPointsCheating
域名,加入了检测,路径不能再魔幻了。欢迎新人加入23届CTF比赛群。 有问题进群私聊~
项目随缘更新,有能力的推荐自己修改使用,把这个项目当成一个demo就好...
免责声明:一切内容只能用于交流学习,24h内自觉卸载,否则后果自负。