魔幻城市的 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 实现全流程请求了
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.
以上就是全部的内容了,咱们下次再会~