2013-08-19 2 views
1

Я кодирую C++ WinAPI DLL для игры, она включает небольшую функцию защиты от читов, но ее можно легко обойти, если кто-то решит NOP (0x90) весь анти-чит (I 'm not PRO в обратной инженерии, но я уверен, что это возможно).Запретить изменение dll

Есть ли способ предотвратить изменение моей DLL?

+6

просто сказал: нет. Кто-то, у кого достаточно времени или денег, чтобы купить то время, может делать все, что захочет. Лучше потратьте свое время на что-то более важное. – stijn

+1

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

+2

@jcoder: Если бы я был взломщиком, я бы просто исправил условный переход, который решает, что произойдет, если DLL не соответствует некоторой ожидаемой контрольной сумме. –

ответ

1

Даже если вы можете запретить людям изменять вашу DLL, нет ничего, что помешало бы кому-то заменить вашу DLL своей собственной версией, которая ведет себя так же, как ваша, во всех аспектах, которые может определить ваш .exe, но что-то другое в некоторых аспекты - если вы не сохраните всю копию DLL в .exe тоже.

Лучше тратить время и силы на то, чтобы сделать так, чтобы обмануть, чем сложно изменить .dll. Скажем, например, что у нас есть игра Pac-Man (потому что большинство людей будут с ней знакомы), тогда мы могли бы отправить число (и местоположения?) Всех «белых таблеток», которые Pac-Man ел на пути, и время, необходимое для того, чтобы добраться туда. Если игра затем редактирует .dll, чтобы дать 10 очков за каждую белую таблетку или редактирует игру, чтобы Pac-Man двигался в 10 раз быстрее, вы можете убедиться, что это не может быть правильно, потому что на каждом уровне вы знаете как быстро Pac-Man переместился, и сколько очков на белую таблетку Pac-Man нужно получить. Количество раз, когда игрок был убит, и такое может также быть включено в эту информацию, отправленную на сервер.

Подобный принцип может быть применен к игре «стрелять-em-up» или игре, которая зависит от покупки и продажи вещей или чего-то еще. Если у вас есть подробный журнал того, что сделал игрок, чтобы получить оценку, вы можете подтвердить, что «это возможно» или «это невозможно добиться, потому что вы не можете получить этот счет от съемок 10 космических кораблей в 1 во-вторых, поскольку один космический корабль принимает 10 ударов, чтобы сбивать, и требуется 1 секунда для каждого раунда ».

1

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

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

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

+0

Но как я могу предотвратить инъекцию анти-dll на стороне сервера? –