某东登陆协议 tlv 逻辑分析

android 逆向 38 / 38

仅供学习研究 。请勿用于非法用途,本人将不承担任何法律责任。

前言

很久没有学习写过文章了,看着群友一个比一个牛逼,一天比一天厉害,而自己每天深度摆烂,满满的负罪感

刚好今天帮朋友看个问题,感觉挺有意思的,就打算分享一下分析思路,话不多说开始

样本下载: https://www.wandoujia.com/apps/279987
分析的是 10.2.0 版本,豌豆荚找不到了,大家自行找吧

参考资料

网上 tlv 的资料都差不多,我这里就随便贴一个了

https://www.cnblogs.com/xdouby/p/8418298.html

这一篇主要是分析 tlv 的编码逻辑,不会过多讲解寻找加密函数的过程

抓包

分析这个登录接口,可以看到 request bodyresponse 都加密了,下面开始分析

java 分析

这个加密函数的入参就是 tlv 编码之后的,分析其来源

往前跟踪到 jd.wjlogin_sdk.net.c.a 这个函数,这里的 this.g 就是 tlv 数据,继续分析

到这个 jd.wjlogin_sdk.b.g.a 函数,tlv 数据 == this.d

继续分析 this.d 的来源,来到这个 jd.wjlogin_sdk.common.inland.WJLoginInland.getCaptchaSid 函数,上图框框里的就是 tlv 数据编码逻辑

先看 jd.wjlogin_sdk.c.d.a 函数,大部分的 tlv 编码逻辑都在这里

上面的分析逻辑,有点繁琐,可以使用 frida hook 打印调用栈定位到

tlv 分析

这里大家自行使用 frida hook 一下,获取 tlv 编码后的数据,用于后面的分析

到这一步默认你已经了解 tlv 了,回顾一下 tlv 的特点

1、tlv 由三部分组成 tag/type、length、value
2、value 可以是数据,也可以是结构体(俗称嵌套 tlv)

下面开始分析

先看看 hook 出来的 hex,这里是能看到明文的,只要解析成结构化的数据即可

我是从中间开始分析的,先获取 unionId 的这个 json 转成 hex 搜索一下

根据 tlv 的特征,value 的前面两个字节是 length,在前面两个是 tag
这里的 length 对应上了,但是 tag 不晓得对不对,那就继续往下分析

后面的字节先这样去分组,看着肯定很懵逼,这时再来看下 java 代码

这里有没有发现啥规律,解释一下

1、先是添加一个 tag = 101, hex = 0x65
2、在添加后面 value 数据的长度 0x24e = 590
3、随后添加三个空字符串,length 都等于零
4、0x246 = 582 对应后面 value 的长度,截取出来看一看

刚好能对上,根据这个逻辑再去分析下上面的 unionId

这样分完组之后,逻辑就比较清晰了

tlv 的结构是 tag -> length ->【length1 -> value1,length2 -> value2】

最后

根据上面的逻辑,写个 tlv 编码的解析脚本,效果还不错,能解析出来

暂无评论
本文作者:
本文链接: https://www.qinless.com/?p=1903
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 qinless 的博客!
100

发表评论

返回顶部