今日目标
魔幻城市的 FM App,本文比较简单,且以分享分析思路为主,不提供样本
抓包分析
app 是 Dart写的
直接抓包可以看到请求中有一个 sign 值加密
通过 jadx 分析找不到 sign 的加密位置
另辟蹊径
研究了很久,以为要放弃了。
发现所有的接口都是 html 结尾,结合 Dart 这语言的特性(全平台开发),尝试直接通过浏览器打开请求的链接,发现可以直接请求。
打开 app 中的文章页面,将文章直接复制出来打开,发现请求可以直接返回我们需要的数据
抓包就可以看到也有一个 sign 的加密参数
这里直接检索 sign
得到下面的检索结果
这样可以简单梳理出来这里的 sign 就是一个 md5 的加密
md5(appId=xxx&nonceStr=xxx&time=str(int(time.time()))+xx盐值)
这样就可以用 python 实现全流程请求了
Python 实现流程请求
import time import requests from hashlib import md5 headers = { 'user-agent': 'Dart/2.17 (dart:io)', 'accept-encoding': 'gzip', 'host': 'xxxx-cdn.xxx.com', } time = str(int(time.time())) data = f"appId=xxx&nonceStr=xxx&time={time}xxxx" sign =md5(data.encode('utf8')).hexdigest() params = ( ('content_id', '154401'), ('appId', 'xxxx'), ('nonceStr', 'xxxx'), ('time', time), ('sign', sign), ) response = requests.get('https://api-xxxxx.xxxx.com/api/radio/content/detail/image-text-detail.html', headers=headers, params=params) print(response.text)
尝试发包可以正常请求到数据
小结
从 app 采集分析的角度来看,app 本身还是比较简单的,但是不得不说,分享到 web 之后分析签名的这个思路,的确打到我的思维盲区
从 app 防护的角度看,app 可以考虑上一个免费加固,再对接口的访问限制做一些调整,限制链接的打开来源,就可以规避本文的分析入口,让逆向成本加剧
完事~
End.
以上就是全部的内容了,咱们下次再会~