Этого треда уже нет.
Это копия, сохраненная 14 декабря 2018 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
IDADisasm02.jpeg68 Кб, 688x480
Сап, двач. В этом треде я буду разрабатывать ПИРАТСКИЙ Разработка эмулятора сервера MMORPG 1163403 В конец треда | Веб
Сап, двач. В этом треде я буду разрабатывать ПИРАТСКИЙ сервер для игры, у которой есть официальный издатель в России с целью поднятия скилла. R2 online
Этот тред будет являться неким дневником разработки.

О себе: принимал участие в разработке Lineage 2, Perfect World, Aion. Но никогда не работал с сетевой частью. Настало время вкатиться, так сказать, и сделать всё с нуля.

Приглашаю анонов поучаствовать во всем этом.

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

Инструкция:
Сайт: https://8gwifi.org/rsafunctions.jsp
Публичный ключ:
-----BEGIN PUBLIC KEY-----
MFswDQYJKoZIhvcNAQEBBQADSgAwRwJATIRDG0NRp+MVYNLx1dGlQ/cuJT+dgRV9
x/5o04jL2QA3k+dWeYS7VDSdogkq+5yYro6hM/EvYv6RBrRlvW87FQIDAQAB
-----END PUBLIC KEY-----
Инструкция: https://imgur.com/a/1YQJp
2 1163426
НИХУЯСЕБЕ ЛЮТО СЛЕЖУ
3 1163444
мне в принципи похер кто отвечает так как ничего криминального в моём вопросе нет.
Сам как то хотел сделать что-то типа онлайн игры, а потом понял что сделать что-то более сложное чем пошаговая стратегия у меня не получится, поэтому остановился на банальной проходилке.
Отсюда вопрос. На чем будешь делать сервер? Как будут клиенты конектится к серваку? Как будет проходить сериализация данных? Объекты(абстракции) на клиенте и серваках будут одинаковыми? Что ты знаешь про синхронизацию стейтов игры на разных клиентах? Готов к трудностям синхронизации? потом будут ещё вопросы.
Разработка эмулятора сервера MMORPG 4 1163448
рассказываю всё что я проделал без подробностей особых, уже ебусь с этим ехе где-то неделю
День первый. Добываем информацию.

Качаем себе ЗАПУСКАТР, ставим на компутер себе это всё.
Пытаемся запустить R2 напрямую, видим ошибку - Используйте запускатр.
Заходим на сайт и пытаемся понять, как он связан с приложением, установленным на компе.
Беглый профессиональный взгляд подсказывает (точнее ошибки в консоли в хроме), что используется websocket технология.
На данном этапе цель - узнать как именно он запускает EXE

Заходим в Службы в винде - видим, что программа видит там, отключаем. Запускаем на прямую - не запускается, крашится. Странно, почему же так.

Открываем IDA - закидываем туда 4game-service, начинаем смотреть внимательно шаг за шагом, что же оно делает и почему не запускается.
Сразу загружаем strings и просматриваем все строки в файле.
Случайно увидел строки --install --start --console, отследил где они вызываются, F5, похоже на ключи при запуске, но Службы не передают никаких ключей. Странно.

Опыт подсказывает, что это параметры для запуска EXE, создаю ярлык с параметром --console , ибо оно было в списке - вуаля, запустилось окно и не закрывается.
Опытным путём установил, что никакие другие ключи кроме --console не работают. Открыл снова Strings - увидел просто слово start, судя по тексту функции - это тоже ключи. Но почему-то всё через пизду на этом этапе.

При запуске --console заходим на сайт - пытаемся войти в игру - выдает сайт ошибку 704. Пиздец странно.
Реверсим дальше. И тут случайно понимаю (используя гугл и гугля там константы и винапи функции), что оно использует суперправа СЛУЖБ для запуска, если запущено не как СЛУЖБА, то хрен тебе на рыло, а не приложуха 4гейма.

По идее, это говно должно сохранять лог файл куда-то, ну логично же, нет?
Вижу в exe путь //zptr/.., только куда он ведёт явно не указано. Но должна быть папка ZPTR. Качаем ProcessExplorer, запускаем прогу как Службу, смотрим какие файлы использует с помощью поиска - видим в папке с Windows - папку zptr, открываем. вуаля, вот наш лог файл. Смотрим, что он делает при запуске игры -

cmd : "C:\Program Files (x86)\4game\3.6.2.265\4game-launcher.exe" "C:\Games\Installed\R2 Online\Frost\frostUpdater.exe" " -frostGameNameType r2online_live -frostLauncher r2_launcher.exe -frostGame ..\R2Client.exe "LoginName XD13tvazcvvb -frostZone ru""

Он вызывает CMD с этим текстом, и игра запускается. Очевидно ключ посылает сайт и он по факту является временным токеном.

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

Ну что, берём ярлык к r2client.exe, присобачиваем параметр -frostZone ru
пау! заходим и видим ошибку авторизации, что указанного пользователя не существует.

Следующий этап - отвязать FROST, чтобы не мешался, а то глаза мозолит.
Открываем r2client.exe в ИДЕ, ищем где функция запуска фроста - патчим nop-ами, запускаем - фрост не вызвался, да и хуй с ним.
Осталось для отладки нормальной отвязать от запускатора.
Эти 4геймовцы чето с файлом намутили, что пришлось в дебри спускаться, и менять логику на такую: если 4гейм запущен, то ошибка запускатора, если не запущен, то нет ошибки. Решение временное, да и до пизды, наша задача преодолеть окно логина, попасть на выбор сервера.
Разработка эмулятора сервера MMORPG 4 1163448
рассказываю всё что я проделал без подробностей особых, уже ебусь с этим ехе где-то неделю
День первый. Добываем информацию.

Качаем себе ЗАПУСКАТР, ставим на компутер себе это всё.
Пытаемся запустить R2 напрямую, видим ошибку - Используйте запускатр.
Заходим на сайт и пытаемся понять, как он связан с приложением, установленным на компе.
Беглый профессиональный взгляд подсказывает (точнее ошибки в консоли в хроме), что используется websocket технология.
На данном этапе цель - узнать как именно он запускает EXE

Заходим в Службы в винде - видим, что программа видит там, отключаем. Запускаем на прямую - не запускается, крашится. Странно, почему же так.

Открываем IDA - закидываем туда 4game-service, начинаем смотреть внимательно шаг за шагом, что же оно делает и почему не запускается.
Сразу загружаем strings и просматриваем все строки в файле.
Случайно увидел строки --install --start --console, отследил где они вызываются, F5, похоже на ключи при запуске, но Службы не передают никаких ключей. Странно.

Опыт подсказывает, что это параметры для запуска EXE, создаю ярлык с параметром --console , ибо оно было в списке - вуаля, запустилось окно и не закрывается.
Опытным путём установил, что никакие другие ключи кроме --console не работают. Открыл снова Strings - увидел просто слово start, судя по тексту функции - это тоже ключи. Но почему-то всё через пизду на этом этапе.

При запуске --console заходим на сайт - пытаемся войти в игру - выдает сайт ошибку 704. Пиздец странно.
Реверсим дальше. И тут случайно понимаю (используя гугл и гугля там константы и винапи функции), что оно использует суперправа СЛУЖБ для запуска, если запущено не как СЛУЖБА, то хрен тебе на рыло, а не приложуха 4гейма.

По идее, это говно должно сохранять лог файл куда-то, ну логично же, нет?
Вижу в exe путь //zptr/.., только куда он ведёт явно не указано. Но должна быть папка ZPTR. Качаем ProcessExplorer, запускаем прогу как Службу, смотрим какие файлы использует с помощью поиска - видим в папке с Windows - папку zptr, открываем. вуаля, вот наш лог файл. Смотрим, что он делает при запуске игры -

cmd : "C:\Program Files (x86)\4game\3.6.2.265\4game-launcher.exe" "C:\Games\Installed\R2 Online\Frost\frostUpdater.exe" " -frostGameNameType r2online_live -frostLauncher r2_launcher.exe -frostGame ..\R2Client.exe "LoginName XD13tvazcvvb -frostZone ru""

Он вызывает CMD с этим текстом, и игра запускается. Очевидно ключ посылает сайт и он по факту является временным токеном.

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

Ну что, берём ярлык к r2client.exe, присобачиваем параметр -frostZone ru
пау! заходим и видим ошибку авторизации, что указанного пользователя не существует.

Следующий этап - отвязать FROST, чтобы не мешался, а то глаза мозолит.
Открываем r2client.exe в ИДЕ, ищем где функция запуска фроста - патчим nop-ами, запускаем - фрост не вызвался, да и хуй с ним.
Осталось для отладки нормальной отвязать от запускатора.
Эти 4геймовцы чето с файлом намутили, что пришлось в дебри спускаться, и менять логику на такую: если 4гейм запущен, то ошибка запускатора, если не запущен, то нет ошибки. Решение временное, да и до пизды, наша задача преодолеть окно логина, попасть на выбор сервера.
5 1163452
>>163444

>На чем будешь делать сервер?


Rust. Показался достаточно простеньким по сравнению с C++, мне главное пакеты отправлять и многопоточность. Хотел GO, но как ознакомился с проблемой многопоточности - так передумал сразу.

>Как будут клиенты конектится к серваку?


Очевидно, что устанавливая TCP и (возможно) UDP соединение. UDP пакетов в игре не заметил при первом запуске wireshark. Хотя странно, игра поточная - по идее должна пакеты UDP отправлять в игровом мире. Не знаю, я сейчас не на этом этапе.

>Как будет проходить сериализация данных?


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

>Объекты(абстракции) на клиенте и серваках будут одинаковыми?


Не совсем понял о чем речь

>Что ты знаешь про синхронизацию стейтов игры на разных клиентах?


пакеты-пакеты-пакеты-пакеты
Например пакет в Aion, который ответственен за перемещение всего существующего в мире и передачу информации на клиента:
https://github.com/ghostfur/Aion-Lightning-4.9-SRC/blob/master/AL-Game/src/com/aionemu/gameserver/network/aion/serverpackets/SM_MOVE.java

>Готов к трудностям синхронизации?


Поживем - увидим

на самом деле у меня крайне мало опыта вообще во всём этом, просто интересно сделать что-нибудь
6 1163455
>>163452
Спасибо, анон! Я даже чё-то понял. Даже сам вдохновился идеей пакетов. По ссылке вижу что в пакете есть что-то подобноее Model-Controller-Network системы, но там как я понял серв вообще на Java.
окей пакет блять.
Но соединение то по TCP, никакого няшного http.
Как ты планируешь в TCP запихнуть этот самый пакет?
7 1163466
>>163455
Лол, ты совсем зелёный что ли? Почитай про основу основ, протокол IP.
8 1163467
>>163455
рекомендую ознакомиться с моделью OSI, сразу многое станет понятно.
Например, что TCP - это транспортный протокол,
а http - прикладной протокол и писать сервер на протоколе http можно, только если это API

>Как ты планируешь в TCP запихнуть этот самый пакет?



Что такое пакет, по факту - просто набор байтов (правильней говорить фреймы, сегменты, но я говорю пакеты, привычней), которые будут переданы более низкому уровню по модели OSI, соответственно из TCP (транспортного уровня) будет навешана дополнительная информация (инкапсуляция пакетов. смотри не обосрись от сложных слов, но это реально основы работы сети) и с TCP передано на сетевой уровень (IPV4/ipv6) , который уже навешает еще один слой - куда и кому отправлять - далее передаст этот уже ПАКЕТ на еще низкий - канальный - навешает на него еще информации всякой и передаст пакет по технологии Ethernet (internet, ethernet, wan - разные вещи), на этапе ETHERNET будут уже не пакеты с байтами, а биты (нолики и единички)
и последний уровень - уровень оборудования - это физика, например пучок света по оптоволокну. И потом происходит после доставки - декапсуляция - возвращение пакета в первоначальное состояние.

То есть что такое TCP frame по факту - набор байтов. Мы просто устанавливаем TCP соединение (смотри википедию про TCP handshake), и отправляем любые байты - которые захотим, а клиент уже сам поймет, что это за байты и куда они нужны.

Следи за дневником, тут будет разбор пакетов, если я найду как происходит ебучий декрипт ебучих пакетов
9 1163491
>>163403 (OP)
Уже хотел зарепортить залетыша из гд со своими ДНЕВНИЧКАМИ, но блин, вроде годнота, да еще и на расте. Когнитивный диссонанс. Хочу ненавидеть опа, но не могу.
10 1163513
>>163491
Это не геймдев, это ревёрс-инжинеринг уже существующего продукта.
У нас есть клиент, но нет сервера, нужно восстановить сервер по клиенту (и снифая пакеты с сервера)
sage 11 1163519
>>163513
Спасибо, капитан очевидность надо было все-таки зарепортить, лол
12 1163533

>Хотел GO


А почему бы и нет.
да здравствует языкосрач
Хотя тебе виднее.
Просто о многопоточночти и что она не вшита в язык.
По идее GO как раз выигрывает у раста в этом плане, так как хорошо что многопоточности нет в языке, потому что это проблема не языка а машины на которой программа работает. То есть надо найти фреймворк для GO под операционку под которую ты будешь писать воооот. Чтобы он подконектился к ядрам проца.. хз короче. так как если многопоточность, зашита в язык может генерировать ошибки. А если у тебя будет отдельно модуль с многопоточностью ты сможешь его поменять или отключиь.
13 1163549
>>163533
это ты так тонко тролишь?
14 1163554
Опчик, напиши часть сервака на джаве плииииз
15 1163556
>>163403 (OP)
На Dlang не смотрел?
16 1163563
>>163455

>http


>няшного


Нассал те в ротешник
17 1163582
>>163549
нет.
просто по опыту, самые бесячие и скрытые баги случаются именно по вине мультипоточности. ну это когда пишешь для клиента и жопа горит. Когда пишешь для себя, можно с чувством с толком с расстановкой ими наслаждаться.
18 1163595
>>163467
Интересно, я такой низкоуровневой разработкой не занимался - все больше вебня, но сейчас даже возникло желание вместе с тобой пописать. Как бы это организовать?
19 1163597
>>163595

>я такой низкоуровневой разработкой не занимался - все больше вебня


да все уже поняли что на дваче макаки одни
20 1163604
>>163595
Зашифруй дискорд канал с помощью открытого ключа в старте топика, я подключусь
>>163554
Не люблю джава со времен айона, слишком много ёбли с версиями, и слишком много ёбли с потребляемой памятью. Посмотрим, не могу сейчас так далеко заглядывать в будущее
>>163556
Смотрел, отказался. В Rust больше простого, когда увидел этот match - просто обкончался радугой.
21 1163605
>>163604
или кинь свой дискордтег по тому же принципу, я дружбу кину
22 1163614
>>163605
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC8IiFyABmFJdOljhw6cSgxEvLQ
ITPsbWux0JIZReSPd+RBUbTntrtjG4Kf6L1BQUL8DKCmYBe6qTNzdUgePYGbShd1
YmQw9WbPcIPeUUZfAE8ZqU4Mp1z7K7Dz4CjQRsPvi99uR0w2AOlrZdDoMHlsB/8X
O57df3KceM8hZjCHiwIDAQAB
-----END PUBLIC KEY-----

iGSn6tQID2mA9ztAgPNAp5SoHf+H83p/bPQT6DgQj5Htdp5CBigKi4p5GHyeu0qLDo0l3DeNwHv0rZfEd7Dx+MtcNVooDIeF2NlwpzAD1rscc7c+C5bkZrqCMBcPSJ1yQKn53/C83cQjaVfX5mX9OSMJ4S9iNx9aWq5Ayl4kuV8=

я хз правда как ты это будешь расшифровывать - этот сайт во второй вкладке у меня падает на декрипте метода
23 1163617
>>163614
я хз че за ключ ты использовал,
мой ключ не позволяет такие длинные сообщения писать
кидай в открытую, я пристально слежу за тредом ради тебя
24 1163618
>>163597
Будто бы что-то плохое.
Зато платят неплохо, да и работу найти не проблема.
25 1163622
>>163617
все сообщение - https://discord.gg/q2n5S6K
(при чем, что меня поразило - когда я делаю ctrl+a на поле с публичным ключем шифрованное сообщение меняется)
26 1163913
>>163403 (OP)
Тут работы непочатый край. Мало верится в успешном завершении начатого.
Скорее всего законченный сервак не сможет держать много игроков онлайн.
27 1163919
>>163913

>Скорее всего законченный сервак не сможет держать много игроков онлайн.


почему же?
28 1163921
>>163919
Банально скиллов не хватит.
29 1163924
>>163921
а в чём именно предвидится сложность?
30 1163936
>>163921
Если у нас (уже нас двое) не хватит скилла по хайлоду, то всегда есть другие люди, которые могут помочь в окружении профессиональном.
>>163913
У меня нет цели сделать 100% рабочий сервер, да это и невозможно всё время гнаться за официальным. Мне бы просто преодолеть окно авторизации для начала. А дальше - посмотрим.
31 1163940
JLC под Portex надо приктрутить.
32 1163949
День второй. Начало исследования протокола.

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

Видим пакеты:
Два на хендшейк, а третий с Data длиной 204. Начинается на CC 00 00 01 4F ........ и ещё 199 байтов

