Автоматическое распознавание IconCaptcha


Автоматическое распознавание IconCaptcha

Сообщение k0ttee »

Вчера сделал себе-любимому автоматическое распознавание IconCaptcha.

Речь о распознавании картинок, генерируемых этим плагином. Исходники открыты, так что "искать слабое место" ничего не мешает.
Код: Выделить всё
https://github.com/fabianwennink/IconCaptcha-Plugin-jQuery-PHP


Принцип защиты от роботов это игра "найди лишнее". Из пяти картинок нужно выбрать одну отличную.
Для глаз - четыре картинки идентичны. При детальном сравнении - все разные.

IconCaptcha.png
IconCaptcha.png (2.7 КБ) Просмотров: 760


Первая версия моего алгоритма тупо кликала в одну и ту же, пока не угадает. Дело шло медленно (до 20 минут) и ресурсоёмко (процессор, память, трафик).
Последняя версия правильно находит картинку с первого раза и не допускает ошибок. А теперь, немного о том, как такое получилось...

Искусственный интеллект (в скобках "нет").

В начале имеем пять картинок в виде base64 строк. Копируем строки в блокнотик, затем конвертируем в графические файлы (можно сервисом по ссылке).
Код: Выделить всё
https://codebeautify.org/base64-to-image-converter


Затем из PNG пересохранить в JPG (и инвертировать цвета, чтобы не получить белое на белом). И сравнить пять картинок методом "каждую с каждой". Ручное сравнение можете попробовать сервисом.
Код: Выделить всё
https://www.imgonline.com.ua/difference-between-two-images.php


Почти одинаковые картинки будут иметь мало разницы в пикселях. А вот та картинка, которая сильно отличается, прям зальётся выделением.

разгадывание капчи.png
разгадывание капчи.png (43.86 КБ) Просмотров: 760


Какая из пяти будет при наложении на любую другую иметь больше цветных пикселей - та и будет правильным ответом.

алгоритм сравнения картинок капчи.jpg
алгоритм сравнения картинок капчи.jpg (3.67 КБ) Просмотров: 760


Как видите, никакого искусственного интеллекта и компьютерного зрения... Всё достаточно примитивно.

Сбор на вискас
btc: 3Hq7X9CosVftRFPqWis1Dkk5MdtM1u6jj9
ltc: LTsZ8f261j5qS5QUjn7ihzr37hziTvXeA4

За это сообщение автора k0ttee поблагодарили: 2
birds, prohojy
Аватара пользователя
k0ttee

 
Группа: Специалист ruSEO
Сообщения: 12039
Рефералы: 2
Зарегистрирован: 02 май 2014
Средств на руках: 5.95
Re: Автоматическое распознавание IconCaptcha

Сообщение birds »

Интересная схема распознавания каптчи :good:
Аватара пользователя
birds
Администратор
 
Группа: Зарегистрированные пользователи
Сообщения: 20672
Рефералы: -208
Зарегистрирован: 24 авг 2010
Откуда: местный житель
Средств на руках: -7.67
Статус: летящий вперед
Спонсор
 
Re: Автоматическое распознавание IconCaptcha

Сообщение k0ttee »

Применяю для сбора на кранах.
Если знаете местечки для применения - свяжитесь со мной... Применим. ;)
Сбор на вискас
btc: 3Hq7X9CosVftRFPqWis1Dkk5MdtM1u6jj9
ltc: LTsZ8f261j5qS5QUjn7ihzr37hziTvXeA4
Аватара пользователя
k0ttee

 
Группа: Специалист ruSEO
Сообщения: 12039
Рефералы: 2
Зарегистрирован: 02 май 2014
Средств на руках: 5.95
Re: Автоматическое распознавание IconCaptcha

Сообщение baronandr »

Скоро такая капча появиться на сайтах?
baronandr

 
Группа: Cлучайный прохожий
Сообщения: 13
Зарегистрирован: 04 мар 2019
Средств на руках: 0.00
Статус: не указан
Re: Автоматическое распознавание IconCaptcha

Сообщение k0ttee »

Скоро такая капча появиться на сайтах?

Нужно не ждать, пока появится... А находить, где она уже есть и применять технологию.
Сбор на вискас
btc: 3Hq7X9CosVftRFPqWis1Dkk5MdtM1u6jj9
ltc: LTsZ8f261j5qS5QUjn7ihzr37hziTvXeA4
Аватара пользователя
k0ttee

 
Группа: Специалист ruSEO
Сообщения: 12039
Рефералы: 2
Зарегистрирован: 02 май 2014
Средств на руках: 5.95
Re: Автоматическое распознавание IconCaptcha

Сообщение k0ttee »

Кусок примера с канвасами. ;)

