1. Друзья, в это тяжёлое и непонятное для всех нас время мы просим вас воздержаться от любых упоминаний политики на форуме, - этим ситуации не поможешь, а только возникнут ненужные ссоры и обиды. Это касается также шуток и юмора на тему конфликта. Пусть войны будут только виртуальными, а политики решают разногласия дипломатическим путём. С уважением, администрация Old-Games.RU.

    Скрыть объявление
  2. Если Вы видите это сообщение, значит, вы ещё не зарегистрировались на нашем форуме.

    Зарегистрируйтесь, если вы хотите принять участие в обсуждениях. Перед регистрацией примите к сведению:
    1. Не регистрируйтесь с никами типа asdfdadhgd, 354621 и тому подобными, не несущими смысловой нагрузки (ник должен быть читаемым!): такие пользователи будут сразу заблокированы!
    2. Не регистрируйте больше одной учётной записи. Если у вас возникли проблемы при регистрации, то вы можете воспользоваться формой обратной связи внизу страницы.
    3. Регистрируйтесь с реально существующими E-mail адресами, иначе вы не сможете завершить регистрацию.
    4. Обязательно ознакомьтесь с правилами поведения на нашем форуме, чтобы избежать дальнейших конфликтов и непонимания.
    С уважением, администрация форума Old-Games.RU
    Скрыть объявление

Читерство

Автор: Helmut · 24 апр 2016 · ·
  1. Навеяно недавней дискуссией про игры с донатом. Собственно, в нормальных, сингл играх микротранзакции уже не новость. Тот же Dead Space 3, говорят, еще в свежих Assassin Creed появилось. Логично ожидать, что это безобразие продолжится и таких игр будет появляться все больше. Следовательно, вопрос читерства становится все более актуальным. Мы же не хотим донатить и тем самым поощрять скотскую тенденцию.

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

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

    Для лечения игры будем использовать Cheat Engine. Есть еще аналогичная по возможностям софтина - Artmoney, но я ее не знаю. Вообще, с помощью CE начитерить себе нужное количество денег, опыта, ресурсов, да и вообще чего угодно - не представляет ни малейшей проблемы. Но есть одно неудобство: при каждом запуске игры (а в некоторых играх - и при каждой загрузке локации) нужные переменные приходится искать заново.

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

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

    Простой способ (поиск одноуровневых указателей)

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

    2. В нижнем окне кликаем правой кнопкой по строке адреса и в появившемся меню выбираем "Find out what writes to this address" - ставим бряк на запись. Даем разрешение на запуск дебаггера.

    3. Возвращаемся в игру и проделываем там что-нибудь, что изменит нужное нам значение. Покупаем/продаем, если ищем деньги, или подставляемся под пулю, если здоровье.

    4. Переключаемся на CE и в окне дебаггера видим появившуюся запись из одной или нескольких строк. Выбираем одну (вида mov [eax+xxx],ecx) и нажимаем сбоку кнопку "More information".

    5. Кликаем правой кнопкой по списку адресов вверху и нажимаем "copy info to clipboard". Копируем куда-нибудь в блокнот. После этого закрываем окно информации и в окне дебаггера нажимаем кнопку "Stop", чтобы не гонять лишние процессы. Закрываем дебаггер.

    Картинка №1.
    [​IMG]

    6. В основном окне CE в окно для поиска вводим адрес, который видели в указанном на картинке №1 месте. Ставим рядом галку Hex, тип значения - 4 байта. Нажимаем поиск. Листаем появившийся список адресов и находим первый, отмеченный зеленым - статический адрес. Копируем его вниз. Если на данном этапе зеленых адресов не нашлось - значит, с этой игрой не все так просто, и чтобы создать чит, понадобится скрипт на языке ассемблера. Или пробуем способ, описанный во второй части заметки.

    7. В нижнем окне дважды кликаем по адресу (именно там, где в заголовке таблицы указано "Adress").

    Картинка №2.
    [​IMG]

    8. Копируем из верхней строки адрес вида "program.exe+HEX".

    9. Ставим галку "Pointer". Ниже появляется два новых поля, верхнее, где был адрес, становится недоступным. В самое нижнее поле вставляем адрес, скопированный сверху. Тип выставляем такой же, какой был у исходной переменной, непосредственно содержащей нужное нам значение. В рассматриваем примере это однобайтовая переменная.

    10. Рассчитываем смещение. Запускаем вендовый калькулятор в шестнадцатиричном режиме и из адреса исходной переменной ( 07B2D52B ) вычитаем адрес, который искали в пункте 6 ( 07AF0020 ). Полученное число ( 3D50B ) вставляем во второе снизу поле над адресом. Впрочем, это же смещение и так было в окне информации дебаггера. Если знать, на что смотреть - можно не считать. Заодно можно и описание какое-нибудь вбить.

    Картинка №3.
    [​IMG]

    11. Жмем "Ok". В принявшей нужный нам вид строке в нижнем окне CE кликаем правой кнопкой по значению в колонке "Value" и выбираем пункт "Show as decimal", чтобы число наших денег/здоровья/патронов показывалось в десятичном формате, для удобства. Удаляем из нижнего окна все лишнее и сохраняем результат в виде файла *.CT. Теперь не надо будет каждый раз после запуска игры заново искать нужные переменные, достаточно загрузить этот файл в CE.

    PS: Спойлер. Чтобы не считать смещение, достаточно посмотреть на команду, в примере - eax+ebx. Внизу в окне информации дебаггера был список значений. Смотрим значения регистров, eax - это адрес, тот же самый, который мы копировали в поиск. Следовательно, ebx - смещение.

    Сложный способ (поиск многоуровневых указателей)

    1. Начинаем точно также. Находим адрес нужной переменной и копируем его вниз.

    2. Правой кнопкой кликаем по строке в нижнем окне и выбираем пункт "Pointer scan for this adress". В появившемся окне ничего не меняем, жмем "Ok".

    [​IMG]

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

    [​IMG]

    4. Закрываем все окна, кроме основного окна СЕ. Выходим из игры. Запускаем игру заново. В окне CE снова открываем процесс игры. Отвечаем "No" на вопрос, хотим ли мы сохранить ранее найденные результаты.

    5. В основном окне CE слева, над нижним окном, нажимаем кнопочку "Memory View". Откроется новое окно с дампом памяти, в верхнем меню которого следует выбрать Tools -> Pointer Scan. После чего снова появится уже знакомое нам окно указателей.

    6. В окне указателей в верхнем меню выбираем File -> Open и открываем сохраненный в пунте 3 файл. Теперь в верхнем меню уже этого окна выбираем Pointer scanner -> Rescan memory - Removes pointers not pointing to the right adress. В появившемся новом окне ставим переключатель вверху в положение "Value to find" и вводим в поле ниже число, соответствующее тому, какое значение имеет в игре нужный нам параметр на данный момент. И указываем справа его тип, тот же самый, что мы искали в самый первый раз. (Как вариант - ищем не по значению, а по адресу, если не поленились найти его заново). Жмем "Ok", снова появляется окно для сохранения файла, сохраняем. Можно перезаписать старый. Теперь процесс занимает намного меньше времени и некоторое количество результатов отсеивается.

    [​IMG]

    7. Повторяем пункты 4-6 раз пять или больше, пока количество результатов не перестанет уменьшаться заметно.

    8. Когда количество найденных результатов стало более-менее стабильным, начинаем отлавливать среди них нужный. Сортируем значения по "Base Adress" и выбираем штук пять из тех, которые относятся к основному процессу игры. Если таковых не осталось - тогда сойдет и из игровых модулей. Выбираем наугад и дважды кликаем по каждому, после чего готовые указатели копируются в нижнюю таблицу основного окна CE.

    9. Продолжаем выполнять пункты 4-6 с той разницей, что при перезагрузке процесса игры теперь сохраняем ранее найденные результаты. После каждой загрузки процесса смотрим нижнюю таблицу и выкидываем адреса, чье значение не соответствует актуальному игровому параметру или вообще осталось не определено. После этого грузим, как ранее, Pointer scanner, проводим новую фильтрацию и добавляем в нижнюю таблицу несколько свежих адресов.

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

    11. Выкидываем из таблицы все лишнее и сохраняем нужное в файл *.CT. Удаляем созданный при сканировании указателей файл(ы) *.PTR и огромную кучу накопившихся к тому времени временных файлов. Впрочем, с удалением можно и погодить пару дней, на случай, если после пары перезагрузок найденные адреса все-таки слетят. Т.е. окажется все-таки не то. Чтобы можно было продолжить с того момента, на котором остановились, а не начинать все заново.

    Картинки, зачем-то вставленные движком форума еще раз
    Motar79, Титан, A National Acrobat и 3 другим нравится это.

Комментарии

  1. Helmut
    @Mel Shlemming, И так нормально. В самом начале вон один уже появился, принялся жечь глаголом и клеймить позором.

    @Титан, Я уже упомянул в начале две игры, но, как я слышал, их уже больше. Просто я не особо и интересуюсь блокбастерами. А вот копанием в играх - интересуюсь.

    @DJKrolik, ну не понял - и хорошо, значит, все в порядке. Я тоже качаю хорошие пиратки, хотя тот же Dead Space со взломанным донатом не видел. И вообще, лично я все-таки предпочитаю на всякий случай уметь делать и самому, чтобы не надеяться на кого-нибудь. Да и просто это интересно.
Чтобы оставить комментарий просто зарегистрируйтесь и станьте участником!
  1. На этом сайте используются файлы cookie, чтобы персонализировать содержимое, хранить Ваши предпочтения и держать Вас авторизованным в системе, если Вы зарегистрировались.
    Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление