本项目仅供学习和研究使用请于24小时内删除。使用本项目所产生的任何后果由使用者自行承担。在使用本项目之前,请确保您已充分了解相关法律法规,并确保您的行为符合所在国家或地区的法律要求。未经授权的情况下,请勿将本项目用于商业用途或其他非法用途。转载使用请标明出处。
本项目已突破 0.00s
大学生们还没玩够吗(
方案一: 小猿口算, 采用抓包方式获取题目和答案, 通过 adb 模拟滑动操作 (已失效)
方案二: 修改答案为“1”(可 0.00s,仅限练习场)方案二链接
方案三: 修改 pk 场 js 文件(仅限 pk 场)在此特别感谢 Ulua3809! 方案三链接 废弃方案三中正则,使用HttpCanary等正则表达式按此更新
PK 场开局秒提交(0.001s)及过大学生验证思路:FoskyM/XiaoYuanKouSuan_Tutorial
在“READY GO”加载出来之前,可在画板滑动,即可达到 0.00s 0.0s 思路见此
https://github.com/user-attachments/assets/e9ccfa25-4bdd-4b43-855c-af4a045dcb00
本视频仅在抖音@mmo
有上传过,其他均为盗用,请勿相信。
代码有点屎山哈哈哈哈,抛砖引玉, 有问题欢迎提 issue :bug:
已 ROOT的安卓设备(Lsposed等) :iphone:
Python3 (version >= 3.10) :snake:
ADB:electric_plug:
小猿口算 App(version <= 3.93.2)
往上的版本(如 3.93.3)没实测,如 #74 推荐用旧版。
[!NOTE]
我们已在 8d05233 变更中增进了对不同分辨率设备的
实验性
支持,将借助 adb 自动获取设备当前分辨率并计算以进行适当缩放,因为您可以不用变更str_to_xy()
函数;若该实验性支持未正常运作,请尝试性变更 number_command.py 中的BASE_COORDINATES
值,并将BASE_RESOLUTION
常量中替换为您的设备当前分辨率。
根据设备分辨率修改坐标(同元组内坐标连续滑动)
# 坐标点信息
BASE_COORDINATES = {
"1": [[1480, 1050], [1440, 1470]],
"2": [[1255, 1100], [1700, 1100], [1255, 1470], [1700, 1470]],
"3": [[1344, 1040], [1600, 1200], [1270, 1323], [1635, 1379], [1249, 1588]],
"4": [[1716, 1274], [1245, 1296], [1450, 1030], [1450, 1466]],
"5": [[1558, 1020], [1290, 1211], [1600, 1348], [1300, 1472]],
"6": [[1533, 1027], [1265, 1428], [1663, 1439]],
">": [[[1350, 1080], [1545, 1172], [1295, 1297]]],
"<": [[[1578, 1058], [1308, 1231], [1560, 1292]]],
"=": [[[1284, 1122], [1700, 1122], [1280, 1300], [1700, 1300]]],
".": [1350, 1080] # 单独的点
}
借助 adb 获取、修改、恢复当前设备分辨率:
# 查看当前分辨率
adb shell wm size
# 还原默认分辨率
adb shell wm size reset
# 更改分辨率为 1800x2880
adb shell wm size 1800x2880
根据所需更改题目数量和等待时间:
# config.py
ANSWER_COUNT = 30 # 题目数量
WAITING_TIME = 12.5 # 等待时间
[!CAUTION]
在首次使用之前,参考本节中
第 6 条
先对应用清除缓存!
安装依赖
pip install -r requirements.txt
配置已 root 设备
借助 TrustMeAlready 模块禁用 app 的 SSL 加密连接以获得始文
配置 adb
有线调试
请先用数据线连接脚本端设备与移动端设备
打开设置-开发者选项- USB 调试
无线连接
请确保脚本端设备与移动端在同一局域网下
打开设置-开发者选项-无线调试,并记录界面显示的 IP 地址与端口
(大部分设备首次需要先把「有线调试步骤中」的 USB 调试打开,并在有线连接的前提下,同意随即弹出的 允许 USB 调试吗 窗口以完成对设备的调试授权,建议勾选一律允许该设备调试。完成授权后,即可拔掉数据线进行无线调试。)
键入指令:
adb connect ip:port
# e.g.
# adb connect 192.168.0.101:5555(下文中,无线调试以此为例)
# 正确返回以下格式
connected to 192.168.0.101:5555
完成上面任一步骤后,键入指令
adb devices
# 正确返回以下格式
List of devices attached
98c54df9 device
以确认 adb 是否在本机正确配置成功并连接
[!TIP]
我该选择什么方式?
上面方式适用于不同情况:
有线调试
只需要插入数据线,确保完成连接后,按照后续操作即可,一般传参无需变化,但需要保持有线连接
无线调试
适用于你想在局域网下任意位置(如您的床上)进行 PK,但一般而言,无线调试状态会在重启后关闭,并且每次启用都会变更端口,因而你每次运行脚本都需要获取新的无线调试 IP 并传入
配置设备代理
通过这种方式,可以将移动设备的网络请求全部转发至脚本端。
确保脚本端设备与移动端设备在同一局域网下
获取脚本端设备 ip 地址
(下文中,脚本端设备以 Windows 为例,移动端设备以 Xiaomi MIUI 为例)
键入指令
ipconfig
返回内容中,无线局域网适配器 WLAN
下的 IPv4
地址即为脚本端设备 ip 地址。
例如:192.168.31.113
(下文以此为例)。
设置移动端网络
对移动端 WiFi 项进行设置,更改其代理为 手动
,并键入主机名为上面获取到的 ip 地址(如 192.168.31.113),端口为 8080
,保存即可。
运行脚本
运行格式为:
$ ./python main.py --help
usage: main.py [-h] [-P PORT] [-H HOST] [-AI ADB_IP] [-CD]
Mitmproxy script
options:
-h, --help show this help message and exit
-P PORT, --port PORT Port to listen on
-H HOST, --host HOST Host to listen on
-AI ADB_IP, --adb-ip ADB_IP
IP and port for ADB wireless connection (e.g., 192.168.0.101:5555)
-CD, --clear-data To clear app's all data
[!CAUTION]
有线调试情况下,无需指定 -AI 的参数,仅适用于无线调试
-CD, --clear-data 会清除缓存与数据!
绝大部分情况下,直接键入以下即可:
python main.py
将默认填充参数 Host 为 0.0.0.0,Port 为 8080 运行,等同于以下:
python main.py -H 0.0.0.0 -P 8080
对于无线调试:
假设您在无线调试页面获取的 IP 为 192.168.0.101:5555,那么您应该运行:
python main.py -H 0.0.0.0 -P 8080 -AI 192.168.0.101:5555
绝大多数情况下,直接键入以下即可:
python main.py -AI 192.168.0.101:5555
将默认填充参数 Host 为 0.0.0.0,Port 为 8080 运行,并与该 IP 设备进行无线调试连接。
正常情况下,您将看到控制台开始输出大量请求日志,那么您应该离成功不远了。
至此,您可以操作移动端设备给对方来点小小的技术震撼了lol。
(方案三)进入设置,清除小猿口算缓存!!!(多多清除缓存!!!,有许多不成功的原因来自于此)
(方案三)pk 场中任意答案都会判定正确(现已更新模拟点击)
运行提示 ADB 未找到,请先安装 ADB 工具
?
请检查当前设备是否正确安装 adb 工具,需将 adb 添加至设备环境变量(亦可以修改代码手动指定 adb 路径)。
无线调试未找到设备?
请确认脚本端设备与移动端设备保持在同一局域网下
请确认移动端设备是否对脚本端设备进行过 USB 调试授权
若在之前未进行过有线调试,需要至少完成有线调试步骤,以进行调试授权
运行脚本加上 -CD/--clear-data
参数后,小猿口算的应用数据都没了?
很遗憾,能力有限,暂无法提供仅清除缓存的方式,而是直接清除应用全部数据,受此影响我们将该命令作为了可选参数。
感谢以下贡献者对本项目的支持与付出: