得物APP X-Auth-Token 分析


0x01、 目标需求:

  .a) 得物APP的接口参数以及相关的签名获取的方式

  .b) 通过搜索接口来验证改头部Token的来源

0x02、分析背景:

  .a) 得物APP

  .b) APP版本4.62.2(目前最新)

  .c) 软件无壳

  .d) 软件通讯过程中采取了头部鉴权Token,请求和返回数据无加密

0x03、分析流程:

  .a) 通过数据包抓取或敏感函数hook方式获得接口功能

  .b) 通过函数内部参数的组装继续分析参数的来源以及加密的流程

0x04、抓取数据包:

  .a) 截图如下:

    0x001. 搜索接口抓包分析,

搜索接口抓包



测试参数必要性



    0x002. 接下来需要分析头部的 X-Auth-Token 从何而来.解决掉这个参数,基本就没有别的校验参数了.

Token数据返回

    0x003.这里的X-Auth-Token 是从服务器返回来的,但是需要提交几个参数,那这几个参数看看随便改动一下有啥效果没有。

获得到Token返回值



    0x004.时间戳校验了超时时间,我复制了Charles内的请求,出来重发,签名校验失败,这里得分析他的APP代码了,分析newSign来源

签名校验



0x05、校验参数,找到算法:

  .a) 截图如下:

    0x001. 分析参数来源,

newSign来源



跟踪newSign签名



准备Hook函数看看参数是啥

    0x002. Frida Hook函数验证数据

hook校验参数

    0x003. Frida Hook验证最终加密字符串(按照key字典升序,然后key+value遍历拼接)

获得加密参数

    0x004. 需要验证SO内做了哪些操作,hook一下试试看,先用IDA分析一波,主要是看传进去的二进制字符串是啥东西.从他的命名规范来看是用的AES加密,由于是动态注册,我们需要找到so内的函数名.

获取函数绑定关系



对应encode函数



加密函数



0x06、Hook导出函数:

    0x001. hook导出函数,验证传入的参数值,下图中hook到的参数2为密钥是死值: d245a0ba8d678a61

Hook到的密钥

    0x002. 通过java实现,校验签名生成是否一致。

java验证算法

    0x003. 通过java实现,签名参数校验正确, 所以暂时不用考虑那个二进制的东西,编写Java代码发起请求,获取X-Auth-Token返回值

java代码测试

    0x004. 拿着返回来的X-Auth-Token 就可以请求其他接口了,并且不需要对请求数据加密等操作.而且这个X-Auth-Token是可以一直用的,没有过期时间.

测试请求搜索接口



    0x005. 获取返回JSON数据(本文中 使用的Frida Hook 代码所在位置 Gitee)

返回接口包含下一页数据



友情提示:本文只为技术分享交流,请勿非法用途.产生一切法律问题与本人无关



在浏览的同时希望给予作者打赏,来支持作者的服务器维护费用.一分也是爱~