Возможные стратегии для увеличения сложности эффективного взлома - PullRequest
0 голосов
/ 21 сентября 2010

Меня попросили исправить несколько мелких недостатков в игре нереальной серии.Он использует язык unrealscript, который создает байт-код аналогично Java.

Одна из проблем заключается в том, что можно редактировать любые пакеты, загруженные на клиент, и вставлять инструкцию goto, чтобы перепрыгивать через важные битыcode.

Невозможно предотвратить это, поэтому мне интересно, какие стратегии можно применить, чтобы сделать задачу более сложной.На ум приходят два подхода:

  1. Автоматическая внутренняя проверка состояния для всего, что находится на стороне клиента.То, как это сделать, будет иметь проверку до и после каждого вызова функции.Одной из особенностей языка является ключевое слово out в функциях.

    Указанное значение «out» позволяет вам сообщить функции, что она должна фактически изменить переданную ей переменную,вместо того, чтобы делать локальную копию.Это полезно, например, если у вас есть функция, которая должна возвращать вызывающей стороне несколько значений.Вы можете просто сделать так, чтобы вызывающая сторона передала в функцию несколько переменных, которые являются значениями «out».

  2. Механизм проверки на стороне сервера, который принимает меры, если происходит что-то непоследовательное или происходит тайм-аут,Очевидно, что код не может быть переброшен между клиентом и сервером каждый тик из-за накладных расходов, которые он будет генерировать, но было бы возможно обмениваться некоторой информацией, скажем, каждые х секунд.быть объединеннымЧто вы думаете по этому поводу?

1 Ответ

1 голос
/ 21 сентября 2010

Если цель состоит в том, чтобы определить, изменился ли какой-либо код, то простым решением является проверка контрольной суммы кода (как при инициализации - или даже раньше, как перед загрузкой) и периодическая проверка того, что контрольная сумма кода не имеет измененное.

Тогда возникает проблема с обнаружением, не был ли взломан код проверки контрольной суммы.

Единственный раз, когда я потерпел поражение как хакер, был дорогой пакет с целевым кодом, использующим более пяти подпрограмм контрольной суммы, вызываемых из, казалось бы, случайных разных точек в коде. Это было больше проблем, чем стоило выяснить, как обойти это. Просто обязательно инициализируйте каждую из контрольных сумм, используя разные функции, но сделайте вызов инициализации трудным для отслеживания. Выполнение всех подряд во время инициализации позволяет легко победить.

...