Ru-MaNGOS

Вернуться   Ru-MaNGOS > Ядро > Опкоды, Формулы, Клиент

Важная информация

Опкоды, Формулы, Клиент Разбор и изучение взаимодействия клиента с сервером

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.06.2010, 09:58   #1
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию

Спасибо всем за советы и подсказки:
Цитата:
А помоему некорректно определяются large пакеты...
Да так и есть, щас переделаю:
http://github.com/arrai/tiawps/blob/...pter/decrypt.c
Если я правильно понял с примера, то нужно дополнительно декриптовать еще 1 байт, или же сразу нужный размер.
Код:
private static void ProcessWorldPacket(byte[] data, Direction direction)
{
	int i = 0, size = 0, opcode = 0;
	bool isLarge = (data[i] & 0x80) != 0;
	int HEADER_LENGTH = isLarge ? 4 : 5;

	if (direction == Direction.SERVER)
	{
		Crypt.DecryptServer(data, 0, HEADER_LENGTH);
	}
	else
	{
		HEADER_LENGTH += 2;
		Crypt.DecryptClient(data, 0, HEADER_LENGTH);
	}

	if (isLarge)
		size = data[i++] & 0x7F;

	size = (size << 8) | data[i++];
	size = (size << 8) | data[i++];

	for (int j = 0; j < HEADER_LENGTH - 2; j++)
		opcode |= ((0xFF & data[i++]) << (8 * j));

	size += (2 + (isLarge ? 1 : 0));

	if (size > data.Length)
	{
		Console.WriteLine("ERROR: {0} Size = {1} > packet.Length = {2}", direction, size, data.Length);
		return;
	}

	using (BinaryReader reader = new BinaryReader(new MemoryStream(data)))
	{
		reader.BaseStream.Position += HEADER_LENGTH;
		byte[] newData = reader.ReadBytes(size - HEADER_LENGTH);
		HandleWorldPacket((WorldOpcodes)opcode, newData);

		Console.WriteLine("{0}:\tHeader = {1}\tPacket = {2}\t{3}\tOpcode: {4}",
			direction, size, data.Length, data.Length == size ? "OK" : "REUSE", (WorldOpcodes)opcode);

		if (size < data.Length)
		{
			ProcessWorldPacket(reader.ReadBytes(data.Length - size), direction);
		}  
	} 
}
Но надо проверить, а это уже вечером.

Цитата:
это означает, что когда вы в снифере видите "пакет", то это совсем не означает что он пришел полностью. это даже не означает что это пакет вообще. это просто какие то данные в потоке tcp. и даже на следующий "recv_from_server" тоже не обязательно пакет придет полностью. под "пакетом" будем подразумевать "игровой пакет" от близзов, дамп опкода.
Это я тоже пытался учитывать, но как показал лог сниффера ни разу это не был фрагмент пакета, к тому же все равно приходили бы и целые пакеты.

Цитата:
ну и если вам вдруг будет все равно в каком формате записывать,
не все равно, формат ваш (pkt)

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

Да и с моим ничтожным опытом в программировании (чуть больше года на любительском уровне и когда есть время) наверное не постичь тайну аутеффикации, так как надо делать хук (подменить ИП сервера в памяти), надо еще чего-то и еще...
Ладно хватит писать, пойду работать...
__________________
Konctantin вне форума   Ответить с цитированием
Старый 01.06.2010, 15:30   #2
abdula123
Пользователь
 
Регистрация: 22.03.2010
Сообщений: 41
Сказал(а) спасибо: 7
Поблагодарили 25 раз(а) в 15 сообщениях
abdula123 На верном пути
По умолчанию

Цитата:
Сообщение от Konctantin Посмотреть сообщение
А это как нож в горло, как видите пока не в силах сделать сниффер, а до прокси еще как до неба...

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

в самом простейшем случае - использовать готовый LSP-редиректор (proxycap, например) для переброса всех соединений wow на свой сервер. всё.

никаких подмен в памяти, никаких собственных аутентификаций.

единственная заморочка, которая там есть - это обработка второго соединения и ключей для него.
я так и не осилил ее - все эти новые сиды\хэши, осн.\доп. ключи и т.п. и
откатился простому и тупому чтению готового arc4-состояния из памяти.

Цитата:
Сообщение от TOM_RUS Посмотреть сообщение
Сначала надо расшифровать, потом проверить на флаг 0x80, если он выставлен, расшифровать еще 1 байт... А вы сначала проверяете, а потом расшифровываете.
это баг нескоро бы всплыл.

единственное место где мне встречались large пакеты - это SMSG_COMPRESSED_UPDATE_OBJECT при телепорте (или логине, что по сути одно и то-же) в даларан, в час пик, когда там бегают толпы народа.
все данные по этим разодетым и сверкающим "объектам" близы почему-то отсылают одним большим пакетом.

пока кроме этого места я больше ни одного large пакета не видел.

Последний раз редактировалось abdula123; 01.06.2010 в 15:50.
abdula123 вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
Konctantin (01.06.2010)
Старый 01.06.2010, 16:37   #3
TOM_RUS
MaNGOS Dev
 
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
TOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небес
По умолчанию

Цитата:
Сообщение от abdula123 Посмотреть сообщение
кроме этого места я больше ни одного large пакета не видел.
Список достижений тоже не маленький и приходит при каждом логине/телепорте.
TOM_RUS вне форума   Ответить с цитированием
Старый 01.06.2010, 17:18   #4
abdula123
Пользователь
 
Регистрация: 22.03.2010
Сообщений: 41
Сказал(а) спасибо: 7
Поблагодарили 25 раз(а) в 15 сообщениях
abdula123 На верном пути
По умолчанию

Цитата:
Сообщение от TOM_RUS Посмотреть сообщение
Список достижений тоже не маленький и приходит при каждом логине/телепорте.
у меня SMSG_ALL_ACHIEVEMENT_DATA - обычный пакет с 2хбайтовым размером.
наверное ачивок мало

Цитата:
[S2C] normal pkt, sz:27329, opcode:1149 (SMSG_ALL_ACHIEVEMENT_DATA)
...
[S2C] large pkt, sz:42257, opcode:502 (SMSG_COMPRESSED_UPDATE_OBJECT)

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

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

и потом использовать эти ключи для расшифроки пакетов (и обратной зашифровки - если требуется модифицировать пакеты на лету или добавлять\удалять их)

Последний раз редактировалось abdula123; 01.06.2010 в 17:26.
abdula123 вне форума   Ответить с цитированием
Старый 01.06.2010, 17:53   #5
Neverdie
Kobold Dev
 
Аватар для Neverdie
 
Регистрация: 11.03.2010
Сообщений: 22
Сказал(а) спасибо: 5
Поблагодарили 3 раз(а) в 3 сообщениях
Neverdie На верном пути
Отправить сообщение для Neverdie с помощью ICQ
По умолчанию

Цитата:
Сообщение от abdula123 Посмотреть сообщение
у меня SMSG_ALL_ACHIEVEMENT_DATA - обычный пакет с 2хбайтовым размером.
наверное ачивок мало






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

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

но теперь опять в ОПе -)

надежда опять на прокси

вот что нам не удалось просто после батлы

[11:18] <Kosuha> мне нужно всеголишь реалм лист
[11:18] <Kosuha> перекинуть
[11:18] <Kosuha> т.е. это стадия логин сервера

[12:55] <Kosuha> будет работать в области логгера и прокси
[12:55] <Kosuha> там с прокси я бы щас бился
[12:55] <Kosuha> а выяснил
[12:55] <Kosuha> что изза ИП клиент полюбому рвёт коннект
[12:56] <Kosuha> и реалм лист подменяют как что прослушивая Winsock
[12:56] <Kosuha> я в эти дебри ещё никогда не лазил даже

рук не хватате уна спросто -)) остлись просто " у самовара я и моя бабка"
__________________
Вообще-то я не специалист по этим гравицаппам...

Последний раз редактировалось Neverdie; 01.06.2010 в 17:55.
Neverdie вне форума   Ответить с цитированием
Ответ


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

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



Текущее время: 11:51. Часовой пояс GMT +3.


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot