本文仅供学习交流,只提供关键思路不会给出完整代码,严禁用于非法用途,若有侵权请联系我删除!
目标网站:aHR0cHM6Ly93d3cuamQuY2tLw==
目标接口:Cmh0dHBzOi8vYXBpLm0uamQuY29tLz9hcHBpZD1pdGVtLXYz
一、抓包:如下,请求url中有h5st, x-api-eid-token是加密的,x-api-eid-token是jstk接口返回,具体分析请看下一篇文章,今天我们重点来看h5st这个参数
二、分析h5st
将h5st以分号分割,共有八段,我们具体看看
1、格式化的时间:20230720154922365;
2、fp(具体分析查看后面的文章):7899079095634169;
3、固定:fb5df
4、algo返回:tk03w97751bde18n9JQjKU8OwbfcH8q3cQteXhWncEGOJA9J47ScVS3xmKjrrB4vIaVWXsB9IhEAOQsiFMhjYy1Jr-Si;
5、密文:8df44b4103487f6d902b3906ad9264fe778e38ac4e9be6cf41b02c7e79d71398;
6、固定:3.1;
7、13位时间戳:1689839362365;
8、密文:24c9ee85e67cf80746dd82817ecbeafc7a829b35c7f446a4c7d476cc9faa1d8834a93323ad7bce9bef1bba682b93d2e345f072ee0a83acebbfefcc8d4a845796a189aeca0879454b9961893fb2338472499cf863bd5c77d3126dfdbe88ca8a72
我们今天主要目标在第4,第5,第8段
三、第4段,tk生成
这段密文由request_algo接口(需要清除cookie才能抓到)返回:
在这个接口的url中有个expandParams参数是需要生成的,我们直接全局搜索,找到关键位置,打下断点,
查看右侧的调用栈,往上找定位到该参数的生成位置,注意这行代码:
p = d[n(0, 0, 236, 183)][n(0, 0, 427, 643)]()
我们直接在输出栏调用,直接就打印出参数值,和请求中的比对一模一样,继续查看 d, 非常明显的AES加密特征,我们直接用js还原
四、第5段加密:我们很容易猜想到该参数也是加密得到,我们直接搜索encrypt字段调试,直接将断点打到加密模块再逆向分析,入参n中除了body外都是明文,跟栈继续调试
定位到 d.doby = SHA256(s) 这行代码,查看值和我们n中的body一致,非常明显的SHA256加密特征。
在来看看入参 r, 跟栈调试定位到这行重点代码:跟进去发现也是个SHA256
s = this[c(0, -807, 0, -887)](h, x, v, d, rr)[c(0, -291, 0, -48)]() || "";
将该参数的解密流程串联起来,共有两次SHA256加密,一次HmacSHA256后,得到正确值。
五、第8段加密:
同样的,我们将断点打在加密方法处:很容易得到加密文本,key, iv的值(注意key与之前参数值有细微区别)