private bool ValidateCRC(uint input) { var calculatedCRC = CRC32.CalcCrc32(previousDecryptIV, 2); if (UseMemoryCRC) { foreach (var region in MemoryRegions.Instance.Regions) { calculatedCRC = CRC32.CalcCrc32( region.Data, region.Length, calculatedCRC ^ (region.Address + (uint)_memoryOffset), _memoryOffset ); } } var isValid = calculatedCRC == input; if (!isValid) { if (_ignoredWrongCRC) { log.Error($"Disconnecting client because CRC didnt match _again_"); } else { log.Warn($"Accepting wrong CRC for _once_..."); _ignoredWrongCRC = true; isValid = true; } } return(isValid); }
public override void SendPacket(Packet pPacket) { while (IsConnectedAsClient && MEMORY_CRC_ENABLED && (BitConverter.ToUInt16(_encryptIV, 0) % 31) == 0) { var p = new Packet((byte)ClientMessages.CLIENT_HASH); p.WriteByte(1); p.WriteUInt(CRC32.CalcCrc32(_encryptIV, 2)); // TODO: Get CRC for memory base.SendPacket(p); } base.SendPacket(pPacket); }