Код: Выделить всё
<body>
<script>
var one = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAMAAAAM7l6QAAAANlBMVEVMaXH///////////////////////////////////////////////////////////8AAAD///9UALRyAAAAEXRSTlMAECAwQFBgcIGPn6+/z9/vAiY56l4AAAAJcEhZcwAADsQAAA7EAZUrDhsAAAFbSURBVCiRdVKN0sMgCNMWFSvIeP+X/UK7/ny7zbvtqsEEElP6vnJV+QFhNXP5CWfxudBPWG0ICOQ7QbOVpXrnqd9g6YnNa1rw+w73QDbL19lamZnyQc6BkrezVZ6OTtR9EHbTGfV2NlbM+rqXVfGRq0/r3fSgflUcXSLFptfcRE7mujdIXWQ0lDWfdzE0diFxZd7MuHqzcaMv0WhDd+3EDqri9LhMKdspXj245L7eJ+5g/ryZK9yI7+qXOixK1iKGSurHJt/sXsC/QG+l7oo+NjArXzDBPfBLMu/vrySfcJtpGFX7hGdIFYS3xXz409C/khyQilcBo2FN3gddfT3hGILC1qVxwT4eaAx7eAZLOIIv72TF1uPoXBxMmw8ULGxA0eMzE41gSRzLOIdceaBIcM8jE60H279AkaA6nycwtqnmB1ojEx+NqPTpgtYeeN8dyHVMaMv7yY1z7j+J/w/aB+YK6wAAAABJRU5ErkJggg==';

var two = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAMAAAAM7l6QAAAANlBMVEVMaXH///////////////////////////////////////////////////////////8AAAD///9UALRyAAAAEXRSTlMAECAwQFBgcIGPn6+/z9/vAiY56l4AAAAJcEhZcwAADsQAAA7EAZUrDhsAAAFfSURBVCiRdVKBrsQgCNMNFSfK8f8/+4qbu+WyZ7JFLbZACeET3lbMXV6BuYqa/AtHsbHRv3DXJiCQd4KiO0u2yqO/wVIDq+Ww4XtJHHAFEg6N992emZniSc6OkpWVKg9DJt2sEU7DGPG6EkuqdZ9hWazFbENr1X5RZ1zdIkmH5VhEFnN2oUBVpBWEFRvfYGhMIbHOfKhytqLtWcbH0+hTO7CBKhk9HlOI2u40nEu+z+vAG9QfD7WObvg+262OFgUtbkOmbuchXuyQtQT+DXo7Vevw4ABz5/UagWTgl6BWr12QX7iM0JSy/sLDpRLMO7w+/Lrr5wU3SPlUoNFoTZyF7rYv2Isgb+tWOOHsA+rFLi+V3fh0nUT382otdqbDGgI2VqDI8elJd2NJDEs5ulx6oHBw+hGJ9pPtNvQzcyvdeN2gsaX3L/kcBsxtK0SpDhOk9sDr7EDMbUBbrpFrq+4/wsMP7bjqCdIAAAAASUVORK5CYII=';

var three = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAMAAAAM7l6QAAAANlBMVEVMaXH///////////////////////////////////////////////////////////8AAAD///9UALRyAAAAEXRSTlMAECAwQFBgcIGPn6+/z9/vAiY56l4AAAAJcEhZcwAADsQAAA7EAZUrDhsAAADrSURBVCiRlVLZkoQwCCSnSCDI///sJrNTYw6napeHGG0EummA/0QufPqvKBlh1TB+uu5rsAzgpPT7yQGWQOlnslcmug3mfkZr3bPtrX9hqBKT0goeyBURA4RqxltpE26h+EwqW+wP5ifeQYxe9XK1/f+g8qGJNo11dZTc8RkmrmOLND1vlZKleSqPNmpY6ggXcjMfPyVbOnTpNmQ3kcsyDPEIAy9c8e+wt3jKDPPYrB7RZm9oHl7OOqc3IcZ9+uaccU9uUXXWDIouZiC9VXZFN5OSlXf5rDvatlRNCJH1bYstAjarUX4Gn+KCHwRaCDFdjkpgAAAAAElFTkSuQmCC';

var four = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAMAAAAM7l6QAAAANlBMVEVMaXH///////////////////////////////////////////////////////////8AAAD///9UALRyAAAAEXRSTlMAECAwQFBgcIGPn6+/z9/vAiY56l4AAAAJcEhZcwAADsQAAA7EAZUrDhsAAAFaSURBVCiRdVIJksMgDINwmWDj+v+fXTn3dlJm2gHkSLJFCO8rVuEfEFZT459wZJtL/gmLDgYBvxM0TcTVOk15g7kHUqthwS+EzwvcHVk1XnepElGOOzk5mq2dVmkanIjZyDhNI9TrbuwTimpPW1llG7Ha1N5VDuqKq0uk6LQaG/PJXDeDuTOPhrJm8y4G9ybEJkSrKlVrOp5tiNuQTTuQgapYvhvCPuq4bDgX35/3iW/Qf1zVBNPwfbVLHSMK2jyGmsX2Q7zZrYB/gV7K3QQ+VjALXXDG9MDPQa0fu8DfcJthaK76DU+XKghv9f7wJ65fT3hAyl8FBo3RxK3RZOmEvYnsY10aFZz9gXqzZ5ZKHnw5TqxpvzoXOdNqAwULKVB4fGYiHmxmw1KKLlceKBLc8og5p53tX6BIUIzOGwy2icQHWj0TGy3n0qcxrD3wvk0g1jGhzceTG2fff6f7D9fqg5sqAAAAAElFTkSuQmCC';

var five = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAMAAAAM7l6QAAAANlBMVEVMaXH///////////////////////////////////////////////////////////8AAAD///9UALRyAAAAEXRSTlMAECAwQFBgcIGPn6+/z9/vAiY56l4AAAAJcEhZcwAADsQAAA7EAZUrDhsAAAFfSURBVCiRdVKBssMgCNOKihVl/P/PvtDWrru3edeeGkyAEML3FcuQHxBWVZOfcBSbG/2Eh3YBgRwEr//MiaVY4zm+PZYWWK2EDd93uDmya7zJU2Fmiic5O0pWV6o8DZkMs044TWPE60o9q7Z0hBWxHotNbU1HPNGCq1s467QSq8hiLkeC1ER6RVi1+Q6GxiEkNph3VS5WtT/LGJ7GOLQDG6iy0eMxhaj9TsO55P28TbxB/XFXG+iG74vd6mhR0Oo2FBp2HuKb3TL4N+glajaQxw7mwTdM6B74Jai1axfkgl8LrjN0paKfcAjTpTLM270+/Ibr3052SPlUoNFoTTwKTZYW7EWQt3WrnHH2AfVil5fKbny+TqLpvFqLnWm3joCNFShyfHoy3FgSw1KOLpcfKBw8/IhE6WT7MBQODuN1g8bWsebkdQ0D5rZXotymCVK7cRRxdCCWPqEt18j1VfcfrN8P6p6eb20AAAAASUVORK5CYII=';
</script>

<canvas style="background:#000" id='canvas12' height='50' width='50'></canvas>1-2
<canvas style="background:#000" id='canvas13' height='50' width='50'></canvas>1-3
<canvas style="background:#000" id='canvas14' height='50' width='50'></canvas>1-4
<canvas style="background:#000" id='canvas15' height='50' width='50'></canvas>1-5

<script>
//1-2
var canvas12 = document.getElementById("canvas12"),
draw12         = canvas12.getContext('2d'),
      pic1       = new Image();
      pic1.src    = one;
      pic2       = new Image();
      pic2.src    = two;
pic1.onload = function() {draw12.drawImage(pic1, 0, 0);}
pic2.onload = function() {draw12.drawImage(pic2, 0, 0);}
//1-3
var canvas13 = document.getElementById("canvas13"),
draw13         = canvas13.getContext('2d'),
      pic1       = new Image();
      pic1.src    = one;
      pic3       = new Image();
      pic3.src    = three;
pic1.onload = function() {draw13.drawImage(pic1, 0, 0);}
pic3.onload = function() {draw13.drawImage(pic3, 0, 0);}
//1-4
var canvas14 = document.getElementById("canvas14"),
draw14         = canvas14.getContext('2d'),
      pic1       = new Image();
      pic1.src    = one;
      pic4       = new Image();
      pic4.src    = four;
pic1.onload = function() {draw14.drawImage(pic1, 0, 0);}
pic4.onload = function() {draw14.drawImage(pic4, 0, 0);}
//1-5
var canvas15 = document.getElementById("canvas15"),
draw15         = canvas15.getContext('2d'),
      pic1       = new Image();
      pic1.src    = one;
      pic5       = new Image();
      pic5.src    = five;
pic1.onload = function() {draw15.drawImage(pic1, 0, 0);}
pic5.onload = function() {draw15.drawImage(pic5, 0, 0);}
</script>
</body>
<!-- 3 -->
Сбор на вискас
btc: 3Hq7X9CosVftRFPqWis1Dkk5MdtM1u6jj9
ltc: LTsZ8f261j5qS5QUjn7ihzr37hziTvXeA4
Аватара пользователя
k0ttee

 
Группа: Специалист ruSEO
Сообщения: 12039
Рефералы: 2
Зарегистрирован: 02 май 2014
Средств на руках: 5.95

Вернуться в Железо и софт

 


  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 30