最新腾讯滑块验证码补环境详解

本文介绍了腾讯最新滑块验证码的环境补全过程,包括关键参数分析、明文信息检测点,如canvas指纹、webgl指纹、DOM操作、CSS属性等,并提供了主要的调试与补全方法。
摘要由CSDN通过智能技术生成

声明

本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!

目标

aHR0cHM6Ly9jbG91ZC50ZW5jZW50LmNvbS9wcm9kdWN0L2NhcHRjaGE=

在这里插入图片描述

新版验证码相较于防水墙参数少了很多,关键参数少了vdata,不过难度都是差不多的。

其中 ans 为缺口坐标,pow_answerpow_calc_timecap_union_prehandle 接口中的数据处理而来,ekstdc 文件中的动态字符串,tlgcollect 参数的长度,collect 就是本期要介绍的加密参数。

文章目录

分析

通过搜索 collect 可以直接定位到参数生成点 window.TDC.getData(!0)

在这里插入图片描述

在这里插入图片描述

window.TDC.getData 可以进入一段 vmp 代码中,最开始我也尝试过扣算法,也完成了明文到密文的流程,但是卡在了明文的生成顺序上,可能就差最关键的一步没有走出,最终还是放弃了。

这里主要就来讲解补环境过程中的一些关键点。

首先可以用 proxy 来补部分环境,如 navigatorlocationscreen 等等,这部分就不多说了,主要来讲讲关于 dom 操作的一些检测,不仅仅是简单的增删改查操作,也对元素样式进行了检测。如 createElement getElementById setAttribute 等,至于如何知道检测了哪些东西就需要插装调试了。

我的插桩点主要在两个地方,D[0]N 处会执行一些 dom 操作,F[F.length - 1] 则可以看到一些关键字的生成,对补环境非常有帮助,可以比较清晰的看到执行了那些方法以及验证了那些属性。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

D[0] 中会包含明文信息,在补环境过程中需要时不时的将自己补出来的结果跟网页打印的进行对比,正常的明文会包含以下信息:

