本文制作研究使用,切勿非法使用.
易盾有无痕验证,滑动验证,点击验证三个,今天分析的是无痕验证,通过检测浏览器的环境,确定用户使用的的客户端情况,在不需要用户任何点击的情况下,与服务器后台通信,校验用户端的环境,返回一个validate,应用于登录,注册等操作,使用于大部分的网易产品中.具有代表性.
如果客户端没有通过检测,那么就会返回空的validate,并且弹出滑动验证码:
首先还是抓包:
加密的参数有cb,data和token
token参数来自于另外一个请求,http://c.dun.163yun.com/api/v2/get?id=89ca29a41f6148a8ae61ff60e8eb70bf&fp=U6T7V%5C5slsLgo6rqWxlEuUaqpmshrcv0kW%2FtwtHVXuOf%2B8Ih%2FKtNvgMWkNG84ZA4phxVxi8IMgE0EuzeYpxOl2hXj%2FTBLYtqGZtpebapQNV2DTSGNAuEXeymlE40C0mcRjtKOUhmnBq2Z%5CS6n2m3aKvjkX8JNQ4EJcn5QqzY5PX%3A1573627948118&https=false&type=5&width=&version=2.13.1&dpr=1&dev=1&cb=HLGd5Zbzk1b05DdYG9R189J9AANLOMf49jQL1FQla80lAsLpGbWnYZe00gymkJ0j&ipv6=false&runEnv=10&group=&scene=&referer=http%3A%2F%2Freg.163.com%2Fnaq%2FfindPassword%23%2FverifyAccount&callback=__JSONP_qfln3uu_0
我们按照顺序来一个一个分析
token参数:
token参数抓包的情况:
加密的参数有fp,cb.
首先追一下这个fp参数:
继续往上:
n = window.gdxidpyhxde
1
这个fp来自于window.gdxidpyhxde这个全局对象,观察这段js的头部使用webpack打包的:
对于我们来说很容易搞定.继续追踪gdxidpyhxde:
继续追踪,来到了关键的部分,但是代码很难看:
我们来简单的解析翻译一下代码:
这样就很清晰了,可以看到核心的代码取到了那些浏览器BOM对象相关的东西.
这样fp函数就出来了.
cb参数:
继续:
其实就是一个随机生成的.uuid通过B函数来加密的.
拿到到fp和cb请求得到token.
接着第二个包:
只剩下抓包validate中的和data参数了
{"d":"","m":"UuMY1\\h0GgFOr77CcFRE/i33","p":"hKhv/EPEo5pcL6acqGkherGNrjfkjXM7Ns/bbINTYAZ3","ext":"CvykDXxbr0Kew8H4Uk4MIimKMCZ3"}
1
2
找到加密的位置:
g函数还是这个B来加密的:
call一下就可以得到B函数了.
模拟
使用python调用node执行,依然是成功的截图:
舒服!
源码就不公开了.