Рега mail.ru на запросеках и без номера
Подготовка
Проведём поверхностный прочек запросов реги (развед очка)
Уу, блять, кукисы какие-то, хотя.. вроде, выглядят не страшно.
Спойлер: самое интересное подчеркнуто зелененьким, но я тогда этого еще не знал. Как я был наивен, думая что все будет просто..
Так, для апрува мы шлем фингер, что уже немного неприятно, но не прям страшна.
Почекаем, что шлет запрос апрува капчи.
Ладненько, начинаем потихоньку собирать запрос на регу, чекаем от куда берутся куки.
Не удивительно, что нужен запрос самой страницы реги.
Ну, запрос пикселя тоже звучит банально..
Так нахуй, а вот это уже интересно. Запрос VID кукиса тянется из ответа на запрос статки, но..
Этот запрос получает эту куку в ответ на другой запрос статки, который.. делает то же самое, но с другим запросом статки.
Ну что ж, пройдемся тогда по всем запросекам статки. Сделал скрин, чтоб видно было сколько их в bts.
Начинаем чекать отличия, уже видим меняется id
, добавляется opt
.
Передается список ids
и новый параметр e
(тип события, наверное)
Параметры detect
и e
не выглядят страшно, в отличие от nt
и забегая вперед скажу, что это вполне оправдано.
Опять поменялись знакомые id
и opt
.
Опять id
и опять e
, но уже с другим значением.
О, поменялся e
, похоже действительно реагирует на event.
Хэдеры тоже до кучи буду передавать и парсить с фингера, раз фингер тоже нужен при реге.
Сначала может показаться: нахуя ты все это рассказываешь?
Наверное, можно просто без всяких куков хуюков там обойтись?
Ну что ж, проведем банальную провер очку. Блочим домен, на который сайт шлет запросы статки.
Перезагружаю страницу, ввожу в форму те же самые данные и рега проходит
Отлично, думаю теперь базару зиро.
Чудесно, с введением покончено.
Ёбань с плясками начинается
Начинаем чекать со стека вызовов первого запроса.
Ставлю брекпоинт на xb. Да, номер строки поменялся, тк я отформатировал код.
Перезагружаем страницу и ловим запрос.
Пройдемся по стеку вызовов имея на руках данные.
Отлишна, видим что запрос проходит через функцию I, от куда выходит уже сформированным.
Ну, собственно сама наша нужная функция.
Начнем разбор с первого запросека статки
Окей, опять перезагружаю страницу (за время написания софта я делал это ооочень много раз) и начинаю дебажить.
Оки, на вход мы получается передали id
типа задачи и инкрементим какую-то z
с параметром id
через функцию Ba
. Почекаем значения переменных в нашем контексте.
Оки, вполне очевидно, что мы инкрементим "tmr_reqNum"
, получается это глобалка, которая считает номера запросов в статку.
Получается, ранее они объявляют эти переменные, а потом уже юзают.
Проспидраним функцию, раскидав бреки в интересных (на самом деле рандомных) местах.
По итогу получаем что-то вроде этого:
13;id=3118422;u=https://account.mail.ru/signup?from=main_m_touch;st=1669708190882;title=Регистрация;s=1366*768;vp=150*657;touch=0;hds=1;frame=0;flash=;sid=5f81d249a2af34ae;ver=60.3.0;tz=-180/Europe/Moscow;ni=1.1//4g/250/0/;detect=0;lvid=1669667590746:1669710757923:24:74086a4a5cb2695ab8499083f76c0ebb;visible=true;_=0.6545837795068763
Окей, а теперь разберем всю эту хуйню. Где:
u=https://account.mail.ru/signup?from=main_m_touc;
- ссылка на текущую страницу
st=1669708190882;
- время старта загрузки страницы
title=Регистрация;
- заголовок страницы
s=1366*768; и vp=150*657;
- инфа о размере экрана
Судя по замыканию, в k
у нас лежит window.document
, а в l
просто window
Поэтому, для s
дергаем фулл размер страницы
Для vp
чекаем видимую область экрана
touch=0; hds=1; frame=0; flash=;
Не стоит также забывать, что O
у нас это Navigator
sid=5f81d249a2af34ae;
- уник айди
Учтём, что Qa
просто генератор уник строки, по сути, который срабатывает при старте
tz=-180/Europe/Moscow;
- сборная инфа о часовом поясе
Интернационализация (Intl.DateTimeFormat) дока примерчеки и пояснения
ni=1.1//4g/250/0/;
- инфа о интернет соединении
NetworkInformation дока по connection, дока по effectiveType
detect=0;
- добавляется просто там где надо (указано в параметрах вызова функции)
lvid=1669667590746:1669710757923:24:74086a4a5cb2695ab8499083f76c0ebb;
- сборный параметр
tmr_lvidTS
- время старта передачи статки
tmr_lvid
, где Qa
просто генератор уник строки при старте
visible=true;
- добавляется где надо
=0.6545837795068763
- рандом значение
Наверное кто-то мог подумать, что это всё, но..
Второй запросек статки
opts
- добавляется к заданиям, которые имеют айди не "3118422"
Третий запросек статки
Тут вообще нихуя интересного, просто добавляется параметр e
и ids
(айди всех видов запросов статки)
Четвертый запросек статки
На эту штуку (nt
) ушло не мало времени, я не знал вообще как подойти к ней, тк тут большая группа цифр с инфой о загрузке страницы.
По итогу получаем что-то вроде этого:
"/tracker?js=13;id=3118422;u=https://account.mail.ru/signup?from=main_m_touch;st=1669722687102;title=Регистрация;s=1366*768;vp=133*657;touch=0;hds=1;frame=0;flash=;sid=301b4aa8b512f023;ver=60.3.0;tz=-180/Europe/Moscow;nt=1/0/1669722679322/1546/1547///56/172/282/282/610/476/641/1198/3150/1832/7780/7780/7783/2425088/2425088/;ni=0.5//4g/150/0/;detect=0;lvid=1669667590746:1669725855956:27:74086a4a5cb2695ab8499083f76c0ebb;visible=true;_=0.6594543808481805"
detect=0
- добавляется там где надо, но
Он чекает наличие в куках tmr_detect
Из необычного тут только параметр nt
.
Как я их генерировал? Наверное я провел сложный статистический анализ? Или быть может заебенил рандом? Оба варианта и да и нет.
Короче, я насобирал десяток запросов и сидел ручками сравнивал отклонения, высчитывая диапазоны.
На самом деле, тут сложно до чего-то доебаться, загрузка страницы очень сильно может отличаться, тк разная скорость инета, разная нагрузка на комп. Кароче, не доибаца, особенно учитывая что выдаваемый прогой результат в целом "выглядит похоже".
В остальных запросах все банально и там ничего нового или интересного.
Немного особенных параметров
На самом деле, тут онли метрика.
Они подготавливают массив с регулярочками для перебора всех объектов окна с целью прочекать метрики. На скрине ниже код словил яндекс метрику.
Ну а тут виден фулл кусок кода для перебора объектов.
Да, их (особенных параметров) было всего 1.
Кусочек итоговой функции генерации урла - URLGenerator
А теперь про заголовки, отпечаток, прокси и..
Заголовки
sec-ch-ua, да, те самые, которые "можно не передавать, всем на них обычно похуй". Но мне не похуй, поэтому хуярим дальше..
Sec-CH-UA
: имя браузера и основная/значительная версияSec-CH-UA-Mobile
: логическое значение, указывающее мобильное устройствоSec-CH-UA-Platform
: название операционной системы
А вот где они хранятся в отпечатке баса 23.2.2.
Для тех у кого вопрос "шо за хуйня этот ваш defineProperty?" линк на доку
Да, ваще жесть, я дернул инфу регуляркой, выполнил через eval и потом пропарсил нужное.
Статья от гугла с пояснением всей хуйни по этому вопросу
Почему Chrome использует sec-ch-ua: "\"Not\\A;Brand";v="99"?
Отпечаток
Ну, коли есть фингер, будем парсить. Имеем в объекте фингера 3 объекта:
Почти всю хуйню дергаем из attr
в фингере баса.
Прокси и заголовок языка
Я сидел кумекал "как подставлять в фингер и в заголовок гео прокси без левых запросов?", оказалось в бас есть модуль "Часовой пояс".
Тоесть мы можем получить в том числе вот эту инфу:
Парс ютм меток
Вдохновился вот этим куском кода из статьи.
Перенес в бас и чуть переделал под себя.
x-request-id
Во многих запросах был x-request-id - это банальный uuid v4. По сути рандом строка, только с правилами.
Отлично, подготовка окончена
Теперь пройдемся еще раз по ключевым запросам.
Запрос signup
Запрос RS
Запрос countries
Запрос exists
Запрос strength
Запрос signup
Запрос confirm
Про капчу
По сути оно просто передает текущее время в 36 системе исчисления на урлу и фсе, а цепляется капча по идее к куке mrcu
.
Я долго ебался и не мог понять "а какого хуя у меня в бас получается одна строка, а в ноде другая?". Оказалось, дело в округлении, челы из ноды поменяли просто округление, ну а в бас старая нода просто.
Причина - версия движка
Фул инфа: https://github.com/nodejs/node/issues/13858
Я тестил всякие варианты шифрования и дешифрования.
Вот, если кому понадобится перекодировать в float обратно.
https://groups.google.com/g/comp.lang.javascript/c/bPdQPSIXzkI/m/AGTQvk9Yh6IJ
Наверное, по норм схеме нужно было самому написать конвертер с нужным мне округлением, но я просто забил (проебав при этом день на гугление какое-то бессмысленной поеботы).
В целом, получается штука не критичная, если ее как строку не обрабатывать после перекодирования, тк обратно оно ее декодит без проблем.
Немного особенных параметров на запросах реги
Работа с utm
метками была разобрана уже ранее, а тут появляется client
. Сначала я не догадался, но оказалось просто, оно реагирует на ширину видимой области экрана.
Ну собственно пруф - кусок кода, который чекает ширину экрана.
Получение писем
В получении писем тоже не обошлось без проблем задач. В запросах при реге ручками непонятно от куда оно тянуло в кукисы параметр octavius
, благодаря которому страница приходила в приемлемом виде. Просто подставить его не прокатит(работало только для моего хром юа, но ровно такой же фингер я не стал искать и забил, но добавил и на этот случай вытягивание токена)
По-этому, не мудрствуя лукаво, я просто взял то шо было похоже на токен и фсе. К счастью, это он и оказался.
Запрос письма на пк фингере (folder)
Однако, при передаче мобильного redirect_uri
, таки появлялась возможность работать с апи touch.mail.ru
, в котором уже страница приходила нормальная, но токен я парсил отдельным запросом. Отвечу наперед, нет, этот запрос не ворк на куках с пк авториза.
Запрос токена на моб фингере (tokens)
Запрос письма на моб фингере (folders)
Преколы
Листал код, наткнулся, что есть еще и dev
домен, помимо обычного. Но регнуть мыло на него у меня не получилось.
Прогуглил, нашел всего 2 валид ссылки через яндекс, а также авториз в какой-то кабинет вк:
https://es.vkcorporate.com/
https://private.infra.devmail.ru/
https://leaders-prod.devmail.ru/
Помимо этого, были еще всякие заметки и статьи с урлом на дев домен, но это не то.
Вернемся к началу: а можно было проще?
Кароче, оказалось что я долбаеб. Можно было таки обойтись без запросов в статку..
Я, который потратил на это дохуя времени:
Результаты
Тем не менее, все работает, вот результаты:
[[LOGIN]]@[[DOMAIN]]:[[PASSWORD]]:[[TOKEN]]|[[FIRST]]:[[LAST]]|[[DAY]].[[MONTH]].[[YEAR]]|[[PROXY]]|[[PROXY_LANG]]|[[HEADER_UA]]|[[SAVED_COOKIES_BASE64]]
Возможно, по ходу прочтения, у тебя в голове возникал вопрос:
А нахуя вот это вот все? Зачем ты делал вот эту вот всю дичь?