Перейти к содержанию

Паттерны действий при создании чит-кодов


Рекомендуемые сообщения

Паттерны действий, которые часто приходится выполнять при создании чит-кода эти действия можно автоматизировать в LUA. А что нельзя на LUA то можно на языке программирования под Windows. Здесь я просто опишу действия с которыми мне приходилось сталкиваться и делал я всё это кропотливо различными программными средствами в оновном OllyDbg или Cheat Engine (такими как окно расструктуризации, сканер памяти, установки бярков на регионы памяти в OllyDbg, фильтрация системных сообщений в OllyDbg кликов мыши и нажатий на клавиши и т.п.). LUA может во многом помочь в отладке, сканировании, сравнении и т.п. в различных ситуациях: в поисках указателей, в сравнении структур, в поисках фильтров, в поисках связей между структурами и указателями и т.п.

Примеры. Допустим мы нашли адрес или несколько. Что может потребовать в работе с ними.

1. оповещение об изменении значения (например нам нужно убедится в том, что указатель меняться не будет), об уменьшении(например уменьшение индекса массива), об увеличении.

2. Оповещение о чтении адреса

3. Оповещение о записи в адрес

4. Оповещение о записи и чтении относительно адреса.

Информация может логироваться. И тогда например можно узнать к какому указателю идёт обращение раньше, а к какому позже...

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

Также можно поставить условия установки и снятия бряка на регион памяти, на структуры определённого размера (условия эти могут быть самыми разными).

Например.

Лог1. Герой1 стреляет. (Условие поставить бряк на регион, когда происходит чтение адреса X1 и снять когда происходит чтение адреса Y1)

Лог2. Враг1 стрелятет. (Условие поставить бряк на регион, когда происходит чтение адреса X2 и снять когда происходит чтение адреса Y2)

Лог3. Герой1 стреляет. (Условие поставить бряк на регион, когда происходит чтение адреса X и снять когда происходит чтение адреса Y)

Лог4. Враг1 стреляет. (Условие поставить бряк на регион, когда происходит чтение адреса X2 и снять когда происходит чтение адреса Y2)

Теперь нам попарно нужно отфильтровать логи и возможно мы найдём что-то интересное ;) Возможно, будут обращения к каким-то адресам рядом стоящим, возможно значения этих адресов натолкнут на те или иные мысли ну и т.п. В данном случае это нам должно помочь в нахождении "зацепок" например при создании чит-кода на максимальный урон от выстрела, на фильтр того кто стреляет. Теоритически установка бряка на регион памяти и его "логирование" может избавить от кропотливого исследования вложенных указателей в каждой структуре, т.к. в логах будет больше подсказок К КАКИМ УКАЗАТЕЛЯМ В КАКОЙ ПОСЛЕДОВАТЕЛЬНОСТИ БЫЛО ОБРАЩЕНИЕ например при выстреле. ОЧЕНЬ И ОЧЕНЬ полезный подход.

Пока я не знаю как в CE добиться установки бряка на регион или на структуру через LUA ( потом попытаюсь разобраться). Но в OllyDbg это можно сделать.

Едем дальше.

Допустим у нас есть указатели на структуры и нам надо с ними работать.

Сравнение как минимум двух структур:

- поиск отличных значений

- поиск одинаковых значений

- оповещение об изменении значения в структуре, если мы не уверены в том что оно постоянное

Допустим нам надо работать в отладке, когда происходит события срабатывания брейкпоинта на одной или нескольких инструкциях.

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

Ещё одним важным моментом может являться СРАВНЕНИЕ ЛОГИКИ работы кода по определённом маршруту адресов заданными разными параметрами ограничений. Например при сравнении логик теоритически можно очень быстро найти подсвеченные участки отличной логики. Например, вы поднимаете гранату и поднимаете другие боеприпасы и вы можете намного быстрее и удобнее найти участок кода где будут срабатывать разные прыжки.

Можно автоматизировать следующие действия.

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

- Проскакивают ли на инструкциях и в регистрах одинаковые значения

- Сравнение информации (структур по указателям) между предыдущим бряком и следующим.

Я описал наиболее общие моменты получения и выдергивания "зацепок" когда нужно сделать тот или иной чит-код.

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.