当前位置: 首页 > 后端技术 > Python

【验证码逆向专栏】“第一代”滑块验证码逆向解析

时间:2023-03-25 22:15:08 Python

声明本文所有内容仅供学习交流,抓包内容、敏感网址、数据接口等内容均已处理已脱敏,严禁用于商业用途和非法使用,否则由此产生的一切后果与作者无关,如有侵权请联系我立即删除!本文未经许可禁止转载,修改后禁止二次传播。对于因未经授权使用本文所解释的技术而导致的任何事故,作者概不负责。如有侵权,请第一时间联系作者公众号【K爬虫哥】删除!Reversetargettarget:一个测试的“第一代”滑块的验证码,实际上是二代离线模式,validate参数取反,底图获取还原首页:aHR0cHM6Ly9mdy5zY2pnai5zaC5nb3YuY24vbm90aWNlc2gvaG9tZQ==加密算法:MD5前世溯源众所周知,某测是首家“行为公式验证”安全技术服务商,摒弃了失真复杂的字符图片验证码,大大提升了用户的体验感。某测原验证码完成于2012年底,产品还在内测时,最早的种子用户大多来自创始人吴源的母校武汉大学珞珈山水BBS站:在2014年年中,Jiexperience正式开通服务,武汉本土互联网企业尤其是游戏企业给予了“大力支持”。武汉265G是全国最大的网页游戏资讯网站。率先使用“点击拖动完成验证”的全新验证方式。后来,通过口耳相传,武汉17173、电玩巴士等游戏门户也纷纷使用了其产品。“行为验证”推出后,从游戏行业开始,逐渐取代了互联网上各种形式的传统验证码,并普及到全国各地。下图为早年上市的第一代产品。时过境迁,不知道网站是否还在。知道的请私聊K哥:真正的初代产品是没办法分析抓拍情况的。K哥写的前一篇文章是二代滑条的在线模式,大家可以阅读:【验证码逆向专栏】某测二代滑条验证码的逆向解析。本案例是对二代滑块离线模式的分析,与常规的某测试产品有很大的不同。在首页输入公司名称点击搜索弹出滑块验证码,注册界面返回熟悉的challenge和gt参数:如果知道某测其他产品,则返回图片下载路径和加密参数通过类似get.php的接口,validate参数是在w参数校验后得到的,通过slider后,直接生成validate参数并校验,所有流程直接在本地执行:validate接口:校验是否是滑块通过;ent_info_list接口:验证session.token并验证。如果失败,则与一开始home界面返回的内容一致。如果通过,将显示更多相关企业信息。逆向分析首页搜索生成验证码,从验证接口validate顺着栈,跟进u1G.:格式,进入geetest.0.0.0.js文件第5689行,设置这条线上的一个断点滑动滑块将停止,你可以看到H2Y失败了。此时已经校验完毕,显示失败:继续顺栈,在3273行设置断点,这里是校验的位置:关键部分如下:W1Y[f2Z.S3C(60)](m1Y,f1G[f2Z.t3C(537)](f2Z.t3C(551),R1Y[f2Z.S3C(278)])[f2Z.t3C(155)]()-f1G[f2Z.S3C(537)](f2Z.S3C(633),R1Y[f2Z.S3C(278)]),R1Y)在控制台打印出来,初步推测W1Y[f2Z.S3C(60)]方法查了滑动距离,滑动时间和其他一些参数:跟上W1Y[f2Z.S3C(60)],跳转到offline.6.0.0.js文件,格式化后断点会发现这里是validate参数的加密位置:validate:b.A(c,e.d.challenge)+"_"+b.A(a.b("rand0",e.c),e.d.challenge)+"_"+b.A(a.b("rand1",e.c),e.d.challenge)c为滑动距离,e.d.challenge是challenge参数的值,e.c是13位的时间戳,加密方式是b.A和a.b,减去就可以了,但是经过测试a.b("rand0",e.c)是d,a.b("rand1",e.c)是e的值,分别定义在下图中的173行和174行。分析时发现采集了滑块的轨迹,但未验证。分析完validate参数,图片的路径在哪里?就在这部分上面,f和g都经过了MD5加密,也直接扣了:但是这样直接下载的图片乱序了,恢复码和三代滑块基本一样二代滑块在线模式,宽度需要改变,可以参考【验证码反推专栏】三代滑块验证码逆向分析:还原后如下:结果验证滑块验证:验证搜索结果,需要先从home接口获取session.token,然后添加validate等参数: