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

[Cheat Engine] Dissect Data Scaner 1.0.2 beta


2 изображения

Информация о файле

Только для Cheat Engine 6.7

 

Это тестовая версия, поэтому могут быть ошибки при сканировании. О них можно написать мне в личку с названием игры, сигнатуры инструкции.

Если плагин вдруг заключил  и пишет что-то в консоли, то нажать на кнопку Stop или для остановки ввести Lua команду

stopDissectDataScanner()

Установка

Распаковать в основную директорию с программой. В архиве форма, файл настроек и lua исходник.

 

Спойлер

Цель плагина:

1. Точное определение типа данных на смещениях структуры;

2. Показать в имени элемента структуры один из опкодов чтения или его часть (с регистрами и смещением);

3. Найти такие смещения, с которыми работают только инструкции чтения за указанное время равное Accuracy * 10мс на байт в структуре. Чем выше Accuracy, тем выше вероятность убрать больше лишний смещений;

 

*Краткое описание в блоге: Новости по будущему плагину

**Еще одна тема в блоге: Анализ Dissect Data Structure 2

 

Как работать с плагином

 

1. Ищем параметр в игре

2. Ставим "точку останова на доступ"(брейкпоинт) или "на запись"

3. Находим одну из инструкций. Например, в игре Кредо Убийцы 3 это инструкция


AC3SP.exe+11BAEEB - 66 89 4E 5C           - mov [esi+5C],cx

4. Можно пойти двумя способами по переносу базового адреса в окно структур

  4.1 На инструкции смотрим например базовый адрес ESI, он будет началом структуры. Его переносим в окно Dissect Data (открывается в отладчике). Отказываемся от всех диалогов, чтобы не получать структуру, которую создает Cheat Engine.

  4.2 Определить адреса например на "[esi+5c]" в дизассемблере и на любом вызвать контекстное меню и перебросить базовый адрес в Dissect Data

5. В окне Dissect Data запускаем "Scanner" нажав на эту надпись и вводим имя структуры, размер в hex, и чувствительность поиска от 1 до 10

6. Идем как можно быстрее в игру, а она уже должна быть активна и в оконном режиме, и  не в меню. Ждем пока завершится сканирование, что-то делая в игре или простоя стоим там. Если очень долго, можно уменьшить чувствительность или размер структуры в hex-е

7. После того как структура получена, мы основывать на своем опыте, ищем в структуре такие данные, которые могут повлиять на игровой процесс. Т.е. меняем что-то в структуре в байтовых, сингловых типах и смотрим в игру. Очень редко 4-х байтовые что-то дают,а поинтеры менять не надо их можно по аналогии смотреть в новых окнах.

 

Результаты

Нет 100% гарантии сразу найти все рабочие адреса, в которых что-то будет интересное. Большая часть может себя не проявить в игре или привести к вылетам. После определенного количества вылетов, вы поймете какие типы данных и как менять и вылетов будет меньше.

Перед потенциальными вылетами делаем сигнатуры, чтобы вернуться на инструкцию.

 

Вызов Lua кода после crash-а вернет адрес инструкции


local sign = 'F3 0F 11 80 EC 00 00 00'
function GetAddress(signature)
  local t = AOBScan(signature, '+X-C-W',0)
  local s = t[0]
  t.destroy()
  return s
end
print(GetAddress(sign))

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

 

Если времени мало. Получаем около 20 параметров структуре байтовых и сингловых. Безопасней всего менять сингловые. Их можно увеличить все в 2 раза и зайти в игру и увидеть, что там происходит. Не забываем перед правками сделать копию структуры и нажать на Lock, чтобы сравнить и откатить изменения. За тем уже правим по байтикам на ноль или на единицу. Редко бывают вылеты. Каждый адрес отмечаем, что его проверяли или удаляем. Если интересные, то меняем название. Сохраняем структуру.

 

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

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

 

На три игры я находил 1-3 полезных параметра и до 6 каких-то забавных или баговых. Например, я нашел коэффициент скольжения персонажей в структуре с координатами и там же гравитацию. Попадались адреса, которые запрещали двигаться, т.е. можно морозить ботов. Попадались байтовые адреса, меняющие руки с оружием в L4D2.

 

Структуры сохраняются в файл таблицы или экспортируются в отдельный файл.

Далее делаем читы, как обычно. Либо меняем код, либо меняем данные по базовому указателю через скрипты Аutoasembler


Что нового в версии 1.0.2 beta   Просмотр изменений

Размещено

upd: добавлен GHL_ClassSettings.lua (опять забыл закинуть его)

 

1) Исправлены ошибки с определением смещения и типов данных. Это позволил сделать новый алгоритм, который анализирует все опкоды работающие с адресом и выбирает наиболее подходящие для определения смещения адреса в структуре и для определения типа данных в структуре.

 

Выбор лучшего опкода для определения типа данных:

- опкоды с перезаписываемыми регистрами не выбираются;

- опкоды работающие с float приоритетнее чем dword;

- опкоды без квадратных скобок пока пропускаются: всякие repe, movsd и другие

- опкоды с не правильным дизассемблированием пропускаются (невозможно получить адрес в скобках)

 

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

 

На скриншоте пример структуры, после работы плагина

Screenshot_18.png

 

Тестирование продолжается...

 

  • Понравилось 1
  • Спасибо 1
  • Плюс 2

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

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

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