^

Читерство для нубов

+139

image

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

Вступительное слово

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

Как оно работает?

Начнём с самого низкого уровня. Если вы заглядывали под крышку системного блока, то, наверняка, знаете, что в компьютере есть два типа памяти: ПЗУ (постоянное запоминающее устройство — жёсткий диск) и ОЗУ (оперативное запоминающее устройство — оперативка). Пропуская кучу технической лабуды, всё, что работает на компьютере в данный момент, выгружает некоторые данные с жёсткого диска в оперативную память, ради быстрой работы. Это же относится к играм.

20150804234847_aef795e2.jpg20150804235020_0d45af32.jpg

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

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

Как читить?

Программы для поиска и редактирования значений сейчас есть почти везде. Для PSP это TempAR, для телефонов на базе Android это GameGuardian, для PS3 есть беспроводной дебаггер и огромное количество других, о которых я не знаю, но процесс и техники, если не одинаковые, то очень похожие:

Поиск значения

Самой простой техникой будет поиск известного значения. Возьмём, для примера, террарию (уж что под руку подвернулось).

У нас есть некоторое количество ресурсов, которое мы хотели бы увеличить (в случае на скриншотах это 8 слитков). Циферка у нас уже есть, поэтому поиск достаточно прост: выбираем процесс нашей игры, вбиваем в строку переменной нашу 8 и запускаем поиск значения (в случае с Cheat Engine это First Scan, для остальных программ название хоть и может меняться, но суть остаётся та же).

20150805162805_4587018b.jpg20150805162930_36e5d5eb.jpg

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

20150805163447_ff6dec2c.jpg20150805164029_c7f8c338.jpg

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

Вводим новое значение, нажимаем Next Scan и все переменные, которые не захотели меняться (а значит, не имеют отношения к нашим слиткам), будут отсеяны со списка. Процесс отсеивания может занимать от одного до нескольких десятков шагов, в зависимости от сложности игры и способа поиска (для поиска точной переменной, обычно, достаточно просева в два приёма).

Наверняка, вам будут попадаться числа, размером в 1, 2 и 4 байта. Не забывайте, что сисла, размером в 1 байт могут хранить в себе значение от 0 до 255 (если вы ищете что-то, вроде значения денег и точно знаете, что оно может выходить за рамки, значит смотрите числа большего размера).

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

20150805165351_5361754d.jpgimage

«Мягкий» поиск

Или, как его называют технари, поиск строки методом аппроксимации.

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

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

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

Ручной поиск

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

Напоследок

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

Автор Arc 5 августа 2015, 17:14 (2894 просмотра)
Комментарии

Стыдно когда видно.

Вот как раз о том, о чём говорит последний абзац, и хотелось бы почитать. В смысле креативити.

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

А причем тут ромхакинг? ВРоде бы Румата имел в виду различные выдумки с изменением значений.

какого-то унифицированного способа сделать подобное нету

Ну это очевидно. Я имею в виду скорей конкретные примеры из личного опыта или вроде того.

А причем тут ромхакинг?

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

А можно и добавить. Щас вспомню что-нибудь такое интересное

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

Дык, я не о том, это понятно. Сейчас кстати народ пилит все ещё прикольыне. KABAL там все свой UMK запиливает персонажами, Наклз, кажется, из Дюны делает что-то невообразимое…

А вообще я о том, что ты примеры как раз просил.

Из личного примера могу привести Disciples II. Один чувак просто поменял лидерство всем героям сразу на 5, а закончилось это тем, что он начал модифицировать игру: докидывал юниты инициативы, изменял тип атаки, етк.

Не, решил не добавлять. Легче скинуть ссылку на запись из чего-то эдакого http://squarefaction.ru/game/final-fantasy-type-0/articles/8660-sekretnyj-kontent

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

К слову Artmoney и Cheatengine работают и на эмуляторах консолей на PC и можно читерить и находить такие значения и так менять игру как никогда невозможно было бы сделать на настоящей консоле.

Вэй, интегеры искать довольно просто.

А вот когда до флоата доходит, вот тут уже начинаются чудеса… Более того, за последнее время всё чаще встречаюсь с тем, что разработчики кодируют данные, поэтому никогда ты не сможешь найти циферку Money игровую, например, потому что внутренняя функция заставляет в ОЗУ идти какое-то значение вроде f(Money), причём не банальные алгебраические иногда.

Вот в этом и различие хакинга и … ну не знаю как это назвать, баловства с ОЗУ? Хакинг позволит найти переменную внутри игры, в которой хранится значение Money, плюс позволит найти какая же f(Money) используется. Просмотр хексы тут не поможет…

Спойлер

Теоретически, если знаешь какая ячейка ОЗУ отвечает за переменную Money, если она закодирована каким-то образом, то отслеживание рано или поздно позволит разгадать f(Money).

 

Флоатинг значения далеко не самые страшные) Вот реверсивные даблы, привязанные к другим значениям, крашащие(портящие) все и вся(ака анти-чит), Эт да, жопно, но не нереально) Довольно интересно наблюдать как разрабы пытаются всячески захукать 1 переменную к другой, как замаскировывают их, как редиректят, все пробуют, лишь бы осложнить жизнь чите..любознательным ХД
П.с. Многие эмуляторы читинжин и артмани просто так, без нужной настройки, не сломают. Например, God Eater Burst(ppsspp) и т.д. Плюс, с каждой новой ревизией эмулятора изменяются все адреса(

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

Arc,  на ppsspp хоть с жестким поиском без включенного mem-мапа ты ни единого значения не найдешь) Даже целого/неизвестного/вообще любого, только визуалы XD. И такая херь не только для GIB,MH, и еще десятка псп игр) Это я про те случаи, когда без знания того в чем роешся никакой способ не сработает, хоть неделю перебирай) И вообще, я не читю, я модю XP