Coin's Blog Coin's Blog

阳光体育长跑 APP 模拟技术探究

记录一次对阳光体育长跑 APP 模拟思路的研究,包括 GPS 位置模拟和运动数据构造。

上次写下 玩转 Android 刷机 Root 后收益颇多。其中最重要的是认识了哲 ♂ 学导师 czp,同时给自己挖了个坑:阳光体育长跑。

关于这个阳光体育长跑,除了骑自行车、滑轮滑、踩滑板,应该还有几个打开(偷懒)姿势。

模拟运动

一般来说,长跑 App 都调用本机 GPS 定位 来实现运动记录。还有一种是传感器定位,但比较少,本文不讨论。那么只要让手机 GPS 信号 模拟动起来,问题就解决了。

关于模拟运动,介绍两款 App:Daniu、Fake Location。

这应该是现在市面上所谓一块钱垃圾代跑最常见的解决思路。唯一麻烦的是,Root 后才能比较奔放:@(不出所料)

模拟定位和运动的操作不复杂,摸摸 App 就会。这里主要记录思路,不贴所谓的保姆教程。

关于 Root 刷机,可以参考这篇:扒开 Android 刷机 Root 的衣服

App 虚拟定位

Daniu

Daniu1.1.8.apk 之前的版本免费。虽然免费版在这里共享出来了,还是建议支持作者吧,不贵。

Daniu root 之后,开启新世界 Fake Location 付费版

Fake Location

Fake Location.apk 相比 Daniu 多了步频模拟。更重要的是,不 Root 也能模拟运动,但某些 App 可能模拟不上,应该是权限问题,Root 后会更稳。没有白嫖版,请支持作者。

(XJU西交体育是创高的产品,亲测 Daniu 模拟定位失败。但 Fake Location 不 Root 模式模拟定位,过阳光体育

安卓模拟器

Apple boy 苦于没有 Root 的安卓机。想过 Root 安卓模拟器,按网上的办法折腾 n 次都失败了,最后丢坑。

不过,用安卓模拟器刷长步,也不是没有办法。

夜神模拟器有自带的模拟位置,但没有模拟扫街。那就小范围连续切换 模拟位置 点,GPS 一样会变化。

只要位置变化不太大,就有了运动效果,再结合模拟器的摇一摇,甚至能把步频也模拟出来。

这个操作效率不高,但是非常有意思,同时操作的时候需要把握点之间合适的距离,就能模拟运动和抖动。@自救默示录 给出了比较硬核的推导(其实就是地球上经纬度算直线距离,只是我地理和数学都要丢了反三角都看不懂了,那就硬核把。)

My Android Tools Hook 本地数据库

本方法需要 Root。My Android Tools.apk 又称写轮眼,它能管理 Android 的四大基本组件。说句人话,就是能实时修改 App 里的本地数据。

大致原理是:写轮眼能修改你跑了多少 km、跑了多少 s。改完后再打开阳光体育,App 会自动检测变化后的数据,然后触发上传,直接上传修改后的记录。

坦白说这个也是楼上的 @自救默示录 的思路,这里有个比较详细的操作教程

其他问题

步频问题

通用记步原理和手机传感器的加速度有关。所以骑车刷长跑时,你会发现步数是 0。

要想在上传成绩中,拥有步数。有软办法和物理办法:

  • 软办法:
    • 在安卓模拟器中,可以用摇一摇摇出步数来
    • 在付费版 Fake Location(Root模式) 中模拟步频
  • 物理办法:
    • 当然是一直甩手一直摇摇摇
    • 摇步器

Shaking Shaking2

多开问题

多开分身.apk 可以在一台手机上登录多个微信,就不用每天换着登录微信再验证阳光体育。

这里啰嗦一句,我之前手机配置低,多开直接卡死。每天要登陆 n 个微信号切换阳光体育,解决方案是:按键精灵,录制每个号的微信的密码账号输入脚本

多开之后,全局模拟运动,就能一口气同时跑 n 个。缺点也显而易见:手机配置吃不消。

针对此解决办法是:电脑开安卓模拟器(推荐夜神模拟器,自带模拟位置) 或 手机云(金手指、腾讯WeTest)

AiPao 脚本

接下来就是解放双手的压轴货了。

只要会安装配置 JRE 环境,就能一拳一个阳光体育。

打开姿势

  1. 官网下载 JRE
  2. 配置 JRE 环境变量
  3. 下载 Aipao_v1.2.4 脚本 并解压,双击 start.bat (macOS Terminals下: bash start.bat)

看到输入提示后,输入 IMEICode 就好了:

那么获取 IMEICode:

  1. 安装抓包软件。Android: Packet Capture.apk
  2. 先打开抓包软件(并安装 SSL),再打开阳光体育
  3. 微信登陆
  4. 去抓包的软件中筛选 client4.aipao.me 的请求,在响应体中找到 IMEICode(若多次抓不到: 来回切换几次飞行模式, 再打开阳光体育

回车看到下图:那,你已经精通一拳一个阳光体育了

Result
Result

只要不登陆 阳光体育App,IMEICode 就长期有效,每天鼠标一点就跑完了

后来更新了 GUI 版 + 批量跑,稍微友好一点,请到 GitHub 自取。

About

Aipao 本项目开源 Author: LiaoGuoYin

核心 API 出自 zyc199847 的逆向成果,我只是搬砖写了个半吊子脚本。

如果对原理和拓展有兴趣可以大概看看项目的 issues(其实就是构造并 POST 上传成绩的 HTTP 请求,只是过程不止一步,还有加密

More

实际上我写的非常菜b,在同性交友 gayhub 上,甚至已经有人写出一套 web。在网页上批量添加管理多人 IMEICode,每天服务器自动 crontab,失效就邮箱或微信喵酱推送提醒。

思路很巧妙很骚。但是封装成一套在淘宝接单恰烂钱就有点…(酸

除了 crontab,还给出一个定时任务的思路,Serverless Cloud Function。你甚至都不需要服务器成本,就能让每天按时运行+提醒。想想就很很幸福噢。好了,不说太多了,没我了

Tail

代跑在全国已经烂大街了,本文只是记录,分享个人解决问题的办法,希望和小伙伴交流一二。自行模拟产生的结果概不负责。

拒绝提供技术支持,如果非要问出 bug 怎么办(百香果请记得加冰,奶绿记得加椰果

如果有帮助到你,可以考虑赏一杯 卡布奇诺