某东5.1.2版本h5st逆向扣代码

本文仅供学习交流使用,禁止用于其他用途。

以搜索接口为例来讲解: 

首先搜索一个关键词,进行分页抓包:

跟栈就不做过多讲述了,我们直接定位到加密函数入口处:

有逆向基础的应该都能看出来,这里的加密主要就是针对请求体参数的。

接着我们进入加密函数,查看主要加密逻辑:

进入核心加密函数:

观察函数发现所有的值都通过数组c进行传递,那么我们不妨在switch出打上日志断点,监测数组的变化:

日志的最后生成了我们的h5st参数:

观察参数发现,h5st可能是由多个加密函数组合而成:

向上翻看日志看到了tk和t6的生成,这就印证了我们的猜想:

既然这样那就好办了,我们只需要逐个击破就好。

我们先进行获取多次日志判断哪些是定值:

发现:

933xpgiddmwwphm3;f06cc;和tk是定值(其实tk也是动态的,不过半天才会变一次,所以我们这里直接把它看做定值即可)。

现在日志上的线索就只剩t6这个大字符串了,所以我们就先从他入手:

向上查找日志,找到t6第一次出现的位置:

观察日志推测,在case 71出调用函数生成了t6大字符串,找到71位置处:

在两个分支处打上日志断点,看他究竟做了什么:

点击函数跟进去:

发现是和134一样的格式,那么我们就还是老样子,在switch出打上断点,监测数组变化。

观察日志发现133在最后一步生成了t6大字符串:

看到这三步应该不难猜出,对象字符串转为init对象又转换为t6大字符串。

接下来我们就只需要关注   对象字符串转换为init对象   和   init对象转换为t6大字符串   这两个步骤所需要的函数即可。

依旧是找到case 26的位置打上断点,看他做了什么:

第二个函数:init转换为t6大字符串。

接下来就好办了,直接点击函数进入,将两个函数扣取,然后缺啥补啥即可,做到这里我们的t6大字符串就算是完成了。

至于对象字符串里的参数,虽然是动态的,但是设置为定值也可以请求成功,追求完美可以自己打日志断点慢慢调试,这里就不做过多赘述(其中bu3和bu6分别是head和body的子元素节点数,两个random则是由同一个函数随机生成的)。

 

 

现在日志上其他字符的线索已经很少了,那我们不妨给所有switch语句都加上日志断点,宁错杀不放过,获取尽可能多的线索:

接着只需要一个字符串一个字符串的还原:

先搜索第一个类似时间戳格式化的字符:

时间戳上还有一个函数,点进去发现,正是时间戳格式转换函数:

接下来搜索tk字符串后的字符串(由于这个字符串的生成逻辑与最后一个字符串的生成逻辑类似,只是参数变了一下,所以只讲解这一个):

(这里我重新开了一个页面,所以字符串与上面的不一样)

这里猜测字符串是由上面的四位数组(其实就是),想找到四位数组转换为字符串的方法还是老样子,在case 25出打上日志,这里不再讲解。

接下来就需要找到四位数组的生成位置,往上翻日志:

这里的16位数组生成四位数组,想要找到生成函数依旧是去打日志断点输出。

接着往上找16位数组的生成位置

这里发现数组还进行了第一位和第三位的换位。

接着溯源:

这里16位数组由四位数组生成,获取生成函数,还是去相应位置打日志断点获取

再找四位数组生成位置:

这里有一个奇怪的点,四位数组的生成位置(moudle126)的前一个日志并不是在moudle126内,所以说moudle11应该是moudle126调用函数中的步骤,而四位数组的生成函数就是moudle11所在的函数,往上翻日志,找到最后一个moudle126出现的位置:

四位数组的生成参数如图所示,想要看的更加准确和获取生成函数,还是打日志断点进行观察。

下面我们结合后面日志观察这个参数:

发现这个参数的首尾两端就是key值,中间拼接的body则是我们sha256加密的请求体参数,后面还有一个t则是我们传入请求体时一起传入的时间戳。

既然这样我们就只需要知道key值的生成即可,key值的生成逻辑和tk字符串后的那一位字符串极为相似,还是溯源,打日志断点进行分析,所以就跳过了。

到这里我们h5st就算是分析完成了接下来就是拼接字符串。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值