03-26-2018, 09:09 PM
Доброго времени суток.
Так как в с++ не силен, подскажите как сделать.
Исходники фгвард\ргвард
Нужно отправить строку
на сервер в пакете 0xA1
методом "тыка" перепробовал все варианты которые пришли в голову, ничего не получилось... или краш клиента при отправке или на сервер данный пакет просто не доходит
Так как в с++ не силен, подскажите как сделать.
Исходники фгвард\ргвард
Нужно отправить строку
Код:
string Signature;
Код:
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);
}