
Юрій
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

Savely
18.05.2018
14:11:37

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
Зачем вообще изначально Данил это добавил?

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

Savely
18.05.2018
14:17:17

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).

Savely
18.05.2018
14:19:26
нет же вроде

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

Viktor
18.05.2018
14:20:41

S
18.05.2018
14:20:43
поэтому тот пост и написала
но могу только сказать, что ключ никакой специальный не подбирается
рандомный массив байт генерится и все
который делится дальше на ключ и на IV

Viktor
18.05.2018
14:21:02

Google

Savely
18.05.2018
14:21:06


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

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);

S
18.05.2018
14:24:14
окей, почти рандомно:D

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
о