Как предотвратить чит-коды с изменением памяти?


10

В настоящее время существует множество программ, изменяющих память ( Cheat Engine & co). Есть ли эффективный способ сохранить постоянную переменную на самом деле постоянной?

У меня было две идеи:

  1. Создайте отдельный поток, обновляя постоянную переменную до постоянного значения, например, 200 каждую минуту. Проблема: можно также изменить второе значение.
  2. Сохраните значение на сервере. Проблема: я хочу, чтобы сетевой трафик был как можно ниже.

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

Есть ли лучшие способы сделать это?


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

6
Я еще не видел защиту от читов, которую хакер не может отключить. Только убедитесь, что вы не сделаете игру

1
Связанные ; более конкретно, но в остальном то же самое.
Anko

1
В большинстве игр есть «Тренеры». Я имею в виду, черт возьми, даже Mass Effect: у Андромеды есть тренер, и он отсутствовал чуть больше недели. Я говорю, даже не беспокойся об этом. Если крупные игровые компании не могут избежать этого, что заставляет вас думать, что у вас есть шанс?
Krythic

Ответы:


21

Если ваша игра однопользовательская: это невозможно, но вам все равно .

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


4
Очень легко защититься от мошенничества в многопользовательском режиме, создав авторитетный сервер и прогнозируя состояние только на стороне клиента. По сути, просто отправляйте входные данные от клиента на сервер, а не «Я xнанес ущерб y».
jmegaffin

Действительно @BorealGames, это то, что я имею в виду под «хранить все важные состояния на сервере».
Jcora

Просто хотел немного уточнить :)
jmegaffin

11

Это не может быть сделано , https://security.stackexchange.com/a/4639 о DRM, но то же самое относится ко всему, что пользователь не хочет на своем компьютере, включая механизмы Anti-Cheat. (Который имеет тенденцию быть еще сложнее, чем DRM.)

Но почему бы тебе, правда, зачем? Это компьютер ваших клиентов, а не ваш, клиент делает со своим компьютером все, что ему угодно. У вас нет прав на это. Ваша программа удаляется, если клиенту это не нравится.

Для многопользовательских игр речь идет не о проектировании исполняемого бинарного файла, а о разработке коммуникаций. Разрешение пользователям просто отправлять «Я выиграл с 20000 очками» не работает, равно как и «У меня 2000 золотых» . Вам нужно будет смоделировать игру самостоятельно и просто позволить игрокам отправлять то, что они делают, например: «Я приказал солдату перейти в точку X / Y» или «Я купил предмет № 43» , а не как результат этого. действия есть. Сервер решает, каковы результаты и кто победил в итоге.

Если это однопользовательская игра с высоким счетом в Интернете, то вариант может заключаться в том, чтобы игрок отправил вам повтор, смоделировал его и определил результат.


11
Небольшое исправление: клиент не должен отправлять «Я купил предмет № 43», а вместо этого «Я хочу купить предмет № 43». Затем сервер должен ответить «OK, вы теряете 200 GP, вы получаете один Item43», «Нет, вам не хватает золота» или «Нет, в магазине, который вы просматриваете в настоящее время, нет пункта 43». Сервер должен вести себя как мастер игры на RPG с ручкой и бумагой. Игроки говорят, что они хотят сделать, и сервер сообщает им, если они добьются успеха.
Филипп

Также я не уверен в изменении используемой памяти персонального компьютера, но изменение двоичного
файла

Не то чтобы нарушение EULA, цифрового эквивалента сойки, остановило кого-либо.
jkmartindale

3

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

Ради аргументов, вот несколько способов предотвратить взлом в среде одного игрока:

  1. Откройте дескриптор для каждого другого процесса на компьютере пользователя (инвазивного и непереносимого ) и перезаписать их WriteProcessMemory с помощью фиктивной функции или предупреждения. Выбор остается за вами. Это может быть побеждено, потому что ... приложения могут сделать то же самое и переписать дескриптор еще раз или сделать что-то, чтобы предотвратить это.
  2. Проверьте контрольную сумму вашего приложения и проверьте ее через защитный экран - это полезно для многих постоянных изменений в вашем приложении, но не остановит обычную атаку памяти. Это может быть побеждено, потому что ... инструменты, такие как ADA, OllyDbg и даже простые шестнадцатеричные изменения, могут вносить постоянные исправления и изменения в ваше приложение, чтобы удалить код, вызывающий сбой - это включает в себя вашу идею многопоточного таймера!
  3. Сканирование для известных инструментов взлома. Это также может быть побеждено путем перекомпиляции инструмента или прямой атаки на вашего клиента. Это может быть побеждено, потому что ... перекомпиляция, переименование приложения или изменение того, что ваш сканер использует в качестве эвристики, сделает это бесполезным. Подумайте об использовании специальной части памяти, которую приложение, как известно, использует, если вы выберете это.

Альтернатива, конечно, просто хранить все на сервере и сделать игровой сервер мастером. Это не только дорого, требует обслуживания и увеличивает время разработки ... Фанаты не так впечатлены реализацией популярных игр, как Diablo III . Или здесь. Однако следует отметить, что для онлайновой флеш-RPG, такой как Adventure Quest, эта модель действительно работает для них довольно хорошо.

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


3

Многие люди используют эти программы для поиска баллов, хранящихся в переменной, например

int score = 10;

Для этого им нужно знать счет, как правило, из счета, отображаемого в игре.

Я думал, поможет ли это отложить их ...

public static float randomVal; // at start of level generate random float

private float 1a3sf5vhh4; //represents score

void hjgkkj4(int val) //add score method
{
   var 5vhh4 =  1a3sf5vhh4/randomVal+val;
   1a3sf5vhh4 =  5vhh4*randomVal;
}

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

string displayScore = ""+ 1a3sf5vhh4/randomVal;

Это заставит читеров искать то, что они считают результатом (отображаемым значением), поэтому они будут находить только отображаемое значение.

Реальным счетом будет Score * randomVal, хранящийся в другом месте. Они не могут изменить счет, изменяя отображаемое значение.

это поможет?

PS Я не эксперт, так что успокойся со мной, лол.


Только что нашел этот видео, делает некоторые интересные моменты ... youtube.com/watch?v=G25YhoE04Xc
Raimi

Чит-инструменты могут быть настроены для обнаружения таких вещей. Это просто занимает больше времени для отслеживания.
Кромстер

но для небольшой автономной однопользовательской игры что-то вроде этого будет хорошим решением? Похоже, что это может по крайней мере остановить некоторые приложения там
Raimi

Да, это как раз случай EffortSpent против ProtectionAch достижимого, когда вторая часть никогда не может достичь 100%.
Кромстер

1
Случайные имена в исходном коде тоже не помогут, по крайней мере, в большинстве случаев. Программа обычно компилируется в IL / байт-код или прямо в двоичный файл и т. Д.
lozzajp

2

Что касается однопользовательских игр , вы не можете предотвратить мошенничество, и вы не должны .


Почему я не могу предотвратить обман в моей собственной игре?

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

Почему я должен позволять игрокам обманывать в однопользовательской игре?

По словам Сэма ,

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

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

Как обман делает игру более приятной?

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

  • Игра немного медленная, и игрок хочет использовать читы, чтобы полностью раскрыть действие, прежде чем они будут отложены.
  • Игрок не может пройти определенный вызов; они обычно не обманывают, но они близки к тому, чтобы сдаться в отчаянии. Они могут прекратить играть в вашу игру, или они могут использовать чит для обхода препятствия и продолжить играть во вторую половину вашей игры.
  • Игрок не может выделить количество времени, которое ваша игра требует для предполагаемого опыта. Применяя читы, пользователь может получить «быстрый старт» и сможет наслаждаться намеченным содержанием вашей игры. Если вы считаете, что это не звучит правдоподобно, учтите, что именно по этой причине я лично очень мало играл в Fallout 4. Для сравнения: это единственная игра, которую я заказал за последние 5 лет, и единственная игра, которую я когда-либо заказывал и куплен для более чем одной платформы. Я люблю игру; У меня нет времени на это.
  • В вашей игре есть ошибка , и это не дает игроку развиваться дальше. Чит обходит ошибку, поэтому игрок может продолжать играть. Последние игры Elder Scrolls печально известны этой ситуацией .

Почему это относится только к одиночным играм?

Важно подчеркнуть, что это работает только в одиночных играх; если игрок говорит, что хочет использовать читы, чтобы получить больше удовольствия от игры, никакого вреда не будет. Как только в игре участвует несколько игроков, подвиги этого первого игрока могут стать несправедливым недостатком для других игроков. Это единственная реальная ситуация, когда вы не должны позволять обманывать.


0

Что делает инструмент взлома памяти?

Есть два способа использовать инструмент взлома.

  1. Он также принимает известный адрес, где хранятся переменные игрока.
  2. Вы вносите изменения в переменную, и она сканирует память на предмет изменений.

Что вы можете с этим поделать?

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

  2. Шифрование переменных проигрывателя: масштабирование значения, добавление константы и т. Д. Это создает новую проблему: хардкорный хакер может разобрать вашу программу и найти числа, которые вы используете для шифрования переменных проигрывателя. Для этого используйте случайные числа. Вы также можете увеличить значения переменных вашего игрока, а затем добавить случайное число, чтобы добавленное число не оказало значительного влияния на значение (добавление 10 или 20 к увеличенному значению 2000 не имеет большого значения).

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

  std::default_random_engine myRNG;
  std::uniform_int_distribution<int> myDist_padding(10,100);
  class Player
  {
      public:
          Player()
          {
              Health = new float;
              Armor = new float;

              std::uniform_int_distribution<int> myDist_scale(1000,10000);
              scale = myDist_scale(myRNG);
          }
          float GetPlayerHealth() const;
          void SetPlayerHealth(float health);
      private:
          float *Health;
          float *Armor;
          int scale, constant;
  }

  //wrappers for Set/GetPlayerHealth
  void Player::SetPlayerHealth(float health)
  { 
      this->Health = health * scale + constant + myDist_padding(myRNG);     //random padding; adding 10 or 100 to a number that is scaled up by 1000 will cause an increase in 1%
      //1% of error is ok I guess?
  }
  int Player::GetPlayerHealth() const
  {
      return (this->Health - constant)/scale;
  }

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

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

Что еще ты можешь сделать?

Периодически меняйте адрес переменных игрока. Это мешает читабельности кода? Ну, это в некоторой степени, но вы можете абстрагировать весь процесс в одном классе, который имеет хорошо объясненные комментарии. Интерфейс, предоставляемый классом, будет иметь простые функции Set / Get. Программисту веб-интерфейса не придется беспокоиться о сложностях, лежащих в основе.


0

Экономика:

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

Профессионалы гораздо лучше предотвращают читы, чем вы, и гораздо лучше не ломают вашу игру, чем вы (и все равно не достигли 100% успеха ни в одном из них). Поэтому, если вы чувствуете, что стоит добавить такое решение в свою игру, купите его. Делать самостоятельно будет значительно дороже.

Смежный вопрос «есть ли смысл в использовании анти-чит программы?». Ответ таков: нет, если только приличная часть вашей игры не использует онлайн-режим соревнования.


0

Единственный способ защитить вашу игру от моддинга и редактирования памяти - это сделать ее только ОНЛАЙН и обрабатывать важные значения на стороне сервера .

Может быть, вы можете зашифровать значения так, чтобы новички в памяти не попали к ним, но во всех сообществах, таких как Cheat Engine , GameGuarian для Android, ArtMoney, Game Hacker и т. Д., Есть люди, которые смогут взломать все, что вы обрабатываете клиент- и покажите остальным, как это сделать или опубликуйте тренеров.

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


0

Я имею в виду это не так сложно. Вы можете сохранить 99% читеров редактирования памяти (таких как Game Guardian , Cheat Engine и т. Д. С помощью простого умножения значений. Даже умножение на 10 в памяти будет держать большую часть в страхе.

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


-2

Вы не можете - я повторяю, вы не можете. Там нет ответа на этот вопрос, который не может быть отменен хорошим хакером.

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

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


Голосование вниз, так как я считаю, что веселье играет важную роль в этом ответе, но полностью пропущено . Вместо дальнейшего объяснения я представляю альтернативный ответ.
Гнемлок

-3

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

Все может быть взломано, но большинство не займет время, чтобы сделать это.


4
... и тогда ваш исходный код будет нечитаемым, не поддерживаемым беспорядком. Удачи в поиске ошибки или внесении изменений в баланс без разрушения целиком.
Филипп,

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

@MarcksThomas Ну, если хакеры сдаются, то вы не теряли свое время. В конце концов, это была цель?
Дан

Я не полностью согласен с вами в этом @Philipp - есть способы сохранить исходный код в чистоте, но шифровать рабочий код, когда он уходит. На практике это включает в себя шифрование и некоторые числовые и особенно временные и потоковые mambojambo :-). Мы тестируем с неизмененным исходным кодом, и если в производственном коде есть ошибка, мы допускаем его жесткое падение (с небольшой задержкой, просто чтобы быть злым :-)). Небольшое изменение где-то также вызывает это.
Штормград

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

-4

Вот как я справляюсь с этим в онлайн-играх.

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

Пока что все пользователи хакеров / тренеров, которых я победил. Разработчик взлома установит детектор, чтобы посмотреть, что-то смотрит. Если что-то есть, то программа хакера / тренера либо автоматически закроется с их конца, либо будет работать только наполовину.

Например, в сервисе «Грязь 3» пользователи тренажера могут автоматически раскрутить машину. Но если вы поставите детектор на свой конец, собственный читер обнаружит его и закроет часть чита. Не все это.

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

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

Мое самое большое предложение состоит в том, чтобы получить очень хороший антивирус интернет-безопасности (Norton, Mcafee, Avast и все другие дерьмовые авы не помогут вам). Будьте готовы потратить от 50 до 90 долларов на очень хороший аванс, которого я не перечислил, а затем научитесь экспериментировать с ним, чтобы произвести онлайн-игру.

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

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

Они на самом деле не остановить чит, хотя. Они не могут быть обеспокоены этим. Они просто забанят ваш аккаунт. Другая вещь, которую я хотел бы упомянуть, связана с Wolfenstein ET. Очень старая игра. Но для меня это была лучшая и самая жесткая мера безопасности из всех.

Я никогда не видел, как они это сделали. Я дал им представление о том, что на самом деле остановит мошенников, и предложил одному из разработчиков джеймодов запретить путем путеводителя. Какое удобное руководство при игре? Графические карты. Причина, по которой они это реализовали, заключается в том, что люди просто меняли ip-адреса, а вам не нужна была учетная запись для игры, чтобы вы могли просто изменить свое имя, ваш mac-адрес, который также изменит ваш ip-адрес.

Но когда они сделали запреты видеокарты. Если вы хотите снова сыграть, вы должны взять свою карту RMA или купить новую. Это не по теме, хотя. Это должно быть об обнаружении, и я пошел по касательной. К сожалению, сейчас я не так много играю в игры. Но человек, которого я любил все мои свиньи гунеи. Особенно те из автомобилей проекта. Единственная гоночная игра, которая не была codemasters. Но все же подвергается той же ерунде.


Я вижу несколько вопросов с этим ответом. 1. Формат. Трудно читать из-за структуры, и из-за грамматической несогласованности, есть части, где я не могу понять, что вы хотите сказать. 2. Похоже, вы много говорите на эту тему как игрок, играющий против других читеров . Это будет актуально для Arqade , но мы больше заинтересованы в разработке игр . 3. Вы говорите «не используйте те, которые я упомянул», в отношении антивируса. Вы упоминаете «Нортон, МакКейф, Аваст и все эти дерьмовые из них . Это не говорит нам, что использовать , особенно когда вы называете некоторые из самых высоких
рангов»

Кажется, что вся последняя половина представляет собой анекдот о том, как, по вашему мнению , компания, занимающаяся видеоиграми, воспользовалась вашим советом (я полагаю, вы пытаетесь сказать, что вы не уверены, как это делается, поэтому я понимаю, что ваше дальнейшее объяснение того, как это делается, основываться на предположениях , а не на фактах).
Гнемлок
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.