В котором начинаются запросы на разборку новичка - PullRequest
2 голосов
/ 14 октября 2009

Я относительно (читай: глупый новичок) знаком с разборкой, но это немного озадачило меня: У меня есть набор файлов сохранения, сжатых с помощью zlib, и игра, которая их загружает. Их структура известна и после загрузки структуры в памяти идентичны соответствующим файлам сохранения. Проблема в том, что игра была написана задом наперед, скриптовым языком, а не языком, который каким-то образом не оставляет статических указателей. Совсем. Несколько десятков человек пытались, и казалось бы, статические пути указателей сломались бы после незначительных изменений на той же машине. Простым решением было бы просто найти в памяти процесса содержимое файлов, но это довольно грубое решение, которое я бы предпочел избежать в образовательных целях.

Вопросы:

  • Я пытаюсь использовать OllyDBG. Я ужасен в этом, но тем не менее сумел сделать несколько тривиальных кодеков, которые действительно работали. Я использую правильный инструмент для работы или я тупой новичок? Какие инструменты есть у современного реверсора в комплекте?
  • В соответствующей заметке я вынужден прибегнуть к использованию Cheat Engine (или его двоюродного брата MHS) для поиска в памяти. Это кажется немного нелогичным. Действительно ли OllyDBG не дает вам возможности искать значения и уточнять результаты, или я что-то упустил?
  • Как вы устанавливаете точки останова на WINAPI? Черт, как выглядит WINAPI на уровне сборки? Это то, что мне не удалось найти какой-либо достойной информации, и я почти уверен, что у Google ее более чем достаточно, но я просто не могу набрать нужные слова.
  • Расширяя вышесказанное, как можно установить динамические точки останова? Если меня интересует конкретная, часто вызываемая функция, но только , если EAX в этой точке равен конкретному значению, как бы я мог заставить Олли (или что-то еще) нарушить это условие?
  • Любые общие книги / предложения / ресурсы по разборке или низкоуровневому программированию, ориентированные на поломку.

Отказ от ответственности: рассматриваемая игра является бесплатной, для одного игрока, автор не одобряет, проект предназначен для расширения функциональности больше всего на свете. Также первый пост, надеюсь, я не слишком хорошенько покопался. (

1 Ответ

4 голосов
/ 14 октября 2009

У вас есть много вопросов в одном. Я постараюсь ответить на некоторые.

OllyDBG - бесплатный дизассемблер. Профессионалы могут платить за IDA-Pro, но это дорогой продукт.

Что касается поиска в памяти, OllyDBG предоставляет эту функцию. В любом окне дампа памяти (например, в панели дампа памяти окна ЦП) вы можете: щелкнуть правой кнопкой мыши, выбрать «Поиск» в контекстном меню, а затем выбрать целочисленную или двоичную строку. В отличие от Cheat Engine, вы не можете искать приблизительное значение с OllyDBG. Вы могли бы искать плагин, который делает это, но я не знаю об этом.

Под "WINAPI" я думаю, что вы имеете в виду Win32 API. Вероятно, в игре, которую вы ищете, есть компонент с именем WINAPI. Чтобы установить точки останова для различных API-интерфейсов Windows, как это любят делать игровые клиент-экстендеры, вам нужно знать, где, собственно говоря, находится API-интерфейс Windows. Функции не все в одном «месте». Существуют различные модули DLL, которые «экспортируют» функции, составляющие Win32 API. Например, MessageBox() экспортируется из USER32.DLL, а ExitProcess() экспортируется из KERNEL32.DLL.

Чтобы установить точки останова на вызовах Windows API в OllyDBG, вы можете: Просмотреть меню, Исполняемые модули, чтобы увидеть все модули в памяти. Щелкните правой кнопкой мыши модуль USER32.DLL и выберите «Просмотр имен» в контекстном меню. Там вы увидите все функции, экспортированные из USER32.

Если бы игровой клиент был написан на C, был бы список API-функций, используемых в так называемой «таблице импорта». Это можно найти в загруженном в память модуле .EXE или просмотреть в EXE-файле на диске с помощью link /dump /imports.

.

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

К сожалению, OllyDBG не поддерживает условные точки останова.

Относительно того, с чего начать изучение дизассемблирования, конечно, лучшая инструкция - это использовать немало ассемблера в вашем собственном коде. Даже при написании приложения для Windows, которое отображает только окно сообщений с «Hello World», вам потребуется изучить таблицы импорта, чтобы получить доступ к API MessageBox (). На самом деле, написание такого приложения на Си также может быть информативным для вас. Тем не менее, я рекомендую вам скомпилировать код, используя только инструменты командной строки, а не среду графического интерфейса. GUI будет скрывать от вас слишком много информации и мешать обучению. Чтобы получить доступ к API USER32.DLL, вам необходимо сообщить компоновщику, что вы хотите использовать USER32.LIB «библиотеку импорта», чтобы ваш код на C мог прозрачно вызывать MessageBox().

.
...