某款app协议的简单分析

最近学习python的过程中,无意接触到了AI平台,然后跟着学习了一下协议请求。为了巩固基础,尝试着分析一款app的协议请求。

首先抓包查看请求,通过分析接口请求,确定sign值即为加密参数。

接着,反编译app,尝试搜索一下请求接口。这里我们能很明显的看到该app使用了retrofit2框架,请求都使用注解封装了起来。

我们还是通过/search/list这个接口查找,来到参数赋值的方法。

经过分析,我们可以知道获取sign值的函数就是ap类的String a方法。

逻辑也非常简单,一目了然。加密方法为:sort排序所有不为空的参数 + uuid + platformandroid + v + loginToken + 3542e676b4c80983f6131cdfe577ac9b(盐)

例如图一中的charles请求:(为了安全,关键名称用xxx隐藏)curl -H 'xxxuuid: 008796750803109' -H 'xxx。platform: android' -H 'xxxchannel: xiaomi' -H 'xxxv: 3.3' -H 'xxx。loginToken: e7683834|9146839|1f41cd472b09d614' -H 'xxx。deviceTrait: ' -H 'User-Agent: xxxapp/3.3(android;4.4.4)' -H 'Host: xxx' -H 'Cookie: xxxToken=xxx' --compressed 'xxx/search/list?size=[]&title=&typeId=0&catId=1&unionId=11&sortType=0&sortMode=1&page=0&limit=20&sign=c6ff18d0f3e97024f5b3718b431b5db2'

则最终需要加密的字符串为:(token用xxx隐藏)

catId1limit20loginTokenexxxpage0platformandroidsize[]sortMode1sortType0titletypeId0unionId11uuid008796750803109v3.33542e676b4c80983f6131cdfe577ac9b

md5一下:

可以看到最终md5加密的值即为sign值。c6ff18d0f3e97024f5b3718b431b5db2

这里不得不提的是,该app有一个严重的关键信息泄露,就是sign加密方法中的最后一行Log输出。使用了Android系统自带的log类,导致sign相关的信息泄露。

我们来看另一款app的协议请求中加密部分,其中x.b方法为md5加密。是不是很眼熟。。。

协议请求的特点决定了加密方式不会特别的复杂,所以对关键信息的隐藏就显得格外重要。java层的代码很容易被反编译,而将关键信息放在native中后,反编译就不是那么容易了,因为需要破解者懂得汇编代码。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180724G1NXAO00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券