Madara Uchiha
Ученик
(107),
закрыт
2 года назад
Как найти в cheat engine значение с запятой ( например 37,52)
Лучший ответ
FreeZe Time
Профи
(670)
5 лет назад
Это дробное значиение, в СЕ есть такая строчка с выбором типа, там по дефолта 4 байта – Измени на float.
EloveydeЗнаток (303)
1 год назад
не работает выдаёт ошибку
Александр ПереславцевЗнаток (306)
1 год назад
А если она не горит?
Остальные ответы
Ivantrs
Искусственный Интеллект
(231087)
6 лет назад
возможно, что число хранится в каком-то другом виде…
например, как 37520
Похожие вопросы
Содержание
- Тема: Как писать читы: №1 Ищем нужное значение с помощью Cheat Engine
- Социальные закладки
- Чит-движок (полное руководство) для начинающих
- 1. Загрузите и установите Cheat Engine.
- 2. Ноу-хау в пользовательском интерфейсе
- 3. Базовый рабочий процесс Cheat Engine
- 4. Используйте Cheat Engine на BlueStacks [Step by Step]
- 5. Используйте процесс HD-Player для редактирования значений игры.
- 6. Используйте процесс физической памяти для редактирования значений игры.
- BootDev
- Страницы
- 2019-11-17
- Cheat Engine: Прохождения Туториала Шаги 1 и 2
- Содержание
- Туториал
- Шаг 1
- Шаг 2
- Как пользоваться Cheat Engine
- Как работает программа Cheat Engine
- Как пользоваться популярной программой Cheat Engine
- Преимущества программы Cheat Engine
- Чит энджин как искать значения с точкой
Тема: Как писать читы: №1 Ищем нужное значение с помощью Cheat Engine
Социальные закладки
Опции темы
Отображение
Для этого мы будем пользоваться программой для читинга Cheat Engine, и с поиском нужного нам адреса.
После моего урока у Андрея ( ShadowAGT ), мне было сказано выложить его тут, в чем я собственно согласен с ним.
Это как для закрепления материала, ну и для тех кому будет это интересно. Ну начнем с того что саму программу, вы можете скачать с оф.сайта, это тут: [Вы должны быть зарегистрированным и не заблокированным пользователем для того чтобы просматривать ссылки зарегистрироваться можно по этой ссылке]
На данный момент урок будет предоставлен на программе Cheat Engine v.5.6.1
Для простоты понимания, и исключения Ваших непоняток, почему CheatEngine иногда не отсеивает значения правильно т.к.
Вы можете их неправильно искать по типу чисел в памяти, в неправильной последовательности выполнять поиск, значения могут быть так же кодированными, может находить не одно а несколько значений (дубляжи) и напав на след неверного дублера, можно уйти неправильной дорогой, была выбрана самая элементарная игра где ошибиться просто невозможно,
и объяснить на ней все это достаточно просто и быстро. По аналогии с этой игрой, делается в ЛЮБОЙ другой игре, будь то Сталкер или какая-нибудь еще стрелялка, стратегия, симулятор и т.д.
Возьмем для примера стандартную Windows игру «КОСЫНКА» игра была взята из Windows XP
Постараюсь объяснить чуть ли не на пальцах.
Начнем:
Запускаем Косынку, потом Cheat Engine
Далее в Cheat Engine выбираем процесс игры, нажимаем на значок компьютера в ней.
Выбираем процесс самой игры, пометил синим.
Затем переходим в саму игру и делаем любой ход который прибавит нам очков.
Я положил туза, и получил 10 очков
После быстро переходим в программу ставим Value на 10, и жмем кнопку First Scan (вот здесь уже неплохо было бы использовать опцию Pause the game while scanning поскольку в Косынке, набранные очки уменьшаются с течением времени).
Потом ждем пока очки уменьшаться сами, или делаем любой ход чтоб их увеличить.
Прописываем там где у нас было десять, ваше текущие очки и жмем Next Scan: И там же получаем результат
( он может выйти не с первого раза, если что еще раз набиваем очков и отсеиваем )
Далее кликнем два раза по самому значению слева, и оно у нас перебегает вниз:
Там где у нас стоит в значении, наши очки. Ставим там любую цифру, допустим 800.
И смотрим, чтоб в игре это значение тоже поменялось, если в игре нужное нам число изменилось, стало тоже 800, значит вы все правильно сделали:
Источник
Чит-движок (полное руководство) для начинающих
Cheat Engine — один из ведущих инструментов для ОС Windows, используемый игроками для редактирования различных значений игры в соответствии с их требованиями для преодоления различных ограничений игры (или просто для развлечения). Он сканирует память и использует функцию отладчика для выполнения своей операции (например, мошенничества в играх).
Будучи одним из лучших инструментов в своей нише, он не имеет одного из лучших пользовательских интерфейсов для новичков и требует определенного уровня знаний для работы с ним. Итак, мы составили руководство для новичков, чтобы упростить новичку и научить его, как правильно использовать чит-движок.
Но прежде чем продолжить, имейте в виду, что не каждое значение игры может быть отредактировано Cheat Engine, особенно большинство серверных или онлайн-игр (которые обрабатывают пользовательские данные на своей стороне, а не на пользовательской машине) значения для этих типов. игр нельзя редактировать с помощью Cheat Engine.
Предупреждение: действуйте на свой страх и риск, поскольку некоторые игры или платформы (например, Steam) могут заблокировать вашу учетную запись за попытку неэтичных методов манипулирования игровыми модулями и использование Cheat Engine. Обсуждаемые здесь методы предназначены только для образовательных целей.
1. Загрузите и установите Cheat Engine.
Хотя вы можете найти множество онлайн-ресурсов для загрузки Cheat Engine, всегда лучше загрузить последнюю версию Cheat Engine (в настоящее время версия 7.2) с веб-сайта официальный сайт Cheat Engine.
Загрузите Cheat Engine с официального сайта
После того, как вы загрузили Cheat Engine, дважды щелкните его, чтобы запустить, и следуйте инструкциям, чтобы завершить процесс. Убедитесь, что вы отклонили любую панель инструментов браузера, например панель инструментов Mcafee, или любое другое рекламное ПО.
Отказаться от установки PUP при установке Cheat Engine
Кроме того, рекомендуется установить его на системный диск в предполагаемое место по умолчанию. После установки запустите Cheat Engine (нажмите Да, если получено приглашение UAC). Если будет предложено, пропустите любое диалоговое окно, в котором запрашивается сервер сообщества и т. Д.
2. Ноу-хау в пользовательском интерфейсе
В верхней части окна Cheat Engine у вас есть следующие пять меню:
Меню Cheat Engine
Под меню у вас есть панель инструментов быстрого доступа, на которой есть три следующих значка:
Значки на панели быстрого доступа Cheat Engine
3. Базовый рабочий процесс Cheat Engine
Во-первых, пользователь щелкает Process Explorer (чтобы открыть запущенные процессы в системе), и пользователю отображаются три вкладки, а именно:
Список процессов, показывающий приложения, процессы, вкладки Windows
Вы можете использовать любую из вкладок Process Explorer, чтобы узнать о процессе игры. Узнать связанный процесс немного сложнее, как вы можете видеть на изображении ниже:
Выберите процесс HD Player в списке процессов Process Explorer
Как вы можете видеть на картинке выше, BlueStacks имеет множество процессов, и чтобы найти связанный, вам, возможно, придется использовать метод проверки и пробной версии (или проверьте форумы сообщества, чтобы узнать о процессе, найденном другими игроками). После выбора процесса нажмите кнопку «Открыть», и может появиться окно следующего типа:
Окно после выбора процесса в Cheat Engine
Как видите, мы можем примерно разделить это окно на 4 части:
4. Используйте Cheat Engine на BlueStacks [Step by Step]
Довольно основного обсуждения, давайте погрузимся в океан модификаций игры. В качестве примера использования мы обсудим процесс для эмулятора BlueStacks Android, и тот же процесс можно использовать для редактирования значений в других играх (на базе Windows или эмулятора).
Использование Cheat Engine на BlueStacks [Step by Step]Чтобы использовать Cheat Engine в играх BlueStacks, Cheat Engine может использовать процесс HD-Player или сканировать физическую память устройства для выполнения своих команд.
5. Используйте процесс HD-Player для редактирования значений игры.
Вы можете использовать вкладку процесса Cheat Engine, чтобы узнать игровую ценность игры в BlueStacks, а затем отредактировать ее соответствующим образом.
Вы можете выполнить ту же процедуру, чтобы изменить значения других параметров игры (например, очков и т. Д.). Этот же прием можно использовать для редактирования игровых параметров других игр.
6. Используйте процесс физической памяти для редактирования значений игры.
Если описанный выше метод не помог, попробуйте метод ниже, который использует процесс физической памяти для поиска игровых значений (но этот метод может занять много времени для сканирования и замедления вашего ПК):
Имейте в виду, что в процессе физической памяти первое сканирование может занять больше времени, но последующие сканирования могут занять меньше времени. Если приложение Cheat Engine или система дает сбой во время процесса сканирования, вы можете попробовать следующие шаги:
Теперь, когда у вас есть общее представление о том, как работает Cheat Engine, самое время пройти внутреннее руководство по Cheat Engine в меню «Справка».
Откройте руководство по Cheat Engine в меню справки
По завершении обучения вы можете попробовать изменить значения в другой игре (например, Plants Vs Zombies). Для более продвинутых игр вы можете использовать значения / процесс, отслеживаемые другими игроками (или таблицы импорта), опубликованные на форумах сообщества. Кроме того, сейчас самое время использовать сервер CE Community для импорта игровых значений, процессов или таблиц и улучшения ваших игровых навыков. Этого достаточно для базового руководства Cheat Engine, так что продолжайте наслаждаться игрой и получайте удовольствие!
Источник
BootDev
Создание загрузочных дисков и прочие полезные мелочи
Страницы
2019-11-17
Cheat Engine: Прохождения Туториала Шаги 1 и 2
О самой программе Cheat Engine, и о ее возможностях, можно прочитать тут. Программа содержит в своем составе обучающие туториалы, призванные научить новых пользователей работе с данной программе. Начиная с этой статьи, я рассмотрю прохождение всех туториалов данной программы. Итак, туториал первый, шаги 1 и 2.
Содержание
Туториал
Слово туториал, происходит от английского слова tutorial, что в переводе означает учебное пособие/руководство. Туториал в программе Cheat Engine, как было сказано выше предназначен обучить нас базовым навыкам взлома видео игр.
Запустить туториал программы Cheat Engine можно из меню Help, основного окна программы.
Сам туториал, представляет собой отдельную программу, состоящую из девяти шагов (на момент написания данной статьи). Мы будем рассматривать каждый шаг отдельно, и в данной статье ограничимся шагами 1 и 2.
Первый шаг программы является инструкцией, как открыть программу и как выбрать взламываемый процесс.
Со второго шага и далее, начинаются практические задания.
Шаг 1
Запустив первый туториал (неигровой), вы увидите первый шаг. В данном шаге описывается, как выбрать целевой процесс туториала для дальнейшей работы с ним.
Откроем процесс туториала в программе Cheat Engine. Открыть окно выбора процесса можно двумя способами, либо с помощью меню File → Open process.
Либо с помощью соответствующей кнопки на панели инструментов.
Окно выбора процесса выглядит следующим образом.
Важным нюансом, является то, что в окне выбора целевого процесса можно набирать его название, тем самым выполнять фильтрацию списка. Ввод поддерживаться сразу, достаточно просто начать писать.
Найдя нужный процесс, неважно в какой вкладке, выделяем его щелчком мыши, и нажимаем на кнопку Open. Окно выбора процесса при этом закроется, а в основном окне программы Cheat Engine появится информация о выбранном для работы процессе.
Теперь Cheat Engine может управлять процессом запущенного ранее туториала.
Так как первый шаг туториала носит информационный характер, перейдем к реальной работе с программой, перейдя к следующему шагу. Переходим в окно туториала и нажимаем на кнопку Next.
Шаг 2
Второй шаг представляет собой практическое задание. Выглядит оно следующим образом.
В нашем распоряжении счетчик здоровья Health со значением 100. При нажатии на кнопку Hit me значение здоровья уменьшается. Чтобы решить данное задание, необходимо задать счетчику здоровья значение 1000. Сделать это без применения сторонних программ, естественно невозможно.
Теперь немного теории. При запуске любая программа загружается в оперативную память, и хранит в ней исполняемый код, и все необходимые параметры и значения. Параметры и значения могут представлять собой целые числа, числа с плавающей запятой, и строки. Хранятся они в определенных участках оперативной памяти и имеют свои уникальные адреса.
Cheat Engine позволяет выполнять поиск в области памяти запущенной программы, с целью найти и изменить необходимые значение запущенной программы.
И так, приступим к выполнению шага 2. На данный момент у нас запущен туториал на втором шаге, и так же запущен Cheat Engine с открытым процессом туториала.
Чтобы установить параметру здоровья значение 1000, его нужно сначала найти. Выполним первоначальный поиск текущего известного значения здоровья.
Вводим текущее значение здоровья, в нашем случае это целое число 100, в поле Value (Значение) программы Cheat Engine, и нажимаем на кнопку First Scan (Первое сканирование).
По завершению первого сканирования, левое поле окна Cheat Engine заполнится всеми адресами памяти содержащими число 100. Кроме этого, станет доступна кнопка Next Scan (Последующее сканирование).
Как можно заметить, у текущего процесса, в оперативной памяти сейчас имеется 42 адреса содержащих целое число 100. Чтобы определить, какой из данных адресов отвечает именно за здоровье, необходимо выполнить повторное сканирование среди уже найденных значений, но предварительно изменив, любым из возможных способов, текущее значение здоровья.
В случае с туториалом, в нашем распоряжении имеется кнопка Hit me имитирующая, так сказать, потерю здоровья. В случае реальной игры, вам потребуется получить урон, или выстрелить один боеприпас, в зависимости от того какое значение вы ищите.
Нажмем на кнопку Hit me чтобы значение здоровья уменьшилось.
Значение здоровья изменилось и стало равно 95. Обращаем внимание на таблицу с адресами памяти. Cheat Engine довольно продуманная программа, и как можно заметить изменившиеся значения сразу же отображаются изменив свой цвет на красный.
Если просмотреть весь список адресов, то можно обнаружить, что изменилось значения только для одного адреса. Это в свою очередь означает, что данный адрес памяти отвечает за необходимое нам значение здоровья.
На данном этапе, можно было бы изменить значение данного адреса, и шаг был бы пройден. Но давайте рассмотрим, как осуществляется повторный поиск по уже найденным адресам.
Приступим. Введем изменившееся значение, в моем случае это 95, в поле Value, но уже с последующим нажатием на кнопку Next Scan, тем самым запуская процесс поиска по уже найденным ранее адресам.
После процедуры фильтрации обнаруживаем, что найденный ранее адрес и был искомым.
Теперь осталось только изменить значение данного участка памяти. Для этого достаточно выполнить клик правой кнопкой мыши по целевому адресу, и в открывшемся меню выбрать пункт Change value of selected addresses. После, в открывшемся окне ввести нужное значение, в случае туториала это число 1000, и нажать на кнопку OK.
После изменения значения, замечаем как кнопка Next, окна туториала, стала активной, что свидетельствует об успешном выполнении задания.
Нажав на нее, мы переходим к следующему, третьему шагу данного туториала. Заданием которого является поиск значения индикатора здоровья, представленного в виде полоски без числового обозначения. О прохождении которого мы поговорим в следующей статье.
Источник
Как пользоваться Cheat Engine
Иногда схватка с чрезмерно сложным боссом портит впечатление от игры, когда тот упорно не дает продвигаться дальше по сюжету. Подобные проблемы, вызванные отсутствием баланса, легко решить с помощью Cheat Engine – программы для изменения внутриигровых параметров. Это отличное решение, которым пользуются тысячи геймеров.
Как работает программа Cheat Engine
Cheat Engine представляет собой высокопроизводительный HEX-редактор, работающий в стандартном режиме и Speed Hack. Пользоваться программой сможет даже новичок, по-крайней мере, изменить количество денег или увеличить здоровье главного героя в 10 или 100 раз – базовые операции не представляют собой ничего сложного.
Как пользоваться популярной программой Cheat Engine
Рассмотрим, как работает программа на примере игры Heroes 3. Допустим, что изначальное количество золота составляет 20000 – почему бы не сделать себе миллион золотых. Сверните игру и запустите Cheat Engine, затем выполните манипуляции, описанные ниже.
Нажимаем кнопку с изображением компьютера.
Откроется окно, в котором представлен список запущенных процессов – в нашем случае нужен h3wog.exe. Название «экзешника» можно посмотреть в папке с игрой.
Нажимаем кнопку Открыть. В строке Значение указывается текущее количество золота. Нажимаем кнопку Поиск. В открывшейся таблице, находящейся слева, отобразятся найденные значения, соответствующие введенному запросу.
Найдите нужную строку из доступных, используя метод сортировки. Потратьте золото в игре – пусть текущее количество денег в казне изменится. Эту комбинацию цифр введите в Cheat Engine в поле значение – выполните эту манипуляцию и нажмите кнопку Отсев ( ни в коем случае не Новый поиск, иначе придется начинать заново!).
Продолжайте поиск, пока не останется одна строка с закодированным количеством денег. Кликните по оставшейся строке левой кнопкой мыши, а затем правой и в контекстном меню выберите пункт Изменить значение у выбранных адресов памяти. Введите число, соответствующее сумме золота, которое желаете получить, например, 1 миллион.
По возвращении в игру и проверьте: если никаких изменений не произошло, то в этом случае выполните произвольное внутриигровое действие, например, переместите героя на одну клетку или запустите экран города.
Вы не собираетесь ничего менять и хотите запустить Speed Hack для получения преимущества в игре? В таком случае выполните манипуляции, описанные выше, до того момента, когда задается значение параметра в соответствующем поле. Искать HEX-код не нужно, выберите exe-файл с игрой и справа от поля Значение отметьте галочкой поле Спидхак. После этого в игре произойдет ускорение, которое затронет только игрового персонажа или и окружение.
Cheat Engine используется для взлома одиночных игр. Кроме того, это работающий способ получения преимуществ в онлайн-играх, однако в последнем случае пользователь рискует быть забаненым системой античитов на сервере. Изменять параметры онлайн-игр с помощью Cheat Engine рекомендуется на отдельном аккаунте – в противном случае появляется риск лишиться учетной записи.
Преимущества программы Cheat Engine
Использование программы не требует специальных знаний. Пользователям не нужно иметь представление о HEX-кодах и других специфических аспектах игр. Для решения проблемы воспользуйтесь нашей инструкцией, применимой в любой игре – алгоритм поиска нужных полей остается неизменным.
Программа поддерживает русский язык. Требования Cheat Engine к аппаратной конфигурации ПК лояльные – программа работает даже на слабых компьютерах. В продуманной навигации с легкостью разберется даже новичок. Изменения дополнительных параметров не требуется, делайте это только в том случае, если вы – продвинутый пользователь. Подобная необходимость возникает при сложном поиске, когда требуется изменить параметры конкретного противника и не затрагивать остальное игровое окружение.
Программа Cheat Engine легка в освоении и не вызывает сложностей у новичков. Геймеры пользуются этой программой каждый день и получают в любимых играх максимум удовольствия. Загрузите Cheat Engine на нашем портале и забудьте о возможных сложностях в видеоиграх. Программа работает в Windows XP и новее. Cheat Engine – это универсальный инструмент.
Источник
Чит энджин как искать значения с точкой
Во многих играх здоровье показывается линиями, и мы не можем видеть какое точное значение в данный момент, имеет здоровье для этого в программе Cheat Engine есть хорошая функция под название «Value between» эта функция может найти неизвестное значение в заданном диапазоне.
Я буду искать здоровье в игре BRINK, здоровье обозначается вот так:
0.Запускаем нужный процесс и входим в игру ставим на паузу и сворачиваем.
1.Запуск программу Cheat Engine выбираем нужный процесс, в котором мы будем искать.
2.Выбираем функцию «Value between» обычно диапазон здоровья примерно «от 0 до 500».
3.Жмем, и начинается поиск неизвестных значений в выбранном диапазоне.
4.Программа находит много значений нам их надо уменьшить, чтобы было «1-5» значений для этого в программе есть еще пару функций ( «уменьшить на…» это « » и «увеличить на…» это « »).
6.В программе выбираем и жмем, получается во тот так
И жмем на
7.Повторяем 5,6 пункт до тех пор, пока не уменьшится значений от 1 до 5 но у меня получилось 2 значения
8.Выносим все значение, нажав на них 2 раза л.к.м.
9.Нажимаем на цифру значения и изменяем на любое число и ставим крестик, чтобы значение не менялось.
10.Играем и радуемся бессмертию…
Если что то было непонятно все вопросы пишем в этой теме!
© Cheat-Master.ru
Источник
#1
Отправлено 03 Dec 2017 – 10:53
SID
Администратор
Ломаем значения с плавающей точкой.
Значения с плавающей точкой – Значения при которых значение изменяется не на целое число,а на число с 10,100,1000 долями и т.д.
Пример тот же.
Мне известно,что float – Здоровье.А Double – Патроны.Так же известны значения.Оба значения равны 100.
Можно найти адресса значений,как точное значения,но я обожаю “Само ё***во” поэтому буду использовать поиск с точкой.
Делаем все так же CE запускаем.Присоединяемся к процессу.Начинаем искать.
В CE выбираем точное значение.Дополнительно ставим,что значение будет с плавающей точкой.
Начнем со здоровья.
Сканируем значение.100(Так как наше значение равно 100)
В итоге нашли мы адрес(а),проверяем.Замораживаем.
Готово адрес “Здоровья” найден.
Переходим к поиску адресу “Патроны”
Я знаю,что адрес равен 100.
Ставим тип значения “Douple” этот тип тоже с плавающей точкой.
Начинаем поиск.Ищем,ищем находим наш адрес.Морозим его.Проверяем.
В итоге я взломал адреса “Здоровья” и “Патроны”
Моя задача была изменить значения на 5000.С чем я и справился.
На видео,есть мои косяки.Перед записью пробую разные варианты,самые простые записываю.
CheatEngine –
Пожалуйста Логин или Регистрация чтобы увидеть этот скрытый контент
Пожалуйста Логин или Регистрация чтобы увидеть этот скрытый контент
- MS_CHESTER и P45H3 это нравится
#2
kasanabeer
Отправлено 14 Mar 2019 – 09:19
kasanabeer
Новичок
Видео не доступно. Вас забанили. Можно перезалить?
Теоретическая часть для понимания сути процесса
Как доподлинно известно, адрес в оперативной памяти — некий условный шестнадцатеричный идентификатор (а еще проще — обычное число) для взаимодействия программы с реальной физической памятью. По конкретному адресу всегда расположен ровно 1 байт информации. При этом значение любой переменной в программе хранится по какому-то адресу, даже у переменной, для которой выделено больше 1 байта. Например, если по адресу 0CC9B840 хранится переменная в 2 байта со значением в 10000, то в памяти по адресу 0CC9B840 будет храниться 10h, а по адресу 0CC9B841 будет храниться 27h (10000 в hex-кодировке будет выглядеть как 1027 с учетом обратного порядка чередования байтов). Но для программы важен именно начальный адрес всего блока из 2 байтов. Просто программа знает, что нужно использовать последовательно 2 байта информации, начиная с байта по искомому адресу — соответствующий тип переменной использовался разъеботчиком при написании исходного кода.
Каждый кулхацкер сталкивается с тем, что ранее найденный адрес со значением здоровья, патронов или выпусков журнала «Горячие попки ванамингосов» после перезапуска игры, уровня, а то и вовсе ВНЕЗАПНО становится нерабочим — теперь в нем хранится какое-то другое значение или вообще мусор (так называемый garbage — данные, на которые больше нет никаких ссылок). И нужно, превозмогая боль и страх, со штангенциркулем искать новый вожделенный адрес. Происходит сие непотребство из-за так называемого динамического распределения памяти — механизма создания и хранения программами данных в оперативной памяти непосредственно в процессе работы самой программы (называется «в рантайме»). Нужно игре выделить какой-то диапазон адресного пространства под свои данные? Да пожалуйста. Во время своей работы игра жонглирует данными постоянно, выделяя и освобождая память по необходимости. Создался новый враг? Отлично, под его данные выделено N байт. Враг получил передозировку киберсвинца в организьме и больше он нам и нахуй не нужон, враг ваш? Память, ранее выделенную под него, можно освободить и сделать доступной для записи каких-то иных данных, например, для спавна другого врага.
И, собственно, из-за этого блядского цирка с пересозданием объектов и происходит переезд данных на новые адреса в памяти, например, при переходе на новый уровень — игре нужно заново создать уровень и наполнить его объектами. При этом игре лишь нужно знать, с какого адреса будут начинаться данные нового уровня (увязать все это взаимодействие — задача компилятора, программист и в страшном сне заниматься этим не захочет), а относительно этого адреса игра будет пользоваться так называемыми указателями (pointers) на адреса — ссылками на начальные адреса вновь создаваемых объектов согласно принятой иерархии или на адреса, по которым располагаются конкретные значения.
Исходя из сказанного, можно сделать следующие выводы:
1. Память однородна. Ячейка памяти может хранить как исполняемый код, так и какие-то данные.
2. Если данные хранятся непосредственно по какому-то адресу в памяти, доступ к ним осуществляется напрямую при обращении к этому адресу.
3. По какому-то адресу в памяти можно разместить не конечные данные, а указатель — ссылку на какой-то другой адрес, где хранятся нужные данные.
4. Если указатель ссылается на другой указатель, то такой указатель будет называться многоуровневым. Времена одноуровневых указателей давно в прошлом, поэтому 99% нужных нам указателей будут многоуровневыми.
Тут надо сделать маленькое лирическое отступление о причинах возникновения такого порядка вещей. Всему виной повсеместное использование ООП — объектно-ориентированного программирования. Такой подход позволяет оперировать объектами игры как с некими абстрактными структурами данных, и хранить однотипные данные не в обособленных переменных, а в заранее определенном формате. Например, при создании нового объекта типа пони можно последовательно хранить имя пони, тип пони (обычная поня, пегас, единорог, аликорн и т.д.), цвет пони в кодировке RGB, тип кьютимарка (отличительный знак на ляжке — пояснение для жалких унтерменшей, не смотревших прогрессивные мультики про поней). Таким образом, когда будет создан новый объект типа пони, информация о нем будет заранее определенным образом упорядочена при описании структуры или класса объекта.
На абстрактном языке погромирования это может выглядеть следующим образом:
struct Pony
{
char name[10]; // 10 байт под имя
short type; // 2 байта под тип пони
byte color[3]; // 3 байта под цвет
byte cutiemark; // 1 байт под тип кьютимарка
}
Возможность создавать такие однотипные структуры данных позволяет экономить сотни времени, наделяя объекты общими данными и методами работы с ними.
Теперь представим, что мы как-то адекватно хотим описать в коде игры возможность пегасов летать. Создадим некую структуру данных и назовем ее PonyType. Пусть другие типы, кроме пегасов, нас сейчас не волнуют, и мы просто хотим в один байт уместить информацию о возможности или невозможности пони летать.
Для этого объявим в этой структуре логическую переменную canFly типа bool, которая может принимать значения true либо false, занимая при этом ровно 1 байт. Также добавим еще 1 байт под запас энергии для полета.
struct PonyType
{
bool canFly;
byte energy;
}
А теперь начинается интеграционная дружбомагия. В исходную структуру типа Pony поместим указатель на структуру типа PonyType:
struct Pony
{
char name[10];
PonyType* type; // тот самый указатель на тип в виде звездочки *
byte color[3];
byte cutiemark;
}
Таким образом, при создании нового объекта типа Pony информация о возможности летать и запасе энергии будет передаваться через указатель на структуру PonyType. Чсх, в памяти это будет занимать те же самые 2 байта, как если бы использовали ранее применявшийся целочисленный тип short.
Для программиста, который занимается разработкой структуры типа Pony, теперь не имеет значения, что там внедряет другой программист, занимающийся разработкой структуры PonyType. При правильной организации кода игры любые изменения в структуре PonyType никак не отразятся на работоспособности структуры Pony. Собственно, ради этого все и затевалось. Конечно, на таком простом примере сложно ощутить все преимущества ООП, но мейнстримом он стал не за красивые глаза.
И теперь уже совсем нетрудно построить некоторую цепочку указателей, начиная от создания мира.
Остальные данные структур не отображены для экономии пространства:
// структура лучезарного эквестрийского мира с множеством локаций
struct Equestria
{
.. // какие-то другие данные
City* city[36]; // для выделения памяти под 36 объектов типа City
}
// структура уютненького Понивилля с множеством поняшек
struct City
{
..
Pony* pony[100]; // для выделения памяти под 100 объектов типа Pony
}
// структура няшечки Рейнбоу и любой другой пони
struct Pony
{
..
PonyType* type; // для выделения памяти под 1 объект типа PonyType
}
// структура типа пони
struct PonyType
{
..
byte energy; // для выделения 1 байта памяти под значение энергии
}
Таким образом, например, при перезапуске игры нужно вновь создать объект типа Equestria, записав его начало по новому адресу, а дальше последовательно будет выделена память под 36 объектов типа City, для каждого и которых будет последовательно выделено место под 100 объектов типа Pony, в каждом из которых, в свою очередь, будет выделено место под 1 объект типа PonyType.
Адресация во всех этой махине зависит полностью от одного адреса — адреса начала объекта типа Equestria. И если нас интересует конечный адрес количества энергии на полет конкретной пони, то он каждый раз будет новый. Но с точки зрения игры все остается по прежнему:
→ Она знает начальный адрес, по которому прописался исполняемый код игры.
→ От него она отсчитывает известное количество байт, занимаемое исполняемым кодом и не относящимися к генерации уровня данными, и там начинает записывать данные, уже относящиеся к генерации уровня — то есть создает объект типа Equestria.
→ Далее по системе указателей она доходит до конечного пункта — количества энергии у конкретной пони — и использует его.
На слове последовательно я акцентирую внимание по той причине, что по нашей схеме будет использовано сквозное заполнение адресного пространства оперативной памяти: сначала будут созданы какие-то исходные данные объекта типа Equestria, затем создан первый объект типа City и все объекты типа Pony, затем второй объект типа City и все объекты типа Pony и так далее.
Собственно, зная адрес начала объекта типа Equestria и последовательность смещений до энергии конкретной пони, мы всегда может восстановить искомый адрес энергии. Задача поиска рабочего адреса энергии возлагается на рабочий указатель.
В рассматриваемом случае буквально получается, что объект типа Equestria создается по адресу, по которому была записана в оперативную память сама игра (ее исполняемый файл Game.exe) плюс некоторое смещение 10EF0C, необходимое игре для записи своего исполняемого кода и каких-то иных данных.
Относительно адреса объекта типа Equestria на значение C0 смещено расположение конкретного объекта типа City, относительно которого на значение FAD8 смещено расположение конкретного объекта типа Pony, относительно которого на значение 02FF смещено расположение конкретного объекта типа PonyType, относительно которого на значение 01 смещено расположение искомого значения энергии.
Обладая этой информацией, мы почти всегда однозначно можем определить истинный адрес искомого значения энергии.
И все это благолепие справедливо, конечно же, в том случае, если нужный нам город и нужная нам поня создаются первыми (вторыми, десятыми, главное — стабильность положения относительно начала) во всем массиве объектов (что часто бывает, поскольку именно относящиеся к игроку данные загружаются первыми). Также нужно уточнить, что адрес объекта типа Equestria может и не быть статическим (то есть неизменным от загрузки к загрузке — в нашем случае это Game.exe + 10EF0C), если не предопределен конечный объем данных перед его загрузкой. В этом случае адрес начала ключевого объекта должен быть найден способами, не входящими в данный гайд (через поиск так называемых сигнатур — уникальных последовательностей байтов). О сигнатурах мы тоже когда-то обязательно поговорим.
Резюмируя затянувшуюся вводную часть, подчеркну, что никакой мистики тут нет. С точки зрения кулхацкерства указатель — всего лишь ссылка на начальный адрес объекта внутри адресного пространства другого объекта либо непосредственно на адрес, по которому расположены требуемые данные.
Для успешного кулхацкерства достаточно знать, как вся система примерно работает в целом, а также владеть автоматизированными средствами поиска и ручными методами контроля правильности указателей.
К этому и приступим.
Автоматический поиск указателей
Практическая часть для формирования навыков
Если речь идет не об эрпогэ, где достаточно один раз взломать значение каких-нибудь скиллпоинтов, а затем тупо вкачать героя на полный фарш, поиск указателей является обязательной процедурой. Играя в шутер или РТС, хочется всегда иметь под рукой возможность поковырять ресурсы, здоровье или боезапас, не утруждая себя подчас утомительной процедурой поиска нового адреса. Да и в пошаговой эрпогэ каждый бой искать количество очков действия, если их всего два, а то и одно — нахуй так жыдь?
Но на помощь кулхацкерам приходят средства автоматизации СЕ, благодаря которым поиск рабочих указателей является ничуть не более сложной процедурой, чем стандартный поиск адреса.
Процесс поиска предлагаю рассмотреть на примере первой Мафии. Если при взгляде на главное меню у тебя заиграла в голове та самая музыка, а сердце защемило тоской по былому — я тебя понимаю!
Ну что ж, искать мы будем указатель на адрес, по которому хранится количество патронов в магазине оружия, находящегося в руках у игрока. Это весьма полезный указатель, позволяющий нам забыть про необходимость перезарядки абсолютно любого вооружения. Здесь и далее я считаю, что поиск соответствующего адреса не вызывает проблем. Если таковые имеются, можно либо перечитать вступительный гайд по СЕ, либо задать вопрос тут в каментах.
Значение патронов в текущем оружии хранится в обычной целочисленной переменной 4 байта, никаких трудностей при поиске и отсеве возникнуть не должно даже у новичков в использовании СЕ.
Итак, значение найдено. Действующий адрес 16В4744С.
Жмакаем правой кнопкой по адресу и выбираем пункт Pointer scan for this address.
Вылезет окошко опций сканирования, в котором ничего не нужно трогать, а только проконтролировать корректность адреса.
Далее СЕ попросит указать расположение файла результатов сканирования указателей в формате PTR.
После появится окно прогресса сканирования.
И завершится все феерическим количеством найденных указателей (результаты уже сохранены в файл 111.PTR). Предлагаю внимательно изучить результаты.
Сверху слева в выпадающем списке указан формат представления данных по конечному адресу, на который ссылается указатель. В нашем случае это 4 байта целочисленное. Конечный адрес указан в крайнем правом столбце Points to.
Сверху по центру указано общее количество найденных указателей: 26769689. 26 мульёнов — шутка ли?
В крайнем левом столбце Base Address указывается базовый статический адрес, относительно которого выстраивается многоуровневый указатель.
В столбцах Offset 0 – Offset 6 указывается смещение на каждом уровне многоуровневого указателя.
Если перенести даблкликом найденный указатель в рабочее поле СЕ и даблкликом же в поле Address открыть окно редактирования Change address, можно будет детально изучить всю структуру добавленного указателя. В рабочем поле указатель помечается префиксом P->.
В окне Change address снизу по центру указаны по порядку все уровни указателя, начиная со статического базового адреса. Справа приводится результат по каждому смещению. Результат по предыдущему вычислению становится исходным адресом для следующего уровня.
Если говорить совсем в открытую, уже сейчас, несмотря на дикое количество результатов, с ними можно работать. Но мы из вредности проведем еще один цикл поиска и отсева. Главное правило при отсеве указателей заключается в максимальном смещении всего адресного пространства, выделяемого под игру. Чаще всего, правда, достаточно игру просто перезапустить, но можно и поизъёбствываться, запустив перед загрузкой игры пару «тяжелых» приложений.
Но мы ограничимся перезапуском самой игры и загрузкой другого уровня. Окно СЕ с результатами поиска указателей по старому адресу остается открытым.
В открытом окне СЕ снова выбираем процесс игры. Проводим поиск нужного адреса. Готово.
В окне поиска указателей можно обратить внимание на то, что ранее найденные указатели, отображенные в данный момент на экране, уже не ссылаются на нужный адрес в памяти игры.
Теперь достаточно скопировать новый найденный адрес (даблклик по полю Address откроет окно редактирования), затем в окне поиска указателей нужно выбрать пункт меню Pointer scanner > Rescan memory – Removes pointers not pointing to the right address.
В появившемся окне нужно проконтролировать корректность введенного адреса и отметить чекбоксик Only filter out invalid pointers.
После установки чекбоксика изменение адреса и типа отсева станет недоступно.
Снова СЕ предложит нам сохранить результаты отсева указателей в файле PTR. Я рекомендую каждый этап сохранять в отдельной файле, ибо в случае каких-то проблем можно будет без труда загрузить предыдущие результаты. Из окна результатов сканирования Pointer scan это можно сделать через пункт меню File > Open.
Результатом предыдущего этапа являются 3кк указателей, что почти на порядок меньше, чем при первом поиске.
С этими результатами уже точно можно работать, но для подстраховки мы проведеи еще и третий цикл.
И четвертый цикл отсева произведем не по результатам поиска нового адреса, а по результатам сравнения в текущей сессии значений по адресам, на которые ссылаются найденные указатели. В этом случае нужно изменить тип отсева на Value to find, указать тип значения 4 байта целочисленное и снять чекбоксик Only filter out invalid pointers.
Как видно из количества отсеянных указателей на третьем и четвертом этапах, эти этапы можно было смело пропустить.
И вот здесь кулхацкер задаст себе резонный вопрос: как же работать с тремя миллионами (Карл!) найденных указателей? На помощь пытливому уму придет логика и здравый смысл:
1. Нужно проанализировать базовые адреса в колонке Base Address. Всякие мутные ddl-ки и прочие модули нам вряд ли подойдут. Нужен исполняемый файл или, на крайний случай, какая-то базовая библиотека. В случае с Мафией ориентироваться на Game.exe более чем разумно.
2. Если после очередного отсева есть указатели, ссылающиеся на адрес с некорректным значением (при условии правильно указанного типа значения — целочисленного или с плавающей точкой!), то такие указатели нам явно не подходят.
3. Чем меньше уровней в многоуровневом указателе, тем надежнее будет его использование. Иногда, конечно, и двухуровневые указатели могут отваливаться, но желательно стремиться к меньшему числу уровней.
И именно на этом этапе анализа достаточно кликнуть по заголовку столбца Offset 6, чтобы указатели были рассортированы по количеству уровней.
Теперь нужно легко и непринужденно даблкликом накидать скопом в рабочее поле СЕ указатели второго-пятого уровня различными базовыми адресами и первыми смещениями. В нашем примере очевидно, что Game.exe + 00246D4C является, скорее всего, тем самым правильным базовым адресом, но вот иерархия уровней указателей может не обязательно говорить в пользу меньшего количества уровней. Строго говоря, для точного ответа необходим ручной анализ структур данных, но это уже более комплексный вопрос. Поэтому надо накидать в рабочее поле штук по пять указателей каждого уровня и получить в итоге целую батарею предварительных результатов. В рабочем поле они все выглядят одинаково, но при редактировании можно будет увидеть всю структуру уровней каждого указателя.
Торжественный момент! Настало время проверить работоспособность найденных указателей.
Как всегда перезапускаем игру и загружаем другой уровень.
Выбираем в открытом окне СЕ процесс игры и — вуаля. Все найденные указатели являются рабочими. Удалять их из экономии пространства я пока не советую, ибо в разных условиях какие-то могут отвалиться и перестать работать, но в целом всё получилось. Можно объединить все указатели в группу в рабочем поле СЕ, выделив их и выбрав в контекстном меню по правой кнопке мыши Add to new group, озаглавив группу и выбрав уверенное No в вопросе «Do you want “address” version?». В настройках группы Group config в контекстном меню можно выбрать Hide children when deactivated и сворачивать всю группу пробелом или кликом по чекбоксу заморозки значения в левой части строки. Табличку можно сохранять и жить припеваючи.
Анализ дампа в окрестностях найденного адреса показал, что за 4 байта до нашего адреса хранится тип оружия, а через 4 байта после — общее количество патронов к данному оружию.
Что же нам теперь, повторять эту возню с поиском указателей еще и на эти адреса? Разумеется, нет.
Достаточно скопировать рабочем поле какой-нибудь корректный указатель с помощью Ctrl + C или пункта контекстного меню Copy, после чего вставить его здесь же по Ctrl + V (Paste).
Откроется небольшое окно, позволяющее указать требуемое смещение.
Альтернативный вариант заключается в копировании всего указателя без изменений и последующего редактирования копии в общем порядке.
Вот и все. Получается уютненькая табличка, которой можно пользоваться в том числе и тогда, когда оружия на миссию вообще не выдают, а покувыркаться с Сарочкой очень хочется — достаточно выставить тип оружия на 10 (томми-ган) и досыпать патронов, не забывая выкинуть его и поднять для корректной обработки появления оружия в руках у персонажа.
P.S. Ежели гранд-мастера погромирования меня поправят в чем-то и подскажут более корректные формулировки, буду крайне благодарен. В рассматриваемых теоретических вопросах я дилетант, поэтому здоровая критика моего взгляда на проблему будет очень пользительной.
Check this page to see if there are some suggestions for adding to Cheat Engine:Memory Scanning.
Initial contribution, just placing a few ‘things about ce scanning’ here to work out later.
Memory scanning is one of the most major features of Cheat Engine.
Memory scanning means searching for a specific value or a pattern in the memory provided to the application.
Cheat Engine’s scanning makes use of multiple processor cores when available.
Cheat Engine allows you to search addresses in various ways using different types of searching.
Firstly, you need to define what type of search you want to perform.
What you need to define is: Value Type, Scan Option, Scan Range and other smaller options.
Value Type
The available types Cheat Engine can scan for are:
- Binary
- Byte (values between 0 and 255 or -128 to 127 if signed)
- 2 byte (values between 0 and 65535 or -32768 to 32767 if signed)
- 4 byte (values between 0 and 4294967295 or -2147483648 and 2147483647 if signed)
- 8 byte (values between 0 and 18446744073709551615 or -9223372036854775808 and 9223372036854775807 if signed)
- Float (values between 1.5 x 10^-45 and 3.4 x 10^38 )
- Double (values between 5.0 x 10^-324 and 1.7 x 10^308 )
- Array of bytes
- String (/Text)
- All (Byte to Double)
- Grouped
Which one you should choose depends on the value and type of the value you want to search for.
A value that only switches between 1 and 0 is often a Binary.
While an integer number (1, 3, 4599, 15686, etc…) is most often a 4-byte value.
Strictly non-integer numbers are always Float or Double. Small numbers are often Float, bigger ones Double.
Text is often stored as a String/Text.
Scan Option
Sometimes you may not know the exact number of a value you want to search for, or it changes too often to scan normally. That’s why Cheat Engine provides several ways of looking for values. These scan options make it possible to find any value, whether you know it or not.
The options available are divided in two: First Scan options and Next Scan options.
First Scan options are:
- Exact Value
- Bigger than…
- Smaller than…
- Value between…
- Unknown initial value
Next Scan options are:
- Exact Value
- Bigger than…
- Smaller than…
- Value between…
- Increased Value
- Increased Value by…
- Decreased Value
- Decreased Value by…
- Changed Value
- Unchanged Value
- Same as First Scan
All these options speak for themselves. Cheat Engine remembers the values found in the previous scan, allowing it to compare new values with the old ones and revert to a previous scan. It also remembers the values of the First Scan.
Scan Range
Cheat Engine only scans between the given range markers. Default are these From: 00400000 To: 7FFFFFFF
If you know for certain that a certain address must be between two addresses, then you can change these markers and Cheat Engine will only search between those.
Fast Scan: Fast scan speeds up the scanning by skipping unaligned(by 4) memory addresses. Aligned address means that it can be divided by the alignment number and the result will not have a remainder(or will have a remainder of 0). Unaligned means that when an address is divided by the alignment number, result has a non-zero remainder. For example, address 0x40000 is aligned by 4 and also aligned by 0x1000 because after dividing it by both alignment numbers, remainder of the result is 0 in both cases. Address 0x40004 is aligned by 4 but isn’t aligned by 0x1000 because when you divide it by 4, the remainder is 0, but when you divide it by 0x1000, the remainder is 4. Number 0x40001 is not aligned by neither 4, nor 0x1000. Most objects in memory are aligned by 4, but not always.
When you perform a scan, Cheat Engine will provide you with a list of addresses matching your search. Shown values of variables at found addresses are updated as the actual in-game values of variables change, at a rate set in the Settings menu.
There are two types of addresses in this list: Green ones and black ones.
Green means static addresses. Whenever you load the application these addresses will stay the same/hold the same value.
These green addresses show up as absolute virtual addresses in the list, but are actually offsets to base address of one of the loaded modules in the process’ address space. So when you have static(green) address 4075FFB0 and module’s base address is 40000000, it is calculated as 40000000+75FFB0, which Cheat Engine often shows you as ModuleName.exe+75FFB0.
Black means dynamic addresses. Variables at these addresses will change location(variables will change their addresses) whenever you load the application, and even while the application is running. Using pointers you can find static addresses for these dynamic ones.
Grouped
Grouped scanning allows you to find a structure more quickly when you know its layout. Individual values are in the format “type:value”, separated by spaces. For example if you know that health is an integer and your current health is 75/100, and that the structure has the current value, an unknown 4 byte quantity, and then the max value, you can search for this:
4:75 4:* 4:100