Тема: гвард
Показать сообщение отдельно
Непрочитано 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 Ответить с цитированием