Потребовалось разобрать как facebook фингерпринтит браузер.
На текущий момент ковыряю их canvas фингерпринт.
Честно говоря видел различные реализации canvas фингерпринта, но все они сводились к одному:
- Отрисовать картинку
- Применить некоторые платформозависимые преобразования
- Получить хэш картинки
Этап отрисовки картинки никогда не включал никаких рандомизаций в своем алгоритме.
Т.е. на выходе мы получали визуально одинаковую картинку всегда.
Хотя в зависимости от видео карты (ОС, дров и тп) хэш картинки получался разный.
У facebook'а же алгоритм отрисовки картинки включает в себя очень много рандомизаций.
Вот на пример отрисовка эмодзи.
this.rng() - это генератор случайных чисел на основе библиотеки Alea - https://github.com/davidbau/seedrandom
Генератор инициализируется постоянным seed: 90ee0806e50c1be9e29d7e6ac7a078fb
Подобных отрисовок различных примитивов довольно много
- text
- bezier
- circle
- emoji
И везде обильно используются рандомизированные значения.
Упрощенно говоря далее после отрисовки просто получают хэш картинки и его вероятно отправляют.
До момента отправки еще не дошел.
Был очень рад любой инфе на тему canvas фингерпринта в facebook.
Если кто то ковырялся в этом направлении стукните в жабу, ПМ или прям сюда.
На текущий момент ковыряю их canvas фингерпринт.
Честно говоря видел различные реализации canvas фингерпринта, но все они сводились к одному:
- Отрисовать картинку
- Применить некоторые платформозависимые преобразования
- Получить хэш картинки
Этап отрисовки картинки никогда не включал никаких рандомизаций в своем алгоритме.
Т.е. на выходе мы получали визуально одинаковую картинку всегда.
Хотя в зависимости от видео карты (ОС, дров и тп) хэш картинки получался разный.
У facebook'а же алгоритм отрисовки картинки включает в себя очень много рандомизаций.
Вот на пример отрисовка эмодзи.
this.rng() - это генератор случайных чисел на основе библиотеки Alea - https://github.com/davidbau/seedrandom
Генератор инициализируется постоянным seed: 90ee0806e50c1be9e29d7e6ac7a078fb
JavaScript:
canvasClass.drawEmoji = function () {
var a = Math.floor(this.rng() * 50 + 100);
this.ctx.font = a + "px Arial";
var b = "\ud83d\ude03"
, c = Math.floor(this.rng() * this.width / 2);
a = this.rngRange(a * 2, this.height - a);
this.ctx.fillStyle = this.makeRadialGradient();
this.applyShadow();
this.ctx.fillText(b, c, a)
}
Подобных отрисовок различных примитивов довольно много
- text
- bezier
- circle
- emoji
И везде обильно используются рандомизированные значения.
Упрощенно говоря далее после отрисовки просто получают хэш картинки и его вероятно отправляют.
До момента отправки еще не дошел.
Был очень рад любой инфе на тему canvas фингерпринта в facebook.
Если кто то ковырялся в этом направлении стукните в жабу, ПМ или прям сюда.

