注:本篇博客仅供学习使用,请勿用做其他商业用途,如有侵权,请联系本菜鸟删除
本小菜鸟已经快两个月没更新文章了,一年总有那么356天不想努力,就想躺平,最开始学习js逆向的时候,用Python算法还原了某盾的空间推理,到现在已经过去半年多,这半年时间收获了很多,也得到了很多大佬的指点,所以我愿意把我遇到的一些学习经验分享给大家,希望大家在学习的过程中少走一些弯路。
好了,废话说了一大推,下面是本次学习的目标网址
网址:aHR0cHM6Ly9kdW4uMTYzLmNvbS90cmlhbC9qaWdzYXc=
难点分析:
- 加密的参数较多,其中一个有问题就会导致请求不成功,最终失败,本小菜鸟在逆向的过程中踩了不少的坑
- 有两个加密参数中会涉及到随机值,而且随机值不能始终固定为一个,不然也会造成失败
- 滑块的距离和轨迹的距离会有差距,就拿官网的滑块来说相差10px左右(具体的网站具体分析)
- 有几个参数的加密会涉及到浏览器环境检测,建议大家用Proxy()拦截逐一检查补环境,或者使用jsdom
流程分析:
- 【d请求】[请求参数]:(d,v) -----> [返回参数]:一个列表
- 【b请求】[请求参数]:(d,v) -----> [返回参数]:一个列表,有很多博主说b请求可做可不做,不重要,但是这是某盾逆向必不可少的一个重要步骤
- 【get?referer请求】[请求参数]:(acToken,fp,cb等) ----> [返回参数]:验证码背景图片,滑块图片,token
- 【check?referer请求】[请求参数]:(data,cb等) ---->[返回参数]:成功返回validate
主要的流程就是这几个请求,加密请求参数都在流程里面体现出来了,接下来咱们就按照上面的顺序开搞
一、d请求与b请求(重点)
说明:
- d请求和b请求是某盾的风控请求,都在watchman这个文件中,目前最新的版本是:2.7.5_af2952a4,这个版本号在后面的加密和请求中都有用到
- d请求返回成功后的第三个元素和第四个元素是后面b请求中d参数加密所需的,第四个元素是actoken这个加密参数所需的
- b请求d参数加密的元素中有一个参数是需要拿到actoken这个参数中去加密激活的,由这一步来说,b请求对于某盾来说就是必须的了
1.d请求
![在这里插入图片描述](https://img-blog.csdnimg.cn/c39c3fe0e23b4219990529ddad184277.png)
调试入口:
清空浏览器缓存,刷新页面
d请求和b请求的调试入口都是一样的
![在这里插入图片描述](https://img-blog.csdnimg.cn/5c392beb137b494a95b088bb27238ab4.png)
d请求d参数:f值可固定
当然也可以扣取js(想证明一哈自己的实力的选手),只是其中有很多检测环境的点(包括navigation和document等等),c = Ya()
,还有d值
需要我们扣js
![在这里插入图片描述](https://img-blog.csdnimg.cn/d43f1bd58d2b4c6f96e0596cf6ef835f.png)
Ya()
函数中Kb值
固定,Oa值
为watchman
的请求版本号 ,其他的对照扣js就行,没得啥难度
![在这里插入图片描述](https://img-blog.csdnimg.cn/f84fc263255d451ba832d126b9683136.png)
d值的扣取函数:将Ta整个对象扣取下来,定义成固定值
![在这里插入图片描述](https://img-blog.csdnimg.cn/920d7d4844dd4399b20e5616e6dec8b4.png)
扣取完成后d请求d的值
![在这里插入图片描述](https://img-blog.csdnimg.cn/9835904d2005439db7fb02bca6abd399.png)
d请求成功返回的值:
![在这里插入图片描述](https://img-blog.csdnimg.cn/48ff93cd47ae43baa1bfb7e793923d60.png)
2.b请求
w和u这两个值有实力的选手也可以扣一下js,但是经过本小菜鸟调试的经验,这两个值可以写成固定值,不影响(至少我的是这样 >_>),就剩下e=Ya(),
这个函数和上面d请求的Ya()是一样的,区别在于传入的参数不同
![在这里插入图片描述](https://img-blog.csdnimg.cn/9dd1a985847f43f7a768b351e6bfbf56.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/193374bf598b4208954f139b9a75beb8.png)
好了,d请求和b请求就讲完了
二、actoken
说明:以前的版本actoken是在check这个接口才验证的,当前的版本移到了get?referer这个接口来验证了,不过问题不大
调试:
![在这里插入图片描述](https://img-blog.csdnimg.cn/e388138e21714121a19c79731203ed1f.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/d3dca34bc45e42e889900374511302a5.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/f03f335082e04f1998a8e346c22d710b.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/331af1fa8f1746638351758e066f35dc.png)
进入到dc函数中:
从下面这个a值就可以看出b请求和d请求都是在actoken来校验的(可以去对照前面d和b请求返回的参数)
![在这里插入图片描述](https://img-blog.csdnimg.cn/3f5b7ccd122e4db9a3d127a2a0f863f2.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/5b98d62c3d9a4853ac248fe11f97d18f.png)
我之前的文章中也有讲到,这里就不做过多的阐述
三、fp参数
前面我有文章写了fp参数,其中检测了一些浏览器环境,用Proxy()拦截一哈,补齐环境即可(跳过跳过)
四、data参数
![在这里插入图片描述](https://img-blog.csdnimg.cn/436f6229f1ed44a18a3888cd2e78792e.png)
进入到 onMouseUp
函数,可以看到data
参数就是在此处加密组装完成的,其中涉及到轨迹加密
,滑块滑动的长度
,图片返回的token
,check请求中width的值
等
![在这里插入图片描述](https://img-blog.csdnimg.cn/6f59a7dfb4754f4984296b89688418b7.png)
移动轨迹:[x位移,y位移,时间差
]
![在这里插入图片描述](https://img-blog.csdnimg.cn/968cde3c0ef2410a83b55ba9def5133b.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/40ad8c13b2cd4f7fa643a359b95ad30f.png)
好了好了,data参数就这样吧,轨迹自己造一个就行,内容太多,手敲痛了
五、cb参数
请求图片和验证接口都用到了这个cb参数,注意的是这两个地方的cb参数不能重复使用,而且这个cb参数的逆向过程非常简单,在逆向data的过程中就能顺带的搞出来,所以我也不做过多的解释了,有需要的也可以去看我前面的文章,很详细
六、运行截图
![在这里插入图片描述](https://img-blog.csdnimg.cn/41d86973b51649e4bea1b077aadc7231.png)
成功率就是,现在还没失败过 >_>
![在这里插入图片描述](https://img-blog.csdnimg.cn/eea4b88278b34447a2dc764fa1c04680.png)