stihl не предоставил(а) никакой дополнительной информации.
Если вы работаете с картами и шопами, то каждый раз сталкиваетесь с необходимостью подмены отпечатков.
Сегодня поговорим о Canvas, так как это один из важнейших параметров влияющих на успешность вбива.
Цифровой отпечаток с использованием Canvas — это один из методов получения цифрового отпечатка устройства для отслеживания онлайн-пользователей, позволяющий веб-сайтам идентифицировать и отслеживать посетителей с помощью HTML5 Canvas без использования cookie-файлов или других подобных средств.
Большинство антидетект-браузеров представленых на рынке предлагают вам менять отпечаток Canvas на сгенерированый, что делает его на 100% уникальным - а это соответственно фрод! Потому что уникальных отпечатков не бывает - это аномалия.
Соответственно для прохождения антифрод-систем, нам нужен настоящий (не сгенерированый) канвас.
Рассмотрим способ подмены данного отпечатка без антидетект-браузера.
Для примера рассмотрим перенос канваса с одного нашего браузера в другой на странице Для просмотра ссылки Войдиили Зарегистрируйся
Понадобится расширение Для просмотра ссылки Войдиили Зарегистрируйся.
Устанавливайте с официального магазина Chrome.
Для корректной работы обязательно включаем режим разработчика.
Заходим с браузера например Edge на browserleaks.com/canvas
Открываем консоль (F12)
Пишем allow pasting
И вставляем следующий код
Копируем наш канвас, его будем переносить в другой браузер (как это использовать на реальных примерах распишу ниже)
После того как у нас есть нужный канвас, переходим в Chrom`e на browserleaks
Открываем расширение Tampermonkey и нажимаем создать новый скрипт
В открывшемся окне пишем следующий код
Нажимаем Сохранить
Готово, проверяем - канвас поменялся на нужный нам.
Теперь касательно реального применения.
Берём кусок кода, благодаря которому и формируется наш канвас
Далее, закидываем этот код на любой свой веб-ресурс и включаем логирование этого отпечатка
Покупаем нужное количество трафика на наш веб-ресурс
По итогу менее чем за сутки получаем неограниченое количество реальных canvas-отпечатков, а так же любых других отпечатков, таких как WebGL, audio и т.д, которые подменяются таким же способом.
Используем их под свои цели или же открываем магазин отпечатков, для тех, кому самому это делать лень)
!Важный момент! Код выше подойдет соотвественно только для browserleaks - он приведен для примера. Таким же образом вы собираете отпечатки для ресурса, который нужен именно вам, вставляя код с нужного вам ресурса!
Для затравки стоит отметить, что данное расширение так же работает на IOS, и, если вы включите голову, то в любой момент ваш старый айфон - становится новым айфоном.
Информация для статьи взята из открытых источников в том числе Youtube-канала VektorT13.
Сегодня поговорим о Canvas, так как это один из важнейших параметров влияющих на успешность вбива.
Цифровой отпечаток с использованием Canvas — это один из методов получения цифрового отпечатка устройства для отслеживания онлайн-пользователей, позволяющий веб-сайтам идентифицировать и отслеживать посетителей с помощью HTML5 Canvas без использования cookie-файлов или других подобных средств.
Большинство антидетект-браузеров представленых на рынке предлагают вам менять отпечаток Canvas на сгенерированый, что делает его на 100% уникальным - а это соответственно фрод! Потому что уникальных отпечатков не бывает - это аномалия.
Соответственно для прохождения антифрод-систем, нам нужен настоящий (не сгенерированый) канвас.
Рассмотрим способ подмены данного отпечатка без антидетект-браузера.
Для примера рассмотрим перенос канваса с одного нашего браузера в другой на странице Для просмотра ссылки Войди
Понадобится расширение Для просмотра ссылки Войди
Устанавливайте с официального магазина Chrome.
Для корректной работы обязательно включаем режим разработчика.
Заходим с браузера например Edge на browserleaks.com/canvas
Открываем консоль (F12)
Пишем allow pasting
И вставляем следующий код
const canvas = document.createElement('canvas');canvas.width = 220;canvas.height = 30;const ctx = canvas.getContext('2d');// Исходный текст, как на browserleaksconst txt = "BrowserLeaks,com <canvas> 1.0";// Настройки текста и фонаctx.textBaseline = "top";ctx.font = "14px 'Arial'";ctx.textBaseline = "alphabetic";// Заливка оранжевым прямоугольникомctx.fillStyle = "#f60";ctx.fillRect(125, 1, 62, 20);// Синий текстctx.fillStyle = "#069";ctx.fillText(txt, 2, 15);// Полупрозрачный зелёный текст поверхctx.fillStyle = "rgba(102, 204, 0, 0.7)";ctx.fillText(txt, 4, 17);// Получение base64 строки PNGconst dataUrl = canvas.toDataURL();// Вывод результатаconsole.log('Canvas base64:\n', dataUrl);
Копируем наш канвас, его будем переносить в другой браузер (как это использовать на реальных примерах распишу ниже)
После того как у нас есть нужный канвас, переходим в Chrom`e на browserleaks
Открываем расширение Tampermonkey и нажимаем создать новый скрипт
В открывшемся окне пишем следующий код
// ==UserScript==// @Name Canvas Fingerprint Spoofer (Browserleaks)// @namespace Для просмотра ссылки Войди или Зарегистрируйся @version 1.0// @description Подмена Canvas Fingerprint на сайте browserleaks.com/canvas (возвращает фиксированный base64-хэш вместо реального)// @author Ваше имя// @match Для просмотра ссылки Войди или Зарегистрируйся @Run-at document-start// @Grant none// ==/UserScript==(function() { 'use strict'; // Задаем фиксированный canvas-отпечаток в формате base64 (PNG изображение). // Ниже строка содержит данные PNG 300x150 px с градиентом (красный->синий) закодированные в base64. // Вы можете заменить FAKE_IMAGE_DATA_URL на свою строку "data:image/png;base64,...". const FAKE_IMAGE_DATA_URL = "data:image/png;base64,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"; // Перехватываем HTMLCanvasElement.toDataURL чтобы всегда возвращать наш фиксированный base64 const originalToDataURL = HTMLCanvasElement.prototype.toDataURL; HTMLCanvasElement.prototype.toDataURL = function(...args) { // Можно добавить проверку типа изображения, но здесь для простоты игнорируем аргументы return FAKE_IMAGE_DATA_URL; }; // Перехватываем HTMLCanvasElement.toBlob для случая, если страница запросит Blob вместо data URL const originalToBlob = HTMLCanvasElement.prototype.toBlob; HTMLCanvasElement.prototype.toBlob = function(callback, type, quality) { // Декодируем нашу base64-строку в бинарный массив try { const base64Data = FAKE_IMAGE_DATA_URL.split(',')[1]; // отделяем часть после "base64," const binaryStr = atob(base64Data); const len = binaryStr.length; const bytes = new Uint8Array(len); for (let i = 0; i < len; i++) { bytes = binaryStr.charCodeAt(i); } const blob = new Blob([bytes], { type: "image/png" }); // Вызываем колбэк, передавая Blob фиктивного изображения if (typeof callback === 'function') { callback(blob); } } catch(e) { // В случае ошибки вызовем оригинальный метод (на всякий случай) console.error('CanvasSpoof: toBlob error, calling original', e); return originalToBlob.call(this, callback, type, quality); } }; // Перехватываем CanvasRenderingContext2D.getImageData, чтобы при попытке чтения пикселей вернуть фиктивные данные const originalGetImageData = CanvasRenderingContext2D.prototype.getImageData; CanvasRenderingContext2D.prototype.getImageData = function(x, y, width, height) { try { // Создаем пустой ImageData заданных размеров, заполненный нулями (прозрачный черный) // Здесь можно заполнить данными, соответствующими нашему изображению, // но для простоты возвращаем пустые/чёрные пиксели одинаково каждый раз. const fakeData = new Uint8ClampedArray(width * height * 4); // (По желанию можно нарисовать в fakeData какой-то паттерн, чтобы fingerprint был не нулевой) return new ImageData(fakeData, width, height); } catch(e) { console.error('CanvasSpoof: getImageData error, calling original', e); // Если что-то пошло не так, отдаем оригинальные данные (может выдать реальный отпечаток!) return originalGetImageData.call(this, x, y, width, height); } }; // Перехватываем OffscreenCanvas.convertToBlob, чтобы возвратить Blob от нашего изображения (если OffscreenCanvas будет использован) if (typeof OffscreenCanvas !== 'undefined') { const originalConvertToBlob = OffscreenCanvas.prototype.convertToBlob; OffscreenCanvas.prototype.convertToBlob = function(...args) { // Создаем Blob из фиксированных данных и возвращаем Promise.resolve(blob) try { const base64Data = FAKE_IMAGE_DATA_URL.split(',')[1]; const binaryStr = atob(base64Data); const len = binaryStr.length; const bytes = new Uint8Array(len); for (let i = 0; i < len; i++) { bytes = binaryStr.charCodeAt(i); } const blob = new Blob([bytes], { type: "image/png" }); return Promise.resolve(blob); } catch(e) { console.error('CanvasSpoof: convertToBlob error, calling original', e); return originalConvertToBlob.apply(this, args); } }; } // Функция для применения патчей во внешнем (iframe) окне function patchCanvasInWindow(win) { try { if (!win || win.HTMLCanvasElement === undefined) return; // Переназначаем методы в контексте данного окна (iframe) win.HTMLCanvasElement.prototype.toDataURL = HTMLCanvasElement.prototype.toDataURL; win.HTMLCanvasElement.prototype.toBlob = HTMLCanvasElement.prototype.toBlob; win.CanvasRenderingContext2D.prototype.getImageData = CanvasRenderingContext2D.prototype.getImageData; if (win.OffscreenCanvas) { win.OffscreenCanvas.prototype.convertToBlob = OffscreenCanvas.prototype.convertToBlob; } } catch(e) { console.error("CanvasSpoof: error patching iframe window:", e); } } // Наблюдаем за добавлением iframe в документ, чтобы патчить canvas внутри него const observer = new MutationObserver(function(mutations) { for (const mutation of mutations) { for (const node of mutation.addedNodes) { if (node.tagName && node.tagName.toLowerCase() === 'iframe') { // Как только iframe добавлен в DOM, пытаемся применить патч try { patchCanvasInWindow(node.contentWindow); } catch(e) { /* возможноiframe не готов*/ } // Также на событие load применяем патч (на случай, если документ внутри загрузился/перезагрузился) node.addEventListener('load', function() { patchCanvasInWindow(node.contentWindow); }); } } } }); observer.observe(document.documentElement, { childList: true, subtree: true }); // Если к моменту запуска скрипта iframe уже существует в разметке: document.querySelectorAll('iframe').forEach(iframe => { patchCanvasInWindow(iframe.contentWindow); iframe.addEventListener('load', function() { patchCanvasInWindow(iframe.contentWindow); }); }); // Готово: теперь любые попытки получить данные canvas получат фиктивное изображение})();
Нажимаем Сохранить
Готово, проверяем - канвас поменялся на нужный нам.
Теперь касательно реального применения.
Берём кусок кода, благодаря которому и формируется наш канвас
Далее, закидываем этот код на любой свой веб-ресурс и включаем логирование этого отпечатка
Покупаем нужное количество трафика на наш веб-ресурс
По итогу менее чем за сутки получаем неограниченое количество реальных canvas-отпечатков, а так же любых других отпечатков, таких как WebGL, audio и т.д, которые подменяются таким же способом.
Используем их под свои цели или же открываем магазин отпечатков, для тех, кому самому это делать лень)
!Важный момент! Код выше подойдет соотвественно только для browserleaks - он приведен для примера. Таким же образом вы собираете отпечатки для ресурса, который нужен именно вам, вставляя код с нужного вам ресурса!
Для затравки стоит отметить, что данное расширение так же работает на IOS, и, если вы включите голову, то в любой момент ваш старый айфон - становится новым айфоном.
Информация для статьи взята из открытых источников в том числе Youtube-канала VektorT13.