Cheat engine как найти сигнатуру

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



Для чего нужен поиск указателей

Переменные объекта в игре создаются динамически, чтобы не нагружать оперативную память игры и процесса – с текущими параметрами игр оперативной памяти не хватит. Соответственно, ведется учет, где в памяти размещается тот или иной параметр. Базовый элемент — указатель, а внутри – параметры здоровья, ресурсов, опыта, патронов, денег. При каждом новом запуске игры или нового уровня, адреса динамических игровых параметров переезжают в другую область памяти. Для изменения приходится снова и снова находить. Для того, что бы этого не делать применяется поиск указателей.

Найти одноуровневый указатель

Запускаем Cheat Engine. Находим и копируем в нижнее окно адрес переменной, которая отвечает за нужный параметр. Правым кликом по адресной строке вызываем меню, находим строку «Find out what writes to this address». Ставим break на запись и разрешаем запуск отладчика. Идем в игру и тратим часть золота или теряем одну жизнь — чтобы изменить показатель. Возвращаемся к Cheat Engine и видим в окне отладчика новые строки. Выбираем одну типа mov и переходим во вкладку «More information». Правым кликом открываем меню и выбираем «Copy info to clipboard» — скопированное переносим в блокнот, закрываем отладчик.

Найти одноуровневый указатель в Cheat Engine

Далее переходим в главное окно программы и в поисковой строке вводим адрес из указанной области 07AF.., отмечаем галочкой НЕХ и тип значения 4Б, — запускаем поиск. В результатах поиска ищем постоянный адрес – выделяется зеленым. Копируем в нижнее окно и кликаем дважды по строке «Adress».

Как найти указатель в Чит Энджин

Копируем адрес сверху, отмечаем галочкой «Pointer» и вставляем в нижнее выпавшее поле. Тип определяем исходный. Далее при помощи вендового калькулятора рассчитываем смещение между первоначальным адресом, копированным в блокнот и найденным зеленым. Результат вставляем во второе поле снизу и жмем «Ок». После этого правым кликом по значению – «Value» выбираем в меню «Show as decimal» — отражать показатели в десятичном формате. Итог сохраняем в типе файла *.СТ. При загрузке этого файла в Cheat Engine с запуском уровня не надо будет снова искать переменные.

Найти одноуровневый указатель в Чит Энджин

Найти многоуровневый указатель

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

Эти загадочные указатели
Теоретическая часть для понимания сути процесса

Как доподлинно известно, адрес в оперативной памяти — некий условный шестнадцатеричный идентификатор (а еще проще — обычное число) для взаимодействия программы с реальной физической памятью. По конкретному адресу всегда расположен ровно 1 байт информации. При этом значение любой переменной в программе хранится по какому-то адресу, даже у переменной, для которой выделено больше 1 байта. Например, если по адресу 0CC9B840 хранится переменная в 2 байта со значением в 10000, то в памяти по адресу 0CC9B840 будет храниться 10h, а по адресу 0CC9B841 будет храниться 27h (10000 в hex-кодировке будет выглядеть как 1027 с учетом обратного порядка чередования байтов). Но для программы важен именно начальный адрес всего блока из 2 байтов. Просто программа знает, что нужно использовать последовательно 2 байта информации, начиная с байта по искомому адресу — соответствующий тип переменной использовался разъеботчиком при написании исходного кода.

Каждый кулхацкер сталкивается с тем, что ранее найденный адрес со значением здоровья, патронов или выпусков журнала «Горячие попки ванамингосов» после перезапуска игры, уровня, а то и вовсе ВНЕЗАПНО становится нерабочим — теперь в нем хранится какое-то другое значение или вообще мусор (так называемый garbage — данные, на которые больше нет никаких ссылок). И нужно, превозмогая боль и страх, со штангенциркулем искать новый вожделенный адрес. Происходит сие непотребство из-за так называемого динамического распределения памяти — механизма создания и хранения программами данных в оперативной памяти непосредственно в процессе работы самой программы (называется «в рантайме»). Нужно игре выделить какой-то диапазон адресного пространства под свои данные? Да пожалуйста. Во время своей работы игра жонглирует данными постоянно, выделяя и освобождая память по необходимости. Создался новый враг? Отлично, под его данные выделено N байт. Враг получил передозировку киберсвинца в организьме и больше он нам и нахуй не нужон, враг ваш? Память, ранее выделенную под него, можно освободить и сделать доступной для записи каких-то иных данных, например, для спавна другого врага.

И, собственно, из-за этого блядского цирка с пересозданием объектов и происходит переезд данных на новые адреса в памяти, например, при переходе на новый уровень — игре нужно заново создать уровень и наполнить его объектами. При этом игре лишь нужно знать, с какого адреса будут начинаться данные нового уровня (увязать все это взаимодействие — задача компилятора, программист и в страшном сне заниматься этим не захочет), а относительно этого адреса игра будет пользоваться так называемыми указателями (pointers) на адреса — ссылками на начальные адреса вновь создаваемых объектов согласно принятой иерархии или на адреса, по которым располагаются конкретные значения.
Исходя из сказанного, можно сделать следующие выводы:
1. Память однородна. Ячейка памяти может хранить как исполняемый код, так и какие-то данные.
2. Если данные хранятся непосредственно по какому-то адресу в памяти, доступ к ним осуществляется напрямую при обращении к этому адресу.
3. По какому-то адресу в памяти можно разместить не конечные данные, а указатель — ссылку на какой-то другой адрес, где хранятся нужные данные.
4. Если указатель ссылается на другой указатель, то такой указатель будет называться многоуровневым. Времена одноуровневых указателей давно в прошлом, поэтому 99% нужных нам указателей будут многоуровневыми.
06

Тут надо сделать маленькое лирическое отступление о причинах возникновения такого порядка вещей. Всему виной повсеместное использование ООП — объектно-ориентированного программирования. Такой подход позволяет оперировать объектами игры как с некими абстрактными структурами данных, и хранить однотипные данные не в обособленных переменных, а в заранее определенном формате. Например, при создании нового объекта типа пони можно последовательно хранить имя пони, тип пони (обычная поня, пегас, единорог, аликорн и т.д.), цвет пони в кодировке RGB, тип кьютимарка (отличительный знак на ляжке — пояснение для жалких унтерменшей, не смотревших прогрессивные мультики про поней). Таким образом, когда будет создан новый объект типа пони, информация о нем будет заранее определенным образом упорядочена при описании структуры или класса объекта.

На абстрактном языке погромирования это может выглядеть следующим образом:

struct Pony
{
char name[10]; // 10 байт под имя
short type; // 2 байта под тип пони
byte color[3]; // 3 байта под цвет
byte cutiemark; // 1 байт под тип кьютимарка
}

02

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

Теперь представим, что мы как-то адекватно хотим описать в коде игры возможность пегасов летать. Создадим некую структуру данных и назовем ее 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.
02
Для программиста, который занимается разработкой структуры типа 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 байта памяти под значение энергии
}

03

Таким образом, например, при перезапуске игры нужно вновь создать объект типа 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 смещено расположение искомого значения энергии.
Обладая этой информацией, мы почти всегда однозначно можем определить истинный адрес искомого значения энергии.
04
05

И все это благолепие справедливо, конечно же, в том случае, если нужный нам город и нужная нам поня создаются первыми (вторыми, десятыми, главное — стабильность положения относительно начала) во всем массиве объектов (что часто бывает, поскольку именно относящиеся к игроку данные загружаются первыми). Также нужно уточнить, что адрес объекта типа Equestria может и не быть статическим (то есть неизменным от загрузки к загрузке — в нашем случае это Game.exe + 10EF0C), если не предопределен конечный объем данных перед его загрузкой. В этом случае адрес начала ключевого объекта должен быть найден способами, не входящими в данный гайд (через поиск так называемых сигнатур — уникальных последовательностей байтов). О сигнатурах мы тоже когда-то обязательно поговорим.

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

Автоматический поиск указателей
Практическая часть для формирования навыков

Если речь идет не об эрпогэ, где достаточно один раз взломать значение каких-нибудь скиллпоинтов, а затем тупо вкачать героя на полный фарш, поиск указателей является обязательной процедурой. Играя в шутер или РТС, хочется всегда иметь под рукой возможность поковырять ресурсы, здоровье или боезапас, не утруждая себя подчас утомительной процедурой поиска нового адреса. Да и в пошаговой эрпогэ каждый бой искать количество очков действия, если их всего два, а то и одно — нахуй так жыдь?
Но на помощь кулхацкерам приходят средства автоматизации СЕ, благодаря которым поиск рабочих указателей является ничуть не более сложной процедурой, чем стандартный поиск адреса.

Процесс поиска предлагаю рассмотреть на примере первой Мафии. Если при взгляде на главное меню у тебя заиграла в голове та самая музыка, а сердце защемило тоской по былому — я тебя понимаю!
mafia_main

Ну что ж, искать мы будем указатель на адрес, по которому хранится количество патронов в магазине оружия, находящегося в руках у игрока. Это весьма полезный указатель, позволяющий нам забыть про необходимость перезарядки абсолютно любого вооружения. Здесь и далее я считаю, что поиск соответствующего адреса не вызывает проблем. Если таковые имеются, можно либо перечитать вступительный гайд по СЕ, либо задать вопрос тут в каментах.
Значение патронов в текущем оружии хранится в обычной целочисленной переменной 4 байта, никаких трудностей при поиске и отсеве возникнуть не должно даже у новичков в использовании СЕ.
Game 2021-03-01 23-16-51-049

Итак, значение найдено. Действующий адрес 16В4744С.
m01_0

Жмакаем правой кнопкой по адресу и выбираем пункт Pointer scan for this address.
m02_0

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

Далее СЕ попросит указать расположение файла результатов сканирования указателей в формате PTR.
m04

После появится окно прогресса сканирования.
m05

И завершится все феерическим количеством найденных указателей (результаты уже сохранены в файл 111.PTR). Предлагаю внимательно изучить результаты.
Сверху слева в выпадающем списке указан формат представления данных по конечному адресу, на который ссылается указатель. В нашем случае это 4 байта целочисленное. Конечный адрес указан в крайнем правом столбце Points to.
Сверху по центру указано общее количество найденных указателей: 26769689. 26 мульёнов — шутка ли?
В крайнем левом столбце Base Address указывается базовый статический адрес, относительно которого выстраивается многоуровневый указатель.
В столбцах Offset 0Offset 6 указывается смещение на каждом уровне многоуровневого указателя.
m06

Если перенести даблкликом найденный указатель в рабочее поле СЕ и даблкликом же в поле Address открыть окно редактирования Change address, можно будет детально изучить всю структуру добавленного указателя. В рабочем поле указатель помечается префиксом P->.
В окне Change address снизу по центру указаны по порядку все уровни указателя, начиная со статического базового адреса. Справа приводится результат по каждому смещению. Результат по предыдущему вычислению становится исходным адресом для следующего уровня.
m07_0
m08_0

Если говорить совсем в открытую, уже сейчас, несмотря на дикое количество результатов, с ними можно работать. Но мы из вредности проведем еще один цикл поиска и отсева. Главное правило при отсеве указателей заключается в максимальном смещении всего адресного пространства, выделяемого под игру. Чаще всего, правда, достаточно игру просто перезапустить, но можно и поизъёбствываться, запустив перед загрузкой игры пару «тяжелых» приложений.
Но мы ограничимся перезапуском самой игры и загрузкой другого уровня. Окно СЕ с результатами поиска указателей по старому адресу остается открытым.
Game 2021-03-01 23-26-48-480

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

Теперь достаточно скопировать новый найденный адрес (даблклик по полю Address откроет окно редактирования), затем в окне поиска указателей нужно выбрать пункт меню Pointer scanner > Rescan memory – Removes pointers not pointing to the right address.
m10_0

В появившемся окне нужно проконтролировать корректность введенного адреса и отметить чекбоксик Only filter out invalid pointers.
После установки чекбоксика изменение адреса и типа отсева станет недоступно.
m11

Снова СЕ предложит нам сохранить результаты отсева указателей в файле PTR. Я рекомендую каждый этап сохранять в отдельной файле, ибо в случае каких-то проблем можно будет без труда загрузить предыдущие результаты. Из окна результатов сканирования Pointer scan это можно сделать через пункт меню File > Open.
m12

Результатом предыдущего этапа являются 3кк указателей, что почти на порядок меньше, чем при первом поиске.
m13_0

