Регистрация Главная Сообщество
Сообщения за день Справка Регистрация

Разработка сервера PB - Вся информация

-

Общение разработчиков

- Программирование для Point Blank, общение и обсуждение разработок

Ответ
 
Опции темы
Старый 06.07.2012, 14:03   #1
 Разведчик
Аватар для Fojest
 
Fojest скоро будет известенFojest скоро будет известенFojest скоро будет известен
Регистрация: 03.07.2012
Сообщений: 11
Популярность: 202
Сказал(а) спасибо: 4
Поблагодарили 32 раз(а) в 8 сообщениях
Отправить сообщение для Fojest с помощью Skype™
 
Post Разработка сервера PB - Вся информация

Собственно, итог такой - я не стал заниматься разработкой, но я выложу в этой теме всю информацию которую удалось получить за всё это время (4 дня) из различных источников для других разработчиков.
Возможно когда-то кто-то захочет написать сервер и эта статья ему облегчит разработку.

Софт для редактирования конфигурации клиента PB:
http://zhyk.ru/forum/showthread.php?t=448704 (PBConfigEditor)

1. Как работает сервер PB
Нужно понимать, что есть Сервер Авторизации (Далее СА) а есть Игровые Сервера (Далее ИС).
Сервер авторизации это тот сервер, адрес которого вы задаёте в конфиге ПБ.
При запуске ПБ устанавливает Socket с сервером авторизации, первый пакет отправить должен сервер авторизации(Далее СА). Затем клиент отправляет следующий пакет, и так происходит АВТОРИЗАЦИЯ и ПОЛУЧЕНИЯ СПИСКА ИС (Список ИС это сервера, в руофе они называются "Общий сервер" или "Сервер клановых боёв", это те сервера, которые вы видите при входе в ПБ). И так, после проверки логина/пароля получаем список серверов, информацию о вашем аккаунте (Список друзей, внешний вид, оружие и т.д.). На этом основные операции с СА завершены.
Далее клиент должен выбрать ИС и установить сокет именно с ИС, при входе на ИС сокет с СО разрывается. Но после разрыва работа с ОС не закончена:
Каждую минуту клиент устанавливает новый сокет с СА, передаёт ему покетом логин/пароль (+ Стандартный заголовок и ID пакета, о них ниже), затем сокет закрывается и действия повторяются через 1 минуту - Это есть информирование СА клиентом о том, что клиент ещё в игре и всё хорошо. Так же при закрытии ПБ клиент устанавливает сокет с СА и сообщает ему что "ПБ Закрыт", после чего закрывает сокет и ПБ.

Структура пакетов PB:
Любой пакет это лишь набор байтов, допустим нам от клиента пришёл такой пакет:
2 0 15 10 47 51
Его размер - 6 байт. Это пакет о котором я писал выше - который отправляется каждую минуту клиентом на СА. Разбираем пакет:
Первые 2 байта это РАЗМЕР ОСНОВНОЙ ЧАСТИ ПАКЕТА.
Вторые 2 байта это ID ПАКЕТА - ID пакета сообщает клиенту или серверу чего от него вообще хотят, т.е. ID пакета для подтверждения того что клиент ещё
работает это "15 10". Всё что идёт дальше - это ОСНОВНАЯ ЧАСТЬ ПАКЕТА. Т.е. "47 51" - основная часть пакета, всего 2 байта.
Подитожим:
"2 0 "- Первые 2 байта это Размер основной части пакета (Т.е. в нашем случае это 2 байта, всё правильно)
"15 10 " - Вторые 2 байта это ID пакета
"47 51" - всё что после первых 4-х байтов это основная часть пакета (Размер основной части пакета есть в первых двух байтах пакета).

С помощью таких пакетов общается сервер и клиент, структура всегда одинаковая : "РазмерОсновнойЧасти IDпакета основная часть"
Исходя из ID пакета сервер или клиент решает что ему вообще делать после этого пакета, или этот пакет является ответом на его запрос и т.д., думаю это понятно.

ИС(Игровой сервер):
После входа на ИС клиент опять устанавливает сокет, но уже не с сервером авторизации а с игровым сервером, и далее общается с ним - получает информацию о персе, получает список серверов или комнат на сервере, создаёт свои комнаты, юзает магазин и т.д. Покеты ИС ничем не отличаются от пакетов СА, так что вы сами в них будете разбираться (Ибо я разобрался только с пакетами СА, а в ИС даже не начинал копаться, но структура пакетов там таже - я это гарантирую).

Чуть не забыл, сервер авторизации работает на порту 39190, на счёт игровых серверов я не знаю - скорее всего клиенту передаётся значение IP/PORT и по ним клиент заходит на ИС, хотя возможно я ошибаюсь - это уже ваша работа.

