-
-
[原创]新手向-某APPsign签名参数分析
-
发表于:
2023-11-13 15:53
7857
-
分析该APP的包请求,在Fiddler中发现一个请求包:
想把其中的签名弄清楚,然后用python去模拟协议。
原始返回的数据是protobuf的格式,通过修改请求头Accept,可以让服务器返回json的数据格式。
具体操作步骤为:直接将请求头中的Accept: application/x2-protostuff; charset=UTF-8,更改为:Accept: application/json; charset=UTF-8
但是如果直接请求,浏览器会报签名错误:
注意看请求头中,有两个签名(sign和sg字段),因此这两个签名需要逆向解决,另外还需要知道oak(可能是key)是什么东西。
所以直接将app拖到jeb里面,首先通过查找网址,可以搜索到其构造URL的代码逻辑块,位于:
通过上述定位,可以找到发起请求的入口:
再往下分析,查看函数makeRequestByPkgName,这个调用就是通过包名获取信息的函数接口:
这里new了一个请求ProductDetailRequest,实现了com.nearme.network.request.IRequest接口,进入到请求类中,查看具体的实现:
上图中可以发现,请求操作在com.nearme.network.c类中的函数中,查看函数上一跳,发现请求接口:com.nearme.network.extend.d.request
继续分析可以发现该请求接口设置了拦截器并通过initHeader函数初始化了请求头:
通过分析请求头中的参数来源,将部分重要参数和对应的说明,以及抓包中获取的值列表如下:
0:手机
1:折叠设备
2:平板
浏览器UA信息(URLEncode)
数据格式是:设备生产商/设备型号/安卓系统版本号/安卓版本/设备ROM版本号/APP_CODE/APP渠道号(默认为0)/应用市场版本号/应用市场版本名
代码中的openid
数据格式是:GUID/OUID/DUID/AndroidId
然后经过URLencode处理
通过请求测试,签名sign、sg、oak是服务器作为校验的依据,所以需要对上面三个参数做分析。
①:参数”oak“来源的分析
java层获取该参数的代码块是:
函数跳转到native层,so文件名称:libocstool.so。
上述JNI函数通过静态注册,查看b函数:
发现key1通过a函数初始化得出,在请求之前进行初始化,并校验APP的签名。
如果APP签名校验不通过,则key得不到初始化,应用内所有的请求都会返回错误。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2023-12-13 18:04
被Aimees编辑
,原因: