前言
1、做某项目测试的时候,大家都知道肯定上来就抓包,接着就是一脸懵逼,发现数据包全部都是加密的,那咋办啊肯定下一个啊。
![](https://img.haomeiwen.com/i27712517/b351c6feffee9ac9.png)
![](https://img.haomeiwen.com/i27712517/84c8e4d943525224.png)
一、js调试
1、进入正题啊,我这里抓的是发送短信接口的数据包,从数据包中可以看到总共有5个参数,分别为bizData、encryptKey、timestamp、signature、Key,5个参数,通过参数应该能猜到bizData参数就是主要加密的内容、我们要看的明文应该就在里面,然后两个key我们先不管,timestamp参数一看就知道是时间戳了,那signature参数看名字应该是签名的意思。
![](https://img.haomeiwen.com/i27712517/327665b762608724.png)
2、接着我们打开开发者工具,然后打开全局搜索,搜索bizData参数,感觉第一个应该是。
![](https://img.haomeiwen.com/i27712517/42e726f3b8afc237.png)
3、然后大概看了一下,n应该就是加密以后的结果,再追踪一下n,发现通过上面生成的,接着在该处设置断点
![](https://img.haomeiwen.com/i27712517/4ec1ae513c448d83.png)
![](https://img.haomeiwen.com/i27712517/e1dbb5a6881d6ff9.png)
4、然后就一直下一步看他怎么生成的,中间跳的步骤就省略了,直接找到关键代码处,代码中直接就显示e应该就是加密前的明文,接着看上面有个AES,猜测应该就是AES加密、再看下面$e.key = t,感觉t应该就是秘钥了。
![](https://img.haomeiwen.com/i27712517/73f78c7c6a95b7fc.png)
5、果然在下面对t有定义,加密方式就是AES,接着e就是加密前的明文,那t应该就是秘钥了,然后再看下面iv偏移量是Be,但是Be怎么生成的在上面有定义 Be = Ie.a.enc.Utf8.parse('1234567812345678'),那Be就是1234567812345678了应该是固定的,模式下面也写着是CBC,那所有条件都找到了。
![](https://img.haomeiwen.com/i27712517/b2a7e80133861df7.png)
6、我们找一个有AES加密解密网站,填入秘钥和iv偏移量,成功解密出数据,接着修改明文里面的参数再加密,发现报错了、那应该还有个signature签名需要解密。
![](https://img.haomeiwen.com/i27712517/8d9db124cd47dc76.png)
![](https://img.haomeiwen.com/i27712517/b240966571531a3d.png)
![](https://img.haomeiwen.com/i27712517/4ba91cf599309846.png)
二、签名解密
1、同样操作,直接全局搜signature签名,找到该处发现s应该是生成签名的地方,然后在s处设置断点,看代码好像是SHA256加密的,那a就是加密前的数据了。
![](https://img.haomeiwen.com/i27712517/e23d6fc7dec2f55b.png)
2、然后一直下一步,发现加密前的a出来了,其实仔细看一下应该能发现a是有规律的,是通过encryptKey+signMethod+timestamp+bizData+salt拼接的,看代码 a += r[e]就是生成的过程。
![](https://img.haomeiwen.com/i27712517/c30fdd4b5c5d8bc5.png)
3、然后找到SHA256网站加密一下,发现结果是对的,接着写脚本就完事了。师傅们小弟刚学,多给点建议啊。
![](https://img.haomeiwen.com/i27712517/072ef2a54bd9bc62.png)
![](https://img.haomeiwen.com/i27712517/b474f0e4f7fe004a.png)
网友评论