该系列文章仅限于某验滑块研究,不会公开具体算法源码,欢迎讨论
本文关联文章:
纵观
入微
芥子
浩瀚
一. 某验滑块网站入口
二. 请求抓包流程
-
打开F12,清空所有请求
这一步没啥好说的,直接跳过。
-
点击“滑动拼图验证”
当我们点击完,跳出来一个load请求,无论是从请求名称还是技术敏感性,都可以猜出来这是一个加载滑块的请求。
-
点击“点击按钮开始验证”
这一步也没啥好说的,直接跳过。
-
拖动滑块
当我们拖动完之后,跳出来一个verify请求,还是那句话,无论是从请求名称还是技术敏感性,都可以猜出来这是一个验证滑块的请求。
- 多次重复上述步骤
注意记录每次load、verify请求的参数以及响应
可以得到下面结论
- load请求参数中的captcha_id、client_type、risk_type、lang不变
- verify请求参数中的captcha_id、client_type、risk_type、pt不变
- verify请求参数中的lot_number来自load请求的响应中的lot_number
- load、verify请求中的callback为“geetest_”加上13位的时间戳,也就是毫秒级
- load、verify请求参数中的challenge应该是算法生成的
- verify请求参数中的w应该是算法生成的
三. 破解load、verify请求的challenge参数
- 直接search中搜索challenge,命中7条,我们来看下
第1、2条太长直接略过
第3条有个冒号,应该是给字典中的challenge赋值
第4、5条是个判断,也略过
第6、7条有个冒号,也是给字典中的challenge赋值
但考虑到第六条有个uuid()操作,我们直接看第六条 -
直接打断点,成功断上
可以看到旁边的堆栈中config中并没有challenge,所以challenge的值一定是由函数uuid()生成的,我们来看下uuid()函数的定义
var uuid = function () {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
var r = Math.random() * 16 | 0;
var v = c === 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
};
-
接下来就是构造load请求了,各位看官,动手实践下吧
四. 结语
看到这里,会发现我们verify的w参数还没有破解,所以我们下一篇文章会去对w的明文以及密文做一些研究
入微