Что я должен знать, прежде чем ковыряться в неизвестном архивном файле в поисках вещей?

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

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

РЕДАКТИРОВАТЬ: мне бы хотелось получить очень общие советы, так как изучение форматов файлов кажется интересным. Я хотел бы иметь возможность взять файл X и узнать, как подойти к проблеме его изучения.


person Thomas Owens    schedule 17.11.2008    source источник


Ответы (5)


  1. Вам определенно понадобится шестнадцатеричный редактор, прежде чем вы зайдете слишком далеко. Это позволит вам видеть необработанные данные в виде чисел, а не в виде больших пустых блоков в любом блокноте шрифтов (или в любом текстовом редакторе).
  2. Попробуйте открыть его в любом архиваторе, который у вас есть (например, zip, 7z, rar, gz, tar и т. д.), чтобы убедиться, что это просто переименованный формат файла (например, .PK3).
  3. Ищите заголовки файлов известных форматов где-то внутри файла, что поможет вам узнать, где хранятся определенные части данных (т. е. выполните поиск «IPNG», чтобы найти любые (несжатые) png-файлы где-то внутри).
  4. Если вы найдете, где хранится определенный фрагмент данных, запишите его местоположение и длину и посмотрите, сможете ли вы найти числа, равные любому из этих значений, в начале файла, которые обычно действуют как указатели на фактическую информацию. данные.
  5. Иногда вам просто нужно угадать или интуитивно понять, что означает определенное значение, и если вы ошиблись, продолжайте двигаться дальше. Вы мало что можете с этим поделать.
  6. Я обнаружил, что http://www.wotsit.org особенно полезен для известные форматы файлов, чтобы помочь найти заголовки в файле .dat.
person Ed Marty    schedule 17.11.2008

Сначала сделайте резервную копию файла. Как только вы ограничите количество урона, которое вы можете нанести, просто покопайтесь, как предложил Эд.

person Jonathan Adelson    schedule 17.11.2008
comment
Я должен был упомянуть о резервном копировании в своем вопросе. Вероятно, это было бы одним из самых глупых действий, если бы вы копались в файле без резервной копии оригинала. Особенно, если вы понятия не имеете, что происходит. - person Thomas Owens; 17.11.2008
comment
:) Извиняюсь. Я понимаю, что это очевидно, но даже люди, проработавшие в компьютерной индустрии много лет, иногда об этом забывают. Время от времени полезно видеть напоминание. Удачи в реверс-инжиниринге! - person Jonathan Adelson; 17.11.2008
comment
Согласен, но это все равно происходит ежедневно. - person Toon Krijthe; 17.11.2008

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

person unwind    schedule 17.11.2008

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

person MSalters    schedule 17.11.2008

Другое дело — посмотреть на некоторые из распространенных методов сжатия, особенно на zip и gzip, и изучить их «сигнатуры». Большинство этих форматов являются «самоидентифицируемыми», поэтому, когда они начинают распаковывать, они могут быстро проверить правильность того, над чем они работают, в формате, который они понимают.

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

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

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

Это шаблоны, которые вы пытаетесь найти в файле.

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

person Will Hartung    schedule 17.11.2008