Новая версия 1.3
Убрал зависимость от модуля "Строка"В режиме компиляции не работало, если в проекте не было действий этого модуля.
@cryptovan said in [CaptchaImageClick] - модуль для решения капчи кликами по изображениям через сервис cap.guru:
Здравствуйте.
При решении hCaptcha модуль получает решение от сервиса capguru, но использует неправильные координаты. Ту часть изображения, которую нужно передвинуть в правильное место, он перетаскивает далеко за пределы экрана. Возможно, я что-то делаю не так, или это баг модуля?
Напишите в саппорт, приложите отладочный лог, ваши настройки.
Новая версия 7.83
Добавлен новый режим Real для настроек скорости мыши. Модуль используя метод BAS _get_browser_screen_settings определит тип дисплея (8K, 4K, 2K, Full HD и т.д.), затем рассчитает оптимальное значение DPI мыши и сгенерирует соответствующие параметры скорости. Каждому типу монитора доступен набор из 6-9 пресетов DPI, модуль выберет один случайно. Всего вариантов пресетов более 80.
По умолчанию в BAS DPI мыши равен примерно 800-1000, что не подходит для всех случаев. Новый режим имитирует реальное поведение: на 27 дюйме мониторе 4K мышь будет двигаться значительно быстрее (как игровая мышь с высоким DPI), чем на 13 дюймов ноутбуке (как офисная мышь с низким DPI). Это воспроизводит естественное поведение человека, использующего различные устройства.
Зачем это нужно? Эта опция улучшает проходимость капч, которые анализируют поведение мыши. Проверено на сайте с GeeTest v4 icon hand капчей: дефолтные настройки мыши BAS не проходили валидацию (JS сайта отклонял ответ) даже если выбрать 3 похожих изображения правильно, с новой опцией число ошибочных решений минимально. Также улучшает проходимость токенов для Enterprise типов капч (hCaptcha Enterprise, ReCaptcha Enterprise). И небольшой бонус, улучшено скорость решения каптч, поскольку движения мыши теперь могут быть быстрее оригинала даже на небольших мониторах.
hCaptcha: Никаких изменений нет. Проверены все типы каптч (3x3, канвас с перетягиванием и канвас клики). Все работает удовлетворительно (на 3+). Хотя перед новым годом в 25 числах запускал модуль и ловил тонну багов. Видимо изменения откатили и хорошо :)
P.S ситуацию с мышкой я хоть и улучшил, но используемая библиотека в BAS для мыши - полное говно. В идеале надо ее полностью поменять, а не использовать костыль.
Новая версия 7.84
Почему-то не решает капчу на сайте grailed.com
Зависает на этапе --> Нашли открытое окно ReCaptcha 2 c изображениями и заданием. Текущая позиция (номер фрейма) на странице: 1
@lucinemajor said in [CaptchaImageClick] - модуль для решения капчи кликами по изображениям через сервис cap.guru:
Почему-то не решает капчу на сайте grailed.com
Зависает на этапе --> Нашли открытое окно ReCaptcha 2 c изображениями и заданием. Текущая позиция (номер фрейма) на странице: 1
Все работает если прочитать документацию, на сайте невидимая капча, селектор выбрать надо от нее.
@FastSpace Javascript ES3 Decrypt / v edata response from Captcha Tiktok write by Gemini:
function stringToUtf8Array(str) {
var utf8 = [];
for (var i = 0; i < str.length; i++) {
var charcode = str.charCodeAt(i);
if (charcode < 0x80) utf8.push(charcode);
else if (charcode < 0x800) {
utf8.push(0xc0 | (charcode >> 6),
0x80 | (charcode & 0x3f));
} else if (charcode < 0xd800 || charcode >= 0xe000) {
utf8.push(0xe0 | (charcode >> 12),
0x80 | ((charcode >> 6) & 0x3f),
0x80 | (charcode & 0x3f));
} else {
i++;
charcode = 0x10000 + (((charcode & 0x3ff) << 10) | (str.charCodeAt(i) & 0x3ff));
utf8.push(0xf0 | (charcode >> 18),
0x80 | ((charcode >> 12) & 0x3f),
0x80 | ((charcode >> 6) & 0x3f),
0x80 | (charcode & 0x3f));
}
}
return utf8;
}
function utf8ArrayToString(array) {
var out = "";
var i = 0;
var len = array.length;
var c, char2, char3;
while (i < len) {
c = array[i++];
switch (c >> 4) {
case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
out += String.fromCharCode(c);
break;
case 12: case 13:
char2 = array[i++];
out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));
break;
case 14:
char2 = array[i++];
char3 = array[i++];
out += String.fromCharCode(((c & 0x0F) << 12) |
((char2 & 0x3F) << 6) |
((char3 & 0x3F) << 0));
break;
default: // Simple fallback for complex chars or errors
out += String.fromCharCode(0xFFFD); // Replacement char
}
}
return out;
}
var B64_STR = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
function base64Encode(byteArray) {
var output = "";
var i = 0;
var len = byteArray.length;
while (i < len) {
var chr1 = byteArray[i++];
var chr2 = byteArray[i++];
var chr3 = byteArray[i++];
var enc1 = chr1 >> 2;
var enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
var enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
var enc4 = chr3 & 63;
if (isNaN(chr2)) enc3 = enc4 = 64;
else if (isNaN(chr3)) enc4 = 64;
output = output + B64_STR.charAt(enc1) + B64_STR.charAt(enc2) +
B64_STR.charAt(enc3) + B64_STR.charAt(enc4);
}
return output;
}
function base64Decode(input) {
var output = [];
var chr1, chr2, chr3;
var enc1, enc2, enc3, enc4;
var i = 0;
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
while (i < input.length) {
enc1 = B64_STR.indexOf(input.charAt(i++));
enc2 = B64_STR.indexOf(input.charAt(i++));
enc3 = B64_STR.indexOf(input.charAt(i++));
enc4 = B64_STR.indexOf(input.charAt(i++));
chr1 = (enc1 << 2) | (enc2 >> 4);
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
chr3 = ((enc3 & 3) << 6) | enc4;
output.push(chr1);
if (enc3 != 64) output.push(chr2);
if (enc4 != 64) output.push(chr3);
}
return output;
}
function getRandomBytes(len) {
var arr = [];
for (var i = 0; i < len; i++) {
arr.push(Math.floor(Math.random() * 256));
}
return arr;
}
var Cha = function (key, nonce, counter) {
if (key.length !== 32 || nonce.length !== 12) {
throw new Error("Invalid key or nonce length");
}
this.k = key;
this.n = nonce;
this.c = counter || 0;
};
Cha._r = function (v, n) {
return ((v << n) | (v >>> (32 - n))) >>> 0;
};
Cha._qr = function (s, a, b, c, d) {
s[a] = (s[a] + s[b]) >>> 0;
s[d] ^= s[a];
s[d] = Cha._r(s[d], 16);
s[c] = (s[c] + s[d]) >>> 0;
s[b] ^= s[c];
s[b] = Cha._r(s[b], 12);
s[a] = (s[a] + s[b]) >>> 0;
s[d] ^= s[a];
s[d] = Cha._r(s[d], 8);
s[c] = (s[c] + s[d]) >>> 0;
s[b] ^= s[c];
s[b] = Cha._r(s[b], 7);
};
Cha.prototype._bytesToInt = function (arr, offset) {
return (arr[offset] |
(arr[offset + 1] << 8) |
(arr[offset + 2] << 16) |
(arr[offset + 3] << 24)) >>> 0;
};
Cha.prototype._intToBytesPush = function (val, targetArray) {
targetArray.push(val & 0xff);
targetArray.push((val >>> 8) & 0xff);
targetArray.push((val >>> 16) & 0xff);
targetArray.push((val >>> 24) & 0xff);
};
Cha.prototype._block = function (ctr) {
var s = [0x61707865, 0x3320646e, 0x79622d32, 0x6b206574];
for (var i = 0; i < 8; i++) s.push(this._bytesToInt(this.k, i * 4));
s.push(ctr >>> 0);
for (var i = 0; i < 3; i++) s.push(this._bytesToInt(this.n, i * 4));
var w = s.slice(0);
for (var i = 0; i < 10; i++) {
Cha._qr(w, 0, 4, 8, 12); Cha._qr(w, 1, 5, 9, 13);
Cha._qr(w, 2, 6, 10, 14); Cha._qr(w, 3, 7, 11, 15);
Cha._qr(w, 0, 5, 10, 15); Cha._qr(w, 1, 6, 11, 12);
Cha._qr(w, 2, 7, 8, 13); Cha._qr(w, 3, 4, 9, 14);
}
var blockBytes = [];
for (var i = 0; i < 16; i++) {
this._intToBytesPush((w[i] + s[i]) >>> 0, blockBytes);
}
return blockBytes;
};
Cha.prototype._p = function (data) {
var result = [];
var dataLen = data.length;
var currentCtr = this.c;
var dataIdx = 0;
while (dataIdx < dataLen) {
var block = this._block(currentCtr);
currentCtr = (currentCtr + 1) >>> 0;
for (var i = 0; i < block.length; i++) {
if (dataIdx >= dataLen) break;
result.push(data[dataIdx] ^ block[i]);
dataIdx++;
}
}
this.c = currentCtr;
return result;
};
var edata = {
FLAG: [0x01], // b'\x01'
encrypt: function (txt) {
var d = stringToUtf8Array(txt);
var k = getRandomBytes(32);
var n = getRandomBytes(12);
var c = new Cha(k, n, 0);
var ct = c._p(d);
var raw = this.FLAG.concat(k, n, ct);
return base64Encode(raw);
},
decrypt: function (txt) {
var raw = base64Decode(txt);
if (raw.length < 45) {
throw new Error("Invalid edata");
}
var k = raw.slice(1, 33);
var n = raw.slice(33, 45);
var ct = raw.slice(45);
var c = new Cha(k, n, 0);
var plain = c._p(ct);
return utf8ArrayToString(plain);
}
};
// Decrypt
var cipherText = "Ae8Tm93oj9vmIbi/Z22dYrzR1ji3hm+63dxGUMydXhF4...."
var decryptedText = edata.decrypt(cipherText);
log(decryptedText)
// Encrypt
var originalText = "...."
var cipherText = edata.encrypt(originalText);
log(cipherText)
Здравствуйте, подскажите пожалуйста ваш модуль может пройти эту капчу ? https://community.bablosoft.com/topic/32020/капча-от-яндекса-как-пройти
@xregem said in [CaptchaImageClick] - модуль для решения капчи кликами по изображениям через сервис cap.guru:
Здравствуйте, подскажите пожалуйста ваш модуль может пройти эту капчу ? https://community.bablosoft.com/topic/32020/капча-от-яндекса-как-пройти
Версия от 7.88