Как обойти идентификацию через Canvas Fingerprinting?
Как обойти идентификацию через Canvas Fingerprinting?
Суть Canvas Fingerprinting в том что яваскрипт может рисовать картинку в теге <canvas> (HTML5) и без ведома пользователя отправлять ее на сервер. Картинка на каждом компе будет разная, так как ее рисование зависит от системных особенностей железа и браузера. Таким образом, данная картинка является практически (99,xx%) уникальным отпечатком вашего компа, и никакие смены юзерагентов, проксей и т.п. не влияют на уникальность данной картинки.
Идентификация по Canvas Fingerprinting уже много где используется. По-этому после массовой регистрации акков на некоторых сайтах через короткое время они все улетают в бан или же даже сразу. Так же при массовой работе с акками палится вся сетка, т.е. все улетает в бан.
Доп. информация по Canvas Fingerprinting:
https://www.youtube.com/watch?v=KBUJZk3H3SA и https://geektimes.ru/post/284604/
Увидеть свой отпечаток можно на https://www.browserleaks.com/canvas
Как вариант для начала можно реализовать запрет выполнение JS функции которая передает картинку на сервер. Но не знаю как. В дальнейшем хотелось бы увидеть в функционале что бы этот параметр генерился рандомно.
Идентификация по Canvas Fingerprinting уже много где используется. По-этому после массовой регистрации акков на некоторых сайтах через короткое время они все улетают в бан или же даже сразу. Так же при массовой работе с акками палится вся сетка, т.е. все улетает в бан.
Доп. информация по Canvas Fingerprinting:
https://www.youtube.com/watch?v=KBUJZk3H3SA и https://geektimes.ru/post/284604/
Увидеть свой отпечаток можно на https://www.browserleaks.com/canvas
Как вариант для начала можно реализовать запрет выполнение JS функции которая передает картинку на сервер. Но не знаю как. В дальнейшем хотелось бы увидеть в функционале что бы этот параметр генерился рандомно.
Re: Как обойти идентификацию через Canvas Fingerprinting?
Принято, посмотрим что это такое, а так вроде есть информация что это обходится через browser->set_init_java_script
Например изменив window.navigator.hardwareConcurrency и другие параметры window.navigator.
+ виртуальные машины еще можно использовать
Над другими аспектами, мы подумаем, как все это реализовать. Также баниться может на основе реальных координат мыши, но тут вроде все ок.
Например изменив window.navigator.hardwareConcurrency и другие параметры window.navigator.
+ виртуальные машины еще можно использовать
Над другими аспектами, мы подумаем, как все это реализовать. Также баниться может на основе реальных координат мыши, но тут вроде все ок.
Re: Как обойти идентификацию через Canvas Fingerprinting?
Делал массовую регистрацию под 1 сайт, там капчу вводить даже не нужно, прокси индивидуальные, разные User Agent и т.п., а так же полную эмуляцию мыши (движения и клики) и клавиатруры, но акки все равно в бан улетали... В то время так и не понял причины, как сейчас думаю там именно через Canvas шла идентификация пользователей.
На счет виртуалок (сам через них в многопоток работаю) не понял, на каждую регу использовать разные ОС (тогда и лицензий кучу нужно будет)? Да, можно разрешение экрана поменять на каждой, но все равно вариаций немного получается и не факт что Canvas будет разным.
RE: В дальнейшем хотелось бы увидеть в функционале что бы этот параметр генерился рандомно.
Причем так, что бы параметры Canvas можно было сохранять с данными от акка, а в последующем его задавать акку.
На счет виртуалок (сам через них в многопоток работаю) не понял, на каждую регу использовать разные ОС (тогда и лицензий кучу нужно будет)? Да, можно разрешение экрана поменять на каждой, но все равно вариаций немного получается и не факт что Canvas будет разным.
RE: В дальнейшем хотелось бы увидеть в функционале что бы этот параметр генерился рандомно.
Причем так, что бы параметры Canvas можно было сохранять с данными от акка, а в последующем его задавать акку.
Re: Как обойти идентификацию через Canvas Fingerprinting?
По тому как снизить уникальность : https://whoer.net/blog/article/unikalny ... s-chast-2/
- систему можно подменить на уровне объекта навигатор - через set_init_java_scriptна каждую регу использовать разные ОС
Принято, бум разбираться в этом вопросе как сделать это проще всегоВ дальнейшем хотелось бы увидеть в функционале что бы этот параметр генерился рандомно.
Re: Как обойти идентификацию через Canvas Fingerprinting?
Небольшой пример замены навигатора :
Код: Выделить всё
<?php
// подключим объект для управления эмулятором, если еще не подключен
if (!isset($path))
$path="../../../Templates/xweb_human_emulator.php";
require($path);
// начало
echo "<hr><font color=blue>browser->".basename (__FILE__)."</font><hr>";
// 1
echo "1. Зададим начальный Java Script ";
// JS
$js_new_naviagtor="
var platformProp = { get: function () { return '%%PLATFORM'; } };
var appName = { get: function () { return '%%APPNAME'; } };
var languageProp = { get: function () { return '%%LANGUAGE'; } };
var languageBrowserProp = { get: function () { return '%%LANGUAGE_BROWSER'; } };
var languageSystemProp = { get: function () { return '%%LANGUAGE_SYSTEM'; } };
var languageUserProp = { get: function () { return '%%LANGUAGE_USER'; } };
Object.defineProperty(window.navigator, 'platform', platformProp);
Object.defineProperty(window.navigator, 'appName', appName);
Object.defineProperty(window.navigator, 'language', languageProp);
Object.defineProperty(window.navigator, 'browserLanguage', languageBrowserProp);
Object.defineProperty(window.navigator, 'systemLanguage', languageSystemProp);
Object.defineProperty(window.navigator, 'userLanguage', languageUserProp);
window.navigator.javaEnabled=function(){return false;};;
";
// поменяем JS под наши нужды
$js_new_naviagtor=str_replace("%%PLATFORM","Win64",$js_new_naviagtor);
$js_new_naviagtor=str_replace("%%APPNAME","Netscape",$js_new_naviagtor);
$js_new_naviagtor=str_replace("%%LANGUAGE_BROWSER","ru-RU",$js_new_naviagtor);
$js_new_naviagtor=str_replace("%%LANGUAGE_SYSTEM","ru-RU",$js_new_naviagtor);
$js_new_naviagtor=str_replace("%%LANGUAGE_USER","ru-RU",$js_new_naviagtor);
$js_new_naviagtor=str_replace("%%LANGUAGE","ru-RU",$js_new_naviagtor);
echo $browser->set_init_java_script($js_new_naviagtor)."<br>";
// user agent
$browser->set_user_agent("Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; rv:11.0) like Gecko");
// 2
echo "2. Посмотрим изменения : ";
echo $browser->navigate("whoer.net")." ";
sleep(2);
$anchor->get_by_attribute("class","btn-more")->focus();
$anchor->get_by_attribute("class","btn-more")->send_mouse_click();
// конец
echo "<hr><br>";
// Quit
$app->quit();
?>
Re: Как обойти идентификацию через Canvas Fingerprinting?
Также Свойства IE - вкладка Дополнительно - параметр "использовать програмную отрисовку вместо графического процессора меняют Finger print"
Re: Как обойти идентификацию через Canvas Fingerprinting?
и по плагинам
Код: Выделить всё
Object.defineProperty(window.navigator, 'plugins', {get: function() {return [{name:'name1' , description:'desc1', version: '2.1' },{name:'name2' , description:'desc2', version: '2.1' }];}});
Re: Как обойти идентификацию через Canvas Fingerprinting?
Добавили запрет на отгрузку урлов, новая версия будет доступна в конце недели
Код: Выделить всё
<?php
// подключим объект для управления эмулятором, если еще не подключен
if (!isset($path))
$path="../../../Templates/xweb_human_emulator.php";
require($path);
// начало
echo "<hr><font color=blue>raw->".basename (__FILE__)."</font><hr>";
// 1
echo "1. Включить слежение за http : ";
echo $raw->enable_all_streams(true)."<br>";
// 2
echo "2. Очистим массивы запрещенных урлов : ";
echo $raw->clear_disabled_response_urls_array()."\n";
// 3
echo "3. Добавим запрет на отгрузку : ";
echo $raw->add_disabled_response_url("canvas.js")."\n";
// 4
echo "4. Перейдем на проверку canvas finger print : ";
echo $browser->navigate("https://browserleaks.com/canvas")."\n";
// конец
echo "<hr><br>";
// Quit
$app->quit();
?>
Re: Как обойти идентификацию через Canvas Fingerprinting?
https://habrahabr.ru/company/oleg-bunin/blog/321294/
вот еще описание алгоритма - кому может пригодиться
вот еще описание алгоритма - кому может пригодиться
Re: Как обойти идентификацию через Canvas Fingerprinting?
А так же есть еще такое - http://mattstow.com/experiment/layout-engine/demo.html (http://mattstow.com/layout-engine.html)
Т.е. если поставить UA через $browser->set_user_agent(""); например хрома или фаерфокса, то можно определить все равно реальный движок браузера.
Т.е. если поставить UA через $browser->set_user_agent(""); например хрома или фаерфокса, то можно определить все равно реальный движок браузера.
Re: Как обойти идентификацию через Canvas Fingerprinting?
Это нужно смотреть как они делают на уровне JS и менять функции , например как Time Zone через set_init_java_script:bok2007 писал(а): Т.е. если поставить UA через $browser->set_user_agent(""); например хрома или фаерфокса, то можно определить все равно реальный движок браузера.
Код: Выделить всё
Date.prototype.getTimezoneOffset = function(){return 180;};
Re: Как обойти идентификацию через Canvas Fingerprinting?
что-то скрипт выше не работает
добавил строку
Пытаюсь использовать разные вариации name, description, version - но при переходе на whoer.net в разделе Plugins эти плагины не появляются. При переходе на https://browserleaks.com/canvas Signature и PNG Hash всегда остаются одинаковыми.
Где ошибка?
Версия HE актуальная - 4.10.5
Код: Выделить всё
// JS
$js_new_naviagtor="
var platformProp = { get: function () { return '%%PLATFORM'; } };
var appName = { get: function () { return '%%APPNAME'; } };
var languageProp = { get: function () { return '%%LANGUAGE'; } };
var languageBrowserProp = { get: function () { return '%%LANGUAGE_BROWSER'; } };
var languageSystemProp = { get: function () { return '%%LANGUAGE_SYSTEM'; } };
var languageUserProp = { get: function () { return '%%LANGUAGE_USER'; } };
Object.defineProperty(window.navigator, 'platform', platformProp);
Object.defineProperty(window.navigator, 'appName', appName);
Object.defineProperty(window.navigator, 'language', languageProp);
Object.defineProperty(window.navigator, 'browserLanguage', languageBrowserProp);
Object.defineProperty(window.navigator, 'systemLanguage', languageSystemProp);
Object.defineProperty(window.navigator, 'userLanguage', languageUserProp);
Object.defineProperty(window.navigator, 'plugins', {get: function() {return [{name:'namjjge1' , description:'dehtysc1', version: '4.1' },{name:'namfdgfge2' , description:'desc23', version: '2.16' }];}});
window.navigator.javaEnabled=function(){return false;};
";
// поменяем JS под наши нужды
$js_new_naviagtor=str_replace("%%PLATFORM","Win64",$js_new_naviagtor);
$js_new_naviagtor=str_replace("%%APPNAME","Netscape",$js_new_naviagtor);
$js_new_naviagtor=str_replace("%%LANGUAGE_BROWSER","en-US",$js_new_naviagtor);
$js_new_naviagtor=str_replace("%%LANGUAGE_SYSTEM","ru-RU",$js_new_naviagtor);
$js_new_naviagtor=str_replace("%%LANGUAGE_USER","ru-RU",$js_new_naviagtor);
$js_new_naviagtor=str_replace("%%LANGUAGE","ru-RU",$js_new_naviagtor);
echo $browser->set_init_java_script($js_new_naviagtor)."<br>";
// user agent
$browser->set_user_agent("Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; rv:11.0) like Gecko");
// 2
echo "2. Посмотрим изменения : ";
$browser->navigate("whoer.net");
//echo $browser->navigate("https://browserleaks.com/canvas")." ";
sleep(2);
$anchor->get_by_attribute("class","btn-more")->focus();
$anchor->get_by_attribute("class","btn-more")->send_mouse_click();
// конец
echo "<hr><br>";
// Quit
$app->quit();
Код: Выделить всё
Object.defineProperty(window.navigator, 'plugins', {get: function() {return [{name:'namjjge1' , description:'dehtysc1', version: '4.1' },{name:'namfdgfge2' , description:'desc23', version: '2.16' }];}});
Где ошибка?
Версия HE актуальная - 4.10.5
Re: Как обойти идентификацию через Canvas Fingerprinting?
В настройках - на вкладке барузера - отключите отрисовку через DirectX и GPU и отрисовка Finger Print будет идти программными методами - без задействования видеокарты - таким образом отпечаток уже не будет уникальным.Пытаюсь использовать разные вариации name, description, version - но при переходе на whoer.net в разделе Plugins эти плагины не появляются. При переходе на https://browserleaks.com/canvas Signature и PNG Hash всегда остаются одинаковыми.
Где ошибка?
Re: Как обойти идентификацию через Canvas Fingerprinting?
не помогло, захожу в настройки human emulator, перехожу на вкладку браузер.
отрисовка картинок через DirectX отключена (галочки нет)
отрисовка картинок через GPU включена (галочка стоит)
Снимаю галочку с GPU и кликаю OK.
Пробую опять запустить скрипт - не работает, Fingerprint один и тот же. Захожу в настройки и ОПА, стоит галочка на "отрисовка картинок через GPU включена", хотя я её снимал. Снимаю кликаю ОК, потом захожу опять в настройки - но она все равно стоит. Короче не снимается.
Точно также, если например поставить галочку "отрисовка картинок через DirectX отключена", кликнуть ОК, затем опять зайти в настройки - увидим, что она не ставится, т.е. изменения по этим настройкам НЕ сохраняются.
отрисовка картинок через DirectX отключена (галочки нет)
отрисовка картинок через GPU включена (галочка стоит)
Снимаю галочку с GPU и кликаю OK.
Пробую опять запустить скрипт - не работает, Fingerprint один и тот же. Захожу в настройки и ОПА, стоит галочка на "отрисовка картинок через GPU включена", хотя я её снимал. Снимаю кликаю ОК, потом захожу опять в настройки - но она все равно стоит. Короче не снимается.
Точно также, если например поставить галочку "отрисовка картинок через DirectX отключена", кликнуть ОК, затем опять зайти в настройки - увидим, что она не ставится, т.е. изменения по этим настройкам НЕ сохраняются.
Re: Как обойти идентификацию через Canvas Fingerprinting?
исправили, в 4.10.6