【问题简介】
在抓包某APK时,发现请求内存在如下所示的请求头[Python] 纯文本查看 复制代码 "x-disco-client-id"
其值如下:
[Python] 纯文本查看 复制代码 "android1_prd:1733328734:c6eb0f9b8f78d6903eaa35e6bab7bf6a238a48d7cbc76207eb671575206fac79"
但不知道“c6eb0f9b8f78d6903eaa35e6bab7bf6a238a48d7cbc76207eb671575206fac79”是如何得来的
【APK和JS文件】
链接: https://pan.baidu.com/s/10BhJhldshRL5hzUSJXFgQQ?pwd=f1mh 提取码: f1mh
使用该APK需要海外IP
【已发现的信息】
①请求头的值由以下几部分组成:
“{android1_prd}:{时间戳}:{signature}”
②可肯定已使用HMAC加密(倾向于是HMAC-SHA256)
③HMAC密钥是通过API接口获得的,如下所示:
[Python] 纯文本查看 复制代码 "android": {
"id": "android1_prd",
"key": "NmZkMmM0YjktN2I0My00OWVlLWE2MmUtNTdmZmQ3YmRmZTlj"
}
④当且仅当是POST请求时才会使用这个请求头
原始数据格式为"{timestamp}:{method}:{path}:{payload}"
且{method}一定为“POST”
{path}为POST请求的路径(以登陆为例则是“/login”)
{payload}是POST请求的请求体
⑤通过在Chrome浏览器内启用移动端模式查阅相关JavaScript代码发现
{signature}与下面这段代码“_createHmacHelper”有关:
(该代码与APK文件一同放在上方链接中)
(在Chrome浏览器中模拟移动端,访问"aHR0cHM6Ly9hdXRoLm1heC5jb20vbG9naW4=",JavaScript文件在“aHR0cHM6Ly9hdXRoLm1heC5jb20vNTc5ODQuMzM1MmJmMzA4OGRhZjNiNjI4ZmYuc2hhLmpz”)
其中init()方法,参数n疑似为本地生成的UUID
再调用finalize()方法,把原始数据作为参数t放入其中,得到{signature}
目前难题主要有二:
①若继续从Android端抓包,则不清楚数据加密的逻辑
②若通过Chrome浏览器模拟移动网页端,如何在非浏览器环境(如node)中复现“_createHmacHelper”这一步有困难。
求助各位大佬,谢谢! |