声明:本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢!
aHR0cHM6Ly93d3cuZ2VldGVzdC5jb20vZGVtby9zbGlkZS1mbG9hdC5odG1s
抓包分析,看到一个加密参数w,全局搜索加密字段找不到可疑信息,同时又不是XHR所以无法下断点, 那该怎么定位?
通过Initiator可以看到与该请求有关的一个js文件,我们点进去看看。
怪不得搜不到相关信息,我们用 beautifier.io 美化一下代码,然后放到编辑器里再搜索看看。
很快找到关键位置,可以看到,w值是 u + s , u值与a值有关,a值与o有关,o 中 userresponse、imgload、ep 不清楚是什么,我们分别在几个位置下断点。
拖动滑块停在断点处,暂不关心传入的三个参数是什么,先来看看userresponse是如何生成的。
在控制台查看相关信息,发现第二个参数challenge的值,我们只需要抠取$_CFO函数就行了。
抠取的过程写教程比较麻烦,不会抠取的平时还需要多加练习,一波操作之后,userresponse搞定了。
接下来看看 imgload 是什么,从字面来看,图片加载?多次调试会发现该值是变化的,暂时不知道是什么东西,或许对参数生成没啥影响呢?继续往下看。
ep的值好像是一堆时间戳,可不可以模拟一下呢?继续往下看。
$_DDQ函数传入的是一个字符串,由三部分拼接组成,第一部分多次测试发现应该是个定值,第二部分是取了challenge的前32个字符,后面一部分是o中passtime的值,而passtime的值又是传入的参数n的值。下面抠取函数运行看看。
可以看到结果与上图控制台输出的一致,rp的值搞定了,我们继续调试看看s值是如何生成的。
我们找到了s的关键加密位置,new RSAKey().encrypt对一个字符串进行了加密操作, 字符串是通过调用某个函数生成的,继续调试,找到相关的信息进行抠取。
不错,s值出来了,继续往下看。
AES加密?没有进行测试,暂时选择抠取,把AES先抠取出来,然后我们看到gjson.stringify,不知道对o做了什么,控制台输出一下,跟JSON.stringify的结果一样,那我们是不是可以省掉这部分代码的抠取呢?新手的话不要偷懒。第二个参数其实就是前面提到的RSAKey所加密的字符串。自己跟进去看看就知道了。继续往下看。
对a的值进行Base64处理,我们直接抠取它的Base64就行了。接下来要做的就是看看我们抠取的w值生成算法是否有效。
获取新的滑块,拖动滑块停到断点处。我们只需要拿下面的四个值就可以测试。
这样是不是成功了? 那么剩下的任务就是分析传入的三个参数t、e、n到底是什么?
观察调用栈,找到相关位置下断点。这里重点讲讲l值是如何生成的。大概知道往一个函数里传入了三个参数。第二和第三个参数是前面请求得来的,这个你们自己抓包去看,我们看看第一个参数是怎么生成的。这个是不是滑动轨迹呢?我们可以把加密代码抠取出来,拿这个轨迹测试看看。
不错,结果是一样的!
知道了里面的三个参数值是怎么来的,接下来我们需要抠取这个函数,然后拿这三个值测试看看。
结果是一致的。新年第一篇教程就到这里了。祝各位朋友新年行大运,发大财!如果觉得教程不错,帮忙分享转发或者打赏鼓励,谢谢!