(Продублировал пост из SFS Wizard)
По поводу непробиваемости checkruntime=2 и пр., да и вообще по поводу читов (не persistent-модификации свойств объектов ), предложение к QTim и всем заинтересованным: не нужно "ломать" объекты и думать про integrity-проверки файлов клиента на сервере. Есть более прямой способ.
Дано:
1. взаимодействие игрока с объектами окружения в игре обсчитываются на стороне клиента (на компьютере игрока короче)
2. данные передаются самостоятельными "пакетами", а не потоком целостность которого поддерживается обеими сторонами канала (как это попроще сказать - все тут наслышаны о чудесах онлайна, стрельбе из ниоткуда в никуда, о пропаже этих самых "пакетов" и тп, при передаче в потоке с поддержкой целостности таких проблем не возникает, зато возникают проблемы производительности сервера)
Следовательно, нужно "атаковать" информацию передаваемую с клиента. Поясню на примере.
1. игрок А заходит на 6 игроку Б
2. игрок А стреляет короткой очередью
3. движок Ила игрока А обсчитывает траекторию снарядов и траекторию движения крафта Б (получаемую от сервера)
4. допустим движок приходит к выводу что один снаряд А попал в двигло Б
5. движок формирует пакет данных для передачи серверу, в котором (среди прочего интересного но пока опустим это) присутствует и идентификация результатов стрельбы - двигатель Б поврежден одним снарядом
6. пакет данных отсылается серверу
7. сервер принимает эту информацию и передает ее всем участникам игры - двигатель Б повреджен одним снарядом
8. движки игроков включая Б начинают визуализировать повреждения - двиг дымит или вообще сдох и тп (здесь возможны вариации как в деталях реализации клиентами так и в способе обработки, но это пока не существенно)
Что нужно делать атакующему - для начала собрать материал для анализа, воспользовавшись инструментом типа Ethereal (http://www.ethereal.com/). Затем имея в руках некую статистику можно начинать пробовать свои силы - какие именно данные нужно модифицировать в пакете на шаге 6 выше для того чтобы в нем присутствовала информация не "двигатель Б поврежден одиним снарядом" а "пилот Б словил в макушку 1 снаряд (или 10, или 1000, или ракету или все что угодно)"
Естественно на стороне А для движка и игрока все будет выглядеть "по-честному" пока от сервера не придет ответ что "пилот Б склеил ласты в бурьяне" (пардон за вольность, хочу чтобы объяснение было популярным а не техническим).
---
Причем, прошу заметить, против такого лома есть только один прием, введение которого в обозримом будущем не предвидится - передача данных потоком в сесси, целостность которой поддерживается обеими сторонами (если кто знаком с технологией то что-нибудь вроде SSL с предварительным handshake по сертификату). Как я уже упоминал, применение такого противоядия серьезно сказывается на производительности сервера, самым негативным образом - обработка большого количества данных и контроль целостности канала здорово ограничивают количество участников сессии.
Даже против этого приема есть дальнейшие методы атаки - но они существенно "дороже" в плане реализации - выражаясь технически session termination становится невозможен без того чтобы самому ПОЛНОСТЬЮ реализовывать заместителя кода клиента (то есть внедрение посреди сессии и модификация пакетов не прокатит - нужно будет начинать сессию с самого начала и правильно передавать ВСЕ данные чтобы иметь возможность ими манипулировать).
---
Все вышесказанное естественно ИМХО, все может обстоять совершенно не так как я описал, поскольку сам не пробовал ибо неинтересно.