1 место Анонимность в каждый ZennoPoster. От Useragent'a до шрифтов. Часть 2.

ibred

Administrator
Команда форума
Регистрация
04.04.2015
Сообщения
2 630
Благодарностей
2 016
Баллы
113


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

В этой статье мы рассмотрим качественную эмуляцию не только для десктопа, но и мобильных устройств.

Каждый параметр, отвечающий за идентификацию пользователя помечен цветным маркером по степени важности.
Важным считается тот, что уводит пользователя в зону риска при идентификации реальных значений.

■ - Безопасный
■ - В зоне риска
■ - Полная идентификация
⦿ Новое \ Обновлено


Информация о браузере
⦿ Useragent и свойства навигатора
  • ⦿ Firefox (Desktop, Mobile and Tablet)
  • ⦿ Chrome (Desktop)
  • ⦿ Internet Explorer (Desktop)
  • ⦿ Edge (Desktop)
  • ⦿ Safari (Desktop)
⦿ Разрешение экрана, глубина и видимая область
⦿ Набор плагинов
⦿ Имя окна
⦿ Другое
  • ⦿ Язык
  • Hardware Concurrency
  • Do Not Track
  • Touchscreen Type (Touchscreen Support)
  • Adblock
  • devicePixelRatio
  • ⦿ Battery

Хранилища
⦿ Кэш
  • ETag
  • ⦿ Last-Modified
Web storage
⦿ IndexedDB
Куки (Web cookies).
⦿ Super Cookie
  • LSO Cookies
  • Evercookies \ Zombie Cookie
⦿ Изолированное хранилище Silverlight
⦿ HSTS Super cookies (HTTP Strict Transport Security)

Связь и местоположение
⦿ IP адрес (Прокси)
  • ⦿ Происхождение прокси
DNS (Domain Name System)
WebRTC (Утечка IP)
⦿ Flash (Утечка IP)
Геолокация
Таймзона

Отпечатки
⦿ WebGL (одинаковые на продукции Apple)
Fingerprint Canvas
Browser Fingerprint
⦿ AudioContext Fingerprint
⦿ Системные шрифты (Fonts Fingerprint)
⦿ Firefox Resources Reader
⦿ WebRTC (Камера, Микрофон)
⦿ ClientRect Fingerprint
⦿ Ubercookies Fingerprint
⦿ IP Stack fingerprint \ Passive OS Fingerprint


Информация о браузере
Useragent и свойства навигатора
Как Вы уже знаете UA - это строка, которая используется клиентскими приложениям в качестве своего имени. В прошлой части мы рассмотрели метод генерации useragent'a браузера Firefox, код которого мы сейчас обновим, добавив актуальные версии, а так же способы генерации актуальных useragent'ов других браузеров: Chrome, Edge, Internet Explorer и Safari.

Общие составные части данной строки:
  • Mozilla/5.0 — Основной токен, указывающий версию совместимости и является общим практически для каждого браузера на сегодняшний день.
  • [Platform] – Описывает родную платформу, на которой работает браузер. Например: Windows, Mac, Linux или Android. Обратите внимание, что эта строка может состоять из нескольких маркеров, разделённых «;».

Firefox

Desktop

Из чего состоит строка?
Mozilla / 5.0 ([Platform]; rv: [GeckoVersion]) Gecko / [GeckoTrail] Firefox / [FirefoxVersion]
  • rv:[GeckoVersion] — Указывает версию выпуска Gecko. В последних версиях браузера GeckoVersion такая же, как FirefoxVersion.
  • Gecko / [GeckoTrail] — Указывает на то, что браузер основан на Gecko. На десктопах [GeckoTrail] является константой «20100101»
  • Firefox / [FirefoxVersion] – Заявляет, что используется браузер Firefox определённой версии.
C#:
// Выбираем случайную версию Firefox
Random r = new Random();

//Формируем набор buildID нашего Firefox (у каждой версии свой)
Tuple<string, string>[] buildIDSet = {
    Tuple.Create("57", "20171112125346"),
    Tuple.Create("56", "20171024165158"), // 56.0.2
    Tuple.Create("56", "20171002220106"), // 56.0.1
    Tuple.Create("56", "20170926190823"),
    Tuple.Create("55", "20170802111421"),
    Tuple.Create("54", "20170608105825"),
    Tuple.Create("53", "20170413192749"),
    Tuple.Create("52", "20171206101620"), // 52.5.2
    Tuple.Create("52", "20171107091003"), // 52.5.0
    Tuple.Create("52", "20170316213829"),
    Tuple.Create("51", "20170125094131"),
    Tuple.Create("50", "20161104212021"),
    Tuple.Create("49", "20161019084923")
};
// Версия
int currentBuild = r.Next(buildIDSet.Length);
string version = buildIDSet[currentBuild].Item1;
// Устанавливаем BuildID
instance.ShowNavigatorField(ZennoLab.InterfacesLibrary.Enums.Browser.NavigatorField.BuildId);
instance.SetHeader(ZennoLab.InterfacesLibrary.Enums.Browser.NavigatorField.BuildId, buildIDSet[currentBuild].Item2);
// Устанавливаем Vendor
instance.ShowNavigatorField(ZennoLab.InterfacesLibrary.Enums.Browser.NavigatorField.Vendor);
instance.SetHeader(ZennoLab.InterfacesLibrary.Enums.Browser.NavigatorField.Vendor, null);
// Устанавливаем VendorSub
instance.ShowNavigatorField(ZennoLab.InterfacesLibrary.Enums.Browser.NavigatorField.VendorSub);
instance.SetHeader(ZennoLab.InterfacesLibrary.Enums.Browser.NavigatorField.VendorSub, null);

// Формируем набор версий операционной системы Windows
// 6.0 Windows Vista
// 6.1 Windows 7
// 6.2 Windows 8
// 6.3 Windows 8.1
// 10.0 Windows 10
string winOC = Macros.TextProcessing.Spintax("{6.0|6.1|6.2|6.3|10.0}");
string platform = Macros.TextProcessing.Spintax("{Win32|Win64}");

// Определяем "битность" самого приложения
string platformApp = string.Empty;
if(platform=="Win32"){
    platformApp = Macros.TextProcessing.Spintax("{; WOW64|}");
} else {
    platformApp = "; Win64; x64";
}
// OC
project.Profile.UserAgentOsCpu = string.Format("Windows NT {0}{1}", winOC, platformApp);
project.Profile.UserAgentPlatform = platform;

// Устанавливаем Useragent
project.Profile.UserAgent = string.Format("Mozilla/5.0 (Windows NT {0}{1}; rv:{2}.0) Gecko/20100101 Firefox/{2}.0", winOC, platformApp, version);
project.Profile.UserAgentAppVersion = "5.0 (Windows)";
project.Profile.UserAgentAppName = "Netscape";
project.Profile.UserAgentAppCodeName = "Mozilla";
project.Profile.UserAgentProduct = "Gecko";
project.Profile.UserAgentProductSub = "20100101";
Mobile and Tablet
Генерация useragent'a Firefox для мобильных телефонов и планшетов ничем особо не отличается от десктопной версии, меняются лишь параметры OS. Набор билдов остаётся прежним.

C#:
// Выбор дейвайса: Мобильный телефон или Планшет
// Должна быть активирована только одна строка
string device = Macros.TextProcessing.Spintax("{Mobile|Tablet}"); // Cлучайный
//string device = "Mobile"; // Мобильный
//string device = "Tablet"; // Мобильный

// Выбираем случайную версию Firefox
Random r = new Random();

