Профили: особенности генерации, проверки, загрузки

Discussion in 'Одиннадцатый конкурс статей' started by LaGir, May 26, 2019.

Tags:
  1. LaGir

    LaGir Client

    Joined:
    Oct 1, 2015
    Messages:
    186
    Likes Received:
    577
    Приветствую всех! :-)

    В этой статье мы рассмотрим создание профилей для своих проектов, особенности их генерации, проверки, загрузки. Также в статью включены пара полезных сниппетов по этой теме.
    Статья рассчитана на «новичков» и «середнячков» в ZennoPoster.


    Кратко и под спойлером о том, что такое профили для самых новичков.
    Профиль представляет собой виртальную личность-пользователя и параметры его браузера, работу которого эмулирует ZennoPoster.

    К личности относятся такие данные, как логин, пароль, имя, фамилия, возраст и т.п., к параметрам браузера - UserAgent, парметры экрана, отпечатки браузера, куки, прокси и т.п.

    С каждым запуском шаблона в ZennoPoster, а также просто с простым запуском ProjectMaker, программа генерирует случайный профиль, который применяется к виртальному браузеру (инстансу).

    Профиль можно сохранить в файл соответствующим кубиком, в результате чего на диске появится файл с расширением ".zpprofile", в котором будут храниться все данные виртальной личности и её параметров браузера.

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

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



    Долгое время ZennoPoster имел "базовую" реализацию профилей, в которой учитывались самые основные параметры и настройки виртуального браузера. Интернет не стоит на месте, и сайты обзаводятся всё более и более мощными отслеживающими и анти-бот системами. Базовой реализации профилей ZennoPoster стало не хватать, в результате чего появились варианты решения этой проблемы в виде замечательной статьи «Анонимность в каждый ZennoPoster» в двух частях от @ibred, а потом и готовых шаблонов Spoofer и SpooferJoiner от @YrKa. Однако, если следовать статьям, нужно было внедрять в свои шаблоны достаточно много кода, и суметь сделать это грамотно и удобно для дальнейшего использования (что без хорошего знания кода, опять же, реализовать проблематично). Готовые шаблоны избавляли от этого, но были платными и имели некоторые свои проблемы и неудобства.

    К счастью, весной 2018 разработчики ZennoPoster выпустили обновление 5.17, в котором представили новую систему генерацию профилей, которая включала почти все вещи, описанные в статье «Анонимность в каждый ZennoPoster». У пользователей появилось решение «из коробки», для использования которого теперь достаточно проставить несколько «галочек».

    Как именно это работает, можно ознакомиться по следующим ссылкам: раз, два.

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

    Рассмотрим создание отдельного шаблона-генератора профилей и сниппета, который будет загружать сгенерированные профили. То есть, по факту, создадим современные аналоги Spoofer и SpooferJoiner.
    Отдельный шаблон-генератор профилей удобен тем, что можно заранее сгенерировать пачку профилей с нужными параметрами. Сниппет загрузки профиля предназначен для загрузки профиля и донастройки второстепенных параметров браузера.


    Для начала просто настроим базовую версию генератора (т.е. только с «галочками») и посмотрим, что будет.

    1. Заходим в статический блок «Профиль», включаем ручной режим на вкладке «Браузер» и включаем все эмуляции.

    1.png

    2. В соседнем блоке «Настройки проекта» желательно сразу ставить «галочку» напротив «Выделенный процесс» (отдельный инстанс под каждый браузерный поток, чтобы не могло быть никаких случайный пересечений между разными инстансами даже в теории).

    2.png

    3. Либо кубиками, либо сниппетом устанавливаем прокси и сохраняем профиль.

    Предварительная установка прокси в инстанс нужна для того, чтобы далее в профиль сохранился сам прокси, а также его данные по часовому поясу, геопозиции и IP в WebRTC (в ином случае, соответственно, эти данные в профиль не попадут).

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

    3.png



    Теперь запустим созданный шаблон в ZennoPoster, в результате чего получим сгенерированный профиль.

    Создадим ещё один шаблон, который будет представлять проект, в котором будет использоваться созданный профиль.

    Помимо непосредственно кода или кубика загрузки профиля рекомендую так же устанавливать прокси, как это делалось в шаблоне-генераторе (только тут после загрузки). Почему – если Вы вдруг начнёте использовать, например, backconnect-прокси с регулярно меняющимся внешним IP, то возможна ситуация, когда данные таймзоны и геопозиции нового IP не будут соответствовать данным старого, сохраненного в профиле (хотя, возможно, в последних версиях ZennoPoster этот момент уже учитывается автоматом).

    4.png


    После загрузки профиля нужно проверить, всё ли правильно у нас эмулируется. Существует достаточно много сайтов для этих целей, лично я предпочитаю проверять по следующим 3, в большинстве случаев этого вполне достаточно.
    http://f.vision/
    https://whatleaks.com/
    https://whoer.net/

    У каждого из таких сайтов есть свои особенности и свои косяки, поэтому ограничиваться проверкой по одному точно не стоит.


    По «f.vision» обнаружились следующие проблемы.

    1. DNS определяются рабочей машины, а не DNS прокси.
    2. В WebRTC обнаружился какой-то левый IP, который не является ни IP прокси, ни локальным IP, сгенерированным Zenno.
    3. Параметры экрана (Screen) - рабочая область в ProjectMaker оказалась больше, чем сгенерированная Zenno.

    5.png


    Далее, по «whatleaks».

    1. DNS также определяются рабочей машины, а не DNS прокси.
    2. В WebRTC установлено всё правильно (и IP прокси, и локальный IP, сгенерированный Zenno) – сайт ругается чисто на то, что лучше выключать WebRTC.
    3. Passive OS Fingerprint (операционная система, на которой поднят прокси) не соответствует Browser Useragent (операционной системе, которая эмулируется в профиле).

    6.png


    И по «whoer».

    1. Всё та же проблема с DNS.
    2. Не включён DoNotTrack.
    3. Включён Flash.

    7.png


    Помимо того, что подсвечивают ошибками сами сайты, крайне рекомендую проверять конкретные параметры отпечатков браузера. Открываем в ленте «Текущий профиль», вкладку «Профиль», и сравниваем значения с теми, что показывают сайты.

    Впрочем, этим заниматься стоит главным образом сразу после перехода на новую версию ZennoPoster (особенно, если меняется первое или второе число в названии версии), так как бывает, что в обновах что-нибудь ломается.

    8.png



    В итоге, проверив профиль на 3 сайтах, имеем 6 возможных проблем самой простой версии генератора профилей.


    1. DNS.

    Скрыть DNS можно следующей строчкой C#-кода:

    Code (CSharp):
    1. instance.SetBrowserPreference("network.proxy.socks_remote_dns", true);
    2. WebRTC.

    Лично я предпочитаю не поручать Zenno установку IP-адресов в WebRTC по следующим причинам:
    1) в случае использования backconnect-прокси с регулярно меняющимся внешним IP – при смене в WebRTC может остаться старый IP, что дискредитирует бота в глазах сайта;
    2) обычно меня не совсем устраивают диапазоны локальных адресов, которые использует Zenno.

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

    Code (CSharp):
    1. // Установка локального IP в WebRTC
    2. string ipLocal = "192.168.{0}.{1}";
    3. ipLocal = String.Format(ipLocal, Global.Classes.rnd.Next(2), Global.Classes.rnd.Next(2, 255));
    4. // 1-й параметр - локальный IPv4, 2-й - IPv6, 3-й - внешний IPv4, 4-й - режим работы WebRTC
    5. instance.SetWebRTCAdresses(ipLocal, null, null, ZennoLab.InterfacesLibrary.Enums.Browser.WebRTCMode.Emulate);

    3. Параметры экрана (Screen).

    Данная проблема по большей части касалась только PM, так как именно там по умолчанию есть расхождение между сгенерированным рабочим экраном и реальной рабочей областью в PM. Тем не менее, отладка в основном производится в PM, и лучше сразу позаботиться об этом (да и мало ли, вдруг однажды и в ZP забагует).

    Рабочая область задаётся с помощью метода SetWindowSize. В последних версиях ZP он как раз стал нормально работать в ProjectMaker.

    Code (CSharp):
    1. instance.SetWindowSize(project.Profile.AvailScreenWidth, project.Profile.AvailScreenHeight);

    4. Passive OS Fingerprint

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

    1) найти провайдера, который поднимает прокси на нужной ОС;
    2) найти провайдера, который предоставляет услуги эмуляции нужной ОС;
    3) поднять свои прокси на нужной ОС или сэмулировав нужную ОС (нужны соответствующие знания).

    А так, по моему опыту, этот отпечаток далеко не критический, и в большинстве задач можно закрывать глаза (траст с истории и кукисов куда важнее в наше время, и почти всегда перекрывает подобные вещи).

    5. DoNotTrack

    На мой взгляд, спорный вопрос насчёт того, стоит его включать или нет. Лучше смотреть конкретные случаи, включён ли обычно DoNotTrack у той ЦА, на основе которой Вы генерируете профили. Тем не менее, код включения занесём в шаблон.

    Code (CSharp):
    1. instance.SetHeader(ZennoLab.InterfacesLibrary.Enums.Browser.NavigatorField.DoNotTrack, "1");
    6. Flash

    Тоже спорный параметр. С одной стороны, его принято отключать в Zenno, с другой – не помню, когда Zenno палил IP или что-то ещё через Flash. Плюс, отключение Flash автоматом означает отключение сэмулированных плагинов – что, в свою очередь, тоже может быть триггером для вызова подозрений. В общем, на какой стул садиться – решать Вам. :-)

    9.png

    Code (CSharp):
    1. instance.UsePlugins = false;


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

    Единственное, «f.vision» ругается на DNS, показывая при этом DNS прокси, и совпадение страны прокси со страной DNS. У этого сайта всё ещё встречаются баги (что, впрочем, разработчики не отрицают), поэтому надо сверять с другими. Тем не менее, лично мне этот сайт нравится больше других уже хотя бы тем, что не цепляет счётчики Яндекс.Метрики и Гугл Аналитики, как это делает тот же «whoer». :(

    10.png

    Ещё небольшая оговорка – код генерации локального IP лучше вставлять в шаблон-генератор, чтобы IP сохранялся непосредственно в профиле и брался из него, а не генерировался заново с каждой новой загрузкой профиля.



    Как итог имеем, что с введением системы генерации профилей в ZP 5.17 большая часть эмуляций и отпечатков хорошо работает «из коробки», но в то же время, некоторые мелочи всё равно надо учитывать и дописывать.


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

    Например, для одной задачи нам нужно подготовить 100 хромовских профилей с версиями 71-73, для другой задачи – 200 профилей FF с версией 63. Вместо того, чтобы иметь возможность вынести эти параметры во входные настройки:

    11.png

    Приходится каждый раз лезть в PM и изменять там вручную. Очень надеюсь, что разработчики что-нибудь придумают, как добавить такую возможность в новых версиях ZP (по крайней мере у меня есть проекты, в которых это востребовано, в тикеты писал, очень жду).



    В заключение хотелось бы привести пару сниппетов безопасного сохранения и загрузки профилей.

    Бывают случаи, когда профиль может тупо не загрузиться из файла, и в работе шаблона использоваться новый автопрофиль, сгенерированный Zenno при старте шаблона. Если такой профиль сохранить обычным способом после работы, то он перезапишет старый профиль, тем самым ряд сохраненных данных и куки от предыдущих сеансов будут потеряны.

    Также при выполнении шаблонов при определенных условиях текущий профиль может «слететь» (например, падение инстанса или некорректная его перезагрузка), в результате, опять же, куки и много данные могут быть потеряны.

    Причины таких исходов могут быть разные, как неверная логика, кривой код или баги новых билдов самой ZP (в отношении профилей лично я встречался со всеми этими вещами). Поэтому для более-менее серьёзных браузерных шаблонов – на мой взгляд, такие сниппеты очень полезны.


    Загрузка профиля

    Code (CSharp):
    1. // Путь к профилю
    2. string profilePath = Path.Combine(project.Path, "1.zpprofile");
    3. // Создавать ли отстутствующие переменные
    4. bool createVars = false;
    5.  
    6. #region Load
    7. Action<string,bool> Load = (path, createVariables) =>
    8. {
    9.     string oldUA = project.Profile.UserAgent;
    10.     string oldName = project.Profile.Name;
    11.     string oldEmail = project.Profile.Email;
    12.     int oldLength = project.Profile.ToString().Length;
    13.  
    14.     project.Profile.Load(path, createVariables);
    15.  
    16.     string newUA = project.Profile.UserAgent;
    17.     string newName = project.Profile.Name;
    18.     string newEmail = project.Profile.Email;
    19.     int newLength = project.Profile.ToString().Length;
    20.  
    21.     if (oldUA == newUA && oldName == newName && oldLength == newLength && oldEmail == newEmail)
    22.     {
    23.         throw new Exception("Ошибка загрузки профиля. Путь: " + path);
    24.     }
    25. };
    26. #endregion
    27.  
    28. // Загрузка профиля
    29. Load(profilePath, createVars);
    Сохранение профиля

    Code (CSharp):
    1. // Путь к профилю
    2. string profilePath = Path.Combine(project.Path, "2.zpprofile");
    3. // Переменные проекта, которые нужно сохранить
    4. var saveVars = new[] { "var1", "var2" };
    5.  
    6. #region Save
    7. Action<string,string[]> Save = (path, saveVariables) =>
    8. {
    9.     if (File.Exists(path))
    10.     {
    11.         string profilePathAlt = profilePath.Replace(".zpprofile", "_ForCheck.zpprofile");
    12.  
    13.         // Сохранение копии профиля
    14.         project.Profile.Save(profilePathAlt, true, true, true, true, true, true, true, true, true, saveVariables);
    15.  
    16.         var infoOld = new FileInfo(profilePath);
    17.         var infoNew = new FileInfo(profilePathAlt);
    18.         // Допустимая погрешность в байтах
    19.         long diff = 5 * 1024;
    20.  
    21.         // Если новый файл тот же или больше, с учётом допустимой погрешности
    22.         if (infoNew.Length >= infoOld.Length - diff)
    23.         {
    24.             // Сохранение профиля и удаление копии
    25.             project.Profile.Save(profilePath, true, true, true, true, true, true, true, true, true, saveVariables);
    26.             File.Delete(profilePathAlt);
    27.         }
    28.         else
    29.         {
    30.             string text = String.Format("Обнаружено уменьшение размера профиля в байтах. Старый размер: {0} Новый размер: {1}. Путь: {2}",
    31.                 infoOld.Length, infoNew.Length, profilePath);
    32.             throw new Exception(text);
    33.         }
    34.     }
    35.     else
    36.     {
    37.         project.Profile.Save(path, true, true, true, true, true, true, true, true, true, saveVariables);
    38.     }
    39. };
    40. #endregion
    41.  
    42. // Сохранение профиля
    43. Save(profilePath, saveVars);

    На этом всё, спасибо за внимание. :-)



    PS: демо-шаблоны, которые использовались для написания статьи, прикреплены к теме.

    PPS: На всякий случай отмечу, что целью статьи не является показать, как создавать наиболее "защищённые" профили с системой генерации Zenno 5.17+. Цель - показать базовые моменты создания профилей относительно высокого уровня защищенности на основе свежей системы генерации, при минимуме усилий и без случайных фейлов из-за незнания каких-либо базовых нюансов.
    Для тех, кого волнует именно задача максимализации всех возможных эмуляций - рекомендую заниматься более глубоким аудитом и допиливанием профилей, с учётом как статей на форуме, так и в других источниках в интернете.
     

    Attached Files:

    Andr123, Matemat, gnomza75 and 46 others like this.
  2. Rooter85

    Rooter85 Client

    Joined:
    Jul 4, 2015
    Messages:
    187
    Likes Received:
    35
    Спасибо за статью. Нравятся твои статьи, как по темам так и по подаче материала. Очень рад что ты участвуешь в этом конкурсе. Тема супер!
     
    LaGir likes this.
  3. tony11111

    tony11111 Client

    Joined:
    Nov 29, 2017
    Messages:
    21
    Likes Received:
    10
    Отличное дополнение к статьям по анонимности, упомянутым выше. + готовые шаблончики
     
    LaGir likes this.
  4. strcn

    strcn Client

    Joined:
    Jul 8, 2017
    Messages:
    17
    Likes Received:
    7
    Все собрано в одном месте, приятно видеть. Надеюсь разработчики примут твои замечания к сведению. За статью ставлю похвалу!
     
    lzlmrf and LaGir like this.
  5. che100

    che100 Client

    Joined:
    Apr 18, 2017
    Messages:
    92
    Likes Received:
    18
    В общем и целом статья отличная.
    С webrtc у зенки беда, адреса зачастую берутся такие что мама не горюй, в реальной жизни фиг встретишь, адреса какого то лешего она не сохраняет в профиль, запустил профиль по новой запалил контору.
    С этим не согласен, считаю что он критичный и важнее чем история.
     
    LaGir likes this.
  6. Nike59

    Nike59 Client

    Joined:
    Aug 5, 2011
    Messages:
    47
    Likes Received:
    23
    Отличная статья - затронуты очень важные, местами критичные для анонимности вопросы. Высокий технический уровень и практические способы реализации заложенных в потенциал ZennoPoster решений, связанных с повышением анонимности. Мой респект автору.
     
    LaGir and specialist like this.
  7. Rooter85

    Rooter85 Client

    Joined:
    Jul 4, 2015
    Messages:
    187
    Likes Received:
    35
    1. Можно ли использовать профили сгенерированные с firefox использовать в шаблонах chrome и наоборот? И как в этом случае отразится на анонимности?
    2. В шаблонах на firefox профили создаем только с браузерами firefox? С хромом так же, edge и safari не используем?
    3. Можно ли при создании новых профилей использовать историю из нагулянных профилей? Если да то что на это влияет, должны ли быть одинаковыми user-agent, разрешение экрана или другие параметры. Профили есть разные с аккаунтами в соцсетях и gmail и без аккаунтов.
     
    Last edited: May 28, 2019
  8. Rooter85

    Rooter85 Client

    Joined:
    Jul 4, 2015
    Messages:
    187
    Likes Received:
    35
    В снипете сохранения профиля есть проверка на размер файла. У меня профиль не сохраняется из-за уменьшения размера "Старый размер: 2227068 Новый размер: 197267". Профиль был загружен с помощью снипета загрузки, затем был заход на whoer.net (убедился что анонимность 100%) и при выполнении снипета сохранения произошла ошибка. До этого профиль последний раз использовался 1 мая. Всегда ли, при использовании профиля, должен увеличиваться его размер?
     
  9. Сибиряк

    Сибиряк Client

    Joined:
    Jul 12, 2014
    Messages:
    319
    Likes Received:
    91
    Хорошая статья! Проголосовал.
     
    LaGir likes this.
  10. LaGir

    LaGir Client

    Joined:
    Oct 1, 2015
    Messages:
    186
    Likes Received:
    577
    В идеале да, использовать профили на базе юзерагентов Firefox только c движком FF, на базе юзерагентов Chrome - с движком Chrome. Несоответствие движка и юзерагента (и прочих зависимых параметров) со стороны сайтов может палиться, на форуме этот момент не раз обсуждался.
    Соответственно, если подразумевается генерация профилей под оба эти движки, и в генератор профилей, и в основной шаблон стоит добавлять либо кубик запуска нужно движка, либо аналогичный код.
    По остальным браузерам (Edge и Safari) - да, стоит использовать только в тех случаях, когда для каких-то специфических задач нужны именно они, а не FF иили Chrome.
    Да, если подразумевается эмуляция одного и того же пользователя, который заходит с разных синхронизированных устройств (в ином случае не знаю для чего это может понадобиться, так как системы аналитики уже дали уникальный айдишник профилю).
    В этом случае создании нового профиля с историей старого дело нормальное, если же цели другие - надо рассматривать в частном случае, тут всё зависит от деталей и конкретных задач использования таких профилей.

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

    IndexedDb

    Code (CSharp):
    1. // Сохранить в файл
    2. instance.SaveIndexedDb("путь");
    3. // Сохранить в массив байтов
    4. byte[] indexedDB = instance.SaveIndexedDb();
    5.  
    6. // Загрузить из файла
    7. instance.LoadIndexedDb("путь");
    8. // Загрузить из массива байтов
    9. instance.LoadIndexedDb(indexedDB);
    Cookies

    Code (CSharp):
    1. // Сохранить в файл
    2. instance.SaveCookie("путь");
    3. // Сохранить в массив байтов
    4. byte[] cookies = instance.SaveCookie();
    5. // Загрузить из файла
    6. instance.LoadCookie("путь");
    7. // Загрузить из массива байтов
    8. instance.LoadCookie(cookies);
    Шрифты

    Code (CSharp):
    1. // Сохранить в файл
    2. instance.SaveFonts("путь");
    3. // Сохранить в массив байтов
    4. byte[] fonts = instance.SaveFonts();
    5. // Загрузить из файла
    6. instance.LoadFonts("путь");
    7. // Загрузить из массива байтов
    8. instance.LoadFonts(fonts);
    LocalStorage

    Code (CSharp):
    1. // Сохранить в файл
    2. instance.SaveLocalStorage("путь");
    3. // Сохранить в массив байтов
    4. byte[] localStorage = instance.SaveLocalStorage();
    5. // Загрузить из файла
    6. instance.LoadLocalStorage("путь");
    7. // Загрузить из массива байтов
    8. instance.LoadLocalStorage(localStorage);
    Плагины

    Code (CSharp):
    1. // Сохранить в файл
    2. instance.SavePlugins("путь");
    3. // Сохранить в массив байтов
    4. byte[] plugins = instance.SavePlugins();
    5. // Загрузить из файла
    6. instance.LoadPlugins("путь");
    7. // Загрузить из массива байтов
    8. instance.LoadPlugins(plugins);
    HSTS Super Cookie

    Code (CSharp):
    1. // Сохранить в файл
    2. instance.SaveSuperCookie("путь");
    3. // Сохранить в массив байтов
    4. byte[] superCookie = instance.SaveSuperCookie();
    5. // Загрузить из файла
    6. instance.LoadSuperCookie("путь");
    7. // Загрузить из массива байтов
    8. instance.LoadSuperCookie(superCookie);
    Настройки WebRTC

    Code (CSharp):
    1. // Сохранить в файл
    2. instance.SaveWebRTCDevices("путь");
    3. // Сохранить в массив байтов
    4. byte[] webRTCDevices = instance.SaveWebRTCDevices();
    5. // Загрузить из файла
    6. instance.LoadWebRTCDevices("путь");
    7. // Загрузить из массива байтов
    8. instance.LoadWebRTCDevices(webRTCDevices);

    Соответственно, если нужно подтянуть куки или иные данные из старого профиля в новый, делаем следующее:
    1. Загружаем старый профиль.
    2. Сохраняем нужные данные в отдельные файлы с помощью кода сохранения из под спойлера.
    3. Загружаем новый профиль.
    4. Загружаем ранее сохраненные данные с помощью кода загрузки из под спойлера.
    5. Сохраняем новый профиль.
    В идеале далее хорошо тестим, считают ли целевые сайты новый профиль тем же человеком, просто зашедшим с другого синхронизированного устройства.


    Вообще да, размер может уменьшаться, но обычно незначительно, для этого в коде учитывается погрешность (можно менять на своё усмотрение).

    2019-05-29_01-32-30.png

    Но тут он довольно много "потерял", что странно. Нужно распаковать оба профиля как архив (старый остался с тем же названием, новый должен был сохраниться рядом, с названием "ИмяПрофиля_ForCheck.zpprofile"), глянуть что изменилось в куках, менялись ли остальные данные профили.
     
    Nike59, strcn, sw_sw and 2 others like this.
  11. Master4eg

    Master4eg Client

    Joined:
    Apr 6, 2016
    Messages:
    167
    Likes Received:
    19
    Годная статья, жаль сам никак не мог раньше эти проблемы решить, сильно намучался и не не одну сотню слил впустую на капчи из-за палева DNS и WebRTC
     
    LaGir likes this.
  12. sirJay

    sirJay Client

    Joined:
    Jul 22, 2018
    Messages:
    27
    Likes Received:
    1
    Респект за статью!
    Но можете подсказать, я уже как почти год не могу найти ответ на вопрос по поводу использования WebRTC для мобильных проксей.
    Многие утверждают, что нужно выключать WebRTC для мобильных проксей из-за возможности смены IP во время сессии.
    Но почему это проблема, если локальный IP поставить как в вашем примере, например, 192.168.1.100? Да, локальный IP останется тот же, но ведь здесь нет никакого палева, потому что это локальный.
    И что если эмулировать новый IP в WebRTC во время сессии при смене IP (вызывая каждый раз функцию проверки на смену IP) – здесь могут быть факторы палева?
     
    LaGir likes this.
  13. LaGir

    LaGir Client

    Joined:
    Oct 1, 2015
    Messages:
    186
    Likes Received:
    577
    На мой взгляд, если функционал Zenno позволяет отображать в WebRTC только локальный IP, который не меняется, то почему бы этим не пользоваться. Насчёт тех, кто за выключение - возможно, они используют другой софт (где управлять адресами WebRTC нельзя, как в Zenno), или не знают про эту особенность зеннки. Лично я таких людей не встречал, поэтому больше особо сказать нечего. Чисто на своём опыте каких-либо проблем от одного локального IP в WebRTC не наблюдал.
    Если известен точный момент смены внешнего IP, или же провайдер предоставляет возможность менять IP только тогда, когда нам нужно (например, соответствующим запросом в их API) - то да, можно немного заморочиться и сделать вставку в WebRTC внешнего IP при каждой его смене. В иных случаях, когда момент смены от нас прямым образом не зависит и точно по времени неизвестен - и нормально сделать своебвременную вставку в WebRTC довольно сложно, и шанс палева остаётся.
    В первом случае также нужно учитывать, что прокси может банально упасть и смениться на другой раньше плановой смены или нашего запроса на смену. В этом случае, опять же, у нас протечка, если вставляли внешний IP в WebRTC.
     
  14. FastSpace

    FastSpace Client

    Joined:
    Apr 5, 2018
    Messages:
    170
    Likes Received:
    31
    По поводу DNS. Его НЕ нужно выключать, нужно просто покупать НОРМАЛЬНЫЕ прокси.
    1)Если речь идет о IPv4 - то только резидентные: такие прокси стоят дорого. Около 200р за штуку. Можно также покупать их пакетами со сменой каждый 5 минут, но это не подойдет если нужно фармить аккаунт в соц. сети долго.
    Только для регистраций может.
    2)Мобильные прокси - там все ок с DNS, Passive OS.

    По поводу WEB RTC на мобильных прокси. Возьми свой смартфон и зайди на сайты где показывает свой DNS. С эмуляцией там все сложней, каждый браузер ведет себя по разному.
     
  15. Rooter85

    Rooter85 Client

    Joined:
    Jul 4, 2015
    Messages:
    187
    Likes Received:
    35
    Поднимаю прокси сам, используя модемы и free proxy. Всегда отключал WEB RTC, потому что при проверке через whoer.net был постоянный локальный IP, для моих нужд профили с отключенным WEB RTC подходили но хотелось бы делать эмуляцию полностью с использованием WEB RTC. Благодаря @LaGir эта задача решена, за что ему большое спасибо.
     
    LaGir likes this.
  16. FastSpace

    FastSpace Client

    Joined:
    Apr 5, 2018
    Messages:
    170
    Likes Received:
    31
    На моем смартфоне в хроме в разделе Web Rtc написано "Включено" в разделе IP (N\A).
    Яндекс браузер тоже самое
    Firefox отдает локальный IP
    В опере выключено.
     
  17. LaGir

    LaGir Client

    Joined:
    Oct 1, 2015
    Messages:
    186
    Likes Received:
    577
    У меня ощущение, что вы не совсем поняли текст про DNS, хотя может я и ошибаюсь. Есть DNS рабочей машины, есть есть DNS прокси. DNS рабочей машины не должны видеть сайты, только DNS прокси.
    Есть прокси, которые по умолчанию скрывают DNS рабочей машины, есть те, которые нет. Для последних и нужен код из статьи. Использовать его, разумеется, никто не заставляет, можно сразу покупать прокси первого типа.
    В контексте темы совет смотреть со смартфона некорректен. Смотреть со смартфона - значит рассматривать работу с эмуляцией мобильных устройств. А это уже область эмуляторов и ZennoDroid, у нас же рассматривается только десктоп.

    Но вот использовать смартфон в качестве модема, и смотреть с рабочей машины - думаю, уже более подходящий пример для проверки, как там дела с мобильными прокси.
    Собственно, из интереса это и сделал.
    2019-05-31_21-00-07.png

    Заодно посмотрел с обычного интернета.
    2019-05-31_21-18-35.png

    А также с прокси одного популярного провайдера мобильных прокси.
    2019-05-31_21-37-06.png

    Это данные с f.vision.
    Wharleaks и whoer во всех 3 случаях в WebRTC позывали N/A. :ap: Думаю, выводов уже можно прилично сделать.)
     
  18. FastSpace

    FastSpace Client

    Joined:
    Apr 5, 2018
    Messages:
    170
    Likes Received:
    31
    Это что за прокси такие лажовые, которые DNS твоей рабочей машины показывают? Паблик чтоле? :D
    Сейчас большинство проксей платных идут как серверные и там показывают DNS не совпадающий с DNS прокси (Но DNS не твоей машины). Это уже тоже прошлый век, надо покупать прокси где DNS прокси четко совпадает с DNS той машины и где еще желательно установлен Passive OS FingerPrint Windows.
     
  19. LaGir

    LaGir Client

    Joined:
    Oct 1, 2015
    Messages:
    186
    Likes Received:
    577
    Вновь призываю вдумчивее читать написанное - речь о том, что отображаться должен DNS прокси, а не какой-либо иной DNS, не важно твоя машина это или сервер с прокси.

    Насчёт прошлого века сильное заявление. По своему опыту работы во множестве проектов на Zenno в качестве разработчика, для ряда задач (и просто объемов по аккам) довольно сложно найти хорошие прокси иного типа, при этом не выложив за них баснословные суммы.
    Хотя, допускаю, возможно мы имеем дело с гуру по части прокси, который точно знает когда и какие прокси лучше использовать, со всеми подробностями. Если дело обстоит так, как насчёт поучаствовать с этой темой в будущем конкурсе статей (или просто во внеконкурсном разделе)? :-) Думаю, многие форумчане высоко оценят такой материал.
     
    lzlmrf likes this.
  20. FastSpace

    FastSpace Client

    Joined:
    Apr 5, 2018
    Messages:
    170
    Likes Received:
    31
    Ну так для чтобы отображался DNS прокси надо выложить денешку :-) Ну или свой трафик иметь на свой ботнет....
    [​IMG]
    Покупаю такие прокси по 200р - 250р за штуку.
    Раньше тоже думал какие дураки берут прокси по такой цене)) Окупаются легко, с ними дороги открыты в любое место.
     
  21. da1ver

    da1ver Client

    Joined:
    Dec 22, 2012
    Messages:
    26
    Likes Received:
    11
    Так же советовал бы почитать и поработать с системами WAF, IDS и подобных, а также почитать про работу протоколов проксирования...
    Впринцыпе пасив ос детекшен не так уж и важен, так как максимум что можно получить - снижение траста доверия но уж не как ето не будет важным правилом для банов - максимум в легкое подозрение кинут... Притом многие делают ошибку когда в вебртц ставят ип с локальных подсетей, а в пасивку гасят индентификацию от ямобилки или сетевух простых пк - вот такое очень вероятно может послужить подозрением на бан... Тоже и про прокси, смысл переплачивать, когда достаточно чтоб на проксяк в пасив ос детекшене был линукс, а дальше в вебртц локальный ип и публичные днс гугла или клаудфрая - тем самым для систем обнаружений вы наоборот будете похожы на самого обычного пользователя который выходит в нет за роутером (п.с. тут больше зависит от того с каких блоков ип прокси, если они выданы рипом под ас датацентров - то увы как бы они хорошо небыли настроены и какой-бы небыла емуляция, большинство админов идс, где следят за качеством трафа, выдадут сразу маячок на среднее подозрение)

    П.с.: чисто в информативных целях писал, намерения кого-то потролить/обидеть нету!
     
    LaGir likes this.
  22. da1ver

    da1ver Client

    Joined:
    Dec 22, 2012
    Messages:
    26
    Likes Received:
    11
    П.с.с.: статья толковая!
     
    LaGir likes this.
  23. Hazar

    Hazar Client

    Joined:
    Dec 5, 2018
    Messages:
    69
    Likes Received:
    8
    Я нагуливаю профиля.
    Скажите а для чего мне ставить галочку, сохранять прокси, при сохранении профиля?
    Если прокси у меня всё равно меняются при каждом входе, и при каждом пересохранении профиля... И когда профиль понадобиться и я пущу его в дело, прокси всё равно будут другими в этот момент...
    Это мне не понятно.
     
  24. sw_sw

    sw_sw Client

    Joined:
    Feb 24, 2017
    Messages:
    47
    Likes Received:
    12
    С каких пор роутер влияет на TCP FP ? =)

    Не вводите в заблуждение людей.

    У обычного юзера никакого линукса и disabled webrtc просто не может быть.

    Это ПАЛЕВО.
     
    che100 likes this.
  25. sw_sw

    sw_sw Client

    Joined:
    Feb 24, 2017
    Messages:
    47
    Likes Received:
    12
    А, и да, google dns у обычного ушастого хоум юзера, а тем более юзера мобилки - анбеливбл )

    +100500 к палеву.
     
    che100 likes this.
  26. GeGold

    GeGold Client

    Joined:
    Sep 28, 2015
    Messages:
    329
    Likes Received:
    128
    Проголосовал за твою статью не читая её. Вчера понадобилась эмуляция и здесь это всё описано - как знал ,что статья полезна , спасибо
     
  27. che100

    che100 Client

    Joined:
    Apr 18, 2017
    Messages:
    92
    Likes Received:
    18
    Наглое заявление заявление, вы наверно в гугле и фейсбуке по 3 года отработали по профилю.
     
  28. da1ver

    da1ver Client

    Joined:
    Dec 22, 2012
    Messages:
    26
    Likes Received:
    11
    Хотябы бегло прочитайте про вафы и про айдиси и пообщайтесь с людьми которые их настраивают для больших провайдеров/корпораций, и Ваши +100500 к палеву уйдут в 0, увы мировая практика рекомендует считать паблик днс доверительными.

    Ну а фразу "у обычного юзера никакого линукса не может быть" я даже и коментировать не буду, поверьте много людей (обычные юзеры) используют юниксподобные операционные системы ...
     
  29. da1ver

    da1ver Client

    Joined:
    Dec 22, 2012
    Messages:
    26
    Likes Received:
    11
    Ах да и я не говорил про disable webrtc от слова "вообще"
     
  30. che100

    che100 Client

    Joined:
    Apr 18, 2017
    Messages:
    92
    Likes Received:
    18
    Ушёл читать про вафы, айдиси и звонить сис админу Газпрома. Ну всё теперь-то заживём!
     

Пользователи просматривающие тему (Пользователей: 0, Гостей: 0)