После - клиент отправляет три пакета подряд, с оффсетом (это все один пакет, просто разбит на три) и еще что-то происходит, что неважно на самом деле сейчас.

При запуске IDA, ставим breakpoint, что после WinAPI функции recv(), видим, что в память записался целиком пакет после получения IP адреса (geo.r2online.ru, еще байты какие-то, а после уже наш пакет).
Дальше - в случае долгого отсутствия ответа, (ну да, пока трейсинг запустится, начнет обход совершать, сервер закроет соединение) - "Соединение прервано". В случае если все быстро прошло, то "Пользователь не найден". Вот как он понимает, что пользователь НЕ НАЙДЕН?

Просматривая регистры во время исполнения инструкций, я понял, что после функции recv() он поднимается в функцию, которая проверяет пакет на длину, так как recv() в случае удачи возвращает длину полученного пакета
Так как CC = 204, и у нас пакет 204 байта, то он еще вычитает из CC - 2 = CA, и вроде бы еще 2, это опкод скорее всего.

Дальше он вызывает с помощью call eax функцию, которую можно отследить только во время отладки, которая зачем-то зануляет указатель на адрес *a = 0 и возвращается в функцию.
Дальше происходит функция memmove() и он возвращается в функцию, связанную с событиями WSANetworkEvents

Подозреваю, что западло случается на функции memmove(),
думаю, что после memmove надо установить breakpoint на памяти и посмотреть, что происходит. Какая именно сука обращается к тому участку памяти.

Нужно дальше копать.
Разработка эмулятора сервера MMORPG 33 1165422
День 4, ушел играть на оф временно :)
34 1166029
>>165422
прощай, было весело
35 1166045
>>166029
Мамкин кекер сдулся?
36 1166163
>>163403 (OP)
У меня тоже есть желание написать сервер для одной не очень популярной игры. Уже достаточно далеко продвинулся, т.к. есть скилл реверс-инжиниринга. У меня полностью расшифрован сетевой протокол. Осталось решить несколько фундаментальных и очень важных вопросов в протоколе, но уже сейчас могу читать всё, что игра отправляет-получает. А вот с написанием сервера проблема. Т.к., во-первых, у меня си головного мозга, во-вторых, лень, а в-третьих, не знаю, с чего начать. Всё, что сделано на данный момент, это возможность логиниться. И клиент игры успешно соединяется с сервером. А дальше не знаю, чего делать. Как создавать пакеты? Вроде легко, но нужно продумать, как это делать. Один сетевой пакет может содержать множество сообщений. Это надо как-то реализовать, нужно собирать сообщения в один пакет, добавить служебные сообщения, заголовок, отправку по таймеру, обработку ошибок (а именно, подтверждение доставки UDP и повторную отправку в случае отсутствия подтверждения, которое в сетевом протоколе реализовано, но мне не до конца понятно), разбивку пакетов, если сообщение слишком длинное и прочее. Но дальше ещё много чего нужно будет делать помимо сетевого протокола. Нужно будет разобраться с картами, загружать их геометрию в физический движок, модели туда же. Хотя с этим полегче, потому что находил несколько утилит для просмотра карт и моделей.
37 1166259
Вашу энергию, да в мирное русло бы.
!!!миксер-в-глаза.jpg27 Кб, 434x264
38 1166487
>>166163

> эти шрифты

39 1166493
>>166487
Проводную акулу первый раз в жизни увидел?
40 1166498
хахаха картоху ломают
41 1166518
>>166493
впервые за крайний десяток лет увидел Ш1ИДОШ5 ХР
42 1166753
>>166163
Давай дискорд сюда, я свяжусь с тобой
>>166045
нет, не сдулся, нашли дырку в одном кешбек сервисе, эксплуатируем, некогда заниматься сервером теперь
43 1166780
>>166753
ну ладно блять. обожаю такие истории
что за дырка?
44 1166783
>>166780
можно заказывать что угодно с большого количества магазинов (ебей, амазон) за >30 долларов, и тебе вернется ровно 50 долларов на баланс

(немного напиздел, но суть такая)
45 1166785
>>166753

>нашли дырку


и стали няшиться, ох уж эти школокекеры
Разработка эмулятора сервера MMORPG 46 1168540
Ну что, продолжаю копать, ради вас
47 1169208
>>168540
Копай, анончик, уж очень нравится, как ты пишешь. Как будто остросюжетный роман читаю.
48 1172358
ОП сдулся?
Достаточно утомительное занятие - разбор сетевого протокола. Ида и Wireshark - очень хорошие инструменты для неспешного статического анализа, когда уже знаешь, где смотреть. А для поиска того места нужен будет отладчик. Хотя Ида снабжена отладчиком, мне он показался очень неудобным. Гораздо лучше использовать OllyDbg, если у тебя 32-битное приложение. Версия 2.01 как-то поприятнее, чем предыдущая 1.10, но под неё меньше плагинов (возможно, было). Но, если приложение не шифровано/криптовано и не содержит антиотладочных механизмов, то плагины не нужны.

>При запуске IDA, ставим breakpoint, что после WinAPI функции recv(), видим, что в память записался целиком пакет после получения IP адреса (geo.r2online.ru, еще байты какие-то, а после уже наш пакет).


Не помню, как выглядит получение IP адреса, но это очень похоже на него, т.е. что-то типа gethostbyname. Сначала сделай статический анализ, посмотри импорт, какие функции в приложении используются для отправки/получения пакетов. Это может быть send/recv, так и WSASend/WSARecv. Кстати, там TCP или UDP? Тогда могут быть функции sendto/recvfrom. И если UDP, то, как и в той малоизвестной игре, будут использоваться механизмы контроля доставки, такие как, например, счётчик сообщений и некие каналы (UDPChannel), с которым никак не разберусь, хотя есть исходники от 2009 года и документация от 2012.

>Вот как он понимает, что пользователь НЕ НАЙДЕН?


Ты пропустил запрос/ответ или не на то брекпойнт поставил. Wireshark должен же эту сетевую активность отловить.

>и вроде бы еще 2, это опкод скорее всего


А может быть и флаг для всего пакета. А опкодов может быть много в одном пакете.

>Дальше он вызывает с помощью call eax функцию, которую можно отследить только во время отладки


Если клиент написан на C++, это вызов виртуальной функции. Хотя и на C может быть похожее. Нужно смотреть на регистр ecx, в него в C++ перед вызовом заносится указатель на класс. В C такого нет. Найти таблицу виртуальных функций просто, достаточно перейти в отладчике на адрес, из которого присваивается регистру eax, это конструкция вида mov eax, [esi + 4]. Достаточно посмотреть, на что указывает (к примеру) esi, а дальше в Ida переходишь по этому адресу. Если нужно восстановить структуру класса, то поднимаешься выше и по перекрёстной ссылке (почему то надо жать Ctrl+X, а не просто X) выходишь на место, где указатель заноситься на место виртуальных функций класса (это нулевой элемент, если рассматривать его как массив). Элементарно же (когда знаешь, как делать, потому что попадёшь в конструктор, а надо будет ещё на уровень выше переходить, там и узнаешь размер класса).

>он возвращается в функцию, связанную с событиями WSANetworkEvents


Мне кажется, ты слишком глубоко полез.
Вот что мне очень понравилось и крайне удобно для анализа - это написание плагина-диссектора для Wireshark. Это долго, утомительно, но полностью окупается последующей лёгкостью анализа. Wireshark мегаудобен для подобного (ещё бы), у него множество функций и своих дополнительных диссекторов (тот же JSON можно смотреть прямо в пакете, как на скринах выше) для анализа. Для представления данных у него есть огромное количество своих предопределённых форматов, такие как IP адрес (который красиво отформатирует его), даты, целых и float всех возможных форматов (1, 2, 3, 4, 8 байт, со знаком, без знака, big-endian, little-endian), строк, битовых полей и всё это в одном пакете в любом порядке. Когда каркас напишешь, потом смотришь сдампленный трафик и сразу же добавляешь и уточняешь структуру, а в некоторых местах можно даже без запуска игры понять.
>>166753

>Давай дискорд сюда, я свяжусь с тобой


Да не, это типа мотивации было для тебя.
48 1172358
ОП сдулся?
Достаточно утомительное занятие - разбор сетевого протокола. Ида и Wireshark - очень хорошие инструменты для неспешного статического анализа, когда уже знаешь, где смотреть. А для поиска того места нужен будет отладчик. Хотя Ида снабжена отладчиком, мне он показался очень неудобным. Гораздо лучше использовать OllyDbg, если у тебя 32-битное приложение. Версия 2.01 как-то поприятнее, чем предыдущая 1.10, но под неё меньше плагинов (возможно, было). Но, если приложение не шифровано/криптовано и не содержит антиотладочных механизмов, то плагины не нужны.

>При запуске IDA, ставим breakpoint, что после WinAPI функции recv(), видим, что в память записался целиком пакет после получения IP адреса (geo.r2online.ru, еще байты какие-то, а после уже наш пакет).


Не помню, как выглядит получение IP адреса, но это очень похоже на него, т.е. что-то типа gethostbyname. Сначала сделай статический анализ, посмотри импорт, какие функции в приложении используются для отправки/получения пакетов. Это может быть send/recv, так и WSASend/WSARecv. Кстати, там TCP или UDP? Тогда могут быть функции sendto/recvfrom. И если UDP, то, как и в той малоизвестной игре, будут использоваться механизмы контроля доставки, такие как, например, счётчик сообщений и некие каналы (UDPChannel), с которым никак не разберусь, хотя есть исходники от 2009 года и документация от 2012.

>Вот как он понимает, что пользователь НЕ НАЙДЕН?


Ты пропустил запрос/ответ или не на то брекпойнт поставил. Wireshark должен же эту сетевую активность отловить.

>и вроде бы еще 2, это опкод скорее всего


А может быть и флаг для всего пакета. А опкодов может быть много в одном пакете.

>Дальше он вызывает с помощью call eax функцию, которую можно отследить только во время отладки


Если клиент написан на C++, это вызов виртуальной функции. Хотя и на C может быть похожее. Нужно смотреть на регистр ecx, в него в C++ перед вызовом заносится указатель на класс. В C такого нет. Найти таблицу виртуальных функций просто, достаточно перейти в отладчике на адрес, из которого присваивается регистру eax, это конструкция вида mov eax, [esi + 4]. Достаточно посмотреть, на что указывает (к примеру) esi, а дальше в Ida переходишь по этому адресу. Если нужно восстановить структуру класса, то поднимаешься выше и по перекрёстной ссылке (почему то надо жать Ctrl+X, а не просто X) выходишь на место, где указатель заноситься на место виртуальных функций класса (это нулевой элемент, если рассматривать его как массив). Элементарно же (когда знаешь, как делать, потому что попадёшь в конструктор, а надо будет ещё на уровень выше переходить, там и узнаешь размер класса).

>он возвращается в функцию, связанную с событиями WSANetworkEvents


Мне кажется, ты слишком глубоко полез.
Вот что мне очень понравилось и крайне удобно для анализа - это написание плагина-диссектора для Wireshark. Это долго, утомительно, но полностью окупается последующей лёгкостью анализа. Wireshark мегаудобен для подобного (ещё бы), у него множество функций и своих дополнительных диссекторов (тот же JSON можно смотреть прямо в пакете, как на скринах выше) для анализа. Для представления данных у него есть огромное количество своих предопределённых форматов, такие как IP адрес (который красиво отформатирует его), даты, целых и float всех возможных форматов (1, 2, 3, 4, 8 байт, со знаком, без знака, big-endian, little-endian), строк, битовых полей и всё это в одном пакете в любом порядке. Когда каркас напишешь, потом смотришь сдампленный трафик и сразу же добавляешь и уточняешь структуру, а в некоторых местах можно даже без запуска игры понять.
>>166753