//Формируем набор buildID нашего Firefox (у каждой версии свой)
Tuple<string, string>[] buildIDSet = {
    Tuple.Create("57", "20171112125346"),
    Tuple.Create("56", "20171024165158"), // 56.0.2
    Tuple.Create("56", "20171002220106"), // 56.0.1
    Tuple.Create("56", "20170926190823"),
    Tuple.Create("55", "20170802111421"),
    Tuple.Create("54", "20170608105825"),
    Tuple.Create("53", "20170413192749"),
    Tuple.Create("52", "20171206101620"), // 52.5.2
    Tuple.Create("52", "20171107091003"), // 52.5.0
    Tuple.Create("52", "20170316213829"),
    Tuple.Create("51", "20170125094131"),
    Tuple.Create("50", "20161104212021"),
    Tuple.Create("49", "20161019084923")
};
// Версия
int currentBuild = r.Next(buildIDSet.Length);
string version = buildIDSet[currentBuild].Item1;
// Устанавливаем BuildID
instance.ShowNavigatorField(ZennoLab.InterfacesLibrary.Enums.Browser.NavigatorField.BuildId);
instance.SetHeader(ZennoLab.InterfacesLibrary.Enums.Browser.NavigatorField.BuildId, buildIDSet[currentBuild].Item2);
// Устанавливаем Vendor
instance.ShowNavigatorField(ZennoLab.InterfacesLibrary.Enums.Browser.NavigatorField.Vendor);
instance.SetHeader(ZennoLab.InterfacesLibrary.Enums.Browser.NavigatorField.Vendor, null);
// Устанавливаем VendorSub
instance.ShowNavigatorField(ZennoLab.InterfacesLibrary.Enums.Browser.NavigatorField.VendorSub);
instance.SetHeader(ZennoLab.InterfacesLibrary.Enums.Browser.NavigatorField.VendorSub, null);

// Формируем набор версий операционной системы Android
// https://ru.wikipedia.org/wiki/История_версий_Android
string AndroidOC = Macros.TextProcessing.Spintax("{4.4.4|5.0|5.0.1|5.0.2|5.1|5.1.1|6.0|6.0.1|7.0|7.1|7.1.1|7.1.2|8.0|8.1}");
string platform = string.Format(@"Linux {0}", Macros.TextProcessing.Spintax("{armv7l|armv8l}")); // 32bit and 64bit

// Определяем "битность" самого приложения
string platformApp = string.Empty;
// OC
project.Profile.UserAgentOsCpu = platform;
project.Profile.UserAgentPlatform = platform;

// Устанавливаем Useragent
project.Profile.UserAgent = string.Format("Mozilla/5.0 (Android {0}; {2}; rv:{1}.0) Gecko/20100101 Firefox/{1}.0", AndroidOC, version, device);
project.Profile.UserAgentAppVersion = string.Format(@"5.0 (Android {0})", AndroidOC);
project.Profile.UserAgentAppName = "Netscape";
project.Profile.UserAgentAppCodeName = "Mozilla";
project.Profile.UserAgentProduct = "Gecko";
project.Profile.UserAgentProductSub = "20100101";
Chrome
Mozilla/5.0 ([Platform]) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/[ChromeVer] Safari/537.36
  • AppleWebKit/537.36 (KHTML, like Gecko) — Указывает на то, что браузер основан на Webkit. Данный движок изначально был предложен компанией Apple в 2001 году, как форк KHTML, это и объясняет упоминание яблочного бренда в данной строке. 537.36 актуальная версия движка, начиная с 2013 года.
  • Chrome/[ChromeVer] – Заявляет, что используется браузер Chrome определённой версии.
  • Safari/537.36 — Имеет свою историческую причину. Подробнее можете почитать здесь.

Браузер содержит достаточно большое кол-во билдов (то, что перечислено в ChromeBuild - это ещё не всё), поэтому я вынес эту в отдельную таблицу в виде файла chrome-builds.data, который Вы можете скачать здесь. Разместить его необходимо рядом с шаблоном.

C#:
Random r = new Random();

Tuple<string, int, int>[] ChromeBuild = {
    Tuple.Create("55", 2841, 2883),
    Tuple.Create("56", 2884, 2924),
    Tuple.Create("57", 2925, 2987),
    Tuple.Create("58", 2988, 3029),
    Tuple.Create("59", 3030, 3071),
    Tuple.Create("60", 3072, 3112),
    Tuple.Create("61", 3113, 3163),
    Tuple.Create("62", 3164, 3202),
    Tuple.Create("63", 3203, 3239),
    Tuple.Create("64", 3240, 3282),
    Tuple.Create("65", 3283, 3290)
};

int random = r.Next(0, ChromeBuild.Length);

string version = ChromeBuild[random].Item1;
string build = Convert.ToString(r.Next(ChromeBuild[random].Item2, ChromeBuild[random].Item3));
string build2 = string.Empty;


int randomNumber = r.Next(0, ChromeBuild.Length);

foreach (string line in File.ReadLines(string.Format(@"{0}chrome-builds.data", project.Path)))
{
    if (line.Contains(string.Format(@"{0}.{1}", ChromeBuild[randomNumber].Item1, ChromeBuild[randomNumber].Item3)))
    {
        project.SendInfoToLog(string.Format(@"{0}.{1}", ChromeBuild[2].Item1, ChromeBuild[2].Item2));
        string[] temp = line.Split(new[] {','}, StringSplitOptions.None);
        string lastBuild = line.Split(';')[1].Split(',')[r.Next(0, temp.Length)];
        if (lastBuild.Contains("-")) {lastBuild = Convert.ToString(r.Next(int.Parse(lastBuild.Split('-')[0]), int.Parse(lastBuild.Split('-')[1])+1));}
        build2 = lastBuild;
    }
}

// Формируем набор версий операционной системы Windows
// 6.0 Windows Vista
// 6.1 Windows 7
// 6.2 Windows 8
// 6.3 Windows 8.1
// 10.0 Windows 10
string winOC = Macros.TextProcessing.Spintax("{6.0|6.1|6.2|6.3|10.0}");
string platform = Macros.TextProcessing.Spintax("{Win32|Win64}");

// Определяем "битность" самого приложения
string platformApp = string.Empty;
if(platform=="Win32"){
    platformApp = Macros.TextProcessing.Spintax("{; WOW64|}");
} else {
    platformApp = "; Win64; x64";
}
// Устанавливаем Useragent
project.Profile.UserAgent = string.Format("Mozilla/5.0 (Windows NT {0}{1}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/{2} Safari/537.36", winOC, platformApp, string.Format(@"{0}.0.{1}.{2}", version, build, build2));
project.Profile.UserAgentAppVersion = project.Profile.UserAgent.Replace(@"Mozilla/", "");
project.Profile.UserAgentAppName = "Netscape";
project.Profile.UserAgentAppCodeName = "Mozilla";
project.Profile.UserAgentProduct = "Gecko";
project.Profile.UserAgentProductSub = "20030107"; // Дата первого релиза браузера. Данное значение является константой.
instance.ShowNavigatorField(ZennoLab.InterfacesLibrary.Enums.Browser.NavigatorField.BuildId);
// Устанавливаем BuildID
instance.SetHeader(ZennoLab.InterfacesLibrary.Enums.Browser.NavigatorField.BuildId, null);
// Устанавливаем Vendor
instance.ShowNavigatorField(ZennoLab.InterfacesLibrary.Enums.Browser.NavigatorField.Vendor);
instance.SetHeader(ZennoLab.InterfacesLibrary.Enums.Browser.NavigatorField.Vendor, "Google Inc.");
// Устанавливаем VendorSub
instance.ShowNavigatorField(ZennoLab.InterfacesLibrary.Enums.Browser.NavigatorField.VendorSub);
instance.SetHeader(ZennoLab.InterfacesLibrary.Enums.Browser.NavigatorField.VendorSub, null);

// OC
project.Profile.UserAgentOsCpu = string.Format("Windows NT {0}{1}", winOC, platformApp);
project.Profile.UserAgentPlatform = platform;
Internet Explorer
Из чего состоит строка?
11 версия: Mozilla/5.0 ([Platform]; Trident/[TridentVersion]; rv:[IEVersion]) like Gecko
Более ранние версии: Mozilla/5.0 (compatible; MSIE [IEVersion]; [Platform]; Trident/[TridentVersion])

  • [IEVersion] — Указывает версию IE. В последних версиях браузера GeckoVersion такая же, как FirefoxVersion.
  • Trident/[TridentVersion] — Идентифицирует версию MSHTML (Trident)
C#:
// Выбираем случайную версию Firefox
string version = Macros.TextProcessing.Spintax("{11|10|9}");

//Формируем набор buildID нашего Firefox (у каждой версии свой) [Идея хранения позаимствована у doc'a, за что ему большая благодарность!]
Dictionary <string, string> buildIDSet = new Dictionary <string, string>();
buildIDSet.Add("11", "7.0");
buildIDSet.Add("10", "6.0");
buildIDSet.Add("9", "5.0");
//buildIDSet.Add("8", "4.0");

// Устанавливаем BuildID
instance.ShowNavigatorField(ZennoLab.InterfacesLibrary.Enums.Browser.NavigatorField.BuildId);
instance.SetHeader(ZennoLab.InterfacesLibrary.Enums.Browser.NavigatorField.BuildId, null);
// Устанавливаем Vendor
instance.ShowNavigatorField(ZennoLab.InterfacesLibrary.Enums.Browser.NavigatorField.Vendor);
instance.SetHeader(ZennoLab.InterfacesLibrary.Enums.Browser.NavigatorField.Vendor, null);
// Устанавливаем VendorSub
instance.ShowNavigatorField(ZennoLab.InterfacesLibrary.Enums.Browser.NavigatorField.VendorSub);
instance.SetHeader(ZennoLab.InterfacesLibrary.Enums.Browser.NavigatorField.VendorSub, null);

// Формируем набор версий операционной системы Windows
// 6.0 Windows Vista
// 6.1 Windows 7
// 6.2 Windows 8
// 6.3 Windows 8.1
// 10.0 Windows 10
string winOC = Macros.TextProcessing.Spintax("{6.0|6.1|6.2|6.3|10.0}");
string platform = Macros.TextProcessing.Spintax("{Win32|Win64}");

// Определяем "битность" самого приложения
string platformApp = string.Empty;
if(platform=="Win32"){
    platformApp = Macros.TextProcessing.Spintax("{; WOW64|}");
} else {
    platformApp = "; Win64; x64";
}
// Устанавливаем Useragent
if (winOC=="10.0") {
    project.Profile.UserAgent = string.Format("Mozilla/5.0 (Windows NT {0}{1}; Trident/{2}.0; rv:11.0) like Gecko", winOC, platformApp, buildIDSet["11"]);
    project.Profile.UserAgentAppName = "Netscape";
} else {
    project.Profile.UserAgent = string.Format("Mozilla/5.0 (compatible; MSIE {0}.0; Windows NT {1}{2}; Trident/{3}.0)", version, winOC, platformApp, buildIDSet[version]);
    project.Profile.UserAgentAppName = "Microsoft Internet Explorer";
}
project.Profile.UserAgentAppVersion = project.Profile.UserAgent.Replace(@"Mozilla/", "");
project.Profile.UserAgentAppCodeName = "Mozilla";
project.Profile.UserAgentProduct = "Gecko";
project.Profile.UserAgentProductSub = null;

// OC
project.Profile.UserAgentOsCpu = string.Format("Windows NT {0}{1}", winOC, platformApp);
project.Profile.UserAgentPlatform = platform;

Edge
Браузер от компании Microsoft, так же известен как Spartan, пришедший на смену Internet Explorer. Доступен только пользователям Windows 10 (и выше, в будущем), так как является не приложением, а неотъемлемой частью ОС Win 10. Работает на движке EdgeHTML, совместимый с WebKit, именно поэтому в строке useragent фигурирует упоминание AppleWebKit, Chrome и Safari.

Из чего состоит строка?
Mozilla/5.0 ([Platform]) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/[ChromeVersion] Safari/537.36 Edge/[EdgeVersion]
  • [ChromeVersion] — Указывает версию Chrome.
  • Edge/[EdgeVersion] — Идентифицирует версию EdgeHTML

C#:
Random r = new Random();

Tuple<string, string>[] EdgeBuild = {
    Tuple.Create("16.16299", "58.0.3029.110"),
    Tuple.Create("15.15063", "52.0.2743.116"),
    Tuple.Create("14.14393", "51.0.2704.79")
};

int random = r.Next(0, EdgeBuild.Length);

// Формируем набор версий операционной системы Windows
// 10.0 Windows 10
string winOC = "10.0";
string platform = Macros.TextProcessing.Spintax("{Win32|Win64}");

// Определяем "битность" самого приложения
string platformApp = string.Empty;
if(platform=="Win32"){
    platformApp = Macros.TextProcessing.Spintax("{; WOW64|}");
} else {
    platformApp = "; Win64; x64";
}
// Устанавливаем Useragent
//Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299
project.Profile.UserAgent = string.Format("Mozilla/5.0 (Windows NT {0}{1}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/{2} Safari/537.36 Edge/{3}", winOC, platformApp, EdgeBuild[random].Item2, EdgeBuild[random].Item1);
project.Profile.UserAgentAppVersion = project.Profile.UserAgent.Replace(@"Mozilla/", "");
project.Profile.UserAgentAppName = "Netscape";
project.Profile.UserAgentAppCodeName = "Mozilla";
project.Profile.UserAgentProduct = "Gecko";
project.Profile.UserAgentProductSub = "20030107"; // Дата первого релиза браузера. Данное значение является константой.

// Устанавливаем BuildID
instance.ShowNavigatorField(ZennoLab.InterfacesLibrary.Enums.Browser.NavigatorField.BuildId);
instance.SetHeader(ZennoLab.InterfacesLibrary.Enums.Browser.NavigatorField.BuildId, null);
// Устанавливаем Vendor
instance.ShowNavigatorField(ZennoLab.InterfacesLibrary.Enums.Browser.NavigatorField.Vendor);
instance.SetHeader(ZennoLab.InterfacesLibrary.Enums.Browser.NavigatorField.Vendor, null);
// Устанавливаем VendorSub
instance.ShowNavigatorField(ZennoLab.InterfacesLibrary.Enums.Browser.NavigatorField.VendorSub);
instance.SetHeader(ZennoLab.InterfacesLibrary.Enums.Browser.NavigatorField.VendorSub, null);

// OC
project.Profile.UserAgentOsCpu = string.Format("Windows NT {0}{1}", winOC, platformApp);
project.Profile.UserAgentPlatform = platform;
Safari
Последняя версия Safari 5.1.7 под Windows вышла 9 мая 2012 года, более данная платформа не поддерживается.
C#:
Random r = new Random();

Tuple<string, string>[] SafariBuild = {
    Tuple.Create("5.1.7", "534.57.2"),
    Tuple.Create("5.1.5", "534.55.3"),
    Tuple.Create("5.1.4", "534.54.16")
};

int random = r.Next(0, SafariBuild.Length);

// Формируем набор версий операционной системы Windows
// 6.0 Windows Vista
// 6.1 Windows 7
// 6.2 Windows 8
// 6.3 Windows 8.1
// 10.0 Windows 10
string winOC = Macros.TextProcessing.Spintax("{6.0|6.1|6.2|6.3|10.0}");
string platform = Macros.TextProcessing.Spintax("{Win32|Win64}");

// Определяем "битность" самого приложения
string platformApp = string.Empty;
if(platform=="Win32"){
    platformApp = Macros.TextProcessing.Spintax("{; WOW64|}");
} else {
    platformApp = "; Win64; x64";
}
// Устанавливаем Useragent
//Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2
project.Profile.UserAgent = string.Format("Mozilla/5.0 (Windows NT {0}{1}) AppleWebKit/537.36 (KHTML, like Gecko) Version/{2} Safari/{3}", winOC, platformApp, SafariBuild[random].Item1, SafariBuild[random].Item2);
project.Profile.UserAgentAppVersion = project.Profile.UserAgent.Replace(@"Mozilla/", "");
project.Profile.UserAgentAppName = "Netscape";
project.Profile.UserAgentAppCodeName = "Mozilla";
project.Profile.UserAgentProduct = "Gecko";
project.Profile.UserAgentProductSub = "20030107"; // Дата первого релиза браузера. Данное значение является константой.

// Устанавливаем BuildID
instance.ShowNavigatorField(ZennoLab.InterfacesLibrary.Enums.Browser.NavigatorField.BuildId);
instance.SetHeader(ZennoLab.InterfacesLibrary.Enums.Browser.NavigatorField.BuildId, null);
// Устанавливаем Vendor
instance.ShowNavigatorField(ZennoLab.InterfacesLibrary.Enums.Browser.NavigatorField.Vendor);
instance.SetHeader(ZennoLab.InterfacesLibrary.Enums.Browser.NavigatorField.Vendor, "Apple Computer, Inc.");
// Устанавливаем VendorSub
instance.ShowNavigatorField(ZennoLab.InterfacesLibrary.Enums.Browser.NavigatorField.VendorSub);
instance.SetHeader(ZennoLab.InterfacesLibrary.Enums.Browser.NavigatorField.VendorSub, null);

// OC
project.Profile.UserAgentOsCpu = string.Format("Windows NT {0}{1}", winOC, platformApp);
project.Profile.UserAgentPlatform = platform;
Разрешение экрана, глубина и видимая область
Старый код генерации разрешения, глубины и видимой области по прежнему актуален. Найти его Вы можете в первой частью статьи об анонимности, но данное решение было актуально для десктопов.

Сейчас мы поговорим о мобильных устройствах.
Здесь генерация случайного значения уже не подойдет так как каждое устройство имеет определённый набор параметров в данном направлении, а так же режим отображения: альбомная и портретная ориентация.

В последние годы все флагманы на Android имели Full HD разрешение (1080х1920) и QHD (1440х2560). В 2017 году на рынке стали появляться "безрамочные" устройства с нестандартными разрешениями, например:
  • iPhone X: 1125 x 2436px
  • Samsung Galaxy Note 8: 1440x 960px
  • Samsung Galaxy S8: 1440x2960px
  • Sony Xperia XZ Premium: 3840 x 2160px
Спика устройств с разрешениями у меня для Вас нет, к сожалению, но Вы с легкостью можете их подглядеть на сайте любого интернет-магазина.

Далее на что стоит обратить внимание, это ориентация устройства (нет, не сексуальная).


Устанавливается она с помощью Screen.lockOrientation()

JavaScript:
window.screen.lockOrientation("portrait-primary");
Тестирование: http://jsfiddle.net/cowboy/f8h3p/

Набор плагинов
Как скрывать плагины мы научились, а до установки новых так и не добрались - исправляем ситуацию!
В данном примере мы рассмотрим добавления плагина от Adobe Flash.

C#:
List<PluginMimeType> lstMimes = new List<PluginMimeType>();
PluginMimeType mime = new ZennoLab.CommandCenter.PluginMimeType("application/x-shockwave-flash", "Adobe Flash movie", "swf");
lstMimes.Add(mime);
PluginItem plugin = new ZennoLab.CommandCenter.PluginItem("Shockwave Flash", "NPSWF32_28_0_0_126.dll", "Shockwave Flash 28.0 r0", "18.0.0.241", lstMimes);
Тестирование: https://whoer.net/ru

Имя окна
С помощью JS задаётся свойство "window.name", невидимое для пользователя, но доступное для считывания. Оно постоянно для окна в рамках текущей вкладки браузера, даже при открытии в ней новых ссылок, при условии, что новая страница не пересоздаёт это свойство. Как Вы уже догадались, оно может выступать в роли маркера для последующей идентификации.

При работе с новым профилем, закрывайте старую вкладку и создавайте новую.


Или Вы можете переназначить данное свойство через JS-кубик:
JavaScript:
window.name = 'здесь текст'
Но лучше, конечно, придерживаться первого варианта так как он проще в исполнении.
Во втором случае с перензачением Tab name, изначально неизвестно, как именно должна выглядеть строка и проверяется ли она на корректность.

Другое
Язык
Есть две конфигурации: язык пользовательского интерфейса браузера и язык, на котором пользователь предпочитает просматривать веб-страницы, который передаётся в HTTP-заголовке «HTTP_ACCEPT_LANGUAGE». Они часто идентичны, но это не является строгим правилом. Например, итальянский пользователь использует браузер с англоязычным пользовательским интерфейсом, но предпочитает просматривать веб-страницы на итальянском языке.

Данный параметр не ударит по Вашей анонимности, но рекомендуется указывать его корректно. Повторюсь, что различие языков - это скорее косвенный признак низкого приоритета, чем явный.

Когда предпочтения браузера включает в себя несколько языков, назначается q=value (приоритетность) для каждого из них.
Подробнее об языковых приоритетах можете почитать здесь.

Скачать таблицу кодов языка: drive.google.com

C#:
Random r = new Random();
// Формируем набор возможных вариантов Accept-Language
// Здесь присутствует как русский язык, так и иностранный.
// Если необходимо, чтобы выборка была по какому-то определенному признаку - закоментируйте или удалите не нужные строки.
string[] acceptLanguageSet = {
    "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4",
    "ru-RU,ru;q=0.9,en;q=0.8",
    "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3",
    "en-US,en;q=0.5",
    "en-US,en;q=0.8,es;q=0.6",
    "en-US,en;q=0.8,nl;q=0.6,el;q=0.4,de;q=0.2"
};
// Устанавливаем Accept-Language
string acceptLanguage = acceptLanguageSet[r.Next(0, acceptLanguageSet.Length)].ToString();
project.Profile.AcceptLanguage = acceptLanguage;
// Устанавливаем настройки языка
project.Profile.UserAgentBrowserLanguage = acceptLanguage.Substring(0, acceptLanguage.IndexOf(','));
project.Profile.UserAgentLanguage = acceptLanguage.Substring(0, acceptLanguage.IndexOf(','));
Hardware Concurrency
Do Not Track
Touchscreen Type (Touchscreen Support)
Adblock

devicePixelRatio
По данному разделу нет изменений.
Ознакомиться с первой частью статьи об анонимности.

Battery
Данная фукнкция позволяет получить информацию о статусе зарядки от сети или работы от батареи и времени до отключения устройства.
Её истинное предназначение заключалось в предоставлении посетителеям разных версий сайта взависимости от оставшегося заряда девайса, например: отключалось автоматическое воспроизведение видео, а карты становились менее детализированными.

Но за маской создания более энергоэфективных и легкий веб-сайтов, скрывалась и потенциальзая угроза идентификации:
Исследователи из Принстонского университета Стив Инглхард (Steve Engelhard) и Арвинд Нараянан (Arvind Narayanan) опубликовали доклад, в котором рассказали, что при помощи данного API можно отслеживать пользователей, вычислить человека даже после смены IP-адреса, юзерагента и других публичных данных.

Свойство battery устарело и было заменено Navigator.getBattery() в Firefox 50, а из Firefox 52 данная функция и вовсе была удалена .

Итого: включить Battery API, используя 52-й движок невозможно.
Для более старого движка, который используется в ZennoPoster - 45, доступны такие методы:

Отключение. Вариант #1
C#:
// Актуально для 45-го движка
instance.HideNavigatorField(ZennoLab.InterfacesLibrary.Enums.Browser.NavigatorField.Battery);
instance.HideNavigatorField(ZennoLab.InterfacesLibrary.Enums.Browser.NavigatorField.GetBattery);
Отключение. Вариант #2
C#:
// Актуально для 45-го движка
instance.SetBrowserPreference("dom.battery.enabled", false);
Если нужно включить
C#:
// Актуально для 45-го движка
instance.ShowNavigatorField(ZennoLab.InterfacesLibrary.Enums.Browser.NavigatorField.GetBattery);
instance.ShowNavigatorField(ZennoLab.InterfacesLibrary.Enums.Browser.NavigatorField.Battery);
Тестирование: http://pazguille.github.io/demo-battery-api/


Хранилища
Кэш
ETag
По данному разделу нет изменений.
Ознакомиться с первой частью статьи об анонимности.

Last-Modified
В первую очередь Last-Modified нужен для снижения нагрузки на сервер и ускорения индексации страниц сайта. Он сообщает клиенту информацию о последних изменениях страницы. Причём же здесь деаномизация? Спросите Вы.

Его особенность заключается в том, что заголовок не имеет жёсткой привязки к формату, хоть и должен представлять дату, поэтому там может оказаться, всё что угодно, например, выданный Вам идентификатор, но вряд ли этим кто-то будет злоупотреблять. И всё же раз такая вероятность есть, хоть и небольшая, об этом стоит знать.

Избавиться от маркера достаточно просто - очистить кэш.
C#:
// Аналог на кубике находится в "Добавить действие" -> "Браузер" -> "Настройки"
instance.ClearCache(); // Очищаем кэш
Web storage
По данному разделу нет изменений.
Ознакомиться с первой частью статьи об анонимности.

IndexedDB
Теперь Вы можете не только блокировать запись в IndexedDB, но и просто очистить хранилище, а так же подгружать данные IDB под каждый профиль индивидуально. Это хорошие новости т.к. блокировка являлась достаточно специфическим решением т.к. некоторые сайты хранят там важную информацию для корректной работы сайта.

C#:
// Аналог на кубике находится в "Добавить действие" -> "Браузер" -> "Настройки"
instance.ClearCache(); // Очищаем кэш, а вместе с ним и IndexedDB
Сохраняя профиль, Вы можете установить галочку на "Сохранять IndexedDB" и данные хранилищ теперь никогда не перемешаются.


Индивидуальное хранение данных IndexedDB, реализуется через метод instance.SaveIndexedDb
C#:
string nameIDB = project.Variables["profile"].Value; // Название для файла с IndexedDB. В проекте необходимо создать переменную с названием profile, либо заменить на свою.
instance.SaveIndexedDb(string.Format(@"{0}{1}.db", project.Path, nameIDB)); // Сохранит в папке с шаблоном

// Загрузка данных хранилища IndexedDB
//instance.LoadIndexedDb(string.Format(@"{0}{1}.db", project.Path, nameIDB));
Тестирование: http://demo.techbrij.com/1042/HTML5-IndexedDB-demo.php

Куки (Web cookies)
По данному разделу нет изменений.
Ознакомиться с первой частью статьи об анонимности.

Super Cookie
LSO Cookies
По данному разделу нет изменений.
Ознакомиться с первой частью статьи об анонимности.

Evercookies / Zombie Cookie
По данному разделу нет изменений.
Ознакомиться с первой частью статьи об анонимности.

Изолированное хранилище Silverlight
Silverlight имеет много общего с Adobe Flash, только в отличие от флеша настройки приватности тут никак не завязаны на браузере, поэтому даже при тотальной очистке куков и кеша, сохраненные данные в Isolated Storage Silverlight, все равно останутся.

Хранилище является общим для всех окон браузера и профилей, установленных на одной машине.
Популярность хранения идентификаторов в IS кране сомнительная, но раз такая возможность есть - рассмотрим.

Изолированное хранилище располагается здесь:
  • C:\Users\%Имя пользователя%\AppData\LocalLow\Microsoft\Silverlight\is\
Если у Вас такой папки нет - напишите об этом в комментариях к данной теме, дополним.
Данный код удаляет все данные из Isolated Storage.
C#:
string isolaledStorage = Path.Combine(string.Format(@"{0}Low", Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)), @"Microsoft\Silverlight\is");
DirectoryInfo dirInfo = new DirectoryInfo(isolaledStorage);

if (Directory.Exists(isolaledStorage)) {
    foreach (FileInfo file in dirInfo.GetFiles()) file.Delete();
    foreach (DirectoryInfo subDirectory in dirInfo.GetDirectories()) subDirectory.Delete(true);

    return "Isolated Storage Silverlight - Очищено!";
}
else {
    return "Isolated Storage Silverlight - Каталог не найден!";
}
HSTS Super cookies (HTTP Strict Transport Security)
В прошлой части статьи мы блокировали файл SiteSecurityServiceState.txt для записи, в котором хранились записи HSTS Super cookies, но в новых версиях ZennoPoster, начиная с 5.11.30, мы можем управлять ими встроенными методами, которые позволяют очищать, сохранять и загружать.

Поэтому прошлый метод уже неактуален, HSTS Super cookies очищаются вообще с обычными куками.
C#:
// Аналог на кубике находится в "Добавить действие" -> "Браузер" -> "Настройки"
instance.ClearCookie(); // Очищаем куки
Так же есть возможность их сохранить при необходимости в профиль, а после загрузить.


Тестирование: http://www.radicalresearch.co.uk/lab/hstssupercookies


Связь и местоположение
⦿ IP адрес (Прокси)
В прошлом выпуске мы поговорили о типах прокси и данных, которые они передают.
Но задумывались ли Вы об их происхождении и как это может влиять на работу?

Происхождение прокси
Чёткого разделения нет, всё условно и субъективно :-)
  • Серверные
  • Живые (Residential)
  • Мобильные
Серверные прокси - это те, которые были подняты на выделенных серверах хостинг компаний.
Живые (Residential) - вот, например, Ваш реальный IP адрес за которым Вы сейчас находитесь относится как раз к этой категории. То есть это адреса полученные от интернет-провайдера, а не дата-центра. Как правило цены на них гораздо выше.
Мобильные - 3G\4G прокси, поднятые на модемах или специальном оборудовании. Их особенность заключается в том, что у оператора мобильной связи всего в наличии несколько тысяч IP адресов, а абонентов - миллионы, и за одним IP адресом может находится несколько сотен человек. Улавливаете мысль?

Сервисы не банят такие IP адреса (могут, конечно, но никто делать это не будет) т.к. такие действия отсекают огромную часть аудитории, а не конкретного пользователя. У мобильных проксей этакий карт-бланш на спамность, но это не значит, что Вы сможете стрелять с двух рук, как Макс Пейн, - Ваши аккаунты по-прежнему могут забанить.

Так же их можно отнести к категории Живые (Residential).

Принадлежность IP адреса к жилому или корпоративному сектору определяется по графе "Хоста" и "Названию провайдера", которые легко можно получить, зная только айпишник. Например, здесь: https://2ip.ru/whois/

На определённом кол-во сайтов, кол-во которых будет расти в геометрической прогрессии, отношение к серверным IP адресам крайне скептическое и получить санкции Вы можете при первом лёгком чихе.

DNS (Domain Name System)
По данному разделу нет изменений.
Ознакомиться с первой частью статьи об анонимности.


WebRTC (Утечка IP)
По данному разделу нет изменений.
Ознакомиться с первой частью статьи об анонимности.


Flash (утечка IP)
Если у Вас включён Flash, высока вероятность утечки Вашего реального IP адреса.
Чтобы этого избежать, необходимо его отключить, как это предлагалось ранее, либо запретить подобного рода запросы к нашей системе.

Для этого нам необходимо будет подправить файл конфигурации mms.cfg, который находится здесь:
  • Windows (32Bit): \System32\Macromed\ Flash\
  • Windows (64Bit): C:\Windows\SysWOW64\Macromed \ Flash \

Пропишите в конце строку и сохраните файл:
C#:
DisableSockets=1
Тестирование: https://2ip.ru/privacy/

Геолокация
По данному разделу нет изменений.
Ознакомиться с первой частью статьи об анонимности.

Таймзона
По данному разделу нет изменений.
Ознакомиться с первой частью статьи об анонимности.


Отпечатки
WebGL
К сожалению, эмулировать отпечаток WebGL пока не представляется возможным, но я слышал краем уха, что разработка над этим ведётся :-) Остаётся только ждать.

Небольшие изменения прозошли в конфиге нашего браузера с появлением Firefox 52.
Теперь для отключения WebGL, необходимо прописать ещё одну строку:

C#:
instance.SetBrowserPreference("webgl.enable-webgl2", false);
А итоговый вариант должен выглядеть так:
C#:
instance.SetBrowserPreference("webgl.disabled", true);
instance.SetBrowserPreference("webgl.enable-webgl2", false);
instance.SetBrowserPreference("webgl.disable-extensions", true);
instance.SetBrowserPreference("webgl.min_capability_mode", true);
Или же попросту отключить JavaScript:
C#:
// Аналог на кубике находится в "Добавить действие" -> "Браузер" -> "Настройки"
instance.UseJavaScripts = false; // Отключает JS
Так же хочу поделиться интересным наблюдением по данному направлению: отпечаток WebGL всех Macbook и iPhone одной модулей - одинаковый ;-)

Тестирование: https://browserleaks.com/webgl

Fingerprint Canvas
По данному разделу нет изменений.
Ознакомиться с первой частью статьи об анонимности.

Интересное:
https://bugzilla.mozilla.org/show_bug.cgi?id=967895

Mozilla Firefox запретит отслеживать пользователей через Canvas, начиная с 58-ой версии браузера.

Browser Fingerprint
По данному разделу нет изменений.
Ознакомиться с первой частью статьи об анонимности.

⦿ AudioContext Fingerprint
Теперь не нужно мучить настройки звуковой карты, в последних версиях ZennoPoster появилась поддержка эмуляции аудио-отпечатка.
Всё, что от Вас требуется, это добавить и выполнить соответствующий кубик.


Тестирование: https://audiofingerprint.openwpm.com/

⦿ Системные шрифты (Fonts Fingerprint)
В первой части статьи мы рассмотрели вариант физического добавления и удаления шрифтов в операционной системе через C# код. С тех пор в ZennoPoster появился удобный метод, но работает он только для JavaScript.

Flash по-прежнему может получить весь список шрифтов в Вашей системе. Я рекомендую отключать Flash / Java / Silverlight ещё на старте проекта, если эти технологии не требуются для корректной работы сайта с которым Вы взаимодействуете. Но если вдруг Вам нужен Flash, но доступ к шрифтам Вы давать не хотите - есть выход.

Adobe Flash можно запретить доступ к системной папке с шрифтами.
Для этого нам необходимо будет подправить файл конфигурации mms.cfg, который находится здесь:
  • Windows (32Bit): \System32\Macromed\Flash\
  • Windows (64Bit): C:\Windows\SysWOW64\Macromed \Flash\

Пропишите в конце строку и сохраните файл:
Код:
DisableDeviceFontEnumeration = 1
⦿ Firefox Resources Reader
Схема resource:// - это список встроенных файлов Firefox, которые содержат настройки браузера по умолчанию.
Проблема в том, что часть этой информации доступна не только изнутри, но и сайтам, к которым подключается браузер.
Сайту может стать известна следующая информация:
  • Настоящая платформа, на которой запущен браузер.
  • Язык по умолчанию
  • Данные о сборке
  • Данные и контрольная суммы элементов: firefox.js, firefox-branding.js, firefox-l10n.js, webide-prefs.js, greprefs.js, services-sync.js
  • И другие данные
Данная уязвимость исправлена разработчиками Mozilla Firefox в 57 версии, но ZennoPoster на данный момент работает с 45 и 52 движком. Поэтому нам придется разбираться с этим самостоятельно, но решения пока нет.

На более ранних версия Firefox, можно использовать расширение, которое решает вопрос с утечкой ресурсов:
https://addons.mozilla.org/en-US/firefox/addon/no-resource-uri-leak/

Но в ZP подгрузить мы его не можем. Пытался адаптировать JS скрипт расширения под ZennoPoster, но не хватило знаний.
Подключайтесь, друзья! :-)

Пока что, единственное решение - это отключить JavaScript.
C#:
// Аналог на кубике находится в "Добавить действие" -> "Браузер" -> "Настройки"
instance.UseJavaScripts = false; // Отключает JS
Тестирование: https://browserleaks.com/firefox

⦿ WebRTC (Камера, Микрофон)


⦿ ClientRect
getClientRects позволяет получить точное положение и размер пикселя DOM-элемента. В зависимости от разрешения, конфигурации шрифта и множества других параметров результаты getClientRects будут уникальными, что позволяет достаточно точно идентифицировать пользователя.

Воспользуемся эмуляцией:
Код:
instance.ClientRectWorkMode = ZennoLab.InterfacesLibrary.Enums.Browser.ClientRectMode.Emulate;
instance.ClientRectSeed = "";
Тестирование: https://browserleaks.com/rects

⦿ Ubercookies
Это своего рода улучшенная версия Evercookie (Zombie Cookie), разница лишь в том, что Ubercookie ничего не сохраняет. Он использует Javascript API для создания отпечатка Вашего оборудования и браузера:
  • AudioContext Fingerprint
  • ClientRect
Мы уже знакомы с данными методами и способами их эмуляции, а это значит, что нам не составит труда изменить этот fingerprint.
Для этого необходимо выполнить код эмуляции одного или двух методов, описанных выше, для изменения конечного хэша.

Тестирование: http://ubercookie.robinlinus.com/

⦿ IP Stack fingerprint \ Passive OS Fingerprint
В различных операционных системах используются отличные друг от друга методы реализации стэка TCP/IP, что позволяет с большой долей вероятности вычислить, какой ОС был сформирован сетевой пакет. Так как данный метод подразумевает только наблюдение за сетевым трафиком без отправки каких-либо запросов, такой метод фингерпринта называют пассивным.

При работе без прокси, мы можем ограничить подобную сетевую активность через Firewall. Точных настроек я подскажу, как не являюсь системным администратором, но для таких же зелёных как я в этом вопросе есть простое решение, например, Symantec Enpoint Protection. Прописывает необходимые правила из коробки.

И результатом такой идентификации будет "???"


Если же Вы работаете с проксями или эмулируете какое-либо устройство, отличное от десктопа, данный метод идентификации способен доставить немало хлопот. Под проверку попадает исходящее соединение от хоста т.е. от машины, где запущен прокси-сервер, а это значит выдать себя за пользователя Windows будет сложнее т.к. серверные прокси чаще всего поднимаются на Linux'e, а Residential выдадут хаотичный и неконтролируемый результат.

Это плохо:



Какие есть решения?
Поднять свои прокси по красоте с блекджеком и файрвольными-куртизанками
Покупать прокси у селлеров, где предоставляется услуга смены отпечатка операционной системы, либо его блокировка.

К сожалению, я не подкован по первому вопросу, поэтому я остановился на втором варианте.
Через пару часов поисков в моей таблице сравнений был всего один сервис :D больше никто таких услуг не предоставляет.
  • Airsocks.in (борцы с реферальными ссылками могут выдохнуть :-))

На прокси можно повесить любой слепок операционной системы: Windows, Android, Linux, Mac OS и т.д.
Делается это через службу поддержки.

Это хорошо:


Продолжу изучать данную тему.

Тестирование: https://whoer.net/ru

P.S. Продолжение и обновление статьи в дальнейшем будет выходить вне конкурса. Не очень удобно ссылаться из одного места в другое, а несколько раз дублировать одно и тоже - не комильфо. Скомпилирую и буду вести тему в одном месте.
 

Для запуска проектов требуется программа ZennoPoster.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...

Для того чтобы запустить шаблон, откройте программу ZennoPoster. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.

Последнее редактирование:

Danny

Client
Регистрация
29.09.2014
Сообщения
703
Благодарностей
151
Баллы
43
Отличная статья! )
Большое спасибо!

Донесение материала на высоте! )
 

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
15 457
Благодарностей
3 785
Баллы
113
Класс! :ay: Буду пользователям советовать)
 

Lestat

Client
Регистрация
02.02.2016
Сообщения
10
Благодарностей
7
Баллы
3
Однозначно +1 голос в голосовании!
 

AgentRassilok

Известная личность
Регистрация
08.11.2016
Сообщения
1 273
Благодарностей
449
Баллы
83
Очень сильно
 

kuppyc

Client
Регистрация
13.06.2015
Сообщения
21
Благодарностей
1
Баллы
3
При работе где нужна анонимность, как выглядит работа ? Мы берем и применяем весь комплекс анонимности, или ищем все ловушки сайта перебирая каждый параметр описанный в курсе ?
 

Redsmokky

Client
Регистрация
06.10.2015
Сообщения
221
Благодарностей
90
Баллы
28
Как всегда на высоте :ay:
 

vladinvest

Client
Регистрация
29.05.2016
Сообщения
50
Благодарностей
6
Баллы
8
Класс :ay: С самого начала конкурса ждал. Как всегда, все на высшем уровне.
 

Risk

Client
Регистрация
26.08.2016
Сообщения
73
Благодарностей
25
Баллы
18
Спасибо за статью, очень технически интересная!
 

vadim4ukr

Client
Регистрация
10.06.2016
Сообщения
164
Благодарностей
29
Баллы
28
Очень полезно, спасибо!
 

deonisii

Client
Регистрация
23.03.2012
Сообщения
89
Благодарностей
13
Баллы
8
А, что если в "Windows (64Bit): C:\Windows\SysWOW64\Macromed \Flash\" нет папки "Macromed"
 

Zoron

Client
Регистрация
24.09.2014
Сообщения
85
Благодарностей
16
Баллы
8
Ура дождались, думаю большинство голосов твои. Особенно за подборочку юзерагентов
 
  • Спасибо
Реакции: Animal

Animal

Client
Регистрация
15.06.2016
Сообщения
703
Благодарностей
120
Баллы
43
Гугл уже занервничал))
Отличная работа, будем внедрять в шаблоны.

Есть две конфигурации: язык пользовательского интерфейса браузера и язык, на котором пользователь предпочитает просматривать веб-страницы, который передаётся в HTTP-заголовке «HTTP_ACCEPT_LANGUAGE». Они часто идентичны, но это не является строгим правилом. Например, итальянский пользователь использует браузер с англоязычным пользовательским интерфейсом, но предпочитает просматривать веб-страницы на итальянском языке.

Данный параметр не ударит по Вашей анонимности, но рекомендуется указывать его корректно. Повторюсь, что различие языков - это скорее косвенный признак низкого приоритета, чем явный.
С такой трактовкой не согласен, сервисы все таки ругаются на разницу языков:
Снимок.PNG

Т.е., мне сервис прямым текстом говорит, что я шифруюсь из-за языковой разницы и снимает с меня -20% анонимности.
Провайдер украинский, язык системы и браузера русский.
 

Animal

Client
Регистрация
15.06.2016
Сообщения
703
Благодарностей
120
Баллы
43
Кстати, за юзерагенты отдельное спасибо, избавил многих людей от конкретного гемора.
 

nicanil

Client
Регистрация
06.03.2016
Сообщения
270
Благодарностей
279
Баллы
63
Спасибо за статью. Во всю использую генератор юзер-агентов с первой статьи и заметил одну неудобную вещь: когда выходит новая версия браузера я добавлял версию и buildId в словарь buildIDSet и иногда забывал добавлять версию в первую строку, где они случайным образом выбираются. Из-за этого получалось, что добавленные элементы никогда не выбирались. Чтоб это исправить немного модифицировал код:
C#:
// Удаляем или комментируем строку.
// string version = Macros.TextProcessing.Spintax("{49|50|51|52|52.5.0|52.5.2|53|54|55|56|56.0.1|56.0.2|57}");


// Сразу после комментария "// Устанавливаем BuildID", пишем следующий код.
// Собираем все ключи buildIDSet [версии браузера] в список.
List<string> browser_versions = buildIDSet.Keys.ToList();
Random rand = new Random();
// Выбираем случайную версию.
string version = browser_versions[rand.Next(browser_versions.Count)];
И ещё одно, заметил только что. Даже если версия браузера 52.5.2, то в строке юзер-агента должно отображаться 52.0. Текущий же код отобразит - 52.5.2.0.
Для себя это исправил следующим кодом, который стоит добавить после комментария // Устанавливаем Useragent (либо же удалить из словаря buildIDSet все версии, которые содержат подверсии)
C#:
// Если у выбранной версии есть подверсии, оставляем только основную.
if (version.Contains("."))
    version = version.Split('.')[0];
 
  • Спасибо
Реакции: ZennoNoob

Zoron

Client
Регистрация
24.09.2014
Сообщения
85
Благодарностей
16
Баллы
8
Гугл уже занервничал))
Отличная работа, будем внедрять в шаблоны.


С такой трактовкой не согласен, сервисы все таки ругаются на разницу языков:
Посмотреть вложение 25751
Т.е., мне сервис прямым текстом говорит, что я шифруюсь из-за языковой разницы и снимает с меня -20% анонимности.
Провайдер украинский, язык системы и браузера русский.
Это точно, знаю достоверно, многие фрод системы на это смотрят
 

Animal

Client
Регистрация
15.06.2016
Сообщения
703
Благодарностей
120
Баллы
43
Это точно, знаю достоверно, многие фрод системы на это смотрят
Лично я тестировал на фейсбуке, вероятность блока весьма ОГРОМНАЯ. Сейчас временно сижу на Русских прокси.
 

