zl程序教程

您现在的位置是:首页 >  Java

当前栏目

Crack App | 某都市魔幻 FM 请求参数 sign 的加密分析

2023-02-18 15:41:16 时间

今日目标

魔幻城市的 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.

以上就是全部的内容了,咱们下次再会~