+ Не совсем разобрался с кодировкой, с одной стороны кажется что ASCII а с другой что используются просто числовые значения байт, видимо в пакетах это смешано и парсится сервером/клиентом, т.е. например ник читается через ASCII, а список сервером просто числовым значением байта, и если считать весь массив байтов через ASCII то получится джигурда, так что нужно будет долго бегать с бубном и колдовать над каждым пакетом чтобы понять что значит каждый байт, в чём я вам и желаю удачи, а сам займусь чем-то более интересным.

Итог:
Я убил 4 дня на изучение пакетного уровня PB, структуры серверной части, да и вообще.
От + не откажусь.
________________
  Ответить с цитированием
Старый 07.07.2012, 14:06   #2
 Старший сержант
Аватар для slava-zis
 
slava-zis троюродный дядя Чака Норрисаslava-zis троюродный дядя Чака Норрисаslava-zis троюродный дядя Чака Норрисаslava-zis троюродный дядя Чака Норрисаslava-zis троюродный дядя Чака Норрисаslava-zis троюродный дядя Чака Норрисаslava-zis троюродный дядя Чака Норрисаslava-zis троюродный дядя Чака Норрисаslava-zis троюродный дядя Чака Норрисаslava-zis троюродный дядя Чака Норрисаslava-zis троюродный дядя Чака Норриса
Регистрация: 18.02.2011
Сообщений: 232
Популярность: 8824
Сказал(а) спасибо: 43
Поблагодарили 801 раз(а) в 240 сообщениях
Отправить сообщение для slava-zis с помощью Skype™
 
По умолчанию Re: Разработка сервера PB - Вся информация

Цитата:
Сообщение от Boomber™(2)Посмотреть сообщение
если некоторые начнут делать,они тупо забросят это,и лишь некоторые будут идти до конца..Не вижу смысла в теме кому надо тот прогуглит,а тут...

ну тоже самое можно сказать и про геймхакинг в целом
________________
Hack for ShadowCompany
Hack for War Thunder
Дно геймхакинга
  Ответить с цитированием
Старый 07.07.2012, 18:06   #3
 Разведчик
Аватар для mr.alex772
 
mr.alex772 скоро будет известенmr.alex772 скоро будет известенmr.alex772 скоро будет известенmr.alex772 скоро будет известен
Регистрация: 03.01.2012
Сообщений: 2
Популярность: 374
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Разработка сервера PB - Вся информация

Вы тут не говорите..так)... А вот тема *****! Т.к. такой проэкт существует и я в нем участвую!)[Ссылки могут видеть только зарегистрированные пользователи. ]
  Ответить с цитированием
Старый 07.07.2012, 18:46   #4
 Разведчик
Аватар для Felixx3452
 
Felixx3452 скоро будет известенFelixx3452 скоро будет известенFelixx3452 скоро будет известенFelixx3452 скоро будет известен
Регистрация: 18.11.2011
Сообщений: 2
Популярность: 310
Сказал(а) спасибо: 0
Поблагодарили 4 раз(а) в 2 сообщениях
 
По умолчанию Re: Разработка сервера PB - Вся информация

Хм. пакеты не одинаковые, вернее их структура.
От сервера к клиенту одно, от клиента к серверу - другое.
например размер от Клиента к серверу всего 1 байт а не 2.
а от Сервера к клиенту не 1 байт а 2.
Стандартное шифрование легкое..
Код:
package ru.pb.global.crypt;

public class BitRotate
{
	public static byte[] decrypt(byte[] data, int shift)
	{
		byte lastElement = data[data.length - 1];
		for(int i = data.length - 1; i > 0; i--)
		{
			data[i] = (byte) (((data[i - 1] & 0xFF) << (8 - shift)) | ((data[i] & 0xFF) >> shift));
		}
		data[0] = (byte) ((lastElement << (8 - shift)) | ((data[0] & 0xFF) >> shift));
		return data;
	}
}
Остается найти тока смещение.. как, не скажу...
Если писать для РуОФфа то вам не понадобимтся ширование, так как это все делает Фрост (Но так как фрост не сконектится с иновой он будет в ОФФ и шифрованить ниче не будет), и то только от клиента к Игровому серверу. Сервер авторитизации полностью открыт.
Дерзайти

P.S
[Ссылки могут видеть только зарегистрированные пользователи. ]
________________
Felixx [PBDev.RU]

Последний раз редактировалось Felixx3452; 07.07.2012 в 18:55.
  Ответить с цитированием
Старый 07.07.2012, 19:44   #5
Заблокирован
 Рыцарь-капитан
Аватар для warl0ck
 
warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(warl0ck сломал счётчик популярности :(
Регистрация: 29.01.2010
Сообщений: 547
Популярность: 41279
Сказал(а) спасибо: 692
Поблагодарили 2,270 раз(а) в 1,035 сообщениях
 
По умолчанию Re: Разработка сервера PB - Вся информация

Цитата:
Сообщение от Felixx3452Посмотреть сообщение
Остается найти тока смещение.. как, не скажу...
Если писать для РуОФфа то вам не понадобимтся ширование, так как это все делает Фрост (Но так как фрост не сконектится с иновой он будет в ОФФ и шифрованить ниче не будет), и то только от клиента к Игровому серверу. Сервер авторитизации полностью открыт.
Дерзайти

те если запустить "поинбленк.ехе логин пароль" пакеты будут лететь не шифрованные, или нужно убрать фрост с клиента игры?
  Ответить с цитированием
Старый 07.07.2012, 20:14   #6
 Разведчик
Аватар для Fojest
 
Fojest скоро будет известенFojest скоро будет известенFojest скоро будет известен
Регистрация: 03.07.2012
Сообщений: 11
Популярность: 202
Сказал(а) спасибо: 4
Поблагодарили 32 раз(а) в 8 сообщениях
Отправить сообщение для Fojest с помощью Skype™
 
По умолчанию Re: Разработка сервера PB - Вся информация

Цитата:
Сообщение от warl0ckПосмотреть сообщение
те если запустить "поинбленк.ехе логин пароль" пакеты будут лететь не шифрованные, или нужно убрать фрост с клиента игры?

Запусти прокси сервер на локалхосте по порту 39190, в конфиге PB укажи 127.0.0.1, включи запись логов и будет тебе счастье - увидишь что пакеты при включенном фросте что при выключенном ничем не отличаются (По крайней мере для логин сервера, дальше я не полез)

Добавлено через 2 минуты
Цитата:
Сообщение от Boomber™(2)Посмотреть сообщение
Fojest, не понимаю зачем ты убил время для этой темы?
если некоторые начнут делать,они тупо забросят это,и лишь некоторые будут идти до конца..Не вижу смысла в теме кому надо тот прогуглит,а тут...

Чтобы подтолкнуть кого-то на создание паблик-сервера и хоть чуть чуть ему помочь. Неужели не понятно?)

Добавлено через 4 минуты
Цитата:
Сообщение от mr.alex772Посмотреть сообщение
Вы тут не говорите..так)... А вот тема *****! Т.к. такой проэкт существует и я в нем участвую!)[Ссылки могут видеть только зарегистрированные пользователи. ]

Может быть хватит его пиарить? Ух как злятся админы pbdev на меня, а почему не понятно.. Может быть потому-что до этого об даже конфиг редактировать никто не мог, а тут такой фейл.

Последний раз редактировалось Fojest; 07.07.2012 в 20:18. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 07.07.2012, 21:09   #7
 Разведчик
Аватар для Felixx3452
 
Felixx3452 скоро будет известенFelixx3452 скоро будет известенFelixx3452 скоро будет известенFelixx3452 скоро будет известен
Регистрация: 18.11.2011
Сообщений: 2
Популярность: 310
Сказал(а) спасибо: 0
Поблагодарили 4 раз(а) в 2 сообщениях
 
По умолчанию Re: Разработка сервера PB - Вся информация

Цитата:
Сообщение от warl0ckПосмотреть сообщение
те если запустить "поинбленк.ехе логин пароль" пакеты будут лететь не шифрованные, или нужно убрать фрост с клиента игры?

Именно так. Фрост скажет ошибку, и не запустится.
И шифрованить не будет ничего.

Цитата:
Сообщение от FojestПосмотреть сообщение
Запусти прокси сервер на локалхосте по порту 39190, в конфиге PB укажи 127.0.0.1, включи запись логов и будет тебе счастье - увидишь что пакеты при включенном фросте что при выключенном ничем не отличаются (По крайней мере для логин сервера, дальше я не полез)

Бррр. Бред такой. Читай что я выше писал.

Было написано:
"Сервер авторитизации полностью открыт."
________________
Felixx [PBDev.RU]

Последний раз редактировалось Felixx3452; 07.07.2012 в 21:14.
  Ответить с цитированием
Старый 07.07.2012, 21:17   #8
 Разведчик
Аватар для Fojest
 
Fojest скоро будет известенFojest скоро будет известенFojest скоро будет известен
Регистрация: 03.07.2012
Сообщений: 11
Популярность: 202
Сказал(а) спасибо: 4
Поблагодарили 32 раз(а) в 8 сообщениях
Отправить сообщение для Fojest с помощью Skype™
 
По умолчанию Re: Разработка сервера PB - Вся информация

Цитата:
Сообщение от Felixx3452Посмотреть сообщение
Бррр. Бред такой. Читай что я выше писал.

Бфло написано:
"Сервер авторитизации полностью открыт."

Ответил в скайпе
  Ответить с цитированием
Старый 08.07.2012, 01:19   #9
 Разведчик
Аватар для Felixx3452
 
Felixx3452 скоро будет известенFelixx3452 скоро будет известенFelixx3452 скоро будет известенFelixx3452 скоро будет известен
Регистрация: 18.11.2011
Сообщений: 2
Популярность: 310
Сказал(а) спасибо: 0
Поблагодарили 4 раз(а) в 2 сообщениях
 
