Как обойти идентификацию через Canvas Fingerprinting?

Все вопросы касающиеся использования
программы можно задать здесь
bok2007
Сообщения: 32
Зарегистрирован: 22 июн 2010, 18:05

Как обойти идентификацию через Canvas Fingerprinting?

Сообщение bok2007 » 03 фев 2017, 10:11

Суть 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 функции которая передает картинку на сервер. Но не знаю как. В дальнейшем хотелось бы увидеть в функционале что бы этот параметр генерился рандомно.

Аватара пользователя
bigfozzy
Site Admin
Сообщения: 3048
Зарегистрирован: 28 июл 2008, 17:24
Контактная информация:

Re: Как обойти идентификацию через Canvas Fingerprinting?

Сообщение bigfozzy » 03 фев 2017, 20:10

Принято, посмотрим что это такое, а так вроде есть информация что это обходится через browser->set_init_java_script

Например изменив window.navigator.hardwareConcurrency и другие параметры window.navigator.
+ виртуальные машины еще можно использовать

Над другими аспектами, мы подумаем, как все это реализовать. Также баниться может на основе реальных координат мыши, но тут вроде все ок.

bok2007
Сообщения: 32
Зарегистрирован: 22 июн 2010, 18:05

Re: Как обойти идентификацию через Canvas Fingerprinting?

Сообщение bok2007 » 05 фев 2017, 06:59

Делал массовую регистрацию под 1 сайт, там капчу вводить даже не нужно, прокси индивидуальные, разные User Agent и т.п., а так же полную эмуляцию мыши (движения и клики) и клавиатруры, но акки все равно в бан улетали... В то время так и не понял причины, как сейчас думаю там именно через Canvas шла идентификация пользователей.

На счет виртуалок (сам через них в многопоток работаю) не понял, на каждую регу использовать разные ОС (тогда и лицензий кучу нужно будет)? Да, можно разрешение экрана поменять на каждой, но все равно вариаций немного получается и не факт что Canvas будет разным.

RE: В дальнейшем хотелось бы увидеть в функционале что бы этот параметр генерился рандомно.
Причем так, что бы параметры Canvas можно было сохранять с данными от акка, а в последующем его задавать акку.

Аватара пользователя
bigfozzy
Site Admin
Сообщения: 3048
Зарегистрирован: 28 июл 2008, 17:24
Контактная информация:

Re: Как обойти идентификацию через Canvas Fingerprinting?

Сообщение bigfozzy » 05 фев 2017, 20:45

По тому как снизить уникальность : https://whoer.net/blog/article/unikalny ... s-chast-2/
на каждую регу использовать разные ОС
- систему можно подменить на уровне объекта навигатор - через set_init_java_script
В дальнейшем хотелось бы увидеть в функционале что бы этот параметр генерился рандомно.
Принято, бум разбираться в этом вопросе как сделать это проще всего

Аватара пользователя
bigfozzy
Site Admin
Сообщения: 3048
Зарегистрирован: 28 июл 2008, 17:24
Контактная информация:

Re: Как обойти идентификацию через Canvas Fingerprinting?

Сообщение bigfozzy » 06 фев 2017, 00:37

Небольшой пример замены навигатора :

Код: Выделить всё

<?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();
?>

Аватара пользователя
bigfozzy
Site Admin
Сообщения: 3048
Зарегистрирован: 28 июл 2008, 17:24
Контактная информация:

Re: Как обойти идентификацию через Canvas Fingerprinting?

Сообщение bigfozzy » 06 фев 2017, 01:38

Также Свойства IE - вкладка Дополнительно - параметр "использовать програмную отрисовку вместо графического процессора меняют Finger print"

Аватара пользователя
bigfozzy
Site Admin
Сообщения: 3048
Зарегистрирован: 28 июл 2008, 17:24
Контактная информация:

Re: Как обойти идентификацию через Canvas Fingerprinting?

Сообщение bigfozzy » 06 фев 2017, 01:42

и по плагинам

Код: Выделить всё

Object.defineProperty(window.navigator, 'plugins', {get: function() {return [{name:'name1' , description:'desc1', version: '2.1' },{name:'name2' , description:'desc2', version: '2.1' }];}});

Аватара пользователя
bigfozzy
Site Admin
Сообщения: 3048
Зарегистрирован: 28 июл 2008, 17:24
Контактная информация:

Re: Как обойти идентификацию через Canvas Fingerprinting?

