Lineage 2 MSN Messenger -> Discord/Telegram

Mayhem

Последний из атеистов
Участник
Старожил I степени
Сообщения
19
Розыгрыши
0
Репутация
335
Реакции
74
Баллы
875
Демо трансляции протокола MSNP8 в дискорд и обратно. Основа от Escargot + обход SSL в клиенте
 

Вложения

  • 1770429727277.webp
    1770429727277.webp
    656,2 КБ · Просмотры: 205
  • msnp8.mp4
    msnp8.mp4
    3,7 МБ
Выглядит классно, хорошо бы задумку опубликовать то потеряется так и не добравшись к релизу с исходниками.
 
This is quite interesting! Keep it going mate! GL
 
Выглядит классно, хорошо бы задумку опубликовать то потеряется так и не добравшись к релизу с исходниками.
Ты уже умеешь это делать. Просто свяжи это через DLL с API нужного мессенджера. Можно даже создать отдельную вкладку в чате. Для этого даже сервер не понадобится.
PS: Вру сервер понадобится но запусти его на GO или на питон или через любой веб хостинг общаться с апи мессенджера.
 
Кстати , не помню где , вроде на МУ онлайн похожим способом организовали голосовую связь через ТС в игре.

И делалось оно в принципе не так мудрёно. Игроки которые подгружались как видимые для тебя становились и слышимые в тсе.
 
Выглядит классно, хорошо бы задумку опубликовать то потеряется так и не добравшись к релизу с исходниками.

Я извиняюсь. Вроде прикрепил, но почему-то файлы не появились.

Пароль на архив:



В Архиве VS проект для хуков под NWindow.dll и сам питон сервер+мост. Gracia Epilogue (на ХФ сервера/клиента не нашёл :) )

L2 использует стандартный MSNP8 протокол (тот же протокол, что использовал MSN Messenger 5.0, 2003 год).
Клиент идентифицирует себя как:
Код:
CVR 2 0x0409 winnt 6.2 i386 ncsoft 1.0.0 l2chronicle3-kr user@email
После подключения к локальному MSN серверу - команды можно транслировать на что угодно (исходя из ограничений UI). Те-же группы из телеги или сервера дискорда добавлять проблематично. Но свой какой-то локальный чатик, либо квесты исходя из этой системы можно создать.

По идее будет работать со всеми серверами и клиентами от C4 до HFp5. В GoD MSN удалили, т.к. Microsoft отключил сервера. Протокол реализован полностью: авторизация через Passport 1.4 (Tweener), управление контактами (FL/AL/BL/RL), статусы присутствия, переписка через Switchboard-сессии.

