滑块问题
建议调试的时候删除timestamp2就行,不要把所有cookie都删了,否则进入无限滑块。 尽管只删除timestamp2,生成的参数值一样。
开控制台的时候,把这个div删掉就可以拖动了。
如果还是进入无限滑块环节,换下IP,过一会儿会解封。
接口分析
之前的registerCanvas接口也更新了,FormData中的sign进行了加密。
timestamp2现在是服务端返回的,请求时还是只需要携带timestamp2。
Sign分析
掏出祖传的XHR断点。 输入: /v2/shield/registerCanvas , 删除timestamp2刷新页面
往回走两步,可以看到参数 i 和 u。
对应的 id 和 sign。
在 call stack 中向下调试。
找到了u = I.qrTqB(l, I.PNXDL, JSON[r(1347)](i)) ,把参数都打印下看看。
即:
所以扣下来应该是这样的流程
经过一阵分析后,发现关键位置在 I[o(1159)](function(n, t, e) {} 这里。
I."uPhZo" = function(n, t, e, r) { return n(t, e, r) },
所以说最后的调用如下图所示:
eyJ1c2VyQWdlbnQiOiJNb3ppbGxh 是 浏览器参数base64之后的结果。
'{"userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36","webdriver":false,"language":"zh-CN","colorDepth":24,"deviceMemory":8,"hardwareConcurrency":8,"screenResolution":"1920;1080","availableScreenResolution":"1920;1040","timezoneOffset":-480,"timezone":"Asia/Shanghai","sessionStorage":1,"localStorage":1,"indexedDb":1,"openDatabase":1,"cpuClass":"unknown","platform":"Win32","plugins":["PDF Viewer::Portable Document Format::application/pdf~pdf,text/pdf~pdf","Chrome PDF Viewer::Portable Document Format::application/pdf~pdf,text/pdf~pdf","Chromium PDF Viewer::Portable Document Format::application/pdf~pdf,text/pdf~pdf","Microsoft Edge PDF Viewer::Portable Document Format::application/pdf~pdf,text/pdf~pdf","WebKit built-in PDF::Portable Document Format::application/pdf~pdf,text/pdf~pdf"],"canvas":"10cfbbb02b2606dbc2ccb15a3cd2b558","adBlock":false,"hasLiedLanguages":false,"hasLiedResolution":false,"hasLiedOs":false,"hasLiedBrowser":false,"touchSupport":"0;false;false","fonts":"4;7;8","audio":"124.04347527516074"}'
扣代码补环境
H中有加解密相关变量名。
参数中会判断是encrypt还是decrypt,加密方法最终会走到case 9 中 return T中。
关于补变量名的问题,可以写个正则统一替换。
ID分析
id参数是sign下面的c
c = I[r(570)](v, I[r(791)](u, I[r(222)]))
经对比,v方法是普通的md5加密。
流程总结
Sign生成流程是先把浏览器信息base64,然后加密得到k,s,再把k和s通过FbmlO方法拼接起来得到b,然后对b再进行加密得到最终的sign值。
ID生成流程是把sign和字符串RRq9y03tuV进行拼接,然后通过v方法进行MD5加密。
代码部分
代码下载:
【温馨提示:此处隐藏内容需要付费订阅后才能查看!】
当你出现滑块时,目前只要更换参数中的canvas就可以批量跑了,随机生成一个32位字符串即可。
切记不要一直去注册timeStamp2,因为timeStamp2在相同浏览器信息下的值的固定的。
等你现有的timeStamp2失效了,再换canvas注册新的。
运行测试
拿本地的浏览器参数在代码中加密,返回的结果和浏览器的结果相同
timestamp2也和浏览器的结果相同,说明我们的补出来是正常的。