Skip to content

cr4n5/XiaoYuanKouSuan

Repository files navigation

XiaoYuanKouSuan

Language Stars Forks Issues Platform

本项目仅供学习和研究使用请于24小时内删除。使用本项目所产生的任何后果由使用者自行承担。在使用本项目之前,请确保您已充分了解相关法律法规,并确保您的行为符合所在国家或地区的法律要求。未经授权的情况下,请勿将本项目用于商业用途或其他非法用途。转载使用请标明出处。

本项目已突破 0.00s

战绩可查

0.01s 0.00s 在“READY GO”加载出来之前,可在画板滑动,即可达到 0.00s 0.0s 思路见此

目录

演示视频 🎥

default.mp4

本视频仅在抖音@mmo 有上传过,其他均为盗用,请勿相信。

碎碎念 💭

代码有点屎山哈哈哈哈,抛砖引玉, 有问题欢迎提 issue 🐛

环境配置 🛠️

  • 已 ROOT的安卓设备(Lsposed等) 📱

  • Python3​ (version >= 3.10) 🐍

  • 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 条 先对应用清除缓存!

  1. 安装依赖

    pip install -r requirements.txt
  2. 配置已 root 设备

    借助 TrustMeAlready 模块禁用 app 的 SSL 加密连接以获得始文

  3. 配置 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 并传入

  1. 配置设备代理

    通过这种方式,可以将移动设备的网络请求全部转发至脚本端。

    • 确保脚本端设备与移动端设备在同一局域网下

    • 获取脚本端设备 ip 地址

      (下文中,脚本端设备以 Windows 为例,移动端设备以 Xiaomi MIUI 为例)

      键入指令

      ipconfig

      返回内容中,无线局域网适配器 WLAN 下的 IPv4 地址即为脚本端设备 ip 地址。

      例如:192.168.31.113(下文以此为例)。

    • 设置移动端网络

      对移动端 WiFi 项进行设置,更改其代理为 手动,并键入主机名为上面获取到的 ip 地址(如 192.168.31.113),端口为 8080,保存即可。

  2. 运行脚本

    运行格式为:

    $ ./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。

  1. (方案三)进入设置,清除小猿口算缓存!!!(多多清除缓存!!!,有许多不成功的原因来自于此) alt text

    (方案三)pk 场中任意答案都会判定正确(现已更新模拟点击)

Q&A ❓

  • 运行提示 ADB 未找到,请先安装 ADB 工具

    请检查当前设备是否正确安装 adb 工具,需将 adb 添加至设备环境变量(亦可以修改代码手动指定 adb 路径)。

  • 无线调试未找到设备?

    • 请确认脚本端设备与移动端设备保持在同一局域网下

    • 请确认移动端设备是否对脚本端设备进行过 USB 调试授权

      若在之前未进行过有线调试,需要至少完成有线调试步骤,以进行调试授权

  • 运行脚本加上 -CD/--clear-data 参数后,小猿口算的应用数据都没了?

    很遗憾,能力有限,暂无法提供仅清除缓存的方式,而是直接清除应用全部数据,受此影响我们将该命令作为了可选参数。

贡献者 ❤️

感谢以下贡献者对本项目的支持与付出:

GitHub 贡献者

sd0ric4 cr4n5 MultiWolf ulua3809 xiaou61 jhy354 Fumeng24 github-actions[bot] GSQZ

Star History ⭐

Star History Chart

About

小猿口算_已达到0.00s

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published