@botoid

Страница 2967 из 4042
Юрій
18.05.2018
14:07:52
а как реализовать сам процес?

Savely
18.05.2018
14:08:06
Я думаю вам нужна классическая FSM.

https://en.wikipedia.org/wiki/Finite-state_machine

Грубо говоря в базе для каждого юзера нужно хранить состояние.

Google
Savely
18.05.2018
14:09:21
Каждый раз когда он что-то новое пишет, нужно обращаться к базе, узнавать состояние и на основе этого реагировать.

Ещё есть простой способ с ForceReply, но он не гибкий и его почти всегда не хватает.

Viktor
18.05.2018
14:10:50
Орешкин твой месседж первым в одном чатике спалил))
Я ещё с Lonami и Даниилом обсуждал их obfuscated2 и mtproto proxy :)

Savely
18.05.2018
14:11:37
Я ещё с Lonami и Даниилом обсуждал их obfuscated2 и mtproto proxy :)
Я помню этот Obfuscated2 был списке протоколов Madeline года два назад ещё.

Viktor
18.05.2018
14:11:48
Да, он давно уже есть

Savely
18.05.2018
14:11:50
Но это по-моему всё равно немного другое.

Viktor
18.05.2018
14:12:25
Это просто mtproto сервер который слушает ТОЛЬКО obfuscated2

Ну и пересылает

Savely
18.05.2018
14:13:50
Это просто mtproto сервер который слушает ТОЛЬКО obfuscated2
Но я так и не понял. Выходит команда телеги юзанула идею Данила? Потому что никаких Obfuscated2 в клиентах телеги по-моему никогда не было.

Зачем вообще изначально Данил это добавил?

Viktor
18.05.2018
14:14:08
Нет

Obfuscated2 это один из протоколов, который mtproto использует в “transport component”

Google
Savely
18.05.2018
14:17:19
забавно

Viktor
18.05.2018
14:17:35
Более того, ключ всегда подбирается чтобы он не совпал с GET/POST и другими константами, по которым определяется како именно “transport component” клиент использует

Евгений
18.05.2018
14:17:59
https://tjournal.ru/70906-navalnyy-reshil-nauchitsya-programmirovaniyu-na-python-poka-nahoditsya-pod-arestom



Это вам не на ноде клепать прожки

Viktor
18.05.2018
14:18:33
Сук

Savely
18.05.2018
14:18:47
я уж и забыл, что комментарии отображаются частично

Viktor
18.05.2018
14:18:53
Obfuscated2 это один из протоколов, который mtproto использует в “transport component”
The protocol is designed for access to a server API from applications running on mobile devices. It must be emphasized that a web browser is not such an application. The protocol is subdivided into three virtually independent components: High-level component (API query language): defines the method whereby API queries and responses are converted to binary messages. Cryptographic (authorization) layer: defines the method by which messages are encrypted prior to being transmitted through the transport protocol. Transport component: defines the method for the client and the server to transmit messages over some other existing network protocol (such as HTTP, HTTPS, TCP, UDP).

Viktor
18.05.2018
14:19:48
А откуда он взялся у Даниила по твоему?

Savely
18.05.2018
14:20:03
ну я подумал он просто реализовал неиспользуемую фичу)

Viktor
18.05.2018
14:20:07
Есть http/https и целый зоопарк TCP (4 штуки)

S
18.05.2018
14:20:41
Я ещё с Lonami и Даниилом обсуждал их obfuscated2 и mtproto proxy :)
ну я-то не читала все это, сама к этому пришла, изучив исходники

Viktor
18.05.2018
14:20:41
ну я подумал он просто реализовал неиспользуемую фичу)
Откуда бы он узнал про протокол, имплементированный на сервер сайде, если бы он не использовался ни на одном клиенте?

S
18.05.2018
14:20:43
поэтому тот пост и написала

но могу только сказать, что ключ никакой специальный не подбирается

рандомный массив байт генерится и все

который делится дальше на ключ и на IV

Google
S
18.05.2018
14:21:07
Это где?
для внешней обфускации

Насчет маскировки под TLS я немного слукавил и меня поправили специалисты: Обфускация "anti-DPI" там простая. Генерят на клиенте случайный 32-байтовый ключ и 16-байтовый IV, ими шифруют пакет с AES CTR и отправляют. При этом сами ключ и IV отправляются перед зашифрованной нагрузкой. В итоге, если вы провайдер, вам нужно ВСЕГО ЛИШЬ* брать от каждого исходящего пакета 8-40 байты (ключ) и 40-56 байты (IV), расшифровывать содержимое (64-... байты). В расшифрованном содержимом уже вполне стандартный mtproto-формат, где первые 8 байт — сигнатура авторизационного ключа. Поймали несколько пакетов, где первые 8 байт после расшифровки совпадают — смело вносим конечный адрес в реестр запрещённых ресурсов. *насчёт ВСЕГО ЛИШЬ и почему я вообще об этом открыто говорю, не боясь дать подсказку РКН: сама идея слишком простая, глупая, а защиты-то по сути никакой, но вот только ни у одного провайдера не хватит мощностей каждый пакет расшифровывать с AES-256 и какие-то проверки проводить на предмет наличия там Telegram.
вот же мой пост про это

Viktor
18.05.2018
14:21:42
https://github.com/telegramdesktop/tdesktop/blob/f794d8dbd82c344781b10f682c99580b97829a8d/Telegram/SourceFiles/mtproto/connection_tcp.cpp

S
18.05.2018
14:21:50
Какой клиент?
да любой, tdesktop например

Viktor
18.05.2018
14:21:53
Вот например tdesktop

Номер строки отклеился

S
18.05.2018
14:22:24
https://github.com/telegramdesktop/tdesktop/blob/dev/Telegram/SourceFiles/mtproto/connection_tcp.cpp#L308

вот с номером строки)

и чуть выше

if (_protocolSecret.empty()) { bytes::copy(key, from); }

т.е. просто генерят массив из 64 рандомных байт

8-40 байты из него берут под ключ

40-56 байты из него берут под IV

0-8 56-64 хз зачем генерят, не используются

Viktor
18.05.2018
14:23:44
const auto zero = reinterpret_cast<uchar*>(nonce.data()); const auto first = reinterpret_cast<uint32*>(nonce.data()); const auto second = first + 1; const auto reserved01 = 0x000000EFU; const auto reserved11 = 0x44414548U; const auto reserved12 = 0x54534F50U; const auto reserved13 = 0x20544547U; const auto reserved14 = 0x20544547U; const auto reserved15 = 0xEEEEEEEEU; const auto reserved21 = 0x00000000U; do { bytes::set_random(nonce); } while (*zero == reserved01 || *first == reserved11 || *first == reserved12 || *first == reserved13 || *first == reserved14 || *first == reserved15 || *second == reserved21);

Viktor
18.05.2018
14:24:43
Эти reserved — как раз GET/POST и магические числа из «других» tcp

Google
S
18.05.2018
14:24:55
угу, поняла

я проглядела этот кусок

Viktor
18.05.2018
14:25:23
Там ещё get дважды, хех

S
18.05.2018
14:25:49
и реализация странная о.О

ну вот этого подбора

Viktor
18.05.2018
14:26:07
Часто же так делают

Savely
18.05.2018
14:26:30
а этот "джон престон" русский?

S
18.05.2018
14:26:30
ну либо я не очень могу в С++, поэтому мне это кажется костыльным

Viktor
18.05.2018
14:26:53
Когда рандомно генерируют и проверяют, проходит ли проверки

И по кругу

Savely
18.05.2018
14:27:09
мне почему-то казалось, что tdesktop изначально кто-то на стороне пилил и только потом их под крыло официалов взяли

Viktor
18.05.2018
14:27:18
Ну, почти

S
18.05.2018
14:27:28
так вот, было это году в 2014-2015 максимум

Savely
18.05.2018
14:27:49
ну да

Viktor
18.05.2018
14:27:51
Если очень интересно, то можешь покопаться в бинарниках

Savely
18.05.2018
14:28:11
я имел в виду, что основу вроде не русские пилили, ну или мне показалось

Viktor
18.05.2018
14:28:34
У assert есть неприятная особенность — он всегда включает полный путь до файла

Google
Viktor
18.05.2018
14:28:52
Который иногда содержит /home/$username$

Дальше сам догадаешься и сдеанонишь, если сильно интересно

Savely
18.05.2018
14:29:31
ох, мне тоже иногда лень ребейзить гит))

Viktor
18.05.2018
14:29:46
Ват?

Savely
18.05.2018
14:30:00
ну чтобы затереть какие-нибудь креды

Viktor
18.05.2018
14:30:05
Это причём

Savely
18.05.2018
14:30:06
бывает случайно коммичу

Viktor
18.05.2018
14:30:25
Ну, не важно :)

Savely
18.05.2018
14:30:29
ну я так понял автор закоммитил папку хоум

с твоих слов же

S
18.05.2018
14:30:34
в бинарнике же

Viktor
18.05.2018
14:30:37
Опсек проколы бывают у многих

Savely
18.05.2018
14:30:49
бля, неправильно сказал

Viktor
18.05.2018
14:30:53
В бинарнике полные пути файлов исходников

Savely
18.05.2018
14:30:56
имел в виду не папку, а просто путь где-то спалил

Viktor
18.05.2018
14:31:37
Открыто говорю потому что Джон сам сказал, что уже особо не парится по этому поводу

S
18.05.2018
14:31:52
о

Страница 2967 из 4042