Почему чит энджин не находит значения
Перейти к содержимому

Почему чит энджин не находит значения

  • автор:

Cheat Engine не видит значение в игре.

В игре у меня 704606080 денег, я ввожу это значение в СE, нажимаю First scan и CE ничего не находит. Что делать?

Голосование за лучший ответ

Ещё раз перепроверьте, правильно ли вы ввели, если же да то. В некоторых играх стоит защита от подобного взлома, в некоторых просто маскируют значение, а в некоторых играх, таких как UnEpic после изменения значения персонажа убивают.
Либо же вы неправильно ищете (только 4-битные значения вместо всех значений).

Adrian EdwarsМастер (1010) 3 года назад

P.S. Если у тебя cheat engine 6.8.1 то, зайди в Изменить — Настройки — Настройки поиска и посмотри там.
Я так поиск «Все значения» отметил и всё заработало, а то просто пустоту выдавало

Почему у меня одна переменная в двух адресах? C Language

Ребят, я когда понял как работает Cheat Engine я захотел попробовать кое-что сделать. Я уже имею GNU компилятор, и создал .c файл (C Language File). Я сделал такой код:

#include int main(void)

Что он должен делать?

Он должен объявить переменную cheatEngineDigit и присвоить ей число 1 . После чего вывести значение переменной -> дождаться действия пользователя и увеличить переменную cheatEngineDigit на единицу. И так по кругу. Я же тем временем хотел найти адрес этой переменной в CheatEngine 7.0. Я нашёл этот адрес. Но увидел что адрес не один, а два: 0061FF04 и 0061FF1C. В прошлых РАЗАХ я делал тоже самое, только там адрес одной переменной был один. Скажите пожалуйста, почему одна 32-ух битная интовая переменная имеет два адреса? P.s.: я скомпилировал и запустил .exe файл!

Отслеживать
задан 25 мая 2020 в 6:47
94 1 1 серебряный знак 10 10 бронзовых знаков

она имеет один адрес в пределах одного запуска. В пределах разных запусков она имеет законное право иметь разные адреса. docs.microsoft.com/ru-ru/cpp/build/reference/…

25 мая 2020 в 7:45

Ваш CheatEngine вообще ничего не знает о том, где находится ваша переменная. Что бы это знать — используют другие программы, чаще все встроеный дебаггер. Он (CheatEngine) тупо ищет. В большинстве случаев — стек часто используется для вычислений. Тут два варианта — 1. ваше число оказалось в стеке вычислений, и второй адрес — адрес в стеке. 2. В «куче» или в памяти просто совпало что какой-то из модулей (в памяти винды ввобще их более 10) сгенерировал такое-же число. Число 1 не такое и редкое число, что бы его не найти. Странно что так мало нашло — наверно маленький диапазон поиска.

25 мая 2020 в 9:25

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Ваш CheatEngine вообще ничего не знает о том, где находится ваша переменная. Что бы это знать — используют другие программы, чаще все встроеный дебаггер. Он (CheatEngine) тупо ищет.

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

При вызове printf будет картина стека такая

0061FF04 1 ,тут вызов _сdecl 0061FF08 1 0061FF0c "%d\n" 0061FF10 адрес возврата в main 0061FF14 ebp - cтековое окно 0061FF18 Адрес возврата в printf, или какие-то данные 0061FF1C 1 аргумент для преобразования double в char, или данные опроса argv 

Начиная с адреса 0061FF14, printf использует стек ниже на своё усмотрение, не запрещено ей по адресу 0061FF1C записать копию аргумента.

Дальше при вызове pause картина стека станет такой

0061FF04 1 ,тут вызов _сdecl 0061FF08 "pause" 0061FF0c адрес возврата в main -- Спорная граница 0061FF10 адрес возврата в main (возможно данные с прошлого вызова) 0061FF14 ebp - cтековое окно (возможно данные с прошлого вызова) -- Спорная граница, но гарантия что данные уцелеют - выше. 0061FF18 возможно данные с прошлого вызова 0061FF1C 1 возможно данные с прошлого вызова 

Надо понимать, что вызов процедуры/функции может привести к тому, что процедура может делать вложеные вызовы, которые используют стек, если вы вызываете процедуру которая хорошо использует стек, а за тем процедуру которая почти ничего не делает — то там где я написал «спорная граница» — могут остаться данные предыдущей процедуры, если новая их не сотрет. Например если printf использовала 1 в качестве аргумента что б или перебрать свои аргументы, или что бы преобразовать в строку (преобразования double в char) — она вполне могла «наследить» в стеке, скопировав ваши данные для работы. Команда pause делает несколько вызовов — всегда разное колличество, в зависимости от разных факторов, и может так получится что стек начиная с адреса 0061FF10 может быть не тронут. Т.к. стирание происходит сверху-вниз — то чем ниже по стеку — тем больше вероятность что уцелели данные прошлого вызова.

UDP И даже в том что адрес 0061FF1C её я тоже сомневаюсь, если для 2,3 ситуация повторяется — значит 1-цу,2,3 дублирует printf, если такая ситуация происходит только с 1 — то вполне может быть что в этой области printf хранит к-во аргументов или переменную цикла аргументов, а значение int «1» просто совпадение. В данную версию я больше верю, т.к. локальные переменные printf будут хранится вверху, а их скорее всего много. Но всеравно это «стековый мусор», я так расписал ответ, что б было понятно как он получается.

Как найти значение в CheatEngine 6.7

Нужна помощь с чит энжином. КАК найти значение которое находится по стандарту через 8 адресов снизу. Оно статичное (достижение в игре). Если достижение недоступно для выполнение то значение равно 0, если доступно но не выполнено то 27, если выполнено но награда не собрана то 31. Как найти это значение если я знаю два значения.( 1.000.000;100.000.000) Могу объяснить на примере GameGuardian’a. Там я пишу значение 1000000;100000000 и находит примерно 28 адресов,ну не суть, я отсеиваю значение 100000000, остается 5 значений, выбираю 1 и нажимаю перейти(goto) в чит энжине это мемори эдитор. Так вот, считаю от значения (100000000) 8 адресов и меняю на 31, и замораживаю. Вот как мне сделать так же, только в чит энжине.

Как осуществить поиск значения в процессе, как в Cheat Engine?

bloomder никому не известный тип

Шурстя несколько дней в поисковике, я натыкался на информацию на то как найти значение по базовому адресу.
Если базового адреса нет (то есть без использования Cheat Engine(CE)), чтобы автоматизировать процесс поиска значения без CE.
Натыкался на такие слова как сигнатура, регион, сдвиги по адресу. Так и не до конца понял эти понятия.
Ниже в файлике класс формы с поиском нужного процесса по имени.

Буду очень благодарен если прольете свет на мою голову.

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

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