CE Tiny Dumper
-
Функции:
-
Копирование участка виртуальной памяти фиксированной длины
-
Связывание адреса копированных данных с новой меткой
-
Возможность сравнивать дампы во время игры с любого доступного адреса (в том числе стека)
-
Возможность сравнивать сохраненные дампы структур после перезагрузки игры
Основное назначение - снимать дампы со стека в пошаговой отладке по адресу ESP и сравнивать эти дампы в окне расструктуризации данных (Dessect Data/Structure). Таким образом можно найти сходства или различия в передаваемых аргументах функций, а также в адресах обратного вызова по инструкции ret. Сравнение аргументов может помочь определить указатели, смещения на данные. Сравнение адресов возврата может помочь определить развилки между ветками кода ботов и ветками персонажа за которого играете. Можно начать исследовать эту развилку для определения условий свой/чужой.
Второе назначение - сравнивать дампы после перезагрузки игры. Сравнения дампов после перезагрузки, загрузки уровней игры, загрузки слотов сохранения, смены оружия, изменения в инвентаре, смены уровня героя и многие другие изменения после перезагрузки игры могут позволить найти отличия или совпадения данных структур от начала базового адреса структуры и обратить на них гораздо большее внимание среди данных в структуре
Данные для ввода:
Source Address - адрес с которого будет сниматься дамп
Size dump - размер участка данных в байтах
Register label - метка для обращения к адресу
*Подсказки:
-
Плагин можно найти в первом окне дизассемблера в меню Tools (Утилиты). Окна-клоны дизассемблера не имеют подключенного подменю.
-
Зарегистрированные метки, которые вы забыли можно посмотреть и удалить через окно зарегистрированных меток "Symbol Config" (нажать на CTRL+U в окне дизассемблера)
-
Память дампов сама не очищается. Поэтому не рекомендуется снимать очень часто огромные дампы и тем самым засорять память. Если все же память переполнена, что мало вероятно, то просто перезапустить игру.
Что нового в версии 1.1
Размещено 6 марта, 2015- Добавлен список зарегистрированных меток
- Добавлено контекстное меню с опциями копирования меток в буфер обмена и удаление меток с освобождением памяти
- Кнопка снятия дампа больше не закрывает окно
Что нового в версии 1.2
Размещено 6 марта, 2015Добавления:
- При выделении записи в полях выводятся данные адреса, размер дампа и название зарегистрированной метки
- Добавлена опция сохранения дампов
- Добавлена опция загрузки дампов
- Добавлена опция очистить таблицу
- Добавлена опция перезаписи дампов
- После закрытия игры дампы можно сохранять
Исправления: - Исправлено подключение к русской версии
- Исправлены название опций
Описание контекстного меню: - Copy Name - копирует имя выделенной записи
- Remove selected - удаляет выделенную запись
- Save to file - сохранить все дампы в файл, в указанную директорию
- Load from file - загрузить дампы из файла
- Ramove all records - удаляет все дампы и зарегистрированные метки
- Rewrite dumps - перезаписывает дампы в новую память, регистрирует метки адресов дампов повторно
-
-
Пошаговое руководство по Tiny Dumper
В этом руководстве по шагам описано как снять дамп со стека и раструктуризовать его. Если лень читать, то предлагаю посмотреть хотя бы последний скрин. Там можно увидеть результат. Это самый важный скрин.
-
Перед запуском CE устанавливаем файлы плагина в папку autorun (frmTinyDumper.xml и TinyDumper.lua)
-
Запускаем игру например "Painkiller - Battle out of Hell 1.64" поставленная в оконный режим через 3DAnalyze.
Оконный режим ставить обязательно, т.к. будет пошаговая отладка. В противном случае игра зависнет, а с CE рабтать нельзя будет
-
Запустить CE с установленным плагином и подключиться к игре
-
Ищем адрес здоровья (или брони, или патронов), тип Double (8 байт)
0x24571EA8 = 99.2900238037109 -
Ставим бряк на доступ или на запись на адрес 0x24571EA8
- Идем в игру и встаем под удар персонажем
Появляются инструкции
и там же нажимаем на кнопку Stop, чтобы бряки не мешались в окне бряков- Берем например инструкцию
1015C194 - 89 53 08 - mov [ebx+08],edx
По ней идем в дизассемблер и на инструкции жмем F5 - установка бряка на доступ- Открываем окно бряков, выделяем инструкцию и пишем условие на прерывание с остановкой процесса
EBX==0x24571EA0 (это условие взяли, потому что ebx находится в инструкции, а значение взяли EBX из отладчика)
Нажимаем Ок, идем в игру
9. Видим, что произошла остановка игры
10. Открываем окно ТиниДампера
-
Пишем значение регистра esp и название будущей зарегенной метки
-
Нажимаем "Dump and Close" и CTRL+U чтобы видеть под рукой зареганные ваши метки
-
Открываем окно расструктуризации CTRL+D и пишем метку в свободное поле
-
Далее следуем действия как на рисунках
-
Наконец результат
Не только сохраняются данные, которые пропадут на следующий такт процессора, но и расструктуризовали и можем сравнивать эти данные с другими дампами стека. Зачем, как и для чего это выходит за рамки этого руководства.
-
Сейчас процесс игры остановлен на бряке кода. Чтобы продолжить игру. Удаляем бряк из окна бряков и отпускаем игру по F9.
-
Теперь снимаем другие дампы на том же адресе для адресов здоровья врагов на предмет отличиях их или для поиска указателей... Во всяком случае сохраненный дамп может дать какие-то подсказки и зацепки. Главное не начать новый уровень игры или не загружать сохранения, т.к. обычно при переходе на новый уровень данные могут измениться... На этом пока все
-----
Tiny dumper 1.2 Сравнение структур после перезагрузки. Поиск фильтра свой-чужой-дружественый-
Запускаем игру, запускаем CE и присоединяем процесс игры к CE
-
Сохраняем игровой слот перед тем как искать структуры
-
Находим три структуры игроков: свой игрок, дружественный, враг
-
Дампим три структуры из пункта 3 указывая: базовый адрес структуры, уникальную метку
-
Игру закрываем, снова открываем, загружаем слот, присоединяем процесс игры к CE
-
В Tiny dumper 1.2 вызываем контекстное меню правой кнопки мышки и вызываем опцию "Rewrite dumps" - дампы из кеша перезаписываются в память в процесса игры
-
Снова находим три структуры игроков: свой игрой, дружественный, враг
-
В окне расструктуризации создаем три группы
Группа1 "Свой игрок":
-адрес после перезагрузки
-метка из тини дампера своего игрока до перезагрузки
Группа2 "Чужой игрок":
-адрес после перезагрузки
-метка из тини дампера чужого игрока до перезагрузки
Группа3 "Дружественный игрок":
-адрес после перезагрузки
-метка из тини дампера дружественного игрока до перезагрузки
-
Если повезет, то находим фильтр - фиолетового цвета строка. Если филетовых строк несколько, то запоминаем их смещения и значения на всякий случай
-
Пишем АА-скрипт со смещением фильтра. Правильно написанный АА-скрипт не будет крешить игру.
-
Активируем АА-скрипт и проверяем в игре, что свой и дружественный игроки не получают урон, а вражеские получают урон. Если это не так, то берем другие смещения из пункта 9 и повторяем 10.
Если фильтр найти не удалось, то ищем 3 многоуровневых указателя до верхего статического адреса для своего, для 2-х врагов. Открываем Structure Spider.
Указываем в поиске уровень вложенности указателей.
Попеременно вводим два статических адреса - начала структур своего и чужих игроков. Правило поиска выбираем исходя из типов игроков. Если это свой и чужой, то искать отличные. Если это чужой и чужой, то искать одинаковые. Перезапускам игру и опять проделываем эти действия.
Если не нашлось ничего, то что-то делали не так или отличия между группами игроков нет. Однако графический интерфейс обычно связан только с нашим героем и не связан с другими. Поэтому по связи GUI как минимум фильтр свой-чужой можно сделать всегда. Что касается дружественных игроков, то нужно будет исследовать более углубленно.
-
-