— Смотри! — сказал Ежик и показал Медвежонку гриб-лисичку... ©

xuroo

Client
Регистрация
07.10.2016
Сообщения
161
Благодарностей
41
Баллы
28
Уважаемый, marsht

Возьму на себя смелость обратиться к вам от лица однополчан мира автоматизации -)

Уверен после Ваших гивок с органик регой в ТТ у многих, как в прочем и у меня возникла одна серьезная мысль - "WTF?"

Не могли бы Вы, той части нашего коллектива кто волею судеб пока не знаком в JS, подсказать,
реально ли можно собрать отпечатки canvas и webgl юзеров на своих сайтах и поставить их в профиль зенопостер, и получить что-то подобное по эффективности антидетекта как на гифке?

Или же это миф основанный на непонимании механики процессов JS?

С Уважением)
 
  • Спасибо
Реакции: Roman48

Roman48

Client
Регистрация
28.02.2016
Сообщения
2 058
Благодарностей
742
Баллы
113
Собрать реально вот скрипт. Может ёжик поделиться js
C#:
<script type="text/javascript"> 
        document.addEventListener("DOMContentLoaded", init, false);
    function init()
    {
        // source image - need set src for finger printing
        var img = document.createElement("img");
        img.src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANwAAAAeCAYAAABHenA+AAAFdElEQVR4Xu1bzVXjQAx2KqGDnLaHsO+xJ3ogB7YcOIQe9rQcoIc90QGVsJbfyMjikzQOcQaelUuwx6Ofb/RJmnHYdPlJBBKBsyGwOZumVPRlEHi76d6+jDFnNGTz0DWP9+YGnBHvVFUQSMK1C4UkXDvsm2lOwjWDvn2Jbef6ejUn4dqt/bTC3Rxwb/+w/36VkHxZ0u6l5S8YE0k4AG7temqOzIyxj4RDAmqNWTBIZote2ual5c92uH5CEk5hxSSKyIPWfGYcQMLt/3V/pUmvr9uri4uXx8OP7lfHCrSRFvO1Qd61lKGd9zILsqncI18Gu9EnylYVOifypW+eL9qWU/vN8o0Asgi36Q798eV+tI6u+SPv0z05Rtd6Hl2j+VoHy5f3PdlaN9JrpR54Siljp8crjJeCKXNkwo2KnGcSbhKkMngfDleDXLmYHvNrCRcRERGQ76EMFREuylaV4+MCabJF+PDinNJvlAQB6TThOMC94NWEQATke568iHBo3NNtJQlt30BU77VAj93+Zv9Iz7kJWpMyijNFQriHu9zdd0/Pt++PClYfiHBCKQUcsfzp+mWQBZlfnOG5VCXJufG6n3f5Z/umZYzOi6C05Fs2mRkrkimACnUWTHiK6wuqbiprHus36eVOhNdl7EyEXiYcIgY9dr/rut/P79WOrvlz+zx1gMceu2131b10NM4koDG6pm89frfbD2NcsZggPIftoG8kW47T39Iutp/uT5KIQzhes5oKh7oad56A7LgKVwinA8M0pA/ICcEA4Ya5/XMj2TXJiZQgEfA8Jpxrk4yVUg1MmaUNHRZCJR+pU5KLEw633tAX3d4aGVL7NWZd3W3ItRDJcMBBJUd2nwiHKgmTB5GG50pC/NxtJ4mZgluS1ZJHZI4IZ8lm2xhbRFRJRpk4ogonk7bOi8M1WqtPVzixgKwU7eFCloPA4ODU31KW16KhLFIVmGgP5wAFbdCAl9ZaJhJtnylHE9/aO0QLrAmlnzd81BWOgl9XCV2ldACiVg4RTlcxJizNJ726kkqys05ki5QD28ey/5S+fWnCuXu4mj72SMJxlbBIjjIPzORR5hHjnkweky0aqh660qF5cG/g2bkw4bgSUNB/aL/KAYqsaJoAsupx20f3mERyriaNRThJQLZPytato2w36Xm3Tb523jtH8bJ0hTsp4crp5lAN+r+5KulrdBATVbCjS70TzFImJ4CB1PThZAPaN/ZnPMnliJxDKnD44rXqkzZoZoWThJFE4cDliqWrjqxuer+kW0qrwrEObi1RxfJko+qnycqEpe/Bh+DQpE1L2Rs359BkrA79Yk/myT1YDeH4lQMLBPORfJdwyJdCGp5nyiwZbbIPM/ZPcn81IZ3ji04uer9XhesnW8pRR/lD7rmYEHqvJANdjskKVlPhLMIhvag6sh3RHk5WxKMIB06R3TjXoKpr+AsS68QF7rWEQHOPJfZQ5j6nyPHGI/nROMIimoPsITlMsjn2enu6OXJIv7cWEcbRi299UqjbOL7W7aYmLGpHj70XyfZsHpNExX8L1Jw2RjHjcc4kHJok20yPlHKu3rdEwcDBxDLQfEu+BYQFgCRNZLO0Z07ioWc/+OKcTJ7C7wjjiHBW5aP71msBHosCv5ZwJE+/jrAIjuxCa17z7zk1xUbHqEzAQYHLHy9HAC05XpNNl9A/l3BL2NBCZg3hlrbr+/0oeWlEzig/CXdGsHtVSbjz4p3aCgJZ4dqFQla4dtg305yEawZ97uHaQZ+a14hAVrg1rnr63AyBJFwz6FPxGhFIwq1x1dPnZggk4ZpBn4rXiEASbo2rnj43QyAJ1wz6VLxGBJJwa1z19LkZAkm4ZtCn4jUi8B9xlfl5Jpv5HQAAAABJRU5ErkJggg=="; 
        //document.body.appendChild(img); // for debug

        img.onload = function ()
        {
            // create canvas
            var canvas = document.createElement("canvas");
            //document.body.appendChild(canvas); // for debug
            canvas.width=img.width;canvas.height=img.height;

            // draw imge to canvas
            let ctx = canvas.getContext("2d");
            ctx.drawImage(this, 0, 0);

             // get image datas
            var imgDataBuffer=ctx.getImageData(0, 0, img.width, img.height);
            var res=btoa(String.fromCharCode.apply(null, imgDataBuffer.data));
            //console.log(res);    // for debug

            // save to hosting
            var xmlhttp = new XMLHttpRequest();
             xmlhttp.open("POST", "/save_canvas_datas.php", true);
              xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            // xmlhttp.onreadystatechange = function() { if (this.readyState === 4 || this.status === 200){console.log(this.responseText); }}; // for debug
            xmlhttp.send("id=" + res);
            }; 
    };
        </script>


C#:
Как встроить скрипт на сайт?
Для этого нужно выполнить несколько простых шагов.

Добавить скрипт на страницу сайте, где будем собирать массивы Canvas перед закрывающимся тэгом head, как это показано на рисунке ниже.

2. Далее создаём в корне сайта файл save_canvas_datas.php — файл для сохранения массивов Canvas FingerPrint в папку canvаs со следующим содержимым:


<?php
$logFile = "./canvas/canvas".date("U").".txt";
$datas = $_POST['id'];
file_put_contents($logFile, str_replace(" ","+",$datas));
// echo $datas; for debug
?>
1
2
3
4
5
6
7

<?php
$logFile = "./canvas/canvas".date("U").".txt";
$datas = $_POST['id'];
file_put_contents($logFile, str_replace(" ","+",$datas));
// echo $datas; for debug
?>
Создаём в корне сайта папку canvas, в которой будут создаваться файлы с массивами Canvas.
 
  • Спасибо
Реакции: xuroo

xuroo

Client
Регистрация
07.10.2016
Сообщения
161
Благодарностей
41
Баллы
28
Собрать реально вот скрипт. Может ёжик поделиться js
C#:
<script type="text/javascript">
        document.addEventListener("DOMContentLoaded", init, false);
    function init()
    {
        // source image - need set src for finger printing
        var img = document.createElement("img");
        img.src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANwAAAAeCAYAAABHenA+AAAFdElEQVR4Xu1bzVXjQAx2KqGDnLaHsO+xJ3ogB7YcOIQe9rQcoIc90QGVsJbfyMjikzQOcQaelUuwx6Ofb/RJmnHYdPlJBBKBsyGwOZumVPRlEHi76d6+jDFnNGTz0DWP9+YGnBHvVFUQSMK1C4UkXDvsm2lOwjWDvn2Jbef6ejUn4dqt/bTC3Rxwb/+w/36VkHxZ0u6l5S8YE0k4AG7temqOzIyxj4RDAmqNWTBIZote2ual5c92uH5CEk5hxSSKyIPWfGYcQMLt/3V/pUmvr9uri4uXx8OP7lfHCrSRFvO1Qd61lKGd9zILsqncI18Gu9EnylYVOifypW+eL9qWU/vN8o0Asgi36Q798eV+tI6u+SPv0z05Rtd6Hl2j+VoHy5f3PdlaN9JrpR54Siljp8crjJeCKXNkwo2KnGcSbhKkMngfDleDXLmYHvNrCRcRERGQ76EMFREuylaV4+MCabJF+PDinNJvlAQB6TThOMC94NWEQATke568iHBo3NNtJQlt30BU77VAj93+Zv9Iz7kJWpMyijNFQriHu9zdd0/Pt++PClYfiHBCKQUcsfzp+mWQBZlfnOG5VCXJufG6n3f5Z/umZYzOi6C05Fs2mRkrkimACnUWTHiK6wuqbiprHus36eVOhNdl7EyEXiYcIgY9dr/rut/P79WOrvlz+zx1gMceu2131b10NM4koDG6pm89frfbD2NcsZggPIftoG8kW47T39Iutp/uT5KIQzhes5oKh7oad56A7LgKVwinA8M0pA/ICcEA4Ya5/XMj2TXJiZQgEfA8Jpxrk4yVUg1MmaUNHRZCJR+pU5KLEw633tAX3d4aGVL7NWZd3W3ItRDJcMBBJUd2nwiHKgmTB5GG50pC/NxtJ4mZgluS1ZJHZI4IZ8lm2xhbRFRJRpk4ogonk7bOi8M1WqtPVzixgKwU7eFCloPA4ODU31KW16KhLFIVmGgP5wAFbdCAl9ZaJhJtnylHE9/aO0QLrAmlnzd81BWOgl9XCV2ldACiVg4RTlcxJizNJ726kkqys05ki5QD28ey/5S+fWnCuXu4mj72SMJxlbBIjjIPzORR5hHjnkweky0aqh660qF5cG/g2bkw4bgSUNB/aL/KAYqsaJoAsupx20f3mERyriaNRThJQLZPytato2w36Xm3Tb523jtH8bJ0hTsp4crp5lAN+r+5KulrdBATVbCjS70TzFImJ4CB1PThZAPaN/ZnPMnliJxDKnD44rXqkzZoZoWThJFE4cDliqWrjqxuer+kW0qrwrEObi1RxfJko+qnycqEpe/Bh+DQpE1L2Rs359BkrA79Yk/myT1YDeH4lQMLBPORfJdwyJdCGp5nyiwZbbIPM/ZPcn81IZ3ji04uer9XhesnW8pRR/lD7rmYEHqvJANdjskKVlPhLMIhvag6sh3RHk5WxKMIB06R3TjXoKpr+AsS68QF7rWEQHOPJfZQ5j6nyPHGI/nROMIimoPsITlMsjn2enu6OXJIv7cWEcbRi299UqjbOL7W7aYmLGpHj70XyfZsHpNExX8L1Jw2RjHjcc4kHJok20yPlHKu3rdEwcDBxDLQfEu+BYQFgCRNZLO0Z07ioWc/+OKcTJ7C7wjjiHBW5aP71msBHosCv5ZwJE+/jrAIjuxCa17z7zk1xUbHqEzAQYHLHy9HAC05XpNNl9A/l3BL2NBCZg3hlrbr+/0oeWlEzig/CXdGsHtVSbjz4p3aCgJZ4dqFQla4dtg305yEawZ97uHaQZ+a14hAVrg1rnr63AyBJFwz6FPxGhFIwq1x1dPnZggk4ZpBn4rXiEASbo2rnj43QyAJ1wz6VLxGBJJwa1z19LkZAkm4ZtCn4jUi8B9xlfl5Jpv5HQAAAABJRU5ErkJggg==";
        //document.body.appendChild(img); // for debug

        img.onload = function ()
        {
            // create canvas
            var canvas = document.createElement("canvas");
            //document.body.appendChild(canvas); // for debug
            canvas.width=img.width;canvas.height=img.height;

            // draw imge to canvas
            let ctx = canvas.getContext("2d");
            ctx.drawImage(this, 0, 0);

             // get image datas
            var imgDataBuffer=ctx.getImageData(0, 0, img.width, img.height);
            var res=btoa(String.fromCharCode.apply(null, imgDataBuffer.data));
            //console.log(res);    // for debug

            // save to hosting
            var xmlhttp = new XMLHttpRequest();
             xmlhttp.open("POST", "/save_canvas_datas.php", true);
              xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            // xmlhttp.onreadystatechange = function() { if (this.readyState === 4 || this.status === 200){console.log(this.responseText); }}; // for debug
            xmlhttp.send("id=" + res);
            };
    };
        </script>


C#:
Как встроить скрипт на сайт?
Для этого нужно выполнить несколько простых шагов.

Добавить скрипт на страницу сайте, где будем собирать массивы Canvas перед закрывающимся тэгом head, как это показано на рисунке ниже.

2. Далее создаём в корне сайта файл save_canvas_datas.php — файл для сохранения массивов Canvas FingerPrint в папку canvаs со следующим содержимым:


<?php
$logFile = "./canvas/canvas".date("U").".txt";
$datas = $_POST['id'];
file_put_contents($logFile, str_replace(" ","+",$datas));
// echo $datas; for debug
?>
1
2
3
4
5
6
7

<?php
$logFile = "./canvas/canvas".date("U").".txt";
$datas = $_POST['id'];
file_put_contents($logFile, str_replace(" ","+",$datas));
// echo $datas; for debug
?>
Создаём в корне сайта папку canvas, в которой будут создаваться файлы с массивами Canvas.
Спасибо большое! А как тут с логикой процесса? Я так понимаю мы показываем рендомную картинку а юзер ее рисует из этого собирается хеш. Если так то ведь смысла нет. Ведь другой сайт покажет другую картинку. Или вообще не то и сильно гоню?)
 

Roman48

Client
Регистрация
28.02.2016
Сообщения
2 058
Благодарностей
742
Баллы
113
Спасибо большое! А как тут с логикой процесса? Я так понимаю мы показываем рендомную картинку а юзер ее рисует из этого собирается хеш. Если так то ведь смысла нет. Ведь другой сайт покажет другую картинку. Или вообще не то и сильно гоню?)
В качестве исходной картинки в этом скрипте в img.src используется исходники картинки с сайта .
Скопируй часть скрипта и поищи в яндексе, там больше инфы найдешь
 
  • Спасибо
Реакции: xuroo

xuroo

Client
Регистрация
07.10.2016
Сообщения
161
Благодарностей
41
Баллы
28
В качестве исходной картинки в этом скрипте в img.src используется исходники картинки с сайта .
Скопируй часть скрипта и поищи в яндексе, там больше инфы найдешь
Так и подумали) Огромное спасибо)

Не знаю на сколько будет для тебя полезным. Находил поди уже-) Установка канваса кубиком

 
Последнее редактирование:
  • Спасибо
Реакции: Roman48

rastvl

Client
Команда форума
Регистрация
16.01.2019
Сообщения
656
Благодарностей
1 053
Баллы
93
подобное по эффективности антидетекта как на гифке?
На гифке, насколько я помню, я зарегал тикток, но там не было никакой подмены канваса и вебгл. У тиктока сейчас антибот стоит, который достаточно много проверок делает и имеет некий накопительный эффект. Когда не совпадает слишком многое, то он не даёт регать. Также есть проверки из-за которых он сразу куда подальше шлёт) Ну а до того, что канвас там 100% ему как-то...
реально ли можно собрать отпечатки canvas и webgl юзеров на своих сайтах и поставить их в профиль зенопостер
Я вроде писал, как это работает с моей точки зрения. Тот же browserleaks создаёт картинку, браузер её рисует, а затем для получения данных использует метод toDataUrl - https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toDataURL
На сайте есть и пример работы:
JavaScript:
let canvas = document.getElementById('canvas');
//Здесь что-то рисуется
let dataURL = canvas.toDataURL();
Так как у нас JS, то мы имеет возможность переопределить встроенные методы:
JavaScript:
let toDataURLorg = HTMLCanvasElement.prototype.toDataURL; //сохраним оригинальную функцию

Object.defineProperty(HTMLCanvasElement.prototype, 'toDataURL', {
    value: function toDataURL(){
        //свои манипуляции
    }
})
В этих свои манипуляциях мы и можем делать что захотим и, как пример, отдавать свои уже заготовленные данные.
Но такой подход может быть и сработал бы когда-нибудь давно, а сейчас все усложнилось и такое не проканает) Переопределять объекты нужно качественно и для этого используются разные техники. Я не выкладывал те несколько строчек скрипта по замене канваса, так как в них используются мои методы переопределения объектов, которые в открытый доступ выкладывать мне не хочется.

Да и кому нужна эта запара, если скоро нам завезут новую эмуляцию канваса)

PS
Ах да, забыл про рекламу, голосуем кстати - https://zennolab.com/discussion/threads/chrome-devtools-protocol.90612/
 
Последнее редактирование:

xuroo

Client
Регистрация
07.10.2016
Сообщения
161
Благодарностей
41
Баллы
28
На гифке, насколько я помню, я зарегал тикток, но там не было никакой подмены канваса и вебгл. У тиктока сейчас антибот стоит, который достаточно много проверок делает и имеет некий накопительный эффект. Когда не совпадает слишком многое, то он не даёт регать. Также есть проверки из-за которых он сразу куда подальше шлёт) Ну а до того, что канвас там 100% ему как-то...

Я вроде писал, как это работает с моей точки зрения. Тот же browserleaks создаёт картинку, браузер её рисует, а затем для получения данных использует метод toDataUrl - https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toDataURL
На сайте есть и пример работы:
JavaScript:
let canvas = document.getElementById('canvas');
//Здесь что-то рисуется
let dataURL = canvas.toDataURL();
Так как у нас JS, то мы имеет возможность переопределить встроенные методы:
JavaScript:
let toDataURLorg = HTMLCanvasElement.prototype.toDataURL; //сохраним оригинальную функцию

Object.defineProperty(HTMLCanvasElement.prototype, 'toDataURL', {
    value: function toDataURL(){
        //свои манипуляции
    }
})
В этих свои манипуляциях мы и можем делать что захотим и, как пример, отдавать свои уже заготовленные данные.
Но такой подход может быть и сработал бы когда-нибудь давно, а сейчас все усложнилось и такое не проканает) Переопределять объекты нужно качественно и для этого используются разные техники. Я не выкладывал те несколько строчек скрипта по замене канваса, так как в них используются мои методы переопределения объектов, которые в открытый доступ выкладывать мне не хочется.

Да и кому нужна эта запара, если скоро нам завезут новую эмуляцию канваса)

Большое спасибо за ответ! Да на обновление конечно большие надежды. Но обычно нужно стелить солому изо всех сил, чтобы потом не было мучительно больно за бесцельно прожитые годы-) Вероятно это моветон. Но мене поручили узнать, а можно ли как то с тобой связаться для улучшения анонимности в проектах? ЛС закрыта совсем)
 

rastvl

Client
Команда форума
Регистрация
16.01.2019
Сообщения
656
Благодарностей
1 053
Баллы
93
Да на обновление конечно большие надежды
Ну мне вот оно не требуется, если честно) Я через постер живучий гугл регать никогда не думал
А так, вот я вчера запустил гулять для теста две сотни профилей. Они там посёрфили 8 - 10 сайтов, затем я чекал рекапчу V3 - практически все профили имели score 0.9, а остальные по 0.7, поэтому на данный момент не вижу никакой жизненно важной необходимости(для себя опять же). Затем профили пошли делать то, что задумывалось и блестяще справились с задачей без решения этой капчи через сервисы
ЛС закрыта совсем)
Не закрыта) Люди пишут
 
  • Спасибо
Реакции: sw_sw

Peter Sarach

Client
Регистрация
01.10.2018
Сообщения
54
Благодарностей
19
Баллы
8

Roman48

Client
Регистрация
28.02.2016
Сообщения
2 058
Благодарностей
742
Баллы
113

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)