С этими результатами уже точно можно работать, но для подстраховки мы проведеи еще и третий цикл.
Game 2021-03-01 23-35-28-575
m15_0

И четвертый цикл отсева произведем не по результатам поиска нового адреса, а по результатам сравнения в текущей сессии значений по адресам, на которые ссылаются найденные указатели. В этом случае нужно изменить тип отсева на Value to find, указать тип значения 4 байта целочисленное и снять чекбоксик Only filter out invalid pointers.
m16
m17_0

Как видно из количества отсеянных указателей на третьем и четвертом этапах, эти этапы можно было смело пропустить.
И вот здесь кулхацкер задаст себе резонный вопрос: как же работать с тремя миллионами (Карл!) найденных указателей? На помощь пытливому уму придет логика и здравый смысл:
1. Нужно проанализировать базовые адреса в колонке Base Address. Всякие мутные ddl-ки и прочие модули нам вряд ли подойдут. Нужен исполняемый файл или, на крайний случай, какая-то базовая библиотека. В случае с Мафией ориентироваться на Game.exe более чем разумно.
2. Если после очередного отсева есть указатели, ссылающиеся на адрес с некорректным значением (при условии правильно указанного типа значения — целочисленного или с плавающей точкой!), то такие указатели нам явно не подходят.
3. Чем меньше уровней в многоуровневом указателе, тем надежнее будет его использование. Иногда, конечно, и двухуровневые указатели могут отваливаться, но желательно стремиться к меньшему числу уровней.
И именно на этом этапе анализа достаточно кликнуть по заголовку столбца Offset 6, чтобы указатели были рассортированы по количеству уровней.
m18_0

Теперь нужно легко и непринужденно даблкликом накидать скопом в рабочее поле СЕ указатели второго-пятого уровня различными базовыми адресами и первыми смещениями. В нашем примере очевидно, что Game.exe + 00246D4C является, скорее всего, тем самым правильным базовым адресом, но вот иерархия уровней указателей может не обязательно говорить в пользу меньшего количества уровней. Строго говоря, для точного ответа необходим ручной анализ структур данных, но это уже более комплексный вопрос. Поэтому надо накидать в рабочее поле штук по пять указателей каждого уровня и получить в итоге целую батарею предварительных результатов. В рабочем поле они все выглядят одинаково, но при редактировании можно будет увидеть всю структуру уровней каждого указателя.
m19m20
m21m22

Торжественный момент! Настало время проверить работоспособность найденных указателей.
Как всегда перезапускаем игру и загружаем другой уровень.
Game 2021-03-01 23-44-04-589

Выбираем в открытом окне СЕ процесс игры и — вуаля. Все найденные указатели являются рабочими. Удалять их из экономии пространства я пока не советую, ибо в разных условиях какие-то могут отвалиться и перестать работать, но в целом всё получилось. Можно объединить все указатели в группу в рабочем поле СЕ, выделив их и выбрав в контекстном меню по правой кнопке мыши Add to new group, озаглавив группу и выбрав уверенное No в вопросе «Do you want “address” version?». В настройках группы Group config в контекстном меню можно выбрать Hide children when deactivated и сворачивать всю группу пробелом или кликом по чекбоксу заморозки значения в левой части строки. Табличку можно сохранять и жить припеваючи.
m23

Анализ дампа в окрестностях найденного адреса показал, что за 4 байта до нашего адреса хранится тип оружия, а через 4 байта после — общее количество патронов к данному оружию.
m24

Что же нам теперь, повторять эту возню с поиском указателей еще и на эти адреса? Разумеется, нет.
Достаточно скопировать рабочем поле какой-нибудь корректный указатель с помощью Ctrl + C или пункта контекстного меню Copy, после чего вставить его здесь же по Ctrl + V (Paste).
Откроется небольшое окно, позволяющее указать требуемое смещение.
m25

Альтернативный вариант заключается в копировании всего указателя без изменений и последующего редактирования копии в общем порядке.
m26

Вот и все. Получается уютненькая табличка, которой можно пользоваться в том числе и тогда, когда оружия на миссию вообще не выдают, а покувыркаться с Сарочкой очень хочется — достаточно выставить тип оружия на 10 (томми-ган) и досыпать патронов, не забывая выкинуть его и поднять для корректной обработки появления оружия в руках у персонажа.
m27
sarah

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



Знаток

(394),
закрыт



6 лет назад

Crazy Philosopher

Мастер

(2158)


9 лет назад

Включить высокий прыжок, отсеять всё. Отключить, отсеять изменившееся. снова включить, снова изменившееся.. . Так – пока не останется мало значений. А в них, если не представляешь формата данных, методом научного тыка – замораживаешь пару, в игре включаешь/выключаешь, если изменилось, значит заморожено не то (переходишь к следующим) , если не включается/выключается, значит один из замороженных.

Demon

Мудрец

(11055)


9 лет назад

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

Это руководство объяснит тебе, мой дорогой друг, как пройти встроенное руководство Cheat Engine.
Сегодня мы скачаем и установим Cheat Engine, пройдем шаги 1 – 2, которые ориентированы исключительно на новичков, так что пропустите их,
если вы хорошо разбираетесь в Cheat Engine.
Даже если вы неплохо разбираетесь в Cheat Engine, посмотрите урок, может быть, вы объясните его лучше, чем я :blush:

Итак, давайте скачаем

.
1. Нажмите на большую синюю кнопку “Download Cheat Engine 7.3”
2. Запустите файл “CheatEngine73.exe”

⚠ Примечание: Cheat Engine монетизируется, чтобы избежать установки ненужного ПО на компьютер повторяйте за мной:

Если вы сделали все правильно, то должны увидеть это:

Перед вами интерфейс Cheat Engine, возможно, для новичков он покажется чуть проще панели управления Boeing, но бояться не стоит,
скоро вы будете уверенно с ним работать.

Не используйте Tutorial для x64, используйте обычную версию.

После нажатия должно открыться такое окно:

Добро пожаловать в учебное пособие по Cheat Engine (v3.5)

Это руководство научит вас основам мошенничества в видеоиграх. Он также покажет вам основные аспекты использования Cheat Engine (или сокращенно CE). Следуйте инструкциям ниже, чтобы начать.

1: Откройте Cheat Engine, если он в данный момент не запущен.
2: Щелкните значок «Открыть процесс» (это значок с изображением компьютера в верхнем левом углу под заголовком «Файл»).
3: Теперь, когда открыто окно «Список процессов», найдите в списке процесс этого учебного пособия. Он будет выглядеть примерно так: «00001F98-Tutorial-x86_64.exe» или «0000047C-Tutorial-i386.exe». (Первые 8 цифр / букв, вероятно, будут другими.)
4: Как только вы нашли процесс, щелкните по нему, чтобы выбрать его, затем нажмите кнопку «Открыть». (Не беспокойтесь обо всех остальных кнопках прямо сейчас. Если вам интересно, вы можете узнать о них позже.)

Поздравляю! Если вы все сделали правильно, окно процесса должно исчезнуть, а Cheat Engine теперь прикреплен к учебнику (вы увидите имя процесса ближе к центру вверху CE).

Нажмите кнопку «Далее» ниже, чтобы продолжить, или введите пароль и нажмите кнопку «ОК», чтобы перейти к этому шагу.)

Если у вас возникли проблемы, просто зайдите на forum.cheatengine.org, затем нажмите «Учебники», чтобы просмотреть руководства для начинающих!

Нажимаем кнопку “Next”
Приступим ко второму шагу!

Шаг 2: сканирование точного значения (PW = 090453)
Теперь, когда вы открыли руководство по Cheat Engine, давайте перейдем к следующему шагу.

Вы можете увидеть внизу этого окна текст «Здоровье: xxx».
Каждый раз, когда вы нажимаете «Ударь меня», ваше здоровье уменьшается.

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

Есть разные способы найти значение, но я расскажу о самом простом – «Точное значение»:
Сначала убедитесь, что тип значения установлен как минимум на 2 или 4 байта. 1-байтовый также будет работать, но вы столкнетесь с проблемой, которую легко исправить, когда вы найдете адрес и захотите его изменить. 8-байтовый, возможно, сработает, если байты после адреса равны 0, но я бы не стал делать ставку.
Одинарное, двойное и другие сканирование просто не работают, потому что они сохраняют значение по-другому.

Если тип значения установлен правильно, убедитесь, что для scantype установлено значение «Точное значение».
Затем введите число вашего здоровья в поле значения. И нажмите «Первое сканирование».
Через некоторое время (если у вас очень медленный компьютер) сканирование будет выполнено, и результаты отобразятся в списке слева.

Если вы нашли более одного адреса и не знаете наверняка, какой это адрес, нажмите «Ударь меня», введите новое значение работоспособности в поле значения и нажмите «Следующее сканирование».
повторяйте это, пока не будете уверены, что нашли его. (включая то, что в списке только 1 адрес …..)

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

Если все прошло нормально, следующая кнопка должна стать активной, и вы готовы к следующему шагу.

Примечание:
Если вы сделали что-то не так во время сканирования, нажмите «Новое сканирование» и повторите сканирование еще раз.
Также попробуйте поиграть со значением и нажмите “ударь меня”.

Окно “Step 2” – окно учебного процесса

Необходимо нажать на кнопку в пульсирующей красной рамке (иконка монитора)
Перед нами всплывает окно выбора процесса.

Выбираем процесс “Tutorial-i386.exe” – процесс нашего учебного окна “Step 2”, что можно определить по иконке и названию, и нажимаем “Open”.

Если вы всё сделали правильно, то у вас должна появиться надпись с соответствующим названием процесса (см. красную рамку), а также должны
стать доступны кнопки и поля справа (см. желтую рамку).

Вернемся к учебному окну “Step 2”.

Перед нами стоит задача: найти в памяти переменную “Health” и поменять её значение на 1000 для успешного прохождения этапа.
Что для этого нужно?
Вводим в поле “Value” текущее значение Health (100) и нажимаем на кнопку “First Scan”

Как это работает?
Когда мы нажимаем “First Scan”, Cheat Engine производит первичное сканирование памяти и находит все переменные с указанным нами значением (100)
Cheat Engine показывает нам все найденные переменные:

И как же нам среди них найти искомую переменную “Health”?
Cheat Engine очень удобный инструмент, позволяющий “отсеять” ненужные переменные.
Для этого нам требуется спровоцировать изменение значения переменной “Health”.
В учебном окне это достигается нажатием кнопки “Hit me”:

В моем случае “Health” приняло значение “95”.
Теперь нам необходимо ввести в поле “Value” значение “95” и нажать кнопку “Next Scan”.
Cheat Engine покажет нам только те переменные, значение которых изменилось со “100” до “95”.

Как вы видите, перед нами лишь одна переменная.
Давайте проверим, правильную ли переменную мы нашли?
Для этого дважды кликнем по строке, переменная должна отразиться в списке ниже.
После чего нажмем дважды на “95” в поле Value и попытаемся изменить значение на “1000”.

Теперь проверим, применились ли изменения в нашем учебном окне “Step 2”.
Вернемся к окну и нажмем на кнопку “Hit me”, чтобы обновить значение на экране.

После нажатия значение “Health” стало “995”, а кнопка “Next” стала доступна :CoolCat:
Поздравляю с первым успешным взломом! Если у тебя не получилось – не расстраивайся, перечитай и повтори заново, внимательно следуя шаг за шагом
и у тебя обязательно все получится! Если после нескольких попыток у тебя все же не получилось – оставь свой вопрос, я обязательно отвечу 😉
Всем успехов и хорошего настроения :sunglasses:
Winlogon.

Куратор(ы):  

Bl00dRedDragon   

Автор Сообщение
 

СообщениеДобавлено: 30.08.2015 1:12 

[профиль] [Фотоальбом]

Куратор темы

Статус: Не в сети
Регистрация: 04.12.2009
Откуда: Москва
Фото: 13

#77
Официальный сайт:

http://www.cheatengine.org/downloads.php

Собственно есть ли среди нас те, кто пользуется сим чудом? Конечно в первую очередь программа направленна на взлом игр, в плане сделать себе бесконечные жизниденьги и тд.
Самое интересное начинается, когда начинаешь копаться копаться в игре, на уровне кодов ассемблера (а иначе никак).
Благодаря этой проге и некоторым туториалам много сам научился (работать и понимать asm, писать для него скрипты).

Для изучения азов в самом Cheat Engine имеются туториалы:
Файл Tutorial-x86_64.exe или Tutorial-i386.exe
На английском вам расскажут и вы будете сразу же применять на практике знания о том, как где и зачем искать.
#77

Ссылки на полезные, по моему мнению, обучающие топики (не для новичков, для бывалых :D )
Поиск нужных значений, с чего лучше начать? –

http://forum.cheatengine.org/viewtopic.php?t=571888

Изучаем AOB метод –

http://forum.cheatengine.org/viewtopic.php?t=570083

Пути поиска поинтеров, инъекции кода, AOB to data (Array Of Bytes), нахождение и работа с base адресом –

http://forum.cheatengine.org/viewtopic.php?t=572465

Как делать простейший фильтр –

http://forum.cheatengine.org/viewtopic.php?t=583376

Конечно тема в первую очередь для тех, кто уже заинтересован и имеет опыт общения с ПК на низком уровне.
Т.е. без начального знания языка ассемблера будет тяжеловато.
Совсем продвинутые гуру конечно знают и asm и lua (если игра Lua, то обычные методы её “исследования” никак не помогут). Ну и самое важное – это написание грамотных скриптов.

ПРЕДУПРЕЖДЕНИЕ: Ни о каких Online играх мы НИКОГДА в данной теме не говорим и о способах их взлома. Чисто singleplayer или по крайне мере только об одиночном режиме. Это касается так-же и Онлайн любых игр в Вконтакте, Facebook. Забудьте. (тем более, что server side ничего хорошего не даст, без еще тонны знаний)

Добавлено спустя 47 минут 4 секунды:
————————————————————————-

Моя текущая игра – не могу никак найти нужный оффсет (30.08.2015)

Собственно после рядя более-менее успешных работ с некоторыми играми, наткнулся на какую-то дичь. Советовался и с теми, кто более опытен, чем я (йа то новичок), пока безрезультатно (т.е. мне помогли, но все-равно есть большие проблемы).
И так сама игра Relic Hunters Zero (http://store.steampowered.com/app/382490 – бесплатна стиме)
казалось бы, что может быть в 60 мб? Как оказалось – полная каша из кода. ОООЧЕЕЕНЬ тяжело с ней работать и найти и написать нужное тебе.

Первое:
#77
В принципе обычная картина для некоторых игр, но это первое неудобство. Жизни, опыт, патроны, здоровья врага, разрешение игры, уровень громкости – все обращается в 2 функции.
Т.е. как минимум для всех действий нужен фильтр, ибо иначе это будет crash игры в любом случае.

Второе:
#77
Была попытка поискать поинтеры. Конечно первым делом думает, что все будет зашибись и с 5ым уровнем поинтеров. После 2-3 перезапусков пк понимаем – у нас 0 хороших результатов.
Тогда идем ва-банк – идем уже до 7уровня offset’ов. Разница в том, что 5 уровень пк для такой игры +- быстро обработает.
А вот 7 ур…. Поиск шел 1500 секунд, после чего по 6 потокам суммарное количество поинтеров было 7 000 000 000 (7 млрд.), а общий всего этого – 90гб
Конечно поиск я прервал, ибо стало и так ясно – пк не сможет все поинтеры найти до того, как кончиться место на HDD.
А еще обработка 1 000 000 000 (млрд) поинтеров (их же надо еще отсеивать потом) занимает на моем пк порядка 50 минут. 50 х 7 = 350 минут или ~5 часов.
5 часов что-бы найти поинтеры, которые, с очень большой вероятностью, в этой игре все-равно слетят на фиг и после очередного перезапуска (или на другом пк) будут указывать абсолютно в иное место (а то и вообще за пределы).

Третье:
AOB метод
Как оказалось игра под завязку забита повторяющимся кодом. Сигнатуру очень сложно найти, ибо либо не найдет такой участок кода потом, либо таких участков будет больше 1 и адрес будет явно не тот.
Ну либо да, сигнатура разная, но настолько разная, что если делать сравнение между ними и искать по результату – будет великое множество областей.

Четвертое:
Самое веселое, что мне приходилось делать на протяжении 5-10 часов (не за один день конечно) – это искать отличие в структуре между собой (если конкретнее: значением HP например) и всем тем, что еще обращается к функции.
И за все это время был найден лишь один успешный оффсет:

Код:

[edi+10]

Для патронов это было

Код:

cmp [edi+10],00018720

т.е. сравнивая edi по offset’у +10 с 00018720, уникальным, как казалось, для игрока, вышло сделать бесконечные патроны и игра при этом не вылетала.
Первые проблемы прочувствовались в том, что музыка между уровнями стала заедать. Т.е. не только патроны стали быть вечным значением в 99, но под этот фильтр так-же попал и музон игры из-за чего с ним начались траблы. Ладно, фиг с этим, не столь важно.

Весь код:

Код:

[ENABLE]
//code from here to ‘[DISABLE]’ will be used to enable the cheat
alloc(newmem,2048)
label(returnhere)
label(originalcode)
label(exit)

label(check)

newmem: //this is allocated memory, you have read,write,execute access
cmp [edi+10],00018720
je check
jmp originalcode

check:
fld1
fstp qword ptr [edi]
jmp exit

originalcode:
fstp qword ptr [edi]

exit:
pop edi
pop esi
pop ebp
jmp returnhere

“RelicHuntersZero.exe”+109E4F:
jmp newmem
returnhere:

    [DISABLE]
//code from here till the end of the code will be used to disable the cheat
dealloc(newmem)
“RelicHuntersZero.exe”+109E4F:
fstp qword ptr [edi]
pop edi
pop esi
pop ebp
//Alt: db DD 1F 5F 5E 5D

Для жизней

Код:

cmp  [edi+10],187B2

А вот тут привычный, одиночный фильтр показал, что его одного недостаточно.

Код:

[ENABLE]
alloc(newmem,512)
alloc(hp,4)
label(returnhere)
label(infhp)
label(originalcode)
label(exit)

newmem:
cmp [edi+10],187B2
jne originalcode
jmp infhp

originalcode:
fstp qword ptr [edi]
pop edi
pop esi
pop ebp
jmp returnhere

infhp:
mov [hp],(float)999
fld [hp]
fstp qword ptr [edi]
pop edi
pop esi
pop ebp

exit:
jmp returnhere

“RelicHuntersZero.exe”+109E4F:
jmp newmem
returnhere:

  [DISABLE]
//code from here till the end of the code will be used to disable the cheat
dealloc(newmem)
“RelicHuntersZero.exe”+109E4F:
fstp qword ptr [edi]
pop edi
pop esi
pop ebp
//Alt: db DD 1F 5F 5E 5D

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

Часа 2-3 ушло на осмотр старой доброй структуры между нами и всем остальным в надежде найти отличия, кроме +10 оффсета (теперь было окончательно ясно, что он как уникален как минимум не только для игрока, но и для объектовврагов), что бы написать к фильтру еще дополнительные условия.
ИИИИИИИИ… ЕГО НЕТ XD

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

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

Однако есть и положительные моменты:
1) По крайне мере есть скрипт на беск. патроны на любое оружие

Код:

[ENABLE]
//code from here to ‘[DISABLE]’ will be used to enable the cheat
alloc(newmem,64)
alloc(mine,4)
label(returnhere)
label(originalcode)
label(exit)

label(check)

newmem: //this is allocated memory, you have read,write,execute access
cmp [edi+10],00018720
je check
jmp originalcode

check:
mov [mine],63
fild [mine]
fstp qword ptr [edi]
jmp exit

originalcode:
fstp qword ptr [edi]

exit:
pop edi
pop esi
pop ebp
jmp returnhere

“RelicHuntersZero.exe”+109E4F:
jmp newmem
returnhere:

[DISABLE]
//code from here till the end of the code will be used to disable the cheat
dealloc(newmem)
“RelicHuntersZero.exe”+109E4F:
fstp qword ptr [edi]
pop edi
pop esi
pop ebp
//Alt: db DD 1F 5F 5E 5D

И на бесконечные звезды (они открывают следующие уровни)

Код:

[ENABLE]
//code from here to ‘[DISABLE]’ will be used to enable the cheat
alloc(newmem,64)
alloc(star,4)
label(infstars)
label(returnhere)
label(originalcode)
label(exit)

newmem:
cmp [edi+8],73726550
je infstars

originalcode:
fstp qword ptr [edi]
pop edi
pop esi
pop ebp
jmp returnhere

infstars:
mov [star],(float)99999
fld [star]
fstp qword ptr [edi]
pop edi
pop esi
pop ebp
jmp returnhere

exit:
jmp returnhere

“RelicHuntersZero.exe”+109E4F:
jmp newmem
returnhere:

  [DISABLE]
//code from here till the end of the code will be used to disable the cheat
dealloc(newmem)
“RelicHuntersZero.exe”+109E4F:
fstp qword ptr [edi]
pop edi
pop esi
pop ebp
//Alt: db DD 1F 5F 5E 5D

Я еще делал код на бесконечные гранаты, но там функции были похожие, а !!!ВНЕЗАПНО!!! регистр не edi, а esi.
В чем проблема? Ну во-первых в том, что старый добрый псевдо уникальный оффсет +10 уже абсолютно не канал (ну при фильтрации на нем хотя бы игра не вылетала), а во вторых, да – не смог найти уникального оффсета. А следовательно нельзя сделать фильтр, а следовательно игра послала на хрен меня.

З.Ы. Конечно вместо привычных, как пример,

Код:

mov [esi],99999

приходилось делать что-то вроде

Код:

…..
alloc(star,4)
…..
mov [star],(float)99999
fld [star]
fstp qword ptr [edi]
…..

Ибо иначе с FPU не поработаешь, на прямую не выйдет. Вроде бы абсолютно обычная вещь, только вот я до этого с таким не попадал в играх и не знал. Из-за этого крашнул игру раз 5 наверное, прежде, чем мне написали, как с этим надо работать.

З.Ы.Ы. Еще прикол в том, что функции то 2 для большинства всего нужного. И все новоиспеченные скрипты (code inject’а) так-же влетают в эту область конечно. А это конечно же делает невозможным их одновременную активацию. Т.е. только 1 скрипт одновременно может работать.
И, из-за неопытности, я пока не понял, как все это слить в 1 массу. (хотя бы звезды и патроны)


_________________
Den aller yngste greven, som der på skipet var, han ville visst trolova sig, enn sjølv så ung han var…
DCS, X-Plane 11 player =3

Реклама

Партнер
 
REALpredatoR

Member

Статус: Не в сети
Регистрация: 14.06.2010
Откуда: Сыктывкар
Фото: 0

Bl00dRedDragon писал(а):

Ссылки на полезные, по моему мнению, обучающие топики (не для новичков, для бывалых )

Зачем бывалым обучающие топики? :facepalm:

Bl00dRedDragon писал(а):

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

Все кто владеют ПК, сразу должны изучать ассемблер? :facepalm:


_________________
Я снова тут 🙂

 
Bl00dRedDragon

Куратор темы

Статус: Не в сети
Регистрация: 04.12.2009
Откуда: Москва
Фото: 13

REALpredatoR писал(а):

Все кто владеют ПК, сразу должны изучать ассемблер?

Ты что-то явно не так прочел. Написанно

Цитата:

опыт общения с ПК на низком уровне

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

Конечно, первое, что рекомендуется сделать любому новичку – это качать те же шутеры 98-2000 годов.
Они во-первых все будут x32 бита, во вторых в большинстве случаев – с самыми основными инструкциями, которые легко понять и переписать.

А если, типа как я, сразу лезть в современные игры – можно изначально на немного более сложные вещи наткнуться, как x64 архитектуру, с более сложными командами или на прямую работу с FPU, что изначально тоже несколько сложнее.

REALpredatoR писал(а):

Зачем бывалым обучающие топики?

Интересный ты человек. Мне кажется не существует тех людей, которые бы умели абсолютно все в asm и знали, а так-же умели бы пользоваться любым софтом по максимуму.
Бывалый в плане того, тут уже нужно уметь писать скрипты и понимать, что вообще происходит в том коде, который был сгенерированнаписан.

Почему нельзя скажем вместо ASM заранее знать тот-же C#C++JAVA? Ну потому что любая игра – это не исходники. Из нельзя чем либо открыть, на высоком уровне. А смотреть машинные коды можно всегда и для всего – asm как раз. Т.е. он универсален.

З.Ы. Правда игры можно взламывать и с ПОМОЩЬЮ C++JAVA, т.е. не через cheat engine писать все, а через IDE соот. Но при этом С++ с IDE будут предоставлять безграничный функционал для УЖЕ найденного кода, т.е. в ЛЮБОМ случае придется все-равно до этого поработать с asm и cheat engine.


_________________
Den aller yngste greven, som der på skipet var, han ville visst trolova sig, enn sjølv så ung han var…
DCS, X-Plane 11 player =3

 
Bl00dRedDragon

Куратор темы

Статус: Не в сети
Регистрация: 04.12.2009
Откуда: Москва
Фото: 13

Мы ломали, ломали и наконец то СЛОМАЛИ, УРААА XD

Relic Hunters Zero все-же доламили. Очень забавным методом.
Выставили уникальное значение хп себе -> потом всегда его и ищем, что бы поддерживать на том-же уровне.

В итоге такой вот скрипт

Код:

[ENABLE]
//code from here to ‘[DISABLE]’ will be used to enable the cheat
alloc(newmem,2048)
label(returnhere)
label(originalcode)
label(exit)

label(check)
label(health)
label(health2)
label(stars)

alloc(mine,16)
alloc(count,16)
alloc(_do_inf_hp,8)
alloc(_do_inf_ammo,8)
alloc(_do_inf_stars,8)
alloc(temp,8)
registersymbol(mine)
registersymbol(count)
registersymbol(_do_inf_hp)
registersymbol(_do_inf_ammo)
registersymbol(_do_inf_stars)

newmem: //this is allocated memory, you have read,write,execute access
cmp [edi+10],00018723
je check
cmp [edi+10],000187B5
je health
cmp [edi+10],00018714
je stars
jmp originalcode

check: // inf ammo too
cmp [_do_inf_ammo],01
jne originalcode
fstp st(0)
mov [temp],63
fild [temp]
fstp qword ptr [edi]
jmp exit

///////////////////////////////////////////////////////////////////////////////
health:
cmp [_do_inf_hp],01
jne originalcode
cmp [count],01
je health2

fstp st(0)
fldl2t
fmul st(0)
fmul st(0)

fstp qword ptr [edi]
mov [count],01
jmp exit
///////////////////////////////////////////////////////////////////////////////

originalcode:
fstp qword ptr [edi]

exit:
pop edi
pop esi
pop ebp
jmp returnhere

///////////////////////////////////////////////////////////////////////////////
health2:
cmp [edi+04],405E71A6
jne originalcode

fstp st(0)
fldl2t
fmul st(0)
fmul st(0)

fstp qword ptr [edi]
jmp exit
///////////////////////////////////////////////////////////////////////////////
stars:
cmp [_do_inf_stars],01
jne originalcode
fstp st(0)
mov [temp],1869F
fild [temp]
fstp qword ptr [edi]
jmp exit

///////////////////////////////////////////////////////////////////////////////
_do_inf_hp:
db 0

_do_inf_ammo:
db 0

_do_inf_stars:
db 0
///////////////////////////////////////////////////////////////////////////////
“RelicHuntersZero.exe”+109E4F:
jmp newmem
returnhere:

[DISABLE]
//code from here till the end of the code will be used to disable the cheat
dealloc(newmem)
dealloc(mine)
dealloc(count)
dealloc(_do_inf_hp)
dealloc(_do_inf_ammo)
dealloc(_do_inf_stars)
dealloc(temp)
unregistersymbol(mine)
unregistersymbol(count)
unregistersymbol(_do_inf_hp)
unregistersymbol(_do_inf_ammo)
unregistersymbol(_do_inf_stars)
“RelicHuntersZero.exe”+109E4F:
fstp qword ptr [edi]
pop edi
pop esi
pop ebp
//Alt: db DD 1F 5F 5E 5D

Штуки типа

Код:

cmp [_do_inf_hp],01

просто переключатели. Дело в том, что количество хп, патронов, звезды – все обращается сюда. Поэтому что-бы это все было в одной памяти, но могло по отдельности включаться (скажем я хочу ТОЛЬКО беск. здоровье), нужны такие переключатели.
К ним конечно же попросту идут внешние скрипты типа:

Код:

[ENABLE]
_do_inf_hp:
db 01

[DISABLE]
_do_inf_hp:
db 00

Следующая игра, над которой работаю: Shoppe Keep. Вроде бы все начиналось неплохо, но в итоге привело к AOB и к тому, что не смог пока найти уникальную сигнатуру.


_________________
Den aller yngste greven, som der på skipet var, han ville visst trolova sig, enn sjølv så ung han var…
DCS, X-Plane 11 player =3

 
4e_alex

Advanced guest

Статус: Не в сети
Регистрация: 03.12.2004

REALpredatoR писал(а):

Все кто владеют ПК, сразу должны изучать ассемблер?

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


_________________
Enough expository banter! Now we fight like men! And ladies! And ladies who dress like men!

 
Bl00dRedDragon

Куратор темы

Статус: Не в сети
Регистрация: 04.12.2009
Откуда: Москва
Фото: 13

4e_alex писал(а):

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

Ну с этим никто не спорит.
Т.е. пока игра у вас работает, вы на одном и том-же месте, не на какие другие локации не переходиливас не убивали – значения хпденег и тд 100% в той-же области памяти.
А вот после перезапуска уже и тд – все, пока.

Но есть оговорка:
А если захотелось скажем бесконечных патронов на ВСЕ оружия? Будешь адрес каждой пушки искать? :D Опять-таки здесь будет гораздо легче работать с 1ой единственной функций, чем каждый раз с 100 адресами.

Еще момент: даже АСМ по сути отлично знать не надо. Сойдет его элементарное понимание. А он простой до жути. Тело скрипта CE сам писать, автоматически, умеет. От юзверя требуется, по сути, добавить детали.

————————————————————————————————————————————————————————–

Ну и писал, что ломаю Shoppe Keep сейчас. Уже взломал конечно же давно. Но он очень легкий в плане взлома, поэтому на нем внимания не заострил.

Не знаю, стоит ли пробовать делать туториал по взлому чего либо? На ютубе есть их и так не мало.
И конечно, если и буду делать туториал, то только на основе инъекции кода и aob. Ибо не вижу смысла их делать по чему-то вроде “Как найти свое значение ХП и заморозить его” – это уж совсем бред.