{"cd":[231,1080,"",235,"98k",1,1397322462,1698070701,1698070701,[],"Win32","Google Inc. (NVIDIA)",1920,0,"GgoAAAANSUhEUgAAASwAAACWCAYAAAI2CwMlUJSoCAwfIDBAhkBAxWpipBCRdWMQCX4yW9owAAAABJRU5ErkJggg==",2,24,"iframe",1719708211,"https://cloud.tencent.com/product/captcha",6,[360,360],1,"https://cloud.tencent.com/product/captcha?rand=1519713624347","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36","1920-1080-1040-24-*-*-|-0",["zh-CN","zh"],0,"+08","","ANGLE (NVIDIA, NVIDIA GeForce GT 1030 (0x00001D01) Direct3D11 vs_5_0 ps_5_0, D3D11)","UTF-8",0,40,1023,"",1698070661],

其中比较关键的有:

https://cloud.tencent.com/product/captcha?rand=1519713624347 // location.href

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 //请求头

iframe //是否正确创建iframe标签

[360,360] //window.innerHeight window.innerWidth

1920-1080-1040-24---|-0 //screen 中各属性拼接而成

[“zh-CN”,“zh”] // navigator.language

GgoAAAANSUhEUgAAASwAAACWCAYAAAI2CwMlUJSoCAwfIDBAhkBAxWpipBCRdWMQCX4yW9owAAAABJRU5ErkJggg== // canvas.toDataURL()

Google Inc. (NVIDIA) //webgl指纹,通过 getExtension getParameter 获取

ANGLE (NVIDIA, NVIDIA GeForce GT 1030 (0x00001D01) Direct3D11 vs_5_0 ps_5_0, D3D11) // 同上

1023 // dom检测全部通过后明文中会包含1023

dom 检测的结果可以在 N 中发现,每对一些元素进行检测后,正确为 true ,错误为 false

在这里插入图片描述

这里列举一些主要的检测点:

canvas 指纹,fillText,fillRect,fillStyle,font等

webgl 指纹,getExtension,getSupportedExtensions,getParameter等

appendChild,removeChild,setAttribute,cloneNode,replaceChild,insertBefore,createElement,getElementById

window.getComputedStyle,getPropertyValue对元素color 值的检测

document.body,document.head,document.documentElement

localStorage,sessionStorage 设置session,获取 session

TCaptchaReferrer,matchMedia等

以上为主要检测点,其中需要完成一些简单的dom 操作。在调试过程中,我发现还检测到了RTCPeerConnection,但是在参数生成后才调用的,因此也不需要补,有兴趣的也可以补一下,这个玩意很多网站都在检测。

RTCPeerConnection = class {
}
RTCPeerConnection.prototype.getLocalStreams = function () {

}
RTCPeerConnection.prototype.createDataChannel = function () {

    return {
        onopen: function () {
        }, onclose: function () {
        }, onmessage: function () {
        }, send: function () {
        }, close: function () {
        },
    }
}
RTCPeerConnection.prototype.createAnswer = function () {

}
RTCPeerConnection.prototype.createOffer = function () {
    return new Promise((resolve, reject) => {
        const offer = {
            sdp: "v=0\r\no=- 7557661829766968651 2 IN IP4 {ip地址}\r\ns=-\r\nt=0 0\r\na=extmap-allow-mixed\r\na=msid-semantic: WMS\r\n",
            type: "offer"
        };
        resolve(offer);
    });
}
RTCPeerConnection.prototype.setLocalDescription = function (sampleDescription) {
    return new Promise((resolve, reject) => {
        resolve();
    });
}
RTCPeerConnection.prototype.setConfiguration = function () {

}
RTCPeerConnection.prototype.addIceCandidate = function () {

}
RTCPeerConnection.prototype.addTrack = function () {

}
RTCPeerConnection.prototype.onicecandidate = function () {

}
RTCPeerConnection.prototype.localDescription = {
    sdp: "v=0\r\no=- 7557661829766968651 2 IN IP4 {ip地址}\r\ns=-\r\nt=0 0\r\na=extmap-allow-mixed\r\na=msid-semantic: WMS\r\n",
    type: "offer"
}
RTCPeerConnection.prototype.sctp = {}

总而言之,时不时将自己补的结果与网页进行对比,内容基本一致后表示差不多了。这篇文章随便讲的简单,但是基本上关键检测点都提到了,剩下的就靠自己慢慢补了。

附一张结果图:
在这里插入图片描述

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
好的,以下是一个简单的图形滑块验证码的代码实现: HTML部分: ```html <div class="captcha-container"> <div class="captcha-bg"></div> <div class="captcha-slider"></div> </div> ``` CSS部分: ```css .captcha-container { position: relative; width: 300px; height: 150px; margin: 0 auto; } .captcha-bg { position: absolute; top: 0; left: 0; width: 300px; height: 150px; background-image: url('captcha-bg.jpg'); /* 背景图 */ background-size: cover; z-index: 1; } .captcha-slider { position: absolute; top: 50%; left: 0; width: 60px; height: 60px; background-image: url('captcha-slider.png'); /* 滑块图 */ background-size: cover; z-index: 2; cursor: pointer; transition: left .2s; } ``` JavaScript部分: ```javascript var slider = document.querySelector('.captcha-slider'); var container = document.querySelector('.captcha-container'); var startX = 0; var moveX = 0; var isDown = false; slider.addEventListener('mousedown', function(e) { isDown = true; startX = e.clientX - slider.offsetLeft; container.classList.add('slider-active'); }); document.addEventListener('mousemove', function(e) { if (!isDown) return; e.preventDefault(); moveX = e.clientX - startX; if (moveX < 0) moveX = 0; if (moveX > container.offsetWidth - slider.offsetWidth) { moveX = container.offsetWidth - slider.offsetWidth; // 验证码验证成功的逻辑 alert('验证码验证成功!'); } slider.style.left = moveX + 'px'; }); document.addEventListener('mouseup', function() { isDown = false; container.classList.remove('slider-active'); slider.style.left = 0; }); ``` 这段代码实现了一个简单的滑块验证码,用户需要按住滑块,拖动到滑块底部,才能通过验证。当滑块到达底部时,会弹出提示框,说明验证码验证成功。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BuerCC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值