Mahno

Client
Регистрация
16.05.2015
Сообщения
379
Благодарностей
77
Баллы
28
пища для мозга дана, пойдем курить. WebGL исправьте, с сегодняшним билдом вроде вопрос решен
 

Zoron

Client
Регистрация
24.09.2014
Сообщения
85
Благодарностей
16
Баллы
8
@ibred , может знаешь как еще подменять такой параметр как Useragent (extra http headers), по нему на данный момент еще палится зенка, если подставлять все параметры хрома. В реальном хроме этот параметр определяется как: Chrome or Opera а в зенке как Firefox?
 

airsocks

Client
Регистрация
09.04.2017
Сообщения
235
Благодарностей
17
Баллы
18
Через пару часов поисков в моей таблице сравнений был всего один сервис :D больше никто таких услуг не предоставляет.
  • Airsocks.in (борцы с реферальными ссылками могут выдохнуть :-))
На прокси можно повесить любой слепок операционной системы: Windows, Android, Linux, Mac OS и т.д.
Делается это через службу поддержки.
Спасибо за упоминание, действительно мало кто знает и может это делать.
В сочетании со всеми вышеописанными факторами, очень удачно идет фарминг аккаунтов Facebook.
 

Vass

Client
Регистрация
03.02.2014
Сообщения
80
Благодарностей
11
Баллы
8
Отличная статья. Мобильный прокси отличные от айросокс.
 
  • Спасибо
Реакции: Animal

Sanekk

Client
Регистрация
24.06.2016
Сообщения
654
Благодарностей
240
Баллы
43
Крутая статья,очень много интересного,плюсану однозначно :bu:
 

ibred

Administrator
Команда форума
Регистрация
04.04.2015
Сообщения
2 630
Благодарностей
2 016
Баллы
113
Отличная статья! )
Большое спасибо!
Донесение материала на высоте! )
Класс! :ay: Буду пользователям советовать)
Однозначно +1 голос в голосовании!
шикарная и главное очень подробная подача материала. Бери и внедряй. Спасибо!
Как всегда на высоте :ay:
Класс :ay: С самого начала конкурса ждал. Как всегда, все на высшем уровне.
+1 голос на голосовании от меня)
Спасибо за статью, очень технически интересная!
Очень полезно, спасибо!
Ура дождались, думаю большинство голосов твои. Особенно за подборочку юзерагентов
Крутая статья,очень много интересного,плюсану однозначно :bu:
Отличная статья. Мобильный прокси отличные от айросокс.
Крутая статья,очень много интересного,плюсану однозначно :bu:
Спасибо! :-)
 

ibred

Administrator
Команда форума
Регистрация
04.04.2015
Сообщения
2 630
Благодарностей
2 016
Баллы
113
А, что если в "Windows (64Bit): C:\Windows\SysWOW64\Macromed \Flash\" нет папки "Macromed"
Попробуйте воспользоваться поиском файла mms.cfg на жестком диске.
И отпишитесь по результату, пожалуйста.

у меня нету такой папки
Попробуйте найти папку на жёстком диске по ключевому слову Silverlight.
И отпишитесь по результату, пожалуйста.

При работе где нужна анонимность, как выглядит работа ? Мы берем и применяем весь комплекс анонимности, или ищем все ловушки сайта перебирая каждый параметр описанный в курсе ?
Если применить все приёмы сразу, то потом Вы не сядите в лужу, когда сайт введет новый способ идентификации.
Но не всегда имеет смысл так заморачиваться - мелкие сайты не осуществляют такое кол-во проверок.

С такой трактовкой не согласен, сервисы все таки ругаются на разницу языков:
Посмотреть вложение 25751
Т.е., мне сервис прямым текстом говорит, что я шифруюсь из-за языковой разницы и снимает с меня -20% анонимности.
Провайдер украинский, язык системы и браузера русский.
Лично я тестировал на фейсбуке, вероятность блока весьма ОГРОМНАЯ. Сейчас временно сижу на Русских прокси.
Это точно, знаю достоверно, многие фрод системы на это смотрят
Я могу сделать такой же сервис проверки и снимать за это 90%, но это же не будет означать что параметр действительно имеет такой вес :-)
И уверены ли Вы, что вероятность бана повышалась именно из-за языкового несоответствия? Как проводился тест?

Вероятно, есть сайты, где такая провека является одной из самых приоритетных. Да и как я уже писал ранее в сообщениях к первой части статьи - каждый сайт сам определяет важность того или инного параметра в принятии решения о бане. Но, чтобы только на основании языков раздавали лещей, тем более Facebook - не верю :-)

Кстати, за юзерагенты отдельное спасибо, избавил многих людей от конкретного гемора.
Да, я и сам преследовал такую цель - избавиться от списков useragent'о, чтобы их не таскать за собой вместе с шаблоном.
Будет ещё удобнее, если это дело будет работать из коробки в ZennoPoster :ah:

Спасибо за статью. Во всю использую генератор юзер-агентов с первой статьи и заметил одну неудобную вещь: когда выходит новая версия браузера я добавлял версию и buildId в словарь buildIDSet и иногда забывал добавлять версию в первую строку, где они случайным образом выбираются. Из-за этого получалось, что добавленные элементы никогда не выбирались. Чтоб это исправить немного модифицировал код
Спасибо за отзыв!
По поводу кода: не доглядел, благодарю за наблюдательность :-) Перепишу код чуть позже, сейчас не могу исправить статью по техническим причинам.

пища для мозга дана, пойдем курить. WebGL исправьте, с сегодняшним билдом вроде вопрос решен
Да, новость чудесная! Но не могу изменить статью пока что.

@ibred , может знаешь как еще подменять такой параметр как Useragent (extra http headers), по нему на данный момент еще палится зенка, если подставлять все параметры хрома. В реальном хроме этот параметр определяется как: Chrome or Opera а в зенке как Firefox?
Скиньте, пожалуйста, сайт, где проверяется данный параметр.
Поиск результатов не дал.

Спасибо за упоминание, действительно мало кто знает и может это делать.
В сочетании со всеми вышеописанными факторами, очень удачно идет фарминг аккаунтов Facebook.
Вам спасибо за такой качественный сервис :-)

Чем они отличаются от обычных?
Об этом написано в разделе IP адрес (прокси) -> Происхождение
Если вкратце, Airsocks - это мобильные 4G прокси, которым не страшны баны (или же к ним применятся менее суровые ограничения). Смена IP на Ваших аккаунтов не будет напрягать сервисы т.к. это нормально, у абонентов мобильной связи часто меняется адрес (при обрыве связи, например). И не менее важное - возможность эмуляции OS fingerprint.
 

Animal

Client
Регистрация
15.06.2016
Сообщения
703
Благодарностей
120
Баллы
43
Я могу сделать такой же сервис проверки и снимать за это 90%, но это же не будет означать что параметр действительно имеет такой вес :-)
И уверены ли Вы, что вероятность бана повышалась именно из-за языкового несоответствия? Как проводился тест?
Не может фейсбук отправлять акки в блок на мобильных прокси более чем на 50%. На днях буду править шаблон, более детально разберусь, тогда будет видно имеет языковая тема какой-то приоритет или нет.
А про значения сервисов так писать конечно не нужно) Думаю они берутся не от фонаря и не просто так. В противном случае с такой формулировкой можно поставить под сомнение практически все, в том числе и первый топик данной темы - но это уже будет полная ересь, настолько скептически ко всему относится.
Лучше "слет" времени при переходе на вкладки пофиксите - будет больше пользы чем сводить счеты со значением сервисов))
 

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