前言
最近在2023年10.10 JD偷偷在M端更新了H5st4.2算法,今天我就在这里以m端搜索接口为例子分析一下给大家学习
https://so.m.jd.com/ware/search.action?keyword=%E8%A5%BF%E7%93%9C&searchFrom=home&sf=14&as=0
一、初步分析
我之前的文章有说过每段数据的含义,我这里再简单说一下
第?段 | 数据含义 | 获取 |
---|---|---|
1 | yyyyMMddhhmmss 格式的时间 | 可以自行生成 |
2 | fp 浏览器指纹 | 4.2的fp算法和之前4.1的不一样了 |
3 | function的id | 接口处获取 |
4 | tk | 接口处获取 |
5 | appid+body+tk+rd+functionId等进行一次加密的返回数据 | |
6 | 加密算法的版本 | 4.2 |
7 | 13位时间戳 | 可以随机生成 |
8 | 浏览器ua+pin+fp 等等的AES加密 | 如果fp不变可写死 |
二、详细分析
先抓到相关接口
根据第一步初步分析,其实主要需要分析的只有h5st 的 第2,5,8段数据
1.分析第2段数据(fp)
经过 一番断点调试发现了关键代码,生成的字符串刚好16位,对比一下看就是fp
e()
进去这个e函数里面看看直接把代码扣出来试一试先
好了,继续下一段
2.分析第五段数据
发现一个关键函数,入参t 的 functionId 刚好是我吗接口的,返回的数据刚好就是和第五段一模一样
我跟进了一下代码,发现就是把这个字符串进行一次加密就得到第五段了,这个也不是很难
3.分析第八段数据
这一段数据其实也没什么好说的,就是一个AES加密,找到key就可以了,这个就留给你们自己研究吧
总结
把代码组合测试一下,成功获取数据,收工
技术交流 5LyB6bmFNTM0NjE1Njk=(base64解码)
后面看了一下4.3算法也差不多,和4.2就换了一下加密方法而已