Skip to content

songemeng/Sunny-Running

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 

Repository files navigation

The Secret of Sunny Running

Warning

  本文仅供研究,使用者造成的任何后果由使用者自行承担,与作者无关。

  本文研究成果源于对iOS版Sunny Running的逆向分析。

License

  GPL v3

将要使用到的一些关键值

 API_ROOT

  api根地址,http(s)://client4.aipao.me/api

 UUID

  应该是由微信登录生成的通用唯一识别码,可以通过抓包获取,请求为Login,UUID即为Login的IMEI参数。

  同一台设备重新微信登录UUID不变,不同设备未测试。

 token

  登录后由服务器发送给客户端,生命周期猜测20min左右。

 userid

  登录后由服务器发送给客户端,用于标记runner,此值不变。

 timespan和nonce

  这两个参数位于请求头中,用于验证请求。

  timespan为19位时间戳,可用13位时间戳+6位随机数模拟。

  nonce为随机整数,猜测范围-1999999999~1999999999。

请求头签名解析(MD5值中字母大写)

  请求头中有两处签名,分别为auth和sign

 auth

  • auth = 'B' + MD5(MD5(UUID) + ':;' + token)

 sign

  • sign = MD5(token + nonce + timespan + userid)

请求流程解析

  登录和获取用户信息的请求头不需要加auth、sign、timespan和nonce,开始跑步和结束跑步需要添加。

  变量用(xxx)表示。

 微信登录(第一次登录)

  API_ROOT/token/QM_Users/Login?wxCode=(微信的OAuth字段)&IMEI=(UUID)

  此请求无法模拟,仅用于抓取UUID。

 IMEICode登录

  微信登录后服务器会回传IMEICode,有效期较长,用于长期登录。

  API_ROOT/token/QM_Users/LoginSchool?IMEICode=(你的IMEICode)

 获取用户信息(可省略)

  API_ROOT/(token)/QM_Users/GS

  此处为上文提到的token,登录后获取,下同。

 开始跑步

  API_ROOT/(token)/QM_Runs/SRS?S1=(起始纬度)&S2=(起始经度)&S3=(要求长跑距离,男生2000,女生1600)

  起始纬度建议范围:30.534485~30.535127

  起始经度建议范围:114.366687~114.367427

  请求成功后服务器会回传一个runid,之后的请求会用到。

 结束跑步

  首先生成一个不重复10位小写字母字符串,然后分别替换下面请求参数中的0~9数字。

  用enc函数表示上面的处理。

  API_ROOT/(token)/QM_Runs/ES?S1=(runid)&S2=(enc(5000))&S3=(enc(2000))&S4=(enc(跑步时间,单位s))&S5=(enc(跑步距离,单位m))&S6=&S7=1&S8=(刚才生成的小写字母串)&S9=(enc(步数))

Author

  Jason, iOS Developer & Cracker

About

The Secret of Sunny Running

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published