>Давай дискорд сюда, я свяжусь с тобой


Да не, это типа мотивации было для тебя.
49 1179334
>>163403 (OP)
Умер?
50 1179338
>>168540

>ради вас


А ты часом не админ чухача и создатель сервера по майнкрафту в /mc/?
Хотя нет, вроде более-менее адекватный слог, не похоже на него. Либо ты шифруешься, либо правда не ты.

Чтоб ты понимал, этот индивид отличался тем, что ответом на ЛЮБУЮ критику у него всегда было неизменное "я делаю это для анона, и делаю это бесплатно, и поэтому мне похуй и я буду продолжать делать всё через жопу"
Причём критиковал я только вторую его инкарнацию, а первую просто со стороны смотрел как критикуют другие.
51 1179447
>>179338
Хуя вы там говно ебаное. Нет бы помочь человек или самому взять и сделать как надо. КРИТИКУЕТ ОН БЛЯДЬ СУКА ОРУ НААХУЙ С ГОВНААААААААА))))
52 1179471
>>163403 (OP)

>я буду разрабатывать


Анус
53 1179489
>>179447

>Нет бы помочь человек или самому взять и сделать как надо


Там человек всё знает лучше всех, на помощь ему насрать.

>КРИТИКУЕТ ОН БЛЯДЬ СУКА ОРУ НААХУЙ С ГОВНААААААААА))))


Не хочешь критики — держи свои высеры у себя на харде. Так всегда было и будет.
54 1179534
>>179338
бредовая позиция, комьюнити знает как лучше делать, а не один отдельный человек.
конечно разработчик должен принимать решения, но зачастую игнорируя советы товарищей можно наклепать такое говно
>>179334
живее всех живых
Но я застрял, уже по инструкциям все расковырял, шаг за шагом, вижу где что передается, где как и куда заходит, но чето толку нет особо. Надо еще посидеть
55 1180509
>>179534

> игнорируя советы товарищей можно наклепать такое говно


бля лол. просто лол. просто лол, больше ничего не скажешь
56 1180534
NT4EhzG9EJOELgUFGBQcVZIKda8Xs9bLvsIhAZ0pEeXaVFHM1+g+hKZ5arE3NPld3vCXxn6ESItYNIfnszBMUg==
57 1180588
>>180534
Используй латинские буквы, но очевидно, что там написано "оп - хуй"
58 1181265
>>180588
Это и без расшифровки очевидно.
59 1181289
>>172358

>Это долго, утомительно


Это не долго и не утомительно, если использовать https://github.com/diacritic/wssdl и подобные
60 1181348
На какой либе делаешь сервер?
61 1182679
>>181289
Это подходит только для очень простого протокола, в котором последующее состояние не зависит от предыдущего. Такое можно даже в 010Editor'е сделать для быстрого анализа. В играх, например, это не всегда так. Если взять тот же WOT, то один и тот же опкод может соответствовать разным типам пакетов. А задаётся он либо в одном из предыдущих пакетов, либо (чаще всего) в предыдущем сообщении в том же пакете. И как такое можно с помощью этой либы сделать?
Ещё один момент. Хочется знать, кому соответствуют, например, ID техники. Это можно узнать только из учёта предыдущих сообщений. И тут подходим к главном сложности, вокруг которой у меня нагорожен ужасный костыль - необходимость некоторым сообщениям в пакете знать предыдущее состояние, но не последующее. Тут уже можно щёлкнуть на любой пакет, чтобы узнать, что в нём. У Wireshark есть такая возможность, при запуске диссектора он последовательно проходит по всем пакетам со сброшенным флагом visited (не знаю, насколько хорошо проверять подобный флаг, всё-таки это внутренние структуры, которые могут поменяться в следующих версиях). Если так не делать, то нужно будет последовательно щёлкать все пакеты, начиная от 1 и до того, который интересует.
>>181348
Он на офсервер перебрался, поэтому кина не будет.
62 1192838
>>163403 (OP)
Каков функционал реализован на данный момент?
63 1192903
>>192838
Создан тред на дваче.
64 1192908
>>163452
Пакеты-пакеты-пакеты, Rust со своим синтаксисом ебаное говно. Почему не Си спрашивать даже не буду. У самого имеется опыт реверс-инжиниринга 1.5 года и СИ/C++ ровных 3. Имел дело и имею даже сейчас с модификацией многоанимационных игр, а в точности и сетевой синхронизацией игроков. Так что советую писать на С++ как можешь, к тому же, RakNet библиотека вполне себе возможна к освоению, если ты до этого не кривлялся только в PHP или Javaмакакстве каком-нибудь.
65 1192915
>>179534

> но зачастую игнорируя советы товарищей можно наклепать такое говно



Никакие товарищи при разработке не требуются. Именно на разработчике лежит вся ответственность за то, как он видит своими глазами то, что он делает и что с этого выйдет. Ответственность за то, чтобы потом результат понравился всем. Имея несколько товарищей ты скорее будешь не разработкой занят, а решением, кто же из них прав. Разработчик на то и разработчик, что должен мудрено принимать самостоятельно решения, которые в результате никого не обидят. Но с твоим долбоебством ты ничего не поймешь из того что я написал.
sage 66 1192932
>>192908

>оценивать языки по синтаксису


Смузи уже отхлебнул, борщееб?
67 1192935
>>192932
Нормальному человеку синтаксис важен всегда, если тебе не важен, то пиздуй на петухе кодить, тебе подойдет.
68 1192995
>>192935

>Нормальному смузихлебу синтаксис важен всегда, ведь главное в технологии - это чтобы код симпатично смотрелся с моей цветовой схемой в атоме)))0



Починил, не благодари.
69 1193090
>>192995
хотя нет, сорян, синтаксис и правда важен, я долбоящер, умываю ноги твои патлами своими, анон, который сказал что синтаксис важен всегда и везде. ведь не удивительно что я на паскале лучше всех в школе кадирывал
70 1193103
Окей, какую-то авторизацию ты напишешь.
А как ты будешь писать северную часть игровой логики?
Это дохулиард кода(миллионы строчек)
71 1193595
>>193103
Можно надеяться на то, что, написав нечто хоть как-то функционирующее, придут энтузиасты и будут реализовывать логику. Если нет, то останется опыт, который, может быть, когда-то пригодится.
>>192908
Кстати, вопрос. У меня всё пишется на чистом C. В качестве сетевой библиотеки использую libevent, но мне кажется, что не ту библиотеку выбрал. С UDP в этой библиотеке приходится работать на низком уровне, потому что она всё-таки для TCP, а ещё лучше для чего-то поверх TCP, типа HTTP(S). Но, может выбрать что-то, с чем будет лучше или более подходящую? Мне нужно не так и много на данный момент: отправлять пакеты всем клиентам через заданный интервал времени. А чтобы не городить велосипеды: обработка доставки пакетов, что-то типа пула сообщений, из которых будет собираться пакет. RakNet на C++, написать обёртки для сишки не проблема, но это надо делать, а пока почитаю документацию. Очень не хочется сетевую часть самому делать.
Не ОП.
72 1193602
>>193595
Тебе, как я понял, нужно что-то сишное.(https://github.com/librg/librg). Уже есть достаточно примеров использования этой библиотеки и справляется с работой она вроде нормально. Использовал эту библиотеку сам, но решил начать использоваться ракнет.

Проект, работающий на этой библиотеке, известен мне только один, но он может послужить для тебя примером, если ты не ленив в чтению исходников. https://github.com/gtaco-op/vc-coop
73 1195960
>>193602
Посмотрел librg и RakNet. Обе библиотеки не подходят в чистом виде. Либо нужно будет частично изменять исходники. Возможно, лучше сделать что-то простое (хотя бы для начала), лишь бы работало. Но у меня возникла такая мысль. Клиент игры существует, мне нужно сделать сервер. И мне не понятно, как лучше сделать сетевую часть. Сейчас рассматриваю два варианта. Первый - как и задумал, сделать свой велосипед, напрямую общение клиента и сервера как в оригинале. Второй - с помощью одной из тех двух библиотек (либо найти что-то другое) сделать взаимодействие клиента и сервера по своему протоколу или пустить трафик от клиента внутри другого протокола. Для того, чтобы клиент понимал сервер, сделать небольшую программу-прокси, с которой и будет общаться сервер. А программа будет уже подготавливать трафик для клиента. Второй вариант выглядит сложнее. Но из-за чего его рассматриваю, так это будет возможность добавить нестандартные решения, которые не получится сделать, если делать один-в-один как в оригинале, типа работа через прокси, сжатие (не zlib с первой степенью, а что-то посущественнее, тут уже будет возможность выбрать) или назначение мастер-сервера одним из игроков, чтобы можно было обойтись без единого центрального сервера (что-то типа P2P).
sage 75 1196045
>>195985
А толку-то от голой библиотеки? У меня сейчас libevent используется для этого. Но всё остальное (контроль доставки, пул сообщений, его отправка и прочее) надо реализовывать самому. Или взять готовое. И на данный момент мне не понятно, что лучше.
76 1203724
Бумп
77 1203843
>>203724
Зачем? ОП пропал, а мне пока что не о чем писать. Решил выбрать совсем другую библиотеку Enet, потому что librg и RakNet обладают излишней функциональностью. Мне не нужно это, достаточно избавиться от необходимости писать код, связанный с созданием очереди на отправку и подтверждением получения для некоторых пакетов. Только вот Enet добавляет свой служебный трафик на каждый пакет и достаточно много. На первое время сойдёт, а дальше как получится, может своё сделаю.
78 1225909
Типа бамп.
ОП, как дела? У меня получилось. Загрузился до ангара. Сейчас всё очень не стабильно, но работает. Необходимые данные взял из своего клиента (синхронизация данных, магазина и досье, CMD_SYNC_DATA, CMD_SYNC_SHOP и CMD_SYNC_DOSSIERS), поэтому на всякий случай немного замазал (вдруг у картошки длинные руки, а мне ещё тестировать и тестировать, чтобы добиться более-менее похожего поведения как у оригинала, не просить же аккаунт у кого-то).
Не понятно, почему не запрашивается количество игроков на сервере/кластере (слева сверху где ES). Там должно быть гордое 1/1, а сейчас крутится обновление пинга. Надо будет поправить.
79 1225956
>>163452
Так зачем тебе Rust? Ты лучше Java возьми и Netty добавь, да!
80 1225959
>>225909
Анон, ты охуенен! Как стать таким круты, как ты?
shot008.jpg522 Кб, 1920x1004
81 1228933
Держу в курсе. Почти получилось разобраться с CMD_SYNC_DATA и создать свою технику, хотя в ангар не пускает, игра что-то ещё ожидает. Теперь скрин можно не замазывать, моих данных там нет. Разобрался, почему не показывалось количество игроков на сервере, теперь там так, как и должно быть, то есть 1. Клиент в логе пишет об ошибках, много ещё не понятно. Кое как разобрался, как создавать интересующую меня технику. Хотел парсер сам писать, как для Wireshark'а (хотя там на C надо было), но прикинув, сколько надо времени на это, решил, что это и не нужно и лучше взять прямо из клиента, только надо добавить отсутствующий функционал, чтобы можно было использовать эти скрипты. И промучался несколько дней главным образом из-за того, что когда-то выбрал неправильную библиотеку для парсинга xml, а именно mxml. У меня на неё уже очень много завязано, но придётся менять. Исправил в библиотеке много ошибок типа утечки памяти, когда при освобождении элементов просто затирался указатель на дочерние без их освобождения, пытался исправить преждевременное удаление элементов, когда ref равен 0, при котором все дочерние элементы удалялись, даже если ref был больше 1, так и не получилось, где-то всё-равно затирается. Но что меня окончательно добило, это если при парсинге текстового xml встречается конструкция вида <some_tag>text1 text2</some_tag>, то текст просто обрезался по пробелу. Гениально! А сейчас похоже, что из-за неё где-то перезаписывается участок памяти в рандомном месте, что программа падает при закрытии. Пока не страшно. Когда-то пробовал использовать libxml2, но у меня с ней были проблемы, что даже при запрете перекодирования, если в документе кодировка была указана, библиотека всё-равно делала согласно указанной кодировке, даже в коде пришлось закомментировать этот участок.
>>225959
Для всего подобного нужно немного знать ассемблер, уметь работать с Ida и отладчиком. Программа не шифрована, отладке не сопротивляется. Поэтому крутого тут ничего нет если это не сарказм был.
82 1228964
>>163452

>Rust


Чому не Эрланг? Он еще проще раста.
shot009.jpg947 Кб, 1920x1004
83 1229114
Всем Waffentrager, танканы. Откуда мне было знать, что 0 - это не допустимый параметр для создания экипажа, поэтому и не пускало в ангар. И почему то командир в каком-то подвешенном состоянии, как бы есть, но не показывается.
84 1229428
Получилось добавить почти всю технику вместе с экипажем для каждого танка в ангар, даже скрытые танки и заготовки к ним, хотя и не всё работает как надо. При выборе некоторых этих скрытых танков игра крашится. Поигрался с флагами, добавил премакк, пресаккаунт с возможностью выбора карты, узнал, что игра поддерживает ограничение по времени (видимо, для Китая нужен подобный функционал). А дальше не знаю, что делать. Вот этот вот >>193103 прав. Мне было интересно сделать. Дальше копаться желание-то есть, но очень всё долго делать, даже для такой простой вещи, как добавление техники, пришлось искать и искать, что там картошка в скриптах наворотила и как надо правильно добавлять и то, не всё работает, а почему, мне не понятно. Да и кому это, в итоге, надо? На массовое количество клиентов сервер не будет рассчитан, даже не знаю, сколько ему нужно будет процессорного времени на одну карту, скорее всего, это и есть конечная цель, один сервер - одна карта на нём. Действительно кто-то запустит свой сервер, чтобы с друзьями погонять танчики? Это надо всем собраться, а как часто такое бывает? Вдвоём PVP? Надоест через несколько раундов. Тупик.
85 1229442
>>229428

>Да и кому это, в итоге, надо?


Никому, танчики для пидоров
86 1229447
>>163403 (OP)
Глоток свежего воздуха в помойке, в закладки кинул, только бля не слейся на самом интересном месте как всегда в подобных случаях.
87 1229459
>>229447
Если ты про ОПа, то он пропал уже несколько месяцев как.
>>229442
Ну да. И аудитория соответствующая, ядовито-агрессивная.
88 1229463
>>229459

>то он пропал уже несколько месяцев как.


>только бля не слейся на самом интересном месте как всегда в подобных случаях.


Да сука! А я как раз дочитал до этого интересного места. Оффсервер, блядь. Вот же пидор. Самому не стрёмно браться за что-то и бросать потом. Лох. Сгорела жопа.
89 1229464
>>229463
Хотя тут вроде второй чувак подрубился. Ща падажжжи ёбана...
90 1229466
>>229464
У меня картошкины танчики. Это совсем не то, что было у ОПа.
91 1229469
>>229463
ОП на парашу видимо отъехал уже:
>>166753

>нет, не сдулся, нашли дырку в одном кешбек сервисе, эксплуатируем, некогда заниматься сервером теперь

92 1234200
Ну що?
93 1241195
Вверх
94 1241201
Надеюсь ОП сидел под впном
95 1252746
Надеюсь то была шутка
96 1252770
Сидел под впном, теперь сидит под шконкой. Неплохая тема для блатной песни.
97 1252771
>>252770
Лол!
98 1252861
>>229428
Ну по идее, картофаны изначально делали игру с экономией серверных ресурсов. На днях видел в интервью как у них работает матчмейкер и это просто деревянный метод. Так что вполне вероятно что какой-нибудь офисный сервак сможет держать нормальный онлайн хотя бы в сотку игроков.
Люди уже давно хотят чтобы танки шли по другому пути развития, но их не слушают. Если получится все сделать, то в дальнейшем можно, например, угодить тем кто не любит артилерию и одной галкой в клиенте создать режим без арты, немного переработав матчмейкер. Хотелось бы тебе чем нибудь помочь, но я не программист, хотя и есть некоторые навыки программирования. Ну, а дальше донатики по цене в два раза меньше, платные переносы аккаунтов с оффа и все в таком роде, весьма важная вещь из-за которой многие игроки не уходят из вот в тундру или ав это накопленное имущество, которое влом снова фармить в другой игре.
99 1275481
Ну че, как успехи, оп?
100 1276240
>>229428

Помню тоже танки разбирали когда-то, лет так пять назад. Написали аутх сервер, туда-сюда по мелочи и тоже забили:)

Если есть желание, то запили сурс куда-нибудь на битбакет и раскидай линки на тематических форумах, типа, ragezone/zone-game/..., возможно кто-то подхватит разработку.
101 1296466
Прочитал весь тред и почти ничего не понял. Посоветуйте куда копать, что почитать, чтобы начать в этом разбираться
Тред утонул или удален.
Это копия, сохраненная 14 декабря 2018 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски