Алгоритм проверки порядка выполнения команд - PullRequest
2 голосов
/ 11 ноября 2010

Я хотел бы написать простой код, который поможет определить, были ли выполнены некоторые инструкции в намеченном порядке на стороне клиента. Это должно усложнить задачу любому желающему изменить поведение путем редактирования байт-кода. Например, используя JMP, поэтому некоторые инструкции никогда не выполняются. Я немного не хватает идей, хотя.

Чтобы проверить, были ли последние две инструкции выполнены в правильном порядке, можно использовать что-то простое (псевдокод):

// Variables initialized by server
int lastInt;
// Monitored at regular intervals
// Saves using callback which could be tampered with 
boolean bSomethingFishyHere;
int array[20]

...
execute( array[5], doStuff1() )
execute( array[6], doStuff2() )
...

// This could be tested remotely with all combinations of values possible
execute( int i, boolean b ){
    if( lastInt >= i ){
        bSomethingFishyHere = true; 
    }

    lastInt = i;
}

Я затрудняюсь понять, какой подход можно использовать, чтобы проверить, все ли все инструкции были выполнены в правильном порядке. Может быть, я мог бы добавить массив и заполнить его сервером какими-нибудь случайно восходящими числами или использовать некоторую контрольную сумму сортировки. Каковы ваши предложения?

Ответы [ 2 ]

2 голосов
/ 11 ноября 2010

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

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

Один из способов, который в значительной степени защищен от дурака, это если вы контролируете код.Запустите настоящий код на своих серверах и предоставьте своего рода удаленный клиент внешнего интерфейса.

1 голос
/ 15 ноября 2010

Это просто для того, чтобы исправить некоторые дыры в шутере с fps.Дизайнеры игры оставили несколько временных переменных, которые можно изменить в консоли.Некоторые из них безвредны, но другие, такие как Texture transparent = true, являются оскорбительными.Я стремлюсь перестроить существующую модификацию, чтобы большая часть кода была на сервере, как вы предлагаете.Рассматриваемые переменные устанавливаются в «мире», который имитируется клиентом.В конечном итоге я планирую расширить некоторые классы, чтобы они игнорировали их, и им просто нужно отслеживать значения там, где это невозможно.

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

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

...