本文章未经容许禁止转载,禁止任何修正后二次传播,擅自利用本文讲解的技能而导致的任何意外,作者均不卖力,若有侵权,请在"大众年夜众号【K哥爬虫】联系作者立即删除!

逆向目标目标:某度滑块验证码、点选验证码、旋转验证码,v1、v2 逆向剖析v1 旋转验证码:

aHR0cHM6Ly93YXBwYXNzLmJhaWR1LmNvbS9zdGF0aWMvY2FwdGNoYS90dXhpbmcuaHRtbD9haz0zM2M0ODg4NGI3ZGY4M2Q0MjMwZTA3Y2JjZDBkMDdmZCZiYWNrdXJsPWh0dHBzJTNBJTJGJTJGYWlxaWNoYS5iYWlkdS5jb20mdGltZXN0YW1wPTE2MzE0MzQ0MjUmc2lnbmF0dXJlPWM2ODRhODJiNzk4MjAyOTg3NWJmZDhlMGE2NjBiNzdmv2 旋转验证码:

aHR0cHM6Ly93YXBwYXNzLmJhaWR1LmNvbS9zdGF0aWMvY2FwdGNoYS90dXhpbmcuaHRtbD8mYWs9YzI3YmJjODlhZmNhMDQ2MzY1MGFjOWJkZTY4ZWJlMDY=v2 滑块验证码:

aHR0cHM6Ly93YXBwYXNzLmJhaWR1LmNvbS9zdGF0aWMvY2FwdGNoYS90dXhpbmcuaHRtbD8mYW1wO2FrPWMyN2JiYzg5YWZjYTA0NjM2NTBhYzliZGU2OGViZTA2v2 点选验证码:

aHR0cHM6Ly93YXBwYXNzLmJhaWR1LmNvbS92Ni9nZXRQYXNz

PS:v1、v2 是作者自己为了区分而命名的版本号,紧张依据是核心 JS 文件分为 mkd.js 和 mkd_v2.js 两个版本,如下图所示:

此外,在界面上也有所差异,v2 版本的旋转、滑块图片有很明显的阴影、线条滋扰,如下图所示:

jsp滑动图片验证码验证码逆向专栏某度滑块点选扭转验证码 v1v2 逆向剖析 GraphQL

上面给的地址中,点选验证码的地址有时候是点选,有时候会变成旋转,估计是非常等级不同导致的,此外,传闻还有一种无感验证,不过作者到处找也没找到个地址,估计逻辑都是差不多的,无感验证如下图所示:

抓包剖析

以下以 v1 旋转验证码为例(v2 接口名称不一样,但逻辑是一样的),第一次 viewlog 接口,要求的 ak 是固定值,当然不同场景不同网站是不一样的,callback 回调值,_ 韶光戳,返回值 as、tk 都是后面会用到的。

然后是一个 getstyle 接口,个中的 tk 便是前面 viewlog 接口返回的,返回值里 backstr 后续参数加密会用到,img 便是旋转图片地址,info 是一些版权信息。

旋转验证码开始验证,此时第二次涌现 viewlog 接口,as 和 tk 参数是第一次 viewlog 返回的,fs 参数须要我们逆向,包含了旋转角度等信息,如果旋转角度精确且参数没问题,则返回值里的 op 为 1,其余返回的 ds 和 tk 后续还会用到。

上一步验证走完后,并不虞味着通过验证了,后续还会有一个 viewlog/c 的接口须要进一步验证,个中的 tk、ds 参数便是上一步返回的,如果验证失落败,返回值 code 为 1,验证成功,code 则为 0。

逆向剖析 fs

接下来剖析紧张加密参数 fs,跟栈到 mkd.js:

可以看到 o 便是 fs,而 o 又是 r.rzData 经由加密后得到的,输出一下 r.rzData,构造如下图所示:

主要参数:

ac_c:一看就知道和旋转的角度有关;backstr:getstyle 接口返回的;cl:x,y 坐标以及时间戳,量一下就知道这个坐标是鼠标点击下面那个滑动条按钮的时候的坐标;mv:鼠标轨迹,鼠标动一下就记录一下坐标和韶光戳;cr:屏幕长宽高档信息;其他值都是空或者0。

实际测试,cl 和 mv 都不校验,写去世或者置空都行,当然想要自己假造一下也是可以的,量一下滑动按钮在屏幕中的位置,cl 根据这个位置随机生造诣行了。
重点看看 ac_c,直接搜索即可定位:

可以看到这个值的打算方法为 parseFloat(o / a).toFixed(2),a 是定值 212,实际上便是滑动条能够滑动的最大长度,o 是滑动的间隔,如果我们识别出来的是旋转角度 angle,则 ac_c 打算方法如下:

var o = angle 212 / 360var ac_c = parseFloat(o / 212).toFixed(2)// 也可以直接写成:var ac_c = parseFloat(angle / 360).toFixed(2)

r.rzData 搞定后,就只有个 r.encrypt() 方法了,直接跟进去便是我们熟习的 AES 算法,个中 iv 是 viewlog 接口返回的 as 值加上一个定值 appsapi0,其他就不用多说了。
至此加密参数就搞完了,还是非常大略的。

旋转角度识别

这里推举一个国外大佬的 RotNet 项目,可以用于预测图像的旋转角度以纠正其方向,还有基于此项目开拓的,Nanda 大佬的 RotateCaptchaBreak、另一个大佬的 rotate-captcha-crack 等,链接如下:

https://github.com/d4nst/RotNethttps://github.com/chencchen/RotateCaptchaBreakhttps://github.com/Starry-OvO/rotate-captcha-crack

深度学习大佬可以基于这些项目进一步演习,像我这种对这方面一窍不通确当然是选择打码平台了,云码打码还不错,只不过官网只放出了 v1 版本没有阴影滋扰的,找他们客服可以拿到 v2 版本有阴影滋扰的类型,这里就不多说了,免得被认为是打广告了哈哈哈。

v2 版本分析

v2 版本和 v1 版本基本上差不多,差异在于 rzData 的构造不太一样,ac_c 的打算方法不一样,以及 AES 的 IV 不一样,先看 AES 的 IV,v2 版本是 as 值加上固定值 appsapi2:

然后再看看 rzData,common 字段下基本上便是 v1 的 rzData 的格式,captchalist 下,至少有 spin-0(旋转)、`puzzle-0(滑块)、click-0(点选)三种,ac_c 依旧是旋转角度占比、滑动占比以及点选坐标信息,其他的依旧是写去世或者置空就行。

然后便是 ac_c 的打算方法了,首先是旋转验证码,直接搜索 ac_c:

往上跟栈,有个 percent 的地方,一个三目表达式,e 是固定值 290,e - 52 = 238,238 也便是滑动条能够滑动的最大长度:

如果我们识别出来的是旋转角度 angle,则 ac_c 打算方法如下:

var distance = angle 238 / 360var ac_c = Number((distance / (290 - 52)).toFixed(2))// 也可以直接写成:var ac_c = Number((angle / 360).toFixed(2))

而对付滑块验证码就有所不同,同样是这个地方的三目表达式,但是要走后面的逻辑:

如果我们识别出来的是滑动间隔 distance,则滑块 ac_c 的打算方法如下:

var ac_c = Number((distance / 290).toFixed(2))

同样对付点选验证码来说,也不一样,ac_c 的值是点击的 xy 坐标以及时间戳:

其他问题

前面我们说了百度的验证该当有两次,对付第二次验证,也便是 v1 的 viewlog/c 接口,v2 的 cap/c 接口,即便你第一次校验通过了,这个 c 接口校验也有可能不通过,涌现这种情形的缘故原由是通过的韶光太短了,随机 time.sleep 1-3 秒即可,如果韶光太短,c 接口可能会报以下验证缺点:

{'code': 1, 'isRectified': False, 'msg': 'Verification Failed'}

还有一种情形便是提示存在安全风险,请再次验证,涌现这种情形你会创造去浏览器手动滑也是一样的,以是在本地加个再次验证的逻辑就行了,一样平常来说第二次验证就能通过。

{'code': 0, 'msg': 'success', 'data': {'f': {'feedback': 'https://www.baidu.com/passport/ufosubmit.html', 'reason': '存在安全风险,请再次验证'}}}

然后便是要求 header 里没有 Referer 或者 Referer 禁绝确的话,会报错:

// v1 没有 Referer{'code': 1, 'msg': 'Unregistered Host'}// v1 Referer 禁绝确{'code': 1, 'msg': 'Invalid Request', 'data': []}// v2 没有 Referer 或者 Referer 禁绝确{'code': 100600, 'msg': 'Unauthorized Host'}

还有一个小技巧,如果你想自己验证一下旋转的角度对不对,怎么去丈量这个角度呢?我们可以借助一些做图软件,大略点儿的比如美图秀秀,新建一个画布,然后直接将验证码图片拖进去,就可以自由旋转了,旋转的时候软件会自动标注出旋转的角度,如下图所示:

结果验证

爬虫工具站

K哥新上线了一个爬虫工具站,欢迎测试:https://www.kgtools.cn/




粉丝回馈!


为庆祝K哥爬虫公众年夜众号原创内容破百,粉丝数过万,特举办粉丝回馈活动!

感谢快代理对本次活动的大力支持!

活动规则

关注K哥爬虫"大众年夜众号于"大众号本文评论区揭橥评论,摇号抽出幸运粉丝禁止重复评论

活动奖品

一等奖: 快代理包月套餐 + 知识星球 + K哥爬虫定制马克杯 (1名)

二等奖: 快代理包周套餐 + 知识星球 + K哥爬虫定制马克杯 (3名)

三等奖: K哥爬虫定制马克杯 (5名)

四等奖: 现金红包 6.6 (10名)

活动韶光

活动开始韶光:2023年7月7日

活动截止韶光:2023年7月14日

开奖韶光:2023年7月17日