开局一个登录框,随机输入抓个包:
我嘞个骚刚,哥们,这对吗?请求与响应正文全是密文:
好吧,这里我选择Pwds进行定位,在源代码中搜索:
那么,大概率密文用到的是des加密。
接下来,尝试回到刚刚那段关键代码处,在附近打上几个断点来查看关键位置是否在这个范围:
1、我们说到了,o的值就是加密后的请求包正文。而o的值来源于 p(c, j(a, t)) ,使用 p() 调用 c 和 j(a, t) ;
2、根据上图可得,c的值为:一串包含随机内容与时间戳生成的内容,最后截取前8位字符串;而a则是未加密前的正文内容;t的值是1,我推测就是确认加密的意思;
3、那么也就是说:o的值,有可能是通过获取c的内容作为密钥,然后进行加密。至于是什么加密方式,我们在JS中看到有des关键字,可能是des加密。
在前面的分析中,我们解释到了:c是生成一串具有随机数且包含时间戳的字符串,并且截取前8位字符串,最后作为c的值:
那也就是说,由于包含了时间戳,那么c的值会随着你每一次请求的时间戳不同而产生变化。同时经过我们的验证,c是des加密的密钥,那么意味着每一次发送新的数据包时,对应数据包的密钥也会产生变化。
问题大吗?有点大,但不是很大。我们逐步来解决,先看下图:
回到我们最开始定位的数据包头里面的Pwds,从上图我们可以看到一些流程,我们直接来总结一下分解的步骤:
1、u.Pwds,也就是数据包头中的Pwds,它的值来源于b;
2、而b是一串密文,它通过获取r的值:FT****GO作为密钥;将c的值+时间戳,拼接在一起,然后进行加密;
3、最后一个重点,记住:o是获取c的值作为密钥,进行des加密。
解决问题
此时就意味着,我们想要对密文进行加解密的话。首先,需要对Pwds进行解密,密钥是r的值;然后获取其明文的前8位字符串作为des解密密钥。验证一下,如下:
最后大佬跟我说,我的分析流程应该没有问题,但是有没有尝试一下3des加密(大佬不语,只说是经验之谈):
掏出Deepseek,虽然第一次代码存在一些小问题,但是我提出新的要求后,差不多直接就运行没毛病了,后续再让他慢慢微调,形成最完美版本即可:
原文始发于微信公众号(犀利猪安全):分析某台子网站加密,脚本联动BP实现自动加解密梭哈,直接爽飞
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论