По умолчанию Re: Разработка сервера PB - Вся информация

Мазай, блин.. чего не отвечаеш!?
________________
Felixx [PBDev.RU]
  Ответить с цитированием
Старый 08.07.2012, 02:27   #10
 Разведчик
Аватар для iamzero
 
iamzero лучик света в грозовом небеiamzero лучик света в грозовом небеiamzero лучик света в грозовом небеiamzero лучик света в грозовом небеiamzero лучик света в грозовом небеiamzero лучик света в грозовом небеiamzero лучик света в грозовом небе
Регистрация: 04.05.2012
Сообщений: 18
Популярность: 805
Сказал(а) спасибо: 24
Поблагодарили 25 раз(а) в 18 сообщениях
 
По умолчанию Re: Разработка сервера PB - Вся информация

Цитата:
Сообщение от Felixx3452Посмотреть сообщение
Мазай, блин.. чего не отвечаеш!?

сдался ты ему, он щас драйвером занят
  Ответить с цитированием
Старый 13.07.2012, 03:10   #11
 Разведчик
Аватар для PrivateWH
 
PrivateWH на правильном путиPrivateWH на правильном пути
Регистрация: 07.07.2012
Сообщений: 2
Популярность: 181
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
 
По умолчанию Re: Разработка сервера PB - Вся информация

Fojest, читал-читал и не понял, как его запустить (для себя одного)?
  Ответить с цитированием
Старый 13.07.2012, 22:23   #12
 Разведчик
Аватар для Felixx3452
 
Felixx3452 скоро будет известенFelixx3452 скоро будет известенFelixx3452 скоро будет известенFelixx3452 скоро будет известен
Регистрация: 18.11.2011
Сообщений: 2
Популярность: 310
Сказал(а) спасибо: 0
Поблагодарили 4 раз(а) в 2 сообщениях
 
По умолчанию Re: Разработка сервера PB - Вся информация

Ещо бывает пакеты, в data которых содержится несколько пакетов.. Такие пакеты ходят как от клиента, так и от сервера... плюс есть нестандартные.... например пишут что в пакете 10 байт, а насамом деле приходит 20 байт.. или наобоот пишут 20 байт а приходит 10 байт, причем в первом случае там нету второго пакета.. иногда там даже не просто нули а какие то данные.
Пример:
Код:
4f:00:08:0e:01:00:00:00:53:50:41:52:41:20:4f:20:4d:55:4f:52:49:20:21:21:21:00:00:00:c0:49:00:2e:00:00:01:05:02:10:05:0f:20:00:44:61:72:6b:53:6b:65:6c:65:74:6f:6e:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:42:00:00:00:00:00:01:00:64:02:02:0e:00:00:00:00:0c:01:00:00:00:00:00:00:00:00:00:ff:ff:ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:0c:05:11:01:00:00:03:00:00:00:05:03:01:28:18:00:00:00:00:00:00:44:52:65:61:6d:54:65:61:4d:00:72:61:bb:99:00:6e:00:00:00:00:00:00:00:00:00:00:00:00:ff:ff:ff:ff:00:00:00:00:00:00:00:52:65:61:6d:54:65:61:4d:00:72:61:bb:99:00:6e:00:00:00:00:00:00:00:00:00:00:00:00:ff:ff:ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:ff:ff:ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:ff:ff:ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:ff:ff:ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:ff:ff:ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:ff:ff:ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:ff:ff:ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:ff:ff:ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:ff:ff:ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:ff:ff:ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:ff:ff:ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:ff:ff:ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:ff:ff:ff:ff:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:20:00:08:0f:01:00:00:00:00:00:00:00:2d:10:aa:3b:16:14:aa:3b:39:3b:af:41:00:00:00:00:50:63:f6:3b:01:00:00:00:20:00:08:0f:01:00:00:00:01:00:00:00:2d:10:aa:3b:16:14:aa:3b:39:3b:af:41:00:00:00:00:50:63:f6:3b:04:07:00:00:0c:00:19:0f:03:00:00:00:00:00:00:00:00:00:00:00
Код:
pos: 0|| H: 79
pos: 2|| H: 3592
pos: 4|| B[]: 1 0 0 0 83 80 65 82 65 32 79 32 77 85 79 82 73 32 33 33 33 0 0 0 192 73 0 46 0 0 1 5 2 16 5 15 32 0 68 97 114 107 83 107 101 108 101 116 111 110 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 66 0 0 0 0 0 1 0 
pos: 83|| H: 612
pos: 85|| H: 3586
pos: 87|| B[]: 0 0 0 0 12 1 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12 5 17 1 0 0 3 0 0 0 5 3 1 40 24 0 0 0 0 0 0 68 82 101 97 109 84 101 97 77 0 114 97 187 153 0 110 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 82 101 97 109 84 101 97 77 0 114 97 187 153 0 110 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
pos: 699|| H: 32
pos: 701|| H: 3848
pos: 703|| B[]: 1 0 0 0 0 0 0 0 45 16 170 59 22 20 170 59 57 59 175 65 0 0 0 0 80 99 246 59 1 0 0 0 
pos: 735|| H: 32
pos: 737|| H: 3848
pos: 739|| B[]: 1 0 0 0 1 0 0 0 45 16 170 59 22 20 170 59 57 59 175 65 0 0 0 0 80 99 246 59 4 7 0 0 
pos: 771|| H: 12
pos: 773|| H: 3865
pos: 775|| B[]: 3 0 0 0 0 0 0 0 0 0 0 0 

 79 байт сначала, потом 612 байт, потом 32, опять 32, потом 12
 получаетя 5 пакетов в одном
Слушать клиента можно примерно так:
Код:
	public void read(SelectionKey key)
	{
		NioSession nioSession = (NioSession) key.attachment();

		if(nioSession.getSocket().isClosed())
		{
			return;
		}
		try
		{
			int readBytes = 0;

			try
			{
				readBytes = nioSession.read(nioSession.READ_BUFFER);
			}
			finally
			{
				nioSession.READ_BUFFER.flip();
			}

			if(readBytes == -1)
			{
				_service.close(nioSession, CloseType.NORMAL);
			}
			if(readBytes == -2)
			{
				_service.close(nioSession, CloseType.FORCE);
			}

			if(readBytes == 0)
			{
				return;
			}

			while(nioSession.READ_BUFFER.remaining() > HEADER_SIZE && nioSession.READ_BUFFER.remaining() >= (nioSession.READ_BUFFER.getUnsigned(nioSession.READ_BUFFER.position())))
			{
				int size = (nioSession.READ_BUFFER.getUnsigned()) + HEADER_SIZE;
				int hskey = (nioSession.READ_BUFFER.getUnsigned());

				NioBuffer OUT = NioBuffer.allocate(size);
				OUT.order(ByteOrder.LITTLE_ENDIAN);
				OUT.put(nioSession.READ_BUFFER.array(), nioSession.READ_BUFFER.position(), size);
				OUT.flip();

				nioSession.READ_BUFFER.position(nioSession.READ_BUFFER.position() + size);

				_service.fireReceiveBuffer(nioSession, OUT);
			}

			if(nioSession.READ_BUFFER.hasRemaining())
			{
				nioSession.READ_BUFFER.compact();
			}
			else
			{
				nioSession.READ_BUFFER.clear();
			}
		}
		catch(Exception e)
		{
			if(e instanceof IOException)
			{
				_service.close(nioSession, CloseType.FORCE);
			}
			_service.fireCatchException(e);
		}
	}
Забыл, если использовать как код сервера для руофф клиента что прочитать можно не 2 раза по 1 байту, а сразу 2 байта, ибо второй байт всегда 0, данный код использую для американского клиента, но пока не отлажено, пока небыло времени поймать мультипакет от клиента, чтобы разобраться есть там вообще второй байт или нету, ИМХО это байт от защиты... но так как он уже был может там будет 0 или вообще его небудет.

Добавлено через 12 часов 59 минут
И так, поймал мульти пакетик (data.size=396) от клиента, посылается Гейм Серверу...
Код:
8881C0562A401000C0040009DA65F1A19DFCF145C98B5E7069699CEC0B90646D511E5D9A5D4D2010B3B1282BDA03A4CC09BDA182EF4327CC3ABA1E6F1B4CA2E2AB547ED60C362B6B66945625A9EFEC6DF46944650164888C6D9E7C20FBE32F5D697E1F2157C7856B735287C48FDE702D9097264FD916A66CE4AEF07761E953EA4568D482A116471C7E2C664CC47F9E99FDDE942F7BB4BC975E48085E4C0ED4CF8A0492CD9B1606FA2A5D15D1399D900AECFB91D6809D2C9C951CCD0F8BE4F75E8D9C409F90DE0AED8C246192C4B16751F01C49431E15E67FB09ADC2DBEFF7CE6C8F92BC73ABFE55FE7E9258D3B899D754A5AA08CF1861552D0736A5A57180C899F8D99AD65DA26BF56E44F2F64C1723A9D5DE974C2C0856974AD7BC320B50F554B9F66832F406EDE16380FBD5945FC502D6EE8C41A21F5055CAFC26E128CD522890BFC72AE9A2267CD2192DCB955559E393C5CA141935B2013950896ECF63989AFFC473AEA3D138239B936AE98035E325A55F014B80DC87AE89DB9FA1A20E48CE4DF5C6A81A7CB66B115C750
Расшифруем его полностью...
Код:
18-0A-C5-48-02-00-18-00-80-01-3B-4C-BE-34-33-BF-9E-28-B9-31-6B-CE-0D-2D-33-9D-81-72-0C-8D-AA-23-CB-B3-4B-A9-A4-02-16-76-25-05-7B-40-74-99-81-37-B4-30-5D-E8-64-F9-87-57-43-CD-E3-69-94-5C-55-6A-8F-DA-C1-86-C5-6D-6C-D2-8A-C4-B5-3D-FD-8D-BE-8D-28-8C-A0-2C-91-11-8D-B3-CF-84-1F-7C-65-EB-AD-2F-C3-E4-2A-F8-F0-AD-6E-6A-50-F8-91-FB-CE-05-B2-12-E4-C9-FB-22-D4-CD-9C-95-DE-0E-EC-3D-2A-7D-48-AD-1A-90-54-22-C8-E3-8F-C5-8C-C9-98-8F-F3-D3-3F-BB-D2-85-EF-76-97-92-EB-C9-01-0B-C9-81-DA-99-F1-40-92-59-B3-62-C0-DF-45-4B-A2-BA-27-33-B2-01-5D-9F-72-3A-D0-13-A5-93-92-A3-99-A1-F1-7C-9E-EB-D1-B3-88-13-F2-1B-C1-5D-B1-84-8C-32-58-96-2C-EA-3E-03-89-28-63-C2-BC-CF-F6-13-5B-85-B7-DF-EF-9C-D9-1F-25-78-E7-57-FC-AB-FC-FD-24-B1-A7-71-33-AE-A9-4B-54-11-9E-30-C2-AA-5A-0E-6D-4B-4A-E3-01-91-33-F1-B3-35-AC-BB-44-D7-EA-DC-89-E5-EC-98-2E-47-53-AB-BD-2E-98-58-10-AD-2E-95-AF-78-64-16-A1-EA-A9-73-EC-D0-65-E8-0D-DB-C2-C7-01-F7-AB-28-BF-8A-05-AD-DD-18-83-44-3E-A0-AB-95-F8-4D-C2-51-9A-A4-51-21-7F-8E-55-D3-44-4C-F9-A4-32-5B-97-2A-AA-B3-C7-27-8B-94-28-32-6B-64-02-72-A1-12-DD-9E-C7-31-35-FF-88-E7-5D-47-A2-70-47-37-26-D5-D3-00-6B-C6-4B-4A-BE-02-97-01-B9-0F-5D-13-B7-3F-43-44-1C-91-9C-9B-EB-8D-50-34-F9-6C-D6-22-B8-EA
Первый размер обрезан, ибо шифруется оно без первых 2х байтов...
1й байт, который обрезался(88) - размер первого пакета должен быть.. 136 тобиш.
Читаем ОПКОД и 136 байт..
pos: 0|| H: 2584
pos: 2|| B[]: 197 72 2 0 24 0 128 1 59 76 190 52 51 191 158 40 185 49 107 206 13 45 51 157 129 114 12 141 170 35 203 179 75 169 164 2 22 118 37 5 123 64 116 153 129 55 180 48 93 232 100 249 135 87 67 205 227 105 148 92 85 106 143 218 193 134 197 109 108 210 138 196 181 61 253 141 190 141 40 140 160 44 145 17 141 179 207 132 31 124 101 235 173 47 195 228 42 248 240 173 110 106 80 248 145 251 206 5 178 18 228 201 251 34 212 205 156 149 222 14 236 61 42 125 72 173 26 144 84 34 200 227 143 197 140 201

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

Смотрим
pos: 138|| C: 152 - Предпологаемый размер
pos: 139|| C: 143 - Что то от защиты
pos: 140|| H: 54259 - ОПКОД??? некатит чото

Попробуем по другому, не будем читать байт от защиты...
pos: 138|| C: 152 - размер
pos: 139|| H: 62351 - Опкод??? нет не он...

Вот какие странности бывают вобщем
Пытался разбить и расшифровывать байты по отдельности - та же история
Есть мысли?)

Кстати, кому нужно, то shift для BitRotate сдесь равен 3

Код на C#
Код:
        public static byte[] decrypt(byte[] data, int shift)
        {
            byte lastElement = data[data.Length - 1];
            for (int i = data.Length - 1; i > 0; i--)
            {
                data[i] = (byte)((data[i - 1] << (8 - shift)) | (data[i] >> shift));
            }
            data[0] = (byte)((lastElement << (8 - shift)) | (data[0] >> shift));
            return data;
        }
Для Java:
Код:
	public static byte[] decrypt(byte[] data, int shift)
	{
		byte lastElement = data[data.length - 1];
		for(int i = data.length - 1; i > 0; i--)
		{
			data[i] = (byte) (((data[i - 1] & 0xFF) << (8 - shift)) | ((data[i] & 0xFF) >> shift));
		}
		data[0] = (byte) ((lastElement << (8 - shift)) | ((data[0] & 0xFF) >> shift));
		return data;
	}
Копию байтов без первых 2х всовываем в декрипт..
Код:
            byte[] bytes = new byte[_bytes.Length - 2];
            Array.Copy(_bytes, 2, bytes, 0, bytes.Length);

            bytes = BitRotate.decrypt(bytes, shift);
Добавлено через 13 часов 40 минут
Но! Судя по клиенту:
Код:
        i3NetworkPacket__SetProtocol(&v227, 2584);
        i3NetworkPacket__WriteData(&v227, &v228, 2);
        i3NetworkPacket__WriteData(&v227, &v229, 2);
        i3NetworkPacket__WriteData(&v227, &v233, 2);
        i3NetworkPacket__WriteData(&v227, &v232, v233);
Смотрим...
Код:
pos: 0|| H: 2584
pos: 2|| H: 18629 -> Это вставляется в пакет в другом месте... и каждый приход пакета - разное значение. что то для UDP пакетов...
pos: 4|| H: 2
pos: 6|| H: 24
pos: 8|| H: 384
pos: 10|| B[]: 59 76 190 52 51 191 158 40 185 49 107 206 13 45 51 157 129 114 12 141 170 35 203 179 75 169 164 2 22 118 37 5 123 64 116 153 129 55 180 48 93 232 100 249 135 87 67 205 227 105 148 92 85 106 143 218 193 134 197 109 108 210 138 196 181 61 253 141 190 141 40 140 160 44 145 17 141 179 207 132 31 124 101 235 173 47 195 228 42 248 240 173 110 106 80 248 145 251 206 5 178 18 228 201 251 34 212 205 156 149 222 14 236 61 42 125 72 173 26 144 84 34 200 227 143 197 140 201 152 143 243 211 63 187 210 133 239 118 151 146 235 201 1 11 201 129 218 153 241 64 146 89 179 98 192 223 69 75 162 186 39 51 178 1 93 159 114 58 208 19 165 147 146 163 153 161 241 124 158 235 209 179 136 19 242 27 193 93 177 132 140 50 88 150 44 234 62 3 137 40 99 194 188 207 246 19 91 133 183 223 239 156 217 31 37 120 231 87 252 171 252 253 36 177 167 113 51 174 169 75 84 17 158 48 194 170 90 14 109 75 74 227 1 145 51 241 179 53 172 187 68 215 234 220 137 229 236 152 46 71 83 171 189 46 152 88 16 173 46 149 175 120 100 22 161 234 169 115 236 208 101 232 13 219 194 199 1 247 171 40 191 138 5 173 221 24 131 68 62 160 171 149 248 77 194 81 154 164 81 33 127 142 85 211 68 76 249 164 50 91 151 42 170 179 199 39 139 148 40 50 107 100 2 114 161 18 221 158 199 49 53 255 136 231 93 71 162 112 71 55 38 213 211 0 107 198 75 74 190 2 151 1 185 15 93 19 183 63 67 68 28 145 156 155 235 141 80 52 249 108 214 34 184 234
Тоесть получается тут всего лиш 1 пакет.. Но почему тогда размер написан 136 (88) а не 392 пока не ясно)

Добавлено через 14 часов 29 минут
Ещо один мультипакет. НОРМАЛЬНЫЙ.
оригинал = дешифровано shift 2, без 1го и 2го байтов.

Все что пришло.
Код:
02:80:1c:2a:18:c0:02:80:ac:2a:6c:79 = 47-0A-86-30-00-A0-2B-0A-9B-1E
Никак не получается.
Код:
pos: 0|| H: 2631 - опкод
pos: 2|| H: 12422 - наши 2 байта
pos: 4|| C: 0 - размер следущего?
pos: 5|| C: 160 - - ТОже не то
pos: 4|| H: 40960 - опкод следущего? не...
Делаем подругому
Разбиваем его .. 1йбайт размер, 2йбайт забиваем на него.. опкод, далее стока байтов скока сказал 1й байт
Получаем:
02:80:1c:2a:18:c0 = 07-0A-86-30
02:80:ac:2a:6c:79 = 6B-0A-9B-1E

1)
Код:
pos: 0|| H: 2567
pos: 2|| H: 12422

Это:
case 2567:
{
	packet = new PROTOCOL_BASE_GET_MYINFO_REQ();
	break;
}
2)
Код:
pos: 0|| H: 2667
pos: 2|| H: 7835

Это:
case 2667:
{
	packet = new opcode_2667(); // Настройки юзера помойму.
	break;
}
ТОесть каждый пакет расшифровывается отдельно сам по себе, что впринципе логично.

проверим ешо один пакетик тоже шифт = 2.. потому что из одной сессии..

Код:
02:80:40:08:61:90:02:80:90:28:0d:1d
02:80:40:08:61:90 = 10-02-18-64
02:80:90:28:0d:1d = 64-0A-03-47

pos: 0|| H: 528
pos: 2|| H: 25624

pos: 0|| H: 2660
pos: 2|| H: 18179
Все сходиться, все как бэ отлично...
Но что же тогда с тем, другим пакетом Пока что остается загадкой.
________________
Felixx [PBDev.RU]

Последний раз редактировалось Felixx3452; 14.07.2012 в 13:13. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 14.07.2012, 23:18   #13
 Разведчик
Аватар для Felixx3452
 
Felixx3452 скоро будет известенFelixx3452 скоро будет известенFelixx3452 скоро будет известенFelixx3452 скоро будет известен
Регистрация: 18.11.2011
Сообщений: 2
Популярность: 310
Сказал(а) спасибо: 0
Поблагодарили 4 раз(а) в 2 сообщениях
 
По умолчанию Re: Разработка сервера PB - Вся информация

Вобщем пришлось делать разграничения по тому, какой сервер запущен. АУТХ или ГЕЙМ...
Мультипакеты как было замечено посылаются клиентом, только к АУТХ серверу.. а к гейму всегда по одному пакету. Поэтому пакет к ГС составляется по всему буфферу а не по тому что написано в первом байте, и если что то осталось составляется второй пакет, как делается это к АутхСерверу..
Больше варианта никакого не нашол вобщем.

Кому интересно выглядит это так:
Код:
if(DevelopConfig.IS_AUTH)
{
	while(nioSession.READ_BUFFER.remaining() > HEADER_SIZE && nioSession.READ_BUFFER.remaining() >= (nioSession.READ_BUFFER.getUnsigned(nioSession.READ_BUFFER.position())))
	{
		int size = (nioSession.READ_BUFFER.getUnsigned()) + HEADER_SIZE;
		int hskey = (nioSession.READ_BUFFER.getUnsigned());
		// Logger.getLogger(NioProcessor.class).info("remaining: " + nioSession.READ_BUFFER.remaining());
		NioBuffer OUT = NioBuffer.allocate(size);
		OUT.order(ByteOrder.LITTLE_ENDIAN);
		OUT.put(nioSession.READ_BUFFER.array(), nioSession.READ_BUFFER.position(), size);
		OUT.flip();
		nioSession.READ_BUFFER.position(nioSession.READ_BUFFER.position() + size);
		_service.fireReceiveBuffer(nioSession, OUT);
	}
}
else
{
	while(nioSession.READ_BUFFER.remaining() > 0)
	{
		int size = nioSession.READ_BUFFER.remaining();
		NioBuffer OUT = NioBuffer.allocate(size);
		OUT.order(ByteOrder.LITTLE_ENDIAN);
		OUT.put(nioSession.READ_BUFFER.array(), nioSession.READ_BUFFER.position(), size);
		OUT.flip();
		// _log.info("All:\n" + NetworkUtil.printData(OUT));
		nioSession.READ_BUFFER.position(nioSession.READ_BUFFER.position() + size);
		_service.fireReceiveBuffer(nioSession, OUT);
	}
}
Добавлено через 22 часа 20 минут
Чо не ужели никому больше это не интересно?
Fojest Для кого тогда делать опен сурс проект то?))))
Всем по барабану, все ждут готовое.... када где нить, когда нить появится все рабочее на халяву, и потом вазмут код и будут доделывать... как было с L2,Aion,Tera и тд и тп... Обидно.
________________
Felixx [PBDev.RU]

Последний раз редактировалось Felixx3452; 15.07.2012 в 21:42. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 01.10.2012, 14:11   #14
 Разведчик
Аватар для rondo11
 
rondo11 никому не известный тип
Регистрация: 29.06.2012
Сообщений: 1
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Отправить сообщение для rondo11 с помощью ICQ Отправить сообщение для rondo11 с помощью Skype™
 
По умолчанию Re: Разработка сервера PB - Вся информация

Это все конечно мутно,но разобраться можно))
________________
Обучаю багам и хакам вконтакте
  Ответить с цитированием
Старый 01.10.2012, 14:42   #15
 Сержант
Аватар для N1ks0n
 
N1ks0n сломал счётчик популярности :(N1ks0n сломал счётчик популярности :(N1ks0n сломал счётчик популярности :(N1ks0n сломал счётчик популярности :(N1ks0n сломал счётчик популярности :(N1ks0n сломал счётчик популярности :(N1ks0n сломал счётчик популярности :(N1ks0n сломал счётчик популярности :(N1ks0n сломал счётчик популярности :(N1ks0n сломал счётчик популярности :(N1ks0n сломал счётчик популярности :(
Регистрация: 01.04.2012
Сообщений: 149
Популярность: 23473
Золото Zhyk.Ru: 2
Сказал(а) спасибо: 269
Поблагодарили 221 раз(а) в 173 сообщениях
Отправить сообщение для N1ks0n с помощью Skype™
 
По умолчанию Re: Разработка сервера PB - Вся информация

Вар когда ты уже создашь свой сервер?
________________
37-ой президент США
[Ссылки могут видеть только зарегистрированные пользователи. ]
  Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Услуги] Разработка фейков FraPsi Товары/услуги в Сети 0 14.12.2011 15:41
разработка kiler1997 Общение и обсуждение S4 League 10 22.03.2011 15:47

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 01:06.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net