void packets::Decrypt(void *message) { auto novo = new unsigned char[*(DWORD*)((DWORD)message)]; auto CRC = (*(DWORD*)((DWORD)message + 4)) & 0xFFFF0000; if (CRC != 0x80010000) { return; } auto seed = *(DWORD*)((DWORD)message + 8); auto state = static_cast((((seed >> 0x10) + (seed & 0xFF)) & 0xFF) & 0xFF); auto length = *(DWORD*)((DWORD)message); auto carry = static_cast(((seed >> 0x04) + (length - 8)) & 0xFF); for (DWORD index = 4; index < *(DWORD*)((DWORD)message) - 8; index++) { auto p = *(BYTE*)((DWORD)message + index + 8); novo[index] = static_cast(carry ^ p ^ state); state = static_cast(p ^ keyCryptPacket); carry += static_cast(((index >> 1) * index) & 0xFF); } MoveMemory(message, novo, *(DWORD*)((DWORD)message)); *(DWORD*)((DWORD)message) = length; }