Сообщение bigfozzy » 06 фев 2017, 16:11

Добавили запрет на отгрузку урлов, новая версия будет доступна в конце недели

Код: Выделить всё

<?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();
?>

Аватара пользователя
bigfozzy
Site Admin
Сообщения: 3048
Зарегистрирован: 28 июл 2008, 17:24
Контактная информация:

Re: Как обойти идентификацию через Canvas Fingerprinting?

Сообщение bigfozzy » 08 фев 2017, 19:00

https://habrahabr.ru/company/oleg-bunin/blog/321294/
вот еще описание алгоритма - кому может пригодиться

bok2007
Сообщения: 32
Зарегистрирован: 22 июн 2010, 18:05

Re: Как обойти идентификацию через Canvas Fingerprinting?

Сообщение bok2007 » 10 фев 2017, 18:48

А так же есть еще такое - http://mattstow.com/experiment/layout-engine/demo.html (http://mattstow.com/layout-engine.html)

Т.е. если поставить UA через $browser->set_user_agent(""); например хрома или фаерфокса, то можно определить все равно реальный движок браузера.

Аватара пользователя
bigfozzy
Site Admin
Сообщения: 3048
Зарегистрирован: 28 июл 2008, 17:24
Контактная информация:

Re: Как обойти идентификацию через Canvas Fingerprinting?

Сообщение bigfozzy » 11 фев 2017, 11:45

bok2007 писал(а): Т.е. если поставить UA через $browser->set_user_agent(""); например хрома или фаерфокса, то можно определить все равно реальный движок браузера.
Это нужно смотреть как они делают на уровне JS и менять функции , например как Time Zone через set_init_java_script:

Код: Выделить всё

Date.prototype.getTimezoneOffset = function(){return 180;};

Аватара пользователя
sashawww
Сообщения: 54
Зарегистрирован: 15 дек 2009, 03:26

Re: Как обойти идентификацию через Canvas Fingerprinting?

Сообщение sashawww » 08 мар 2017, 17:49

что-то скрипт выше не работает

Код: Выделить всё

// 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' }];}});
Пытаюсь использовать разные вариации name, description, version - но при переходе на whoer.net в разделе Plugins эти плагины не появляются. При переходе на https://browserleaks.com/canvas Signature и PNG Hash всегда остаются одинаковыми.
Где ошибка?

Версия HE актуальная - 4.10.5

Аватара пользователя
bigfozzy
Site Admin
Сообщения: 3048
Зарегистрирован: 28 июл 2008, 17:24
Контактная информация:

Re: Как обойти идентификацию через Canvas Fingerprinting?

Сообщение bigfozzy » 12 мар 2017, 11:46

Пытаюсь использовать разные вариации name, description, version - но при переходе на whoer.net в разделе Plugins эти плагины не появляются. При переходе на https://browserleaks.com/canvas Signature и PNG Hash всегда остаются одинаковыми.
Где ошибка?
В настройках - на вкладке барузера - отключите отрисовку через DirectX и GPU и отрисовка Finger Print будет идти программными методами - без задействования видеокарты - таким образом отпечаток уже не будет уникальным.

Аватара пользователя
sashawww
Сообщения: 54
Зарегистрирован: 15 дек 2009, 03:26

Re: Как обойти идентификацию через Canvas Fingerprinting?

Сообщение sashawww » 12 мар 2017, 15:22

не помогло, захожу в настройки human emulator, перехожу на вкладку браузер.
отрисовка картинок через DirectX отключена (галочки нет)
отрисовка картинок через GPU включена (галочка стоит)
Снимаю галочку с GPU и кликаю OK.

Пробую опять запустить скрипт - не работает, Fingerprint один и тот же. Захожу в настройки и ОПА, стоит галочка на "отрисовка картинок через GPU включена", хотя я её снимал. Снимаю кликаю ОК, потом захожу опять в настройки - но она все равно стоит. Короче не снимается.
Точно также, если например поставить галочку "отрисовка картинок через DirectX отключена", кликнуть ОК, затем опять зайти в настройки - увидим, что она не ставится, т.е. изменения по этим настройкам НЕ сохраняются.

Аватара пользователя
bigfozzy
Site Admin
Сообщения: 3048
Зарегистрирован: 28 июл 2008, 17:24
Контактная информация:

Re: Как обойти идентификацию через Canvas Fingerprinting?

Сообщение bigfozzy » 12 мар 2017, 21:53

исправили, в 4.10.6

Ответить