一个函数破解Geetest滑动验证码
本文主要讨论极验滑动验证码的轨迹生成,关于js加密请参见之前的文章。
极验的验证过程
请求被保护网站,取得gt, challenge参数。响应如下{"success":1,"gt":"4a28913077af48ca6eadebe01f3be4d2","challenge":"2bc1d118b34d9f2f7bc981067a3bee68"}注意这里的success参数。success为1表示在线验证模式,即需要上传滑动轨迹到api.geetest.com做验证;当为0时表示是离线模式,只需要通过Js计算就可以得到validate参数。
通过gt, challenge请求api.geetest.com取得图片路径等参数
加密用户的滑动轨迹,传送给api.geetest.com进行验证,验证成功返回{"success": 1,"message":"success","validate":"57fe2ff29397484dc3fdceb54334771e","score":1}, 从而拿到validate参数。
滑动轨迹的分析
如下是一次验证成功的轨迹样本。
[-20,-20,0];[0,0,0];[0,0,341];[0,0,351];[1,0,356];[2,0,364];[4,0,372];[8,0,386];[14,0,389];[20,0,398];[29,0,405];[39,0,414];[44,0,421];[54,0,426];[62,0,440];[70,0,442];[77,0,456];[85,0,459];[92,0,472];[99,0,475];[106,0,490];[114,0,492];[121,0,506];[128,0,508];[131,0,516];[136,0,532];[139,0,533];[143,0,540];[145,0,549];[147,0,556];[148,0,565];[150,0,575];[151,0,581];[152,0,592];[152,0,598];[153,0,608];[154,0,616];[154,0,624];[154,0,632];[155,0,640];[155,0,648];[155,0,657];[155,0,662];[156,0,673];[156,0,678];[157,0,685];[158,0,700];[159,0,705];[159,0,715];[160,-1,719];[161,-1,726];[162,-1,739];[162,-1,742];[163,-1,756];[164,-1,758];[165,-1,767];[166,-1,781];[167,-2,783];[168,-2,791];[169,-2,799];[170,-2,807];[171,-2,815];[172,-2,823];[173,-2,835];[174,-2,840];[175,-2,849];[175,-2,859];[176,-2,865];[176,-2,872];[176,-2,883];[176,-2,889];[177,-2,900];[177,-2,956];[177,-2,973];[177,-2,1042];[177,-2,1074];[178,-2,1107];[178,-2,1115];[178,-3,1123];[179,-3,1132];[180,-3,1140];[181,-3,1147];[181,-3,1155];[182,-3,1166];[182,-3,1173];[183,-3,1182];[183,-3,1191];[183,-3,1198];[183,-3,1205];[183,-3,1228];[183,-3,1277];[184,-3,1544];[184,-3,1552];[184,-3,1577];[184,-3,1596];[185,-3,1609];[185,-3,1617];[185,-3,1634];[185,-3,1649];[186,-3,1666];[186,-3,1682];[186,-3,1706];[186,-3,1717];[187,-3,1734];[187,-3,1750]
通过分析可知,每个轨迹节点由三部分组成,我们将它定义为[x,y,z]。
x表示滑动时的横向位移坐标; 值为正向右移动,为负时向左移动; 即x轴偏移量
y表示滑动时的纵身偏移。
z表示滑到当前x坐标的用时(ms)
样本中第1个节点表示按下鼠标时相对于滑块左上角的位置,第2个节点固定为0,第3个节点表示开始移动。使用matplot绘制[x,z],得到典型的成功的轨迹图
由轨迹图可知,整个移动过程分为三个阶段:按住还未移动、开始大辐移动、微调。
移动阶段的图形与tanh函数非常像,我们可以用这个函数生成移动阶段的轨迹。
也就是说我们可以通过对tanh函数进行拉伸、放大就可以了。
函数
1. 移动阶段取T0表示开始运动时间, T1表示运动到目标位置时间。D表示目标位移量,移动阶段的函数式f(t)如下
2. 微调这段只要时间间隔设置大点,并控制总用时在1500ms左右就可以了。这个阶段虽然简单但如果设置得不合理很容易导致验证失败。
后记
笔者在本机单ip测试了20次,成功了16次,成功率80%,对于爬虫来说已经够用了。代码就不放了,省得拉仇恨。而且交流发现有很多牛人早已经成功破解了,或使用机器学习或使用函数回归。
另外在分析时发现有些网站一会儿使用在线模式,一会儿又变成离线模式。在极验的资费套餐中发现其收费是按小时内验证次数做限制,也就是说如果套餐内的验证次数用完了就改为离线验证。假如成功率只有20%的话,也可以在一小时内发起大量验证将套餐内的次数耗尽,然后在剩下的时间里就只能使用离线模式了。不得不说极验这点做得很差劲,没有提供多少保护却只想着赚钱。
本文主要讨论极验滑动验证码的轨迹生成,关于js加密请参见之前的文章。 copyright 无奈人生
极验的验证过程
请求被保护网站,取得gt, challenge参数。响应如下{"success":1,"gt":"4a28913077af48ca6eadebe01f3be4d2","challenge":"2bc1d118b34d9f2f7bc981067a3bee68"}注意这里的success参数。success为1表示在线验证模式,即需要上传滑动轨迹到api.geetest.com做验证;当为0时表示是离线模式,只需要通过Js计算就可以得到validate参数。
通过gt, challenge请求api.geetest.com取得图片路径等参数
加密用户的滑动轨迹,传送给api.geetest.com进行验证,验证成功返回{"success": 1,"message":"success","validate":"57fe2ff29397484dc3fdceb54334771e","score":1}, 从而拿到validate参数。
滑动轨迹的分析
如下是一次验证成功的轨迹样本。
[-20,-20,0];[0,0,0];[0,0,341];[0,0,351];[1,0,356];[2,0,364];[4,0,372];[8,0,386];[14,0,389];[20,0,398];[29,0,405];[39,0,414];[44,0,421];[54,0,426];[62,0,440];[70,0,442];[77,0,456];[85,0,459];[92,0,472];[99,0,475];[106,0,490];[114,0,492];[121,0,506];[128,0,508];[131,0,516];[136,0,532];[139,0,533];[143,0,540];[145,0,549];[147,0,556];[148,0,565];[150,0,575];[151,0,581];[152,0,592];[152,0,598];[153,0,608];[154,0,616];[154,0,624];[154,0,632];[155,0,640];[155,0,648];[155,0,657];[155,0,662];[156,0,673];[156,0,678];[157,0,685];[158,0,700];[159,0,705];[159,0,715];[160,-1,719];[161,-1,726];[162,-1,739];[162,-1,742];[163,-1,756];[164,-1,758];[165,-1,767];[166,-1,781];[167,-2,783];[168,-2,791];[169,-2,799];[170,-2,807];[171,-2,815];[172,-2,823];[173,-2,835];[174,-2,840];[175,-2,849];[175,-2,859];[176,-2,865];[176,-2,872];[176,-2,883];[176,-2,889];[177,-2,900];[177,-2,956];[177,-2,973];[177,-2,1042];[177,-2,1074];[178,-2,1107];[178,-2,1115];[178,-3,1123];[179,-3,1132];[180,-3,1140];[181,-3,1147];[181,-3,1155];[182,-3,1166];[182,-3,1173];[183,-3,1182];[183,-3,1191];[183,-3,1198];[183,-3,1205];[183,-3,1228];[183,-3,1277];[184,-3,1544];[184,-3,1552];[184,-3,1577];[184,-3,1596];[185,-3,1609];[185,-3,1617];[185,-3,1634];[185,-3,1649];[186,-3,1666];[186,-3,1682];[186,-3,1706];[186,-3,1717];[187,-3,1734];[187,-3,1750]
copyright 无奈人生
通过分析可知,每个轨迹节点由三部分组成,我们将它定义为[x,y,z]。
x表示滑动时的横向位移坐标; 值为正向右移动,为负时向左移动; 即x轴偏移量
y表示滑动时的纵身偏移。
z表示滑到当前x坐标的用时(ms)
样本中第1个节点表示按下鼠标时相对于滑块左上角的位置,第2个节点固定为0,第3个节点表示开始移动。使用matplot绘制[x,z],得到典型的成功的轨迹图
由轨迹图可知,整个移动过程分为三个阶段:按住还未移动、开始大辐移动、微调。
移动阶段的图形与tanh函数非常像,我们可以用这个函数生成移动阶段的轨迹。
也就是说我们可以通过对tanh函数进行拉伸、放大就可以了。
函数
1. 移动阶段取T0表示开始运动时间, T1表示运动到目标位置时间。D表示目标位移量,移动阶段的函数式f(t)如下
无奈人生安全网
2. 微调这段只要时间间隔设置大点,并控制总用时在1500ms左右就可以了。这个阶段虽然简单但如果设置得不合理很容易导致验证失败。
后记
笔者在本机单ip测试了20次,成功了16次,成功率80%,对于爬虫来说已经够用了。代码就不放了,省得拉仇恨。而且交流发现有很多牛人早已经成功破解了,或使用机器学习或使用函数回归。
另外在分析时发现有些网站一会儿使用在线模式,一会儿又变成离线模式。在极验的资费套餐中发现其收费是按小时内验证次数做限制,也就是说如果套餐内的验证次数用完了就改为离线验证。假如成功率只有20%的话,也可以在一小时内发起大量验证将套餐内的次数耗尽,然后在剩下的时间里就只能使用离线模式了。不得不说极验这点做得很差劲,没有提供多少保护却只想着赚钱。
本文来自无奈人生安全网