Тут есть проблема самой реализации НЦсофтом (либо у меня руки кривые и я просто не до конца разобрался, хотя DLL'ки родные брал, даже с GameGuard и Themida/Winlicence).
1. После первого рукопожатия с MSN-сервером клиент открывает второе TCP-соединение. Адрес для него берётся из переменной в памяти, но эта переменная не инициализирована - порт остаётся 0. Вызов `connect()` на порт 0 всегда фейлится, и вся цепочка авторизации молча умирает. Клиент даже не логирует ошибку.
2. Когда порт пофикшен, клиент доходит до Passport-авторизации. Он стучится по HTTPS на `nexus.passport.com:443` (через hosts-файл перенаправлен на localhost). Но WinINet отклоняет самоподписанный сертификат локального сервера - авторизация снова молча падает.


Фиксы:
1. хук на `connect()` из `ws2_32.dll`. Если видим порт 0 — подменяем адрес на `127.0.0.1:1863`.
2. хук на `HttpSendRequestW()` из `wininet.dll`. Перед каждым запросом вызываем `InternetSetOptionW` с флагами:
- `SECURITY_FLAG_IGNORE_UNKNOWN_CA`
- `SECURITY_FLAG_IGNORE_CERT_CN_INVALID`
- `SECURITY_FLAG_IGNORE_CERT_DATE_INVALID`
- `SECURITY_FLAG_IGNORE_REVOCATION`



Из декомпиляции видно, что NCSoft реализовали полный MSNP8-клиент:

Код:
Исходящие команды (клиент → сервер)

| Команда | Назначение |
|---------|-----------|
| `VER <trid> MSNP8 CVR0` | Согласование версии протокола |
| `CVR <trid> <locale> <os> ncsoft 1.0.0 l2chronicle3-kr <email>` | Идентификация клиента |
| `USR <trid> TWN I <email>` | Начало Tweener-авторизации |
| `USR <trid> TWN S <token>` | Отправка Passport-токена |
| `SYN <trid> <timestamp>` | Синхронизация списка контактов |
| `CHG <trid> <status>` | Смена статуса (NLN, AWY, BSY...) |
| `REA <trid> <email> <name>` | Смена отображаемого имени |
| `ADD <trid> FL/AL/BL/RL <email>` | Добавление контакта в список |
| `CAL <trid> <email>` | Приглашение в Switchboard-сессию |
| `MSG <trid> U/N <length>` | Отправка сообщения |
| `OUT` | Отключение |


Статусы присутствия
Клиент поддерживает все стандартные MSN-статусы и маппит их на строки для игрового UI:
| Код | Строка в игре |
|-----|--------------|
| `NLN` | online |
| `BRB` | berightback |
| `IDL` | idle |
| `AWY` | away |
| `LUN` | lunch |
| `BSY` | busy |
| `PHN` | onthephone |
| `FLN` | offline |
| `HDN` | invisible |


Списки контактов:

Команда `ADD` работает с парами списков:
- Добавить друга: `ADD FL` + `ADD AL` (Forward List + Allow List)
- Заблокировать: `ADD BL` + `ADD RL` (Block List + Reverse List)



Особенности реализации:
- Клиент читает данные из сокета **побайтово** (`recv` с `len=1`)
- Сокет работает в неблокирующем режиме через `WSAAsyncSelect`
- Transaction ID (`trid`) инкрементируется с каждой командой
- Обработка входящих команд идёт через виртуальную таблицу (vtable) — MSG, числовые ошибки и прочие команды диспатчатся в разные обработчики


## Что нужно для работы
1. hosts-файл: `127.0.0.1 nexus.passport.com`
2. *Локальный MSN-сервер на порту 1863 (MSNP8, отвечает OK на USR TWN I)
3. Локальный HTTPS-сервер на порту 443 (Passport 1.4, самоподписанный сертификат)
4. Прокси-DLL `NWindow.dll` с двумя хуками (оригинал переименован в `NWindow_original.dll`)


Если кому-то нужно под Interlude и другие клиенты, то скиньте NWindow.dll или можете сами сделать.

Ещё одна интересная особенность клиента заключается в наличии Key-logger'a, втстроенного в чат. Если сервер PTS, то любое сообщение будет передаватся в том числе и на сервер (минуя MSN сервер). И как я понял, "не отправленные" тоже. Подробностей не приведу, ибо видел только части функции в L2Server.exe. Но выглядит забавно
 

Вложения

Последнее редактирование:
Видео полной реализации протокола MSNP8/9/10/11 и пример работы с оригинальным (чутка патченным) клиентом MSN Messenger 7.5

- Групповые чаты (до 20 человек)
- База данных с возможностью привязки к серверу/сайту/форуму
- Смена ника, "занят/не в сети/невидимка", закладки, папки, звуковые уведомления и прочее.

Так-же пересобрал из хуков в универсальную DLL для любых хроник/клиентов (от С4 до HF). Как получится допилить дискорд и прочие - попробую выложить


P.S. если добавить в конец файла конфига сервера (PTS) LogMsn=true то L2Server.exe принимать и отсылать в LogD всю историю чата, последний будет записывать в папку логов и в базу. Такие дела
 

Вложения

Видео полной реализации протокола MSNP8/9/10/11 и пример работы с оригинальным (чутка патченным) клиентом MSN Messenger 7.5

- Групповые чаты (до 20 человек)
- База данных с возможностью привязки к серверу/сайту/форуму
- Смена ника, "занят/не в сети/невидимка", закладки, папки, звуковые уведомления и прочее.

Так-же пересобрал из хуков в универсальную DLL для любых хроник/клиентов (от С4 до HF). Как получится допилить дискорд и прочие - попробую выложить


P.S. если добавить в конец файла конфига сервера (PTS) LogMsn=true то L2Server.exe принимать и отсылать в LogD всю историю чата, последний будет записывать в папку логов и в базу. Такие дела
супер! с нетерпением буду ждать сурс, как только выложишь - дам обратную связь по тесту на Interlude
 
Финальная версия. В архиве:

- Универсальная dinput8.dll для C4 - HFp5.
Код для MSN есть даже в текущих хрониках (судя по NWindow.dll), только кнопки запуска нема
- Исходники DLL (VS2026)
- MSN Server заточенный под MSNP8 (Escargot форк) на питоне. Работает на 3.11/SQLite
- Прототип переделки целиком под Telegram (группы, 1-1, сообщества). И вроде местами даже работает

Тестил на С4 и Epilogue. Если заведётся на интерлюде - сообщите :)

Пароль:


Telegram версия:


Процесс установки:

1. Проверить своими глазами, лично, дважды - исходники (и тебе хорошо и ко мне вопросов нет).
2. Собрать (или заюзать готовую .dll с архива) и положить в /system/
3. Запустить клиент. (Появятся .ini и .log файлы)
4. Ну хотя бы краем глаза пробежаться по python-файлам MSN-сервера, прежде чем запускать хер знает что, хер знает от кого с админки
5. Запустить PowerShell или cmd от Админа. Запустить python .\run.py (нужно для бинда на 443 порт SSL, ибо passport.microsoft и никак иначе)
6. Запустить, зарегистрировать акк и пользоваться.
Код:
python .\register.py
Usage:
  python register.py <email> <password> [display_name]
  python register.py --list
7.
Прикрутить к MSSQL базе сервера для синхронизации базы пользователей с базой MSN, чтобы без регистрации и SMS. бл**ь даже не вздумай.

settings_local.py (MSN сервер):
Код:
# Local settings override for L2 MSN Server
import os as _os
_dir = _os.path.dirname(_os.path.abspath(__file__))
DB = f'sqlite:///{_os.path.join(_dir, "msn_server.sqlite")}'
STATS_DB = f'sqlite:///{_os.path.join(_dir, "msn_stats.sqlite")}'
TARGET_HOST = '0.0.0.0'
LOGIN_HOST = '0.0.0.0'
STORAGE_HOST = '0.0.0.0'
HTTPS_PORT = 443
DEBUG = True
DEBUG_MSNP = True

Клиент
Код:
[MSN]
; IP MSN сервера
Server=127.0.0.1
; Порт (по умолчанию: 1863)
Port=1863

; Перенаправлять весь траффик (по умолчанию 0)
RedirectAll=0

; IP сервера авторизации (для nexus.passport.com)
PassportServer=127.0.0.1

; Ложить болт на сертификат SSL (1=игнорировать SSL, 0=на случай если MSN сервер стоит на домене с живым сертификатом)
SSLBypass=1

; Версия эмуляции MSN Messenger клиента (Л2 проверяет и требует наличия MSN клиента в ОС)
; < 6.2.0.205 = Старый клиент (Упрощённый UI)
; >= 6.2.0.205 = Новый клиент (Полный MSNP8)
MSNVersion=7.0.0.0

[Logging]
; Логирование msn_proxy.log (1=enabled, 0=disabled)
Enabled=1

; Debug mode - logs every connect/DNS call (1=verbose, 0=normal)
Debug=0


Так-же есть сертификат и .bat файл для его установки (сгенерен через OpenSSL)

Настоящие клиенты MSN Messenger можно найти тут: (Русские и английские версии MSN 7.5/Unpatched!)
Ну и гайд для "поправить" чтоб работало

Алсо, в плане сервера - всё по правилам (Токены и т.д.). Это на случай, если кому в голову прийдёт запускать на живых проектах. На игровой сервер вроде повлиять никак не должно, но ты уж подумай дважды. И не забудь в конфиг сервера добавить LogMsn=true. Большой брат следит за тобой.

Сделано с любовью и ради мемов.
 

Вложения

  • MSNP.zip
    MSNP.zip
    505,2 КБ · Просмотры: 4
Последнее редактирование:
Шикарно теперь можно будет сделать личный помощник с ответами на вопросы используя AI кроме чата между игроками в своей экосистеме :Happy:
 
Шикарно теперь можно будет сделать личный помощник с ответами на вопросы используя AI кроме чата между игроками в своей экосистеме :Happy:
А чем тебя вариант с петициями не устроил? Где-то выкладывали пример, выглядит органичнее)
 
А чем тебя вариант с петициями не устроил? Где-то выкладывали пример, выглядит органичнее)
Этот вариант хороший, но и MSN вариант чего бы нет.
Подключаешься и в чат сходу, донатить сюда :pandaredlol:
 
Назад
Сверху Снизу