关于hcaptcha (vm wasm ob)三合一
该文章主要提供交流学习使用,请勿利用其进行不当行为!
如本篇文章侵犯了贵公司的隐私,请联系我立刻删除!
如因滥用解密技术而产生的风险与本人无关!
1
Hcaptcha
hCaptcha 旨在解决机器学习中最劳动密集型的问题:以及时、负担得起且可靠的方式标记大量数据。在训练机器学习模型中,更多数据通常会产生更好的结果。深度模型的最新成功导致了越来越大的数据集,几乎总是需要人工审查。但是,通过 Mechanical Turk、Figure 8 等创建大型的人工检查数据集既缓慢又昂贵。hCaptcha 允许网站在满足这种需求的同时,阻止机器人和其他形式的滥用,并赢取回报。
阻止机器人和其他形式的滥用,并赢取回报。
并赢取回报。
2
示例网站
https://dashboard.hcaptcha.com/signup
2.1
无感
无感操作比较方便,九宫格还需要点击。而且。九宫格不参与此加密的计算,所以和咱们讲的毫无关系!
3
开始操作
首先,证明自己是个人。点击后,发送了一个包。
然后发包!!
太长了,,截图装不下来研究下这些参数!!
{
v: 版本号,
sitekey: 验证码的一个 key,
hl: ,
host: ,
motionData: 包含鼠标的移动轨迹,以及一大堆乱七八糟的参数,
n: 全环境校验的值,由 hsw.js 脚本生成,c: 返回的
}
4
n 值
我们就来看下 n 值是怎么生成的。
至于 motionData。鼠标放在点击那里,尽可能的不要移动鼠标,然后刷新网页,然后点击。
以此来减少 motionData 收集你的鼠标移动轨迹。
这个参数没啥说的,写死就行,不影响后面的流程(当然大量并发除外)
不说这个了。
接着来看 n 值。
长度 9666。。。。。。(low,,没有 5s 盾长。嘲笑他)
大约在 4 月份。。长度还是 4000 多。。半年不看,,长度就翻倍了。。。。。
啦啦
我们此处根据堆栈来尝试找找 n 值!!
点击发包。
然后看右边堆栈,
我们找到了此处。
这个我们不就看到了 n 值 赋值的地方吗
下断点,刷新,点击,
得了,还在上层。,接着看堆栈。。。
此处我们就看到了疑点。。异步执行
意思是:就是当.then()前的方法执行完后再执行then()内部的程序,这样就避免了,数据没获取到等的问题。
语法:promise.then(onCompleted, onRejected);
那我们此处就要看 Cn 里面的东西了。
然后看到 solved = vn
哪个 vn??
然后就全局搜索 vn 吧。
此处疑点只有一个。
看到了 req 和 vn 还有异步。。。。那我们就得这样下断点。
come
然后 刷新
断点断下。。。然后三目、、、然后 false
然后 e 函数。。
然后他就来了呀。。。
hsw.js 文件。。。
一份 2000 行的 vm 代码
此处,,直接拿下来补环境吧!!!!
5
hsw.js 环境
先看这份代码。
有很多的都是以环境参数名字命名的函数,可以更直观的看出他想要校验什么东西。
不过此处注意一点。看他们写的代码就知道。到处都是异步。。
不。。整个代码都是异步。所以要处处小心。
此处举个例子:::
如 :RTCPeerConnection createOffer
官方说明:
https://developer.mozilla.org/zh-CN/docs/Web/API/RTCPeerConnection/createOffer
当然,需要你自己更改重新定义。。
此处异步代码:
对下面的补环境帮助非常大哟!!
async function make_Promise_s() {
let results = new Promise((resolve, reject) => {
resolve(undefined)
});
return await results;
};
RTCPeerConnection = function RTCPeerConnection(){};
RTCPeerConnection.prototype = {
createOffer: function createOffer(){
return make_Promise_s()
}
};
a = new RTCPeerConnection();
console.log(a.createOffer());
好了,接着走。看眼 wasm。。。看一眼就行。。
接着看OB代码。
当然,,等你环境补到 Request 的时候,,那么 ob 也就来了。。
请求了一个 e 的文件,,,是文件。。
当然。。这个文件的命可以从 req 这个值得知。
此处讲解:
除了传给 fetch() 一个资源的地址,你还可以通过使用 Request() 构造函数来创建一个 request 对象,然后再作为参数传给 fetch().
然后请求成功。ok
我们看下这个文件,乱七八糟的,,他M都不认识!!!
然后获取他的文件流。
诶,,问题来了,此处难道我们也要每次请求一下这个文件来获取他的文件流吗。。
答案是,no no no no
我们这样做。。
请求这个文件,,然后把他 base64 ,省去编码的麻烦。。
然后,嘿嘿嘿嘿嘿嘿代码如下。
function strToArrayBuffer (str) {
var array = new Uint8Array(str.length);
for(var i = 0; i < str.length; i++) {
array[i] = str.charCodeAt(i);
}
return array.buffer
}
b = "b64编码"
atob = function(r) {
e = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
var o = String(r).replace(/=+$/, "");
if(o.length % 4 == 1) throw new t("'atob' failed: The string to be decoded is not correctly encoded.");
for(var n, a, i = 0, c = 0, d = ""; a = o.charAt(c++); ~a && (n = i % 4 ? 64 * n + a : a, i++ % 4) ? d += String.fromCharCode(255 & n >> (-2 * i & 6)) : 0) a = e.indexOf(a);
return d
}
console.log(new Uint8Array(strToArrayBuffer(atob(b))))
然后又要说,,得到的结果怎么用起来呢???
嗯???
我前面的异步代码白发了????
你懂我意思吗????
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
5.1
ob 环境
然后我们就来到了 ob 环境里面,,
如上,,直接复制 ob 环境代码。。。
然后如图。。更改为这样。。
然后你就开始补环境吧。。
然后唠唠嗑。。。
调试的时候当然要在 try catch 下下断点咯。。。
然后根据报错信息找问题,,,
当然,,,少不了他们钟爱的异步代码。这个很蛋疼。。。。。。。
以及里面大量的 Object.getOwnPropertyNames Object.keys
我看到的时候,,还以为这是 5s 盾呢。。这太 Tm 难受了。。然后。。。
然后我就看到。。
好家伙,,你真 TM 省事,,直接截取了 25 个。。。。。。。。
我****
其实这里面也一样。有很多的环境都暴露出来了。
而且最方便的是,,,
前面我让你们改的代码。。
打印下。。。
然后浏览器打印下
至于怎么补环境。这个就人人有自己的想法了。。就是怎么把代码给跑通。。
肝出来。。也就 2000 行代码(ps:我不肝了)
当然还有怎么返回结果
还有就是本地返回的方法。。
当然最后成功就是返回 generated_pass_UUID 这个字段。
然后就是结果了。。当然,,你生成出来的,也要是 9666 。。(每个浏览器不一样,具体看你的浏览器以及你的电脑)有时候会上下浮动两位。。9664 9668.。具体原因,,,不详。。
自己摸索吧。。。
相关文章
- 软件分享 | 第四期 Linux远程连接神器获取和安装
- PHP网页简单编写
- c++使用icu国际化(i18n)
- go-cqhttp(电脑机器人搭建)教程
- Linux|安装nginx改造升级版(Tengine)
- Linux用户管理命令
- Linux文件权限与归属
- Linux文件的特殊权限[SUID&SGID&SBIT]
- 在arm上编译php
- 《安富莱嵌入式周报》第296期:硬件电路实现SPI转以太网,单片机3D游戏图形引擎,Linux基金会年度报告,安捷伦直流电源原理图,KEIL C51更新9.61
- 《安富莱嵌入式周报》第297期:开源生物医学成像系统,可肺部成像,C算法合集500例,突出极致运算速度,数值方法书籍,芯片级激光隔离,3D打印机固件Marlin
- 深入浅出理解Linux thermal governor之IPA
- 基于ArgoCD的GitOps转型实战经验
- GitOps: Kubernetes CI/CD 的缺失环节
- Linux网络编程-TCP客户端如何获取要连接的服务端IP?
- 嵌入式Qt-表格使用测试
- PHP常见的几种数据结构
- php-fpm 是如何处理php 请求的
- [linux]执行pip安装的程序:command not found
- [linux]查看linux下端口占用