Як я можу запобігти читам для зміни пам’яті?


10

На сьогоднішній день існує багато програм для зміни пам'яті ( Cheat Engine & co). Чи є ефективний спосіб зберегти постійну змінну фактично постійною?

У мене було дві ідеї:

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

Мені потрібен цей механізм як для констант, так і для змінних, які можуть містити лише певний діапазон значень.

Чи є кращі способи зробити це?


1
Жоден із них не буде працювати. У першій ситуації шахрай повинен просто переписати значення "200", яке ви копіюєте, і це не важче, ніж перезапис оригіналу. У ситуації 2 тепер шахрай може змінити значення, навіть не змінюючи свою програму, просто змінивши байти, отримані в мережі (наприклад, з локальним проксі)
Джиммі

6
Я ще не бачив чіт-захисту, який хакер не може відключити. Просто будьте впевнені, що ви не зробите гру живим кошмаром для законних користувачів у своєму хрестовому поході проти шахраїв :)

1
Споріднені ; конкретніше, але в іншому випадку те саме.
Анко

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". Потім сервер повинен відповісти "ОК, ви втрачаєте 200 ГП, ви отримуєте один предмет43", "Ні, у вас недостатньо золота" або "Ні, у магазині, який ви зараз переглядаєте, немає предмета № 43". Сервер повинен вести себе як ігор гри RPG-пера та паперу. Гравці говорять, що хочуть робити, а сервер повідомляє їм, чи досягають успіху.
Філіпп

Також я не впевнений у зміні пам’яті, що використовується у персональному комп’ютері, але зміна бінарних даних самої гри (навіть незважаючи на те, що вона є на вашому комп’ютері) зазвичай суперечить договору EULA і може бути додатково визначена законами про авторські права тощо
lozzajp

Не те, щоб порушення 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
Раїмі

Чит-інструменти можуть бути налаштовані і для виявлення таких речей. Це просто потребує більше часу для відстеження.
Кромстер

але для невеликої, в автономному режимі, однієї гри для гравців щось подібне може бути нормальним рішенням? схоже, що це могло б принаймні зупинити кілька додатків там
Раїмі

Так, це лише випадок EffortSpent vs ProtectionAchieved, коли друга частина ніколи не може досягти 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

Єдиний спосіб захистити свою гру від модінгу та редагування пам'яті - це зробити її ONLINE та обробити життєво важливі значення на стороні сервера .

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

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


0

Я маю на увазі, це не так важко. Ви можете зберегти 99% шахраїв для редагування пам'яті (тих, що грають Guardian , Cheat Engine у простим множенням значень. Навіть множення на 10 у пам’яті збереже більшу частину залишку.

Я пам’ятаю, що багато флеш-ігор за день збільшилися б на 8 або 6. Або якщо ви серйозно ставитесь до цього, введіть кілька перевірок або зашифруйте значення в пам'яті.


-2

Ти не можеш - повторюю, ти не можеш. Немає відповіді на це запитання, яку б не вдалося скасувати хорошим хакером.

Але - так що? Якщо хтось хоче обдурити вашу гру (якщо припускати, що грошові втрати чи досягнення не задіяні), кого це хвилює? Вони лише обманюють себе.

Витратьте більше часу на створення чудової гри та менше часу на запобігання дебілам зіпсувати власну забаву - просто.


Вниз голосування , як я вважаю , весело грає важливу роль в цій відповіді, але пропустив повністю . Замість подальшого пояснення я надсилаю альтернативну відповідь.
Gnemlock

-3

Зашифруй чорт із цього! Зберігайте важливі цифри, розбиті на кілька локацій, поєднаних з іншими значеннями, щоб вони постійно змінювалися! Використовуйте фіктивні номери, які, якщо змінити, говорять їм, що вони шахраї.

Все може зламатися, але більшість з них не потребує часу для цього.


4
... і тоді ваш вихідний код стане нечитабельним, незбагненним безладом. Успіхів знайти помилку або змінити баланс, не підірвавши всю справу.
Філіпп

Якби мені довелося реалізувати цю форму запобігання шахрайству, я був би щиро розчарований, якби хакери натрапили на мою злу схему і просто відмовилися. Це означало б, що я не витратив нікого часу, крім свого.
Маркс Томас

@MarcksThomas Добре, якщо хакери здадуть, то ви не витрачали час. Це була мета, зрештою, чи не так?
Дан

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

Думав, я б схвалив це як найкращу відповідь у цьому ланцюжку, але я, здається, це вже зробив. Існує багато математичних правил, які неможливо змінити інженером лише через складність і перш за все терміни. Наприклад, можна відзначити додаток для затримки аварійних збоїв або дозволити чутливості його переходити в марний (не можна відтворювати) стан. Звичайно, для тебе це має бути вагомою причиною.
Stormwind

-4

Те, як я маю справу з цим в онлайн-іграх, це.

Я не збираюся допомагати хакерам, які так сильно несуться зі мною. Я не згадаю жодної програми, яку я використовую для цього. Вам доведеться це зрозуміти. Єдиний спосіб по-справжньому зупинити їх - це знати одне. Вони не хочуть, щоб їх хак-програму було виявлено.

Поки що всі користувачі хакерів / тренерів, яких я переміг. Розробник хак поставить на нього детектор, щоб побачити, чи щось дивиться. Якщо щось є, то програма хакера / тренера буде або автоматично закриватися в кінці, або це лише половина роботи.

Наприклад, у бруді 3, користувачі, які займаються тренерами, можуть зробити автоматичне розкручування автомобіля. Але якщо ви поставите детектор на свій кінець, власний детектор виявить його, і він закриє частину чіт. Не все це.

Єдина частина тренерської програми, яку я бачив, що вплинув на мій втручання, - це супер гальмо (ідеальне гальмування) та розгін (автомобіль втрачає управління без причини). У мене в основному гоночні ігри, як ви бачите. Вони всі з кодемістерів, і, на жаль, цими іграми зловживають шахраї досить часто.

Я вважаю, що мені вдається зупинити їх лише завдяки тому, як ми підключаємось один до одного під час гри. Це, мабуть, та сама причина, що вони можуть спричинити закручування звичайного гравця, який не має поняття щодо безпеки.

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

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

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

Вони фактично не зупиняють накрутку, хоча. Їм не можна заважати. Вони просто забороняють ваш рахунок. Інша річ, яку я хотів би зазначити, стосується Wolfenstein ET. Дуже стара гра. Але для мене це був найкращий і найсуворіший захід безпеки з усіх.

Я ніколи не бачив, як вони це зробили. Я дав їм ідею про те, що насправді зупинить шахраїв, і запропонував одному з прихильників джеймода заборонити шляхом настанови. Що має легкодоступний орієнтир під час гри в ігри? Графічні картки. Причина, яку вони реалізували, полягає в тому, що люди просто змінюватимуть ip-адреси, і вам не потрібен обліковий запис для гри, щоб ви могли просто змінити своє ім’я, вашу mac-адресу, яка також змінила вашу ip-адресу.

Але коли вони зробили заборону на відеокарту. Якщо ви хотіли знову грати, вам довелося передати карту RMA або придбати нову. Це все-таки від теми. Це, мабуть, стосується виявлення, і я пішов по дотичній. На жаль, зараз я майже не граю в ігри. Але чоловік, якого я любив усіх моїх свинок. Особливо з автомобілів проекту. Єдина гоночна гра, в якій не були кодемостри. Але все одно чиниться тими самими дурницями.


Я бачу кілька питань з цією відповіддю. 1. Формат. Це важко читати через структуру, а через граматичну непослідовність є частини, де я не можу зрозуміти, що ти маєш на увазі сказати. 2. Ви, здається, багато говорите про цю тему, як гравець, який грає проти інших шахраїв . Це було б актуально для Arqade , але ми більше стурбовані розвитком ігор . 3. Ви говорите "не використовуйте тих, про кого я згадав", щодо антивірусу. Ви згадуєте "Нортон, mcafe, avast та всі лайно . Це не говорить нам, чим користуватися , особливо коли ви називаєте одних найвищих рейтингів.
Gnemlock,

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