гвард - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Сообщество Календарь
Вернуться   Форум администраторов игровых серверов > Разное / Other > Курилка / Yak floor

Курилка / Yak floor
Свободное общение, рассуждения на любые интересные вам темы.

Ответ
Опции темы
Непрочитано 26.03.2018, 21:09   #1
Аватар для 4ipolino
Пользователь

Автор темы (Топик Стартер) гвард

Доброго времени суток.
Так как в с++ не силен, подскажите как сделать.
Исходники фгвард\ргвард
Нужно отправить строку
Код:
string Signature;
на сервер в пакете 0xA1

Код:
void __cdecl new_SendPacket(unsigned int This, char *Format, ...)
{
	unsigned int retAddr = *((unsigned int*) &This - 1);

	if ((retAddr < hEngineStart) || (retAddr > hEngineEnd))
	{
		true_SendPacket(This, "cc", 0xA1, 0x01);
		ErrorExit("Bot Program Detected #3!");
	}

	if (((unsigned int) Format < hEngineStart) || ( (unsigned int) Format > hEngineEnd))
	{
		true_SendPacket(This, "cc", 0xA1, 0x02);
		ErrorExit("Bot Program Detected #4!");
	}
	if (GetCurrentThreadId() != mainThread)
	{
		true_SendPacket(This, "cc", 0xA1, 0x03);
		ErrorExit("Bot Program Detected #5!");
	}
	
	unsigned char buf[10240];
	int size = 0, len;
	wchar_t *wstr;

    va_list args;
	va_start(args, Format);

	while (*Format != 0)
	{
		switch (*Format)
		{
			case 'c':
				*(unsigned char*) (buf + size) = va_arg(args, unsigned char);
				size++;
				break;
			case 'h':
				*(unsigned short int*) (buf + size) = va_arg(args, unsigned short int);
				size += 2;
				break;
			case 'd':
				*(unsigned int*) (buf + size) = va_arg(args, unsigned int);
				size += 4;
				break;
			case 'Q':
				*(unsigned __int64*) (buf + size) = va_arg(args, unsigned __int64);
				size += 8;
				break;
			case 'b':
				len = va_arg(args, unsigned int);
				memcpy(buf + size, va_arg(args, void*), len);
				size += len;
				break;			
			case 'S':
				wstr = va_arg(args, wchar_t*);
				if (wstr == 0)
				{
					len = 2;
					*(unsigned short int*) (buf + size) = 0;
				}
				else
				{
					len = wcslen(wstr) * 2 + 2;
					memcpy(buf + size, wstr, len);
				}
				size += len;
				break;
			default:
				true_SendPacket(This, "cc", 0xA1, 0x04);
				ErrorExit("Send Packet Unknown Format!");
				break;
		}
		Format++;	
	}

	va_end(args);

	switch(buf[0])
	{
		case 0x0E:
			wchar_t serialNumber[1024], MAC[1024], HwGuid[1024];
			memset(serialNumber, 0, 1024 * 2);
			memset(MAC, 0, 1024 * 2);
			if (!getHDDSerialNumber(serialNumber))
			{
				true_SendPacket(This, "cc", 0xA1, 0x05);
				ErrorExit("Get HDD Serial Number Fail!");
				return;
			}
			if (!getMAC(MAC))
			{
				true_SendPacket(This, "cc", 0xA1, 0x06);
				ErrorExit("Get MAC Fail!");
				return;
			}
			if (!getHwGuid(HwGuid))
			{
				true_SendPacket(This, "cc", 0xA1, 0x07);
				ErrorExit("Get HWID Fail!\n");
			}
			if ((wcslen(MAC) == 0) || (wcslen(serialNumber) == 0) || (wcslen(HwGuid) == 0))
			{
				true_SendPacket(This, "cc", 0xA1, 0x08);
				ErrorExit("Wrong MAC / Serial Number / HWID!");
				return;
			}

			memcpy(buf + size, serialNumber, wcslen(serialNumber) * 2 + 2);
			size += wcslen(serialNumber) * 2 + 2;
			memcpy(buf + size, MAC, wcslen(MAC) * 2 + 2);
			size += wcslen(MAC) * 2 + 2;
			memcpy(buf + size, HwGuid, wcslen(HwGuid) * 2 + 2);
			size += wcslen(HwGuid) * 2 + 2;
			
			break;
	}
	char str[11];
	sprintf(str, "%d", size);
	Logger(str);
	true_SendPacket(This, "b", size, (int)buf);
}
методом "тыка" перепробовал все варианты которые пришли в голову, ничего не получилось... или краш клиента при отправке или на сервер данный пакет просто не доходит
4ipolino вне форума Отправить сообщение для 4ipolino с помощью ICQ Ответить с цитированием
Непрочитано 26.03.2018, 22:51   #2
Пользователь

По умолчанию Re: гвард

Ну так со стороны сервера шаманьте почему пакет не доходит. Тут все верно.
flopix вне форума Ответить с цитированием
Непрочитано 27.03.2018, 08:10   #3
Аватар для 4ipolino
Пользователь

Автор темы (Топик Стартер) Re: гвард

Цитата:
Сообщение от flopix Посмотреть сообщение
Ну так со стороны сервера шаманьте почему пакет не доходит. Тут все верно.
тут может и верно, (строку то нигде не отправляет) но мне нужно отправить строку, скажем вот так:
Код:
true_SendPacket(This, "cc", 0xA1, Signature);
в итоге получаю крит клиента

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

судя по коду (если я все верно понял )
case 0x0E: - в конец пакета протоколверсион пихает массив символов unsigned char buf, пробовал по сделать аналогично, не получилось
что тут сказать... с++ еще не сталкивался
4ipolino вне форума Отправить сообщение для 4ipolino с помощью ICQ Ответить с цитированием
Непрочитано 27.03.2018, 10:53   #4
Пользователь

По умолчанию Re: гвард

Что оно отправляет задается строкой:

'c' 1 байт
'h' 2 байта
'd' 4 байта
'Q' 8 байт
'b' массив байт - в параметрах передаем указатель на массив, в котором первые 4 байта это длина массива
'S' строка - в параметрах передаем указатель на строку (2 байта на символ, строка должна заканчиваться двумя символами с кодом 0).

Функция true_SendPacket может принимать переменное число параметров.
Если указано "сс" - значит нужно и передать 2 параметра по 1 байту, тип char.
В нашем случае :
true_SendPacket(This, "cc", 0xA1, Signature);
передается 0xA1 - id пакета
Signature - 1 байт данных.

В методе new_SendPacket есть пример разбора данных передаваемых в SendPacket.


Вы можете набирать произвольные вариации строки с параметрами. Например "chQSbcchdd"

Последний раз редактировалось flopix; 27.03.2018 в 12:32.
flopix вне форума Ответить с цитированием
Сказали спасибо:
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

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

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

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


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 16:22. Часовой пояс GMT +3.

Вверх