Нет, ну естественно можно заставить сервер и клиент обмениваться правильными пакетами. В том же Photone каждому полю пакета можно указать атрибут IsOptional, потом при заполнении пакета сервер сразу проверяет, есть ли поля, которые помечены, как обязательные (не опциональные) и мы вызовом одной функции сможем узнать валидный пакет или нет. Это ерунда, читерить просто заполняя все доступные поля пакета, что бы персонаж, согласно пакету, двигался во все стороны света и одновременно - глупо.
Чит появляется, в основном, когда ты шлешь пакеты в том порядке, который не предусмотрел разработчик или не в том количестве, что предусматривал разработчик. Вот тогда логика работы непредсказуема. Ну чисто физически нельзя протестировать все возможные последовательности пакетов и реакцию сервера.
Теперь вернемся к вопросу простейшего протокола между клиентом и сервером. Да в простейшем случае, как говорится не раскрутишься. Когда же у тебя вариации из 100-200 различных возможных пакетов, тогда логику работы предсказать становится все труднее и труднее.
Ну нельзя говорить, что мы можем написать абсолютно безопасную ОС, но которая ничего не умеет делать и не делает. Это уже будет не ОС, а сферический конь в вакууме. Точно так же нельзя говорить, что если мы можем создать безопасный протокол из пакетов "Привет" и "Пока", то мы можем создать безопасный протокол из 256 вариантов пакетов. Сможем конечно, но создавать его будем лет 100 не меньше.