_________________
Den aller yngste greven, som der på skipet var, han ville visst trolova sig, enn sjølv så ung han var…
DCS, X-Plane 11 player =3

 
Bl00dRedDragon

Куратор темы

Статус: Не в сети
Регистрация: 04.12.2009
Откуда: Москва
Фото: 13

Думал такой хакнуть command and conquer 3 tiberium wars на бесконечные хп для себя, но чет не пошло. Прикол в том, что как обычно, надо искать отличие между ХП своих юнитовпостроек и врагасоюзников. Вроде бы что-то находил, но после тестов ВСЕГДА оказывалось, что значение не уникально и либо никто не неуязвим, либо все неуязвимы.

Правда есть фишечка – там 3 смещения подряд идут с соот. 3 значениями. Если в текущей игре для активации чита делать сравнение ос всеми 3мя – то только я сам неуязвим. В чем трабла- эти значения каждую игру меняются и изначально приходиться опять узнавать, какие они по этим смещениям именно для себя самого.
Т.е. надо бы как-то придумать, что с этим делать :D


_________________
Den aller yngste greven, som der på skipet var, han ville visst trolova sig, enn sjølv så ung han var…
DCS, X-Plane 11 player =3

 
Bl00dRedDragon

Куратор темы

Статус: Не в сети
Регистрация: 04.12.2009
Откуда: Москва
Фото: 13

Собстно продолжение банкета XD Ничуть не забросил этим заниматься.
Заметил, что ссаные indie игры хрен взломаешь, ибо там везде этот тупой game engine или как там его – как relic hunters zero. Я так и не вдуплил нормально, как оно должно ломаться.

Хоть какой-то видосик.

DOOM новый вообще легко поддается. Комп перезапускал (для того, чтобы адресное пространство иначе на игру выделилось), игру перезапускал – все робит. Значит должно по крайне мере на этой версии у всех работать.
С патронами все вышло легко, ибо 1 функция, которая отвечает только за эти самые патроны.
С хп сразу несколько проблем нарисовалось:
1) там округление происходит, а исходное значение во float несколько меньше, из-за чего мой первый поиск хп привел к 0 результатов. Когда начал искать “любимым” методом “увеличилось на” “уменьшилось на” cheat engine на первой иттерации дал 5 миллиардов адрессов, из-за чего все 16гб рам легли на хрен и все повисло :D Я уж думал придется все заново делать, перезапускать пк. Но обошлось. Кое-как до смерти сумел найти реальное значение хп (на видео видно, сколько там просто визуальных значений).
2) movss очень простая функция, но, из-за длительного перерыва, забыл, как с ней работать. В итоге быстренько нагуглил изи.
3) самое важное – функция для хп работает и на броню, и на хп мобов. В принципе обычный случай вполне, приходиться тогда использовать различия по структурам. На видео опять таки есть этот момент аж 2 раза, когда я заношу адреса в disssect datastuctures утилиту и смотрю различия. Сначала, мне казалось, что уникальность игрока заключается по смещению +30, в значении 12 (float). Ибо у всхе врагов было 3. Но оказалось, после перезапуска в SnapMap, что у игрока теперь там 4, а не 12. В итоге сошелся на том, что все мобы со значением 3 просто. И это работает… но не дай бог в игре попадается что-то, что обрабатывается этой функцией из враговразрушаемых предметов и по смещению 30 у него не будет значения 3 – он будет тогда тоже неуязвим. В принципе просто лень уже было все дотошно выяснять, вроде и так работает – норм. Если где будет прокол- значит надо искать другое уникальное значение.

Кстати и структура хорошая у дума. Я еще на патроны не смотрел правда, а зря. Но на хп там видно, что есть готовый оффсет в принципе на максимальное количество хп, количетсво брони и тд. У мобов тоже.
Можно было еще one shot kill написать, но… лень, ага :-)

З.Ы. Я то еще думал, что из-за MOVSS придется через одно место помещать значение в xmm0, типа как с FPU, с его этими fld, fstp. Но нет, просто (float) и movss на mov заменить. Easy.


_________________
Den aller yngste greven, som der på skipet var, han ville visst trolova sig, enn sjølv så ung han var…
DCS, X-Plane 11 player =3

Последний раз редактировалось Bl00dRedDragon 15.05.2016 10:27, всего редактировалось 2 раз(а).

 
observer_07

Member

Статус: Не в сети
Регистрация: 26.05.2010
Откуда: Александров
Фото: 7

Bl00dRedDragon, немного не в тему, а что за боковую панель с гаджетами вы используете?

 
Bl00dRedDragon

Куратор темы

Статус: Не в сети
Регистрация: 04.12.2009
Откуда: Москва
Фото: 13

Думаю, когда нибудь у меня будет время снять туториалы по этой проге. Хотя по сути все это уже снято и не один раз, многими людьми.
И, если кто заинтересован – я лично очень многое для себя с офф форума подчеркиваю. Т.е. там люди вполне помогают даже самым зеленым. Я например так хоть с fpu смог разобраться, да и AOB (Array Of Bytes) научится более-менее.
Хотя мое знание этого всего еще сильно хромает. Есть очень много более разбирающихся людей в этом плане, чем я. Учиться тут можно чуть ли не до бесконечности, было бы время и желание только =)

observer_07 rainmeter с темой enigma.


_________________
Den aller yngste greven, som der på skipet var, han ville visst trolova sig, enn sjølv så ung han var…
DCS, X-Plane 11 player =3

 
Bl00dRedDragon

Куратор темы

Статус: Не в сети
Регистрация: 04.12.2009
Откуда: Москва
Фото: 13

Еще хочу вам посоветовать один ютуб канал про обучение Cheat engine с азов и выше

https://www.youtube.com/playlist?list=P … xv2m6mrmHr

Туториалы оч хорошие, разжёванные. Материал в 1080p60fps-1440p. Туториалы английские, но человек очень хорошо и ясно все выговаривает и англ хороший очень, приятно слушать (ну как по мне).

Некоторые моменты вот у него сейчас смотрю, про xmm как раз и прочее – крайне интересная информация. :-)


_________________
Den aller yngste greven, som der på skipet var, han ville visst trolova sig, enn sjølv så ung han var…
DCS, X-Plane 11 player =3

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Лаборатория

Новости

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