Как заморозить значение в cheat engine

Как в Cheat Engine заморозить значение

Программа Cheat Engine – это софт для взлома оффлайн и онлайн игр. С помощью программы пользователям дается инструментарий для замены параметров игры. Чит Энжин помогает находить папки с файлами, которые хранятся на ПК пользователя и обновляются одновременно с прохождением игры. Программа находит числовые значения, которыми обозначает количество игровых денег, здоровье персонажа, здоровье оппонента, урон или количество вооружения

Для чего замораживаются значения

В каждой компьютерной игре попадаются параметры, которые мешают пользователю проходить миссии. Разработчики создают сложные стадии, а компьютерные оппоненты располагают подавляющим преимуществом в сравнении с пользователем. Преимущество заключается в вооружении, скорости восстановления здоровья, неравных законов физики для Бот-а и живого игрока. В подобных случаях выручает софт Cheat Engine. Пользователь может в чит энджин заморозить значение, в котором оппонент располагает преимуществом. К примеру, программа найдет параметр, отвечающий за «стартовое здоровье» оппонента. Теперь, перед боем компьютерный Бот будет располагать 50% здоровья, а живой игрок — 100%. Шанс на прохождение соперника и завершение миссии — увеличивается.

Поиск параметров

Программа Cheat Engine — бесплатная. После загрузки и запуска, пользователь начинает поиск, выбрав игру через «Лист Процессов».

Как заморозить значение в Cheat Engine

В правой стороне экране размещена строка поиска «Значение» (Value — на английском). В эту строку введено числовое значение 100, так как в игре Zuma Revenge, автор статьи дошел до сотой стадии. В левой части панели программы показан результат поиска. В списке цифровых значений указаны адреса файлов, которые содержат информацию о сотой стадии игры.

Поиск параметров в Чит Энджин

Перенос адреса в рабочую зону

Чтобы перенести адрес в рабочую зону, нажимается правая клавиша на значение, предварительно указанное курсором. Затем выбранное значение (или значения) переносятся в рабочую зону. Для этого нажимается кнопка мыши, после чего выпадает окно с выбором функций. В окне нажимается верхняя строка «Аdd selected addresses».

Перенос адреса в рабочую зону в Чит Энджин

Примечание! Пользователям, которые планируют взламывать компьютерные игры, поможет предварительное изучение в интернете алгоритма маршрутизации файлов, которыми пользуется разработчик игры. К примеру, автор статьи знает, что адрес, начинающийся с «003А» отвечает за количество дополнительных ядер в заключительной стадии в игре Zuma Revenge. Поэтому, в этой статье показывается, как заморозить эти ядра, путем замораживания значения в папке файлов.

Как заморозить значения

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

Your access to this site has been limited by the site owner

If you think you have been blocked in error, contact the owner of this site for assistance.

If you are a WordPress user with administrative privileges on this site, please enter your email address in the box below and click "Send". You will then receive an email that helps you regain access.

Block Technical Data

Block Reason: Access from your area has been temporarily limited for security reasons.
Time: Wed, 5 Oct 2022 10:21:13 GMT

About Wordfence

Wordfence is a security plugin installed on over 4 million WordPress sites. The owner of this site is using Wordfence to manage access to their site.

You can also read the documentation to learn about Wordfence's blocking tools, or visit wordfence.com to learn more about Wordfence.

Click here to learn more: Documentation

Generated by Wordfence at Wed, 5 Oct 2022 10:21:13 GMT.
Your computer's time: .

BootDev

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

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

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

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

Встроенный дизассемблер. В CE присутствует x86/x64 дизассемблер, отображающий дамп памяти, стек, флаги процессора. Дизассемблер может анализировать код, и показывать содержимое некоторых адресов в качестве комментария. Присутствует возможность выставлять точки останова, выполнять отладку процесса, и следить за тем, какой адрес обращается к указанному участку памяти. Отображаемые инструкции процессора, естественно можно менять, или заменять на NOP‘ы.

Инъекции кода. CE позволяет внедрять свой ассемблерный код в запущенный процесс. Тем самым можно дополнить поведение программы своей логикой, или изменить существующее.

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

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

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

В качестве языка программирования, используется скриптовый язык программирования Lua. И естественно, стандартная библиотека Lua, кроме своих базовых функций, содержит множество интегрированных функций CE.

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

Cheat Engine — Введение в кулхацкерство

cheatengine_logo2

— Сколько тебе нужно золота?
— Эээ, много.
— А если его будет слишком много?
— Э-хе-хе! Глупое животное, золота не может быть слишком много!

м/ф «Золотая антилопа», 1954 г.

Благородные доны и прекрасные сеньориты!
Данным псто хотелось бы открыть серию практических гайдов по Cheat Engine — топовому на сегодняшний день инструменту для работы с адресным пространством оперативной памяти в поньтексте взлома игр. СЕ позволяет легко и непринужденно оперировать разномастными циферками, что дает безграничную власть в этих наших игрушках, муа-ха-ха! Зачем это кому может понадобится — вопрос, конечно же, философский, но мы будем разбираться не с оным безблагодатным вопросом «зачем», а с православным вопросом «как».
Помимо банального поиска и доступа к прямому редактирования памяти, что позволяет закрыть 99% потребностей среднестатистического онанимуса, в СЕ имеется и дизассемблер, и отладчик, и lua-скрипты, и возможность инъекций кода, и даже саммон черта в ступе с армией эквестрийской нежити, ежели появится такая надобность. Полное же описание возможностей СЕ в рамках одного гайда сделать попросту невозможно, в связи с чем было принято волевое решение не скакать галопом по гейропам, а потихонечку осваивать на практике разные приемы и фокусы.

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

Хроники кулхацкерства на Руси
Краткий экскурс в историю развития софта для взлома игр через память
[ Открыть ]

Давным-давно, в далекой-далекой голактеге малолетний школотрон свинчик был любителем журнала «Нигромания», на дисках которого выкладывались весьма достойные результаты цельного месяца упорного копошения редакции в диалапных интернетах. Времена те были светлые и безоблачные, ведь каждый год выходили настоящие шедевры геймдева, а коллеги пухлощекого Антоши пилили вполне честные обзоры. Неизменным же спутником тех выпусков был загадочный раздел с шестнадцатеричными кодами для игр, который пугал, сцука, одним только своим видом. Единственное, что было тогда понятно — игрушки хранят данные в оперативной памяти, а специальный софт позволяет эти данные искать. Процедура проста как кирзовый сапог: сначала выполняется поиск по заданному значению, затем в игре это значение меняется, после чего по изменившемуся значению выполняется отсев. На выходе получается адрес в памяти, по которому располагается нужное нам значение здоровья, патронов, денег и прочей ценной лабуды.
Для пользования же готовыми hex-кодами — заранее найденными адресами в памяти — нужна была программа Magic Trainer Creator. Один взгляд на внешний вид МТС вызывал священный ужас с одновременным пожеланием долгой и мучительной смерти от рака яичек достопочтенному интерфейсеру. Метод ненаучного тыка на тот момент положительных результатов не давал, встроенного хелпа не было, гайдов в самом журнале тоже не было, об интернетах я тогда и мечтать не смел, вот и пришлось лососнуть тунца вместо плодотворного пользования, как выяснилось несколько позже, вполне себе неплохой программкой. МТС справлялся со своими задачами, но его время безвозвратно ушло — на вин7 он начисто отказывается корректно работать, да и морально устарел полностью.
e04b9a8987660574_zoom

ds

В одном из выпусков журнала под заголовком «Наш ответ MTC» была опубликована статья об отечественной программе DetectiveStory. Данная программа уже обладала встроенным хелпом, значительно менее упоротым интерфейсом и крутыми алгоритмами поиска. Несмотря на все недостатки, я считаю DS самой продвинутой на момент своего появления. К сожалению, автор еще в середине нулевых забросил свое детище, и работу с 64-битными приложениями DS не поддерживает. Тем не менее, для 32-битных игрушек она и по сей день подходит великолепно. Крупными недостатками программы я считаю лишь невозможность одновременного поиска по всем требуемым типам данных, а также специфическую работу с указателями.

am

Параллельно с DS развивалась известная на отечественном рынке программа ArtMoney, автор которой уже был более меркантильным дельцом — в отличие от всех понькурентов она распространялась совсем не бесплатно (лол, ну да, ага). Несмотря на богатый встроенный инструментарий, AM всегда отличалась совершенно уебищными в плане оптимизации алгоритмами поиска, в результате чего иногда по несколько минут можно ожидать результаты первого сканирования. Впрочем, если за запущенный параллельно с твоим любимым пубгом СЕ ты рискуешь получить банхаммером по еблу, местечковая программка со схожим функционалом может и пригодиться в арсенале.

ce

Где-то в начале десятых на рынок ворвался на три головы превосходящий всех конкурентов Cheat Engine, моментально став чемпионом Капуи. Популярность этот опенсорсный проект, созданный в теплой ламповой среде Lazarus, приобрел из-за богатства возможностей, простоты использования и продуманности интерфейса. Это софт, при работе с которым посещает только один вопрос: как можно было сделать всё настолько охуенно? Разработчик Dark Byte (ирл-няшечка Eric Heijnen) — объект регулярного (не реже раза в неделю) теребоньканья со стороны старого свиномата. На сегодняшний день никакого смысла в использовании альтернативного софта попросту нет.

Снимок

Да и в целом, разве можно чего-то меньшего ожидать от разработчика с таким-то авиком на форуме? Наш человек!

Поиск истины важнее, чем обладание истиной
Немного о ключевых моментах в процессе взлома
[ Открыть ]
Для получения контроля над значением необходимо найти соответствующий адрес в памяти. Технически этот процесс можно разделить на две взаимодополняющие процедуры: сканирование адресного пространства и анализ структур дампа.

Сканирование адресов — это базовая процедура, смысл которой заключается в следующем цикле действий:
1. Поиск адресов, в которые записано значение, с учетом типа переменной.
2. Изменение этого значения в игре.
3. Отсев ранее найденных адресов по новому значению.
4. Если адресов слишком много, возврат на п.2.
5. Значение можно изменить, заморозить, создать хоткей для быстрого изменения значения, создать хоткей для запуска скрипта по изменению значения по данному адресу в соответствии с формулой с учетом значений по другим адресам.
6. PROFIT!
7. Если профита недостаточно, начинается поиск злоебучих указателей, адовых сигнатур, написание ебических скриптов и создание трейнера, но это уже высший пилотаж, который не нужен для достижения мещанского благополучия.
scan

dagger

Анализ дампа — вспомогательная процедура, благодаря которой можно в окрестностях уже найденного адреса быстро найти еще какие-то полезные адреса. Изюминкой данного способа является возможность наделения объектов такими свойствами, которые невозможно получить в самой игре: зачарования на шмотки, изменения типа объекта (хуяк-хуяк — и в продакшон мешок картошки превращается в элегантные шорты), выдача новых заклинаний персонажу и тому подобное.

Математические начала кулхацкерской философии
Всё сущее есть число, но это не мешает морским котикам насиловать королевских пингвинов
[ Открыть ]
Начать хотелось бы с нехитрой мысли о том, что искать в оперативной памяти мы будем численные значения. Значения эти хранятся в переменных соответствующих типов. Тип переменной определяется разработчиком игры, и повлиять на него мы никак не можем.
Наиболее вероятно использование следующих беззнаковых типов значений:
1 Byte — 1 байт целочисленное — диапазон значений от 00 до FF (от 0 до 255).
2 Bytes — 2 байта целочисленное — диапазон значений от 00 до FFFF (от 0 до 65535).
4 Bytes — 4 байта целочисленное — диапазон значений от 00 до FFFFFFFF (от 0 до 4294967295).
8 Bytes — 8 байт целочисленное — диапазон значений от 00 до FFFFFFFFFFFFFFFF (от 0 до 18446744073709551615).
Float — 4 байта с плавающей точкой — диапазон значений от 00 до FFFFFFFF (от 0 до 3.402823466e+38).
Double — 8 байт с плавающей точкой — диапазон значений от 00 до FFFFFFFFFFFFFFFF (от 0 до 1.7976931348623158e+308).

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

Также важно понимать, что при хранении в памяти используется обратный порядок чередования байтов. Десятичное число 10000 (2710 в hex-кодировке) будет храниться как 1027.
10k

Для чисел с плавающей точкой float и double обязательно также понимание принципа хранения мантиссы и порядка:
[ Открыть ]
float
float
double
double

Таким образом, в примере ниже значение (тип double) составляет исходно 201.400852320938.
Увеличение на единицу последнего (с учетом обратного порядка записи) байта с 40 до 41 даст 13199006.257705.
Увеличение на единицу 7 байта с 69 до 70 даст 258.801704641876.
Увеличение на единицу 6 байта с 2C до 2D даст 201.432102320938.
double
Но лучше, конечно, вводить значение не в редакторе памяти, а непосредственно в рабочем поле работы с адресом, дабы не ебсти себе мозги со всеми этими преобразованиями.
double
Кроме того, даблкликом по адресу можно вызвать окно редактирования значения.
mem9

Интерфейс и возможности Cheat Engine
Знакомство с базовым функционалом сабжа
[ Открыть ]
При запуске СЕ откроется главное окно программы:

Сверху посередине указан атакуемый процесс:
p1
В левом верхнем углу находится кнопка выбора процесса, заботливо подсвечиваемая при запуске СЕ:
p2
Справа по центру расположен блок управления сканированием адресов. Кнопки New Scan и Next Scan запускают первый поиск и отсев соответственно. В поле Value вводится требуемое значение для поиска/отсева, при остановке чекбоксика Hex значение будет трактоваться как шестнадцатеричное.
В списке Scan Type выбирается тип сканирования, исходя из имеющейся информации о значении искомой переменной.
В списке Value Type выбирается тип переменной.
p3

При первом поиске доступны представленные ниже варианты. Для варианта Exact Value следует понимать, что для типов значения с плавающей точкой (float и double) будет производиться расширение диапазона возможных значений. То есть если реальное значение находится в диапазоне от 99.5 до 100.5, то при настройках округления Rounded (default) можно смело искать 100.
s2
При последующих отсевах доступны следующие варианты:
s1

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

p5

В рабочем поле (так я буду называть область на скриншоте ниже) можно производить манипуляции с найденными адресами. Для изменения содержимого столбца необходимо два раза кликнуть непосредственно на содержимом данного столбца, то есть при необходимости изменить непосредственно значение кликать нужно по 100.5. По умолчанию можно воспользоваться клавишей Enter по выделенным адресам, в этом случае можно будет провести групповую коррекцию значений (клик ПКМ по выделенному адресу и выбор пункта Change record покажет все хоткеи). Значение по выделенному адресу (или нескольким) можно заморозить и разморозить пробелом.

Требуемый адрес можно также добавить вручную с помощью кнопки Add Address Manually в правой части окна чуть выше рабочего поля. Значение по данном адресу будет выведено автоматически (справа) согласно выбранному типу значения.
add1

С помощью пункта контекстного меню Set hotkeys (Ctrl + H) в рабочем поле для выделенного адреса (или группы адресов, объединенных пунктом Add to new group) можно назначить хоткеи.
mem10

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

mw

Если жмакнуть ПКМ на адресе и выбрать пункт Browse this memory region (Ctrl + B), откроется редактор памяти Memory Viewer. Верхняя половина окна нас пока мало интересует, а все самое интересное находится в нижней.
Автоматически будет выбран тот адрес, на котором мы и жмакали изначально. Перезапись значений по адресу осуществляется прямым вводом с клавиатуры. Можно также выделять, копировать и вставлять из буфера обмена целые блоки байтов. Кроме того, любой адрес можно добавить в рабочее поле главного окна программы по клику ПКМ и выбор пункта Add this address to the list — цэ как раз полезно после выявления потенциально важного адреса. И, как уже упоминалось ранее, даблклик по адресу открывает окно корректировки значения.

Отдельного упоминания также заслуживает винрарнейшая функция смены представления данных, доступная по клику ПКМ в любой точке рабочей области и выборе пункта Display Type. Эта функция позволяет отобразить данные в любом удобном виде, что бывает крайне полезно при визуальном анализе дампа, ибо перевод в уме значений из шестнадцатеричной системы в десятичную с учетом обратного порядка чередования байтов — удовольствие не для всех.
dt
dt2

Блэкмор, дуй в свою дудку!
Путь в тысячу ли начинается с первого шага, и даже великим воинам нужно тренироваться на кошках
[ Открыть ]
Начать потрошение хочется с чего-то лампового вроде третьих героев и феминистки Жемчужины, которая смотрит на игрока как на говно.
Запускаем игру, СЕ, выбираем процесс Heroes3.exe.
open
Пробуем мыслить как кулхацкер, имеющий представление о механиках игры: есть куча циферок, из которых нам важно выделить легко изменяемые игровыми средствами. Первое, что приходит на ум — количество юнитов в слоте, причем брутальные кентавры выглядят привлекательнее женоподобных эльфоёбов, ибо их больше, а большие числа всегда проще искать.
h3_0

Со значением 20 мы определились (и это именно Exact Value), теперь нужно определиться с типом значения. Пока точно неизвестно, целочисленный это тип или с плавающей точкой, а даже если целочисленный, хуй его проссышь, сколько байт занимает переменная. Поэтому на первый раз поиск нужно проводить по типу All. Выставляем все настройки и жмакаем First Scan.
sc1

Результат в 71к найденных адресов выглядит не слишком оптимистично:
sc2

Перекидываем несколько кентавров в третий слот, в первом же слоте их теперь 13 штук:
h3_1

Вводим новое значение и жмакаем Next Scan:
sc3

И получаем следующие результаты отсева в виде 3 найденных адресов:
sc4

Три адреса уже недурно, но проведем дополнительный цикл отсева. Перекидываем еще немного кентавров в третий слот и возвращаемся в СЕ, чтобы сделать дополнительный отсев:
h3_2

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

Но если даже мы не заметили это изменение значения, достаточно просто выполнить дополнительный отсев, как мы и хотели изначально:
sc6

Ну теперь точно всё, можно смело перекидывать адрес 02D8927B в рабочее поле кнопкой со стрелочкой.
Кроме того, СЕ также указывает нам на тип значения по найденному адресу после двоеточия — 1 байт целочисленное. Циферки 1 , 2 , 4 и 8 соответствуют целочисленным типам, буквы s (от «single», потому что по определению это одинарная точность, но на самом деле это float) и d (double) — с плавающей точкой. Все последующие поиски можно будет выбирать уже 1 байт целочисленный при сканировании.
sc7arr

sc21

var1

h3_3
mem2

fast_scan

Для того, чтобы иметь возможность сканировать по типу значения 4 байта целочисленное, в настройках сканирования нужно просто отключить чекбоксик Fast scan, отвечающий за оптимизацию алгоритма сканирования. Если чекбоксик установлен, сканирование осуществляется целыми блоками по максимальному числу байт, отведенных для данного типа значения (в данной ситуации — по 4 байта). В нашем случае адрес значения находился где-то между соседними блоками, из-за чего СЕ не воспринимал его как искомое значение, поэтому при поиске значений All программа нашла только тип 1 байт целочисленное. Такое часто случается, если в структуре данных используются переменные разных типов, на которые отводится меньшее число байтов. При сканировании для типа 1 байт установленный чекбоксик Fast scan ничего не решал, ибо 1 байт является минимальным блоком для сканирования. Если значение не ищется, всегда можно попробовать отключить опцию быстрого сканирования.

Теперь самое время попробовать что-то посложнее, ибо самостоятельный поиск золота и прочих ресурсов не вызовет никаких трудностей. Слева от портрета героя есть шкала очков движения, но ни циферок, ни какого-то иного способа идентификации значения нет.
hero
Специально для поиска неведомой ёбаной хуйни в СЕ предусмотрен тип поиска Unknown initial value. Он подходит и для полосочек без значений, и для кодированных значений вроде таймеров обратного отсчета.
u
В результате первого поиска получаем все возможные адреса, которые занимает игра. Они даже в список результатов не выводятся — настолько их много.
u2
Наша цель теперь провести несколько циклов изменения значения — будем по чуть-чуть тратить очки движения и фиксировать их изменение выполнением отсева. Если мы хотим найти адрес в рамках одного хода, работать придется только на уменьшение значения.
Теперь возвращаемся в игру и минимально передвигаемся по карте.
hero=> hero1
В списке Scan Type выбираем Decreased value и жмем Next Scan.
sc8
После отсева получаем более 9000 адресов.
sc9
Снова передвигаемся по карте и выполняем аналогичный отсев. Снова дохуя адресов, причем там есть и отрицательные, и крайне маловероятно, что игра использует для количества очков движения отрицательное значение.
=> hero2
sc10
В связи с этим, ничего не меняя в игре, можно провести отсев, исключив адреса с отрицательными значениями. Не сказать, чтоб прям сильно полегчало, но уже меньше шума.
sc11
Также можно сразу отсеять адреса, значения по которым постоянно изменяются даже без захода в игру. Совсем копейки, но все же.
sc12
Снова двигаемся в игре и фиксируем уменьшение очков движения.
=> hero3
sc13
Ну и кароч после 5 дополнительных итераций получаем нужный адрес:
=> hero4
sc14
Видно, что это один и тот же адрес, просто СЕ учел два возможных типа значения: 8 байт целочисленное и 8 байт с плавающей точкой.
Перекидываем его в рабочее поле и задаемся вопросом: почему такие ебанутые значения для всех подходящих типов?
sc15

Самое время для вызова Шерлока Холмса с помощью пункта контекстного меню Browse this memory region (Ctrl + B) и поиска ответов в дампе.
Адрес очень похож на правду, ведь он находится по соседству с адресом 02D8927B (отмечен зеленым цветом), содержащим число кентавров в первом слоте. Подозрительно то, что структура данных странным образом нарушена, ибо адрес 02D89218 смещен относительно адреса 02D8927B на число байт, не кратное 4. Логично предположить, что при корректной структуре данных адрес со значением очков движения должен находиться либо на 1 байт до, либо на 3 байта после найденного СЕ адреса.
sc16

Для проверки своей гипотезы посмотрим на значения по указанным адресам. Видно, что это гораздо более адекватные значения для типа 4 байта целочисленное.
sc18

sc19

Контрольный выстрел производим в голову, немного уменьшив количество очков движения в игре в вернувшись в редактор памяти.
Сомнений нет, второй адрес — искомый.
sc20

Окончательно демонстрирует нашу правоту редактор памяти, открытый относительно адреса 02D8927B с числом кентавров, дабы выправить представление структуры страницы памяти. Сделать это можно прямо из редактора памяти по контекстному меню Goto address (Ctrl + G) или из рабочего поля главного окна, выбрав там адрес и открыв редактор памяти по контекстному меню Browse this memory region (Ctrl + B).
Вот, теперь все четко, ровно и красиво.
sc22

Жмакаеем ПКМ по адресу 02D8921B и выбираем пункт Add this address to the list, в диалоговом окне не забываем указать тип значения 4 байта целочисленное.
sc24
Соседний адрес 02D89217, кстати, очень похож на максимум очков движения. Точно так же добавим его в рабочее поле главного окна СЕ.
sc25
Проверить это можно элементарно, достаточно пропустить ход.
end
Комментарии излишни, ящитаю.
sc26
Напомню, что заморозка и разморозка значений по выбранным адресам делается пробелом, а изменение содержимого — даблкликом по содержимому столбца. Табличку можно засейвить по Ctrl + S, она нам еще может пригодится.

NB! Причина странной работы СЕ при поиске по типу All заключается в установленном чекбоксике быстрого сканирования.

Но вернемся к нашим полупоням.
a1
Нижнаяя строка явно отвечает за количество юнитов в слоте, а за что отвечает верхняя строка? И почему в ней повторяется 0E через блок в полном соответствии с расположением войск по слотам? Уж не за тип ли войск отвечает каждый из верхних адресов?
mem1

Предлагаю изменить в первом слоте 0E на 0F.
mem3
Ну ты понел. То есть для типов юнитов используется сквозная нумерация.
a2

Забавно, что у нас целых 4 слота в армии свободно, а в памяти мы видим столько же забитых значением FF блоков по 4 байта.
Совпадение? Не думаю.
mem4

Изменим количество капитанов кентавров в первом слоте на 30, а затем в игре раскидаем их по свободным 4 слотам в количестве 5, 6, 7, 8 штук соответственно.
a3
Никаких сомнений, все абсолютно точно. Сначала идет блок из семи адресов по 4 байта, отвечающих за типы юнитов в слотах, затем идет аналогичный блок с количеством юнитов в слотах.
mem5
Поставим что-нибудь наобум в типах юнитов (в разумных пределах, иначе можно крашнуть игру, если она не найдет прописанный тип юнита).
mem6
«А почему бы и нет?» — подумал поручик Ржевский, зайдя в конюшню Инферно.
a4

Но вернемся на исходные позиции. Уволим всю эту пиздобратию, чтобы дамп не замусоливала, оставив только первый слот.
a5

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

Снова запустим игру и выберем процесс в СЕ. Все адреса съехали из-за DMA — Dynamic Memory Allocation (динамическое выделение памяти). К этому вопросу и централизованным методам его решения мы еще вернемся в последующих гайдах для обстоятельного рассмотрения, а пока нам просто надо знать, что чаще всего все найденные адреса потеряют актуальность при следующих запусках игры.
Первым делом надо найти новый адрес, в котором записано число капитанов кентавров:
scan2
Поскольку структура расположения данных в дампе не изменилась, то было бы крайне ахуительно не добавлять все найденные ранее адреса вручную с учетом смещения. И таковая функция в СЕ таки предусмотрена.
Даблкликаем по новому адресу 02F9927B и копируем его в буфер обмена.
scan3
Выделяем все старые адреса в списке и выбираем пункт контекстного меню Recalculate new addresses, причем последним выделенным адресом (отмечен пунктирной рамочкой) должен быть именно тот старый адрес, для которого мы только что нашли новое положение в дампе. Ведь именно относительно него, старого адреса, будет рассчитано новое смещение и для всех остальных в списке выделенных.scan4
В появившемся окне выбираем вкладку Change to address и вводим новый найденный адрес. Нажимаем кнопоньку Change.
scan5

Вуаля! Таким макаром можно быстро восстановить работоспособность готовой таблицы.
scan6

Рассмотрим теперь еще один вид поиска, когда известна некоторая структура дампа.
В данном случае можно точно сказать, что есть 7 блоков по 4 байта, в которые последовательно записаны значения 16, 5, 6, 7, 8, 3, 5, что в hex-кодировке будет выглядеть как 10 00 00 00 05 00 00 00 06 00 00 00 07 00 00 00 08 00 00 00 03 00 00 00 05 00 00 00 .
a6
scan7

Скопируем этот массив прямо в редакторе памяти, выделив его и нажав Ctrl + C.
Можно убедиться, что в буфер обмена скопирована просто последовательность байтов, разделенных пробелами.
10 00 00 00 05 00 00 00 06 00 00 00 07 00 00 00 08 00 00 00 03 00 00 00 05 00 00 00

Теперь в настройках поиска требуется установить Value Type на Array of byte, поставить чекбоксик Hex (что как бы намекает) и ввести нашу последовательность.
scan8
NB! Если какие-то байты неизвестны, их можно заменить знаком вопроса «?».
10 00 00 00 ? 00 00 00 ? 00 00 00 07 00 00 00 08 00 00 00 03 00 00 00 05 00 00 00 .

Результат поиска не заставит себя долго ждать.
scan9

Ну а самым любознательным исследователям я оставлю в качестве домашнего задания вкусняшку. Это некоторые значения в дампе которые сразу примечает наметанный глаз. Это далеко не все, что видно с моей колокольни, но для затравки будет достаточно. Развлекайтесь на здоровье, дорогие поросяточки!
scan10

Вместо заключения
Несколько слов о планах на будущее
[ Открыть ]
В данном вступительном гайде рассмотрены примитивные вопросы взаимодействия с богатейшим инструментарием Cheat Engine. Прошу прощения за некоторую сумбурность подачи, но нельзя не отметить масштабы явления — было невероятно сложно начать. Надеюсь, дальше будет попроще. Впереди много занимательных моментов, тонкостей и нюансов, которые я постараюсь разбавлять примерами из игровой классики. Постараемся вместе немного разобраться с поиском указателей, работе отладчика и дизассемблера на том уровне, который необходим при взломе игрушек. Если, конечно, на вас вся эта дичь не будет нагонять скуку. Без фидбека и вашей заинтересованности мне будет непросто графоманить вхолостую.
В качестве материала для соморазвития советую обратить внимание на форум gamehacklab.ru, а также следующие каналы на ютабе: GameHackLab[RU], Михаил Ремизов, Garik 66 Gamehacklab, inaginary ooo.
Также крайне рекомендую изучить справку к СЕ и пройти встроенные туториалы (меню Help), там много ценной информации.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *