网易滑块协议分析(一)

网易滑块验证码加密参数分析
在这里插入图片描述
如图所示,再登录之前,需要先破解它的滑块,拿到它的关键参数

1. 抓包

首先打开抓包工具或者f12控制台,然后手动滑动,观察请求包的信息。
在这里插入图片描述
我们发现这是个get请求,下面具体看下它的请求参数
在这里插入图片描述
其中响应里的validate就是我们后面处理登录,需要用到的参数。只有滑动成功,才会返回值。
我们看下请求参数中,其中大多数参数可以固定不变。只有4个参数需要我们破解。分别是id,token,acToken,data,cb。
通过多次滑动抓包,发现其中id参数也是固定值。token参数可以在请求滑块图片的时候找到。
在这里插入图片描述
接下来需要破解acToken。全局搜索acToken关键字
在这里插入图片描述
发现再其中有5处地方出现过。这里比较少,如果不确定是哪个位置的话,就再全部的位置打上断点,看它最终会停在哪里。

这里我直接通过静态分析,发现这边是个check接口,跟验证码的接口一致,我们断点直接打在这里。
在这里插入图片描述
通过动态调试,断点来到这里,继续分析
在这里插入图片描述
发现t.acToken在这里已经生成,并且这个t是通过参数传递过来的。这个时候我们应该追溯它的调用栈,看它原始生成的地方。
在这里插入图片描述
调用栈追到这里,发现已经追不动了,没有更详细的调用栈了,我们先断点打在这里,再追一下
在这里插入图片描述
发现这里断点处,acToken的值已经生成。右侧已经有了更详细的调用栈,我们继续向下追。
在这里插入图片描述
追到这里,再向下追,就看不到acToken的值了。我们再这一处的下一个调用栈的地方,下断点。
在这里插入图片描述
这里发现调用较复杂,不方便观察其中的值和结果。我们使用抓包工具替换掉原js文件,使用自己本地美化后的js继续调试。然后断点下在附近。
在这里插入图片描述
注释部分是原代码,下面是美化后的代码。发现在这里,tmp的值已经生成。是通过Xb这里方法生成的。
继续看Xb里面的方法是怎么生成的。
在这里插入图片描述
可以看到最后调用了Ea方法,去生成我们的acToken。待加密对象中的r,d,b三个值我们都可以找到它的来源。下面我们就导出Ea这个函数,看下本地js生成的值是否跟它生成的一致。
下面是导出内部函数的小技巧。
首先在全局定义一个变量。随意就好。
在这里插入图片描述
然后找到我们要导出的函数,比如说这里我们要导出Ea这个函数。那么我们首先找到Ea函数定义的地方,用这个全局变量指向Ea。那么我们就可以在函数外部去调用这个Ea方法。
在这里插入图片描述
接下来使用node,调用getEa这个方法,把参数带进去调试。
在这里插入图片描述
这里发现我们生成的值与网页生成的值是一致的。
到这里acToken的参数加密我们解决了,现在需要的就是找到刚才加密对象中d的值和b的值。 d的值在这里生成的。
在这里插入图片描述
b的值是传递进来的。在Xb函数附近,通过Wb函数生成的。
在这里插入图片描述
这里就不讲b和d的生成过程啦。调试技巧和刚才的一样,耐心一点,就能整出来。
同样,接口参数中cb的值也可以通过这种方式整出来。思路和获取acToken的值一样,比acToken的生成方式要简单一些。
在这里插入图片描述
我们要先检验一下自己生成的cb值和acToken能不能用。
检验方式有两种。
一种是通过抓包工具hook,把它要发的包拦截住,替换成我们自己本地修改的值。
第二种方式是在chrome断点调试中,修改它参数赋值的地方,改为我们自己生成的值。

这两个参数解决了,后面就只剩下data这个参数了。
在这里插入图片描述
data参数是一个json。其中又有3个加密参数等待我们解密。
这个放到下一篇再说。
总结一下本篇文章用到的小技巧。

  1. 语法比较复杂的js,可以配合抓包工具替换成本地的js,在本地js中,修改成清晰便于调试的js语法
  2. 內部函数导出。定义一个全局变量,然后内部函数指向全局变量,是这个函数在外部也可以调用。
  3. 检查调试结果。hook正常的发包请求,修改成我们自己生成的值,便于判断我们自己生成的值是否正确。

你可能感兴趣的:(验证码)