Android逆向:虎某直播so中接口校验参数分析

声明:案例分析仅供学习交流使用,勿用于任何非法用途。如学习者进一步逆向并对版权方造成损失,请自行承担法律后果,本人概不负责。

简介

我们日常见到的接口多半是【http:www.xxx.com/aa=1&bb=2&cc=aaa】形式,该形式的接口很容易被别有用心的人篡改、尝试参数。为了防止此类情况发生,很多开发者会用地址中的参数、常量等生成一个字段来验证地址的合法性。本次逆向的直播apk接口就拥有校验字段,并且生成规则放置在了so文件中。
 

目标

逆向apk接口校验字段的生成规则,自由拿取接口数据。
 

逆向流程

突破口——找到目的接口

假设我们要拿到该软件播放节目的相关信息,就要从播放逻辑与接口入手。播放一个节目,并抓取相关信息,可以得到两个比较在意的接口:
1.该接口请求参数为直播房间号等参数,响应为与此房间相关的详细信息。
在这里插入图片描述
在这里插入图片描述
2.这个接口响应便是节目的播放地址。
在这里插入图片描述
播放地址由1中响应内容里的rtmp_url字段和rtmp_multi_bitrate字段可拼接而成。
在这里插入图片描述
在这里插入图片描述
 

研究接口参数

由播放地址的拼接方式可知破解的关键在于第一次请求。反编译客户端进行分析追寻第一次请求相关线索。可从下面两个函数发现端倪:

tv.douyu.control.api.APIHelper.a(Context context, String str, String str2, DefaultCallback defaultCallback)

tv.douyu.misc.util.EncryptionUtil.a(String str, List<ParameterBean> list, List<ParameterBean> list2, boolean z)

在这里插入图片描述
在这里插入图片描述
逐一比对出第一次请求用到的参数如下,其中auth字段就是需要逆向的“校验字段”:
room:房间Id。
aid:可以用固定值android1。
client_sys:可以用固定值android。
ne:可以用固定值1。
support_pwd:可以用固定值1。
time:本地时间。
auth:由Native函数native_makeUrl(Context context, String str, String[] strArr, String[] strArr2, String[] strArr3, String[] strArr4, int i, int i2)生成的加密字串。
在这里插入图片描述
 

逆向so文件

由Native函数入口并配合ida进行分析,由【native_makeUrl】函数名称与参数信息追寻到疑似目标函数【sub_DF9C】:
在这里插入图片描述
在这里插入图片描述
动态调试此函数:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
由以上过程读入了Java层传入的参数。
由sub_3D49(int a1, int a2, int a3, int a4, int a5, int *a6, int a7, int a8)中的sub_3D39(int a1)生成密匙:
在这里插入图片描述
显然auth字段“64875c22a567f41208a470f74a19caeb”由“room/431972?aid=android1&client_sys=android&ne=1&support_pwd=1&time=1470038940”做MD5加密后生成。
 

流程梳理

软件的播放流程如图:
在这里插入图片描述
举例Api拼接auth的方式为:
room/XXX?aid=android1&client_sys=android&ne=1&support_pwd=1&time=1470038940&auth=YYY

XXX:房间Id。
YYY:MD5(room/XXX?aid=android1&client_sys=android&ne=1&support_pwd=1&time=1470038940)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值