Как проанализировать бинарный файл? - PullRequest
25 голосов
/ 22 июня 2009

У меня есть бинарный файл. Я не знаю, как он отформатирован, я только знаю, что он исходит из кода Delphi.

Существует ли способ анализа двоичного файла?

Существует ли какой-либо "шаблон" для анализа и десериализации двоичного содержимого файла с неизвестным форматом?

Ответы [ 13 ]

21 голосов
/ 22 июня 2009

Попробуйте это:

  1. Десериализация данных : проанализируйте, как он скомпилировал ваш exe (попробуйте File Analyzer ). Попробуйте десериализовать двоичные данные с помощью обнаруженного языка. Затем сериализуйте его в формате xml (language-indipendent), который понятен каждому языку программирования
  2. Анализ двоичных данных : попытаться сохранить различные версии файла с небольшими изменениями и использовать программу diff для анализа значения каждого бита с помощью шестнадцатеричного редактора. Используйте его в сочетании с методами бинарного взлома (например, Как взломать двоичный формат файла от Frans Faase )
  3. Обратный Инженер приложения : попробуйте получить код с помощью инструментов обратного инжиниринга для языка программирования, используемого для сборки приложения (находится в File Analyzer ). В противном случае используйте инструмент анализа дизассемблера, такой как IDA Pro Disassembler
11 голосов
/ 22 июня 2009

Для моего хобби-проекта мне пришлось перепроектировать некоторые старые игровые файлы. Мои подходы были:

  • Иметь хороший редактор шестнадцатеричных.
  • Поиск читаемых слов в двоичном файле. Обратите внимание, как их распределение. Если расстояние между ними постоянное, вы знаете, что это список.
  • Ищите 2-3 последовательных нуля. Может указывать значение int32.
  • Некоторые файлы могут быть указателями на файл.
  • Попробуйте определить повторяющиеся шаблоны в файле.
  • Просмотр большого количества C0-CF может указывать на сжатые данные RLE.
8 голосов
/ 22 июня 2009

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

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

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

5 голосов
/ 27 ноября 2016

Я разработал Гексинатор (Window & Linux) и Synalyze It! (macOS) именно для этой цели. Эти приложения позволяют вам видеть двоичные файлы, как в других шестнадцатеричных редакторах, но дополнительно вы можете создать «грамматику» со спецификой формата двоичного файла. Грамматика содержит все строительные блоки и используется для автоматического анализа файла.

Таким образом, вы можете сохранить полученные знания в процессе анализа и применить их к нескольким файлам одновременно. Вы также можете раскрасить фрагменты файлов в разные цвета для быстрого просмотра в шестнадцатеричном редакторе. Screen Shot of Synalyze It! Pro Результаты анализа отображаются в виде дерева, где вы также можете легко изменять файлы (применяя метод endianness и так далее).

5 голосов
/ 22 июня 2009

Если данные представляют сериализованные объекты Delphi, вам следует начать читать о процессе сериализации Delphi. Если это так, я думаю, что вам лучше всего загрузить его с помощью Delphi и продолжить анализ из IDE. Некоторые сведения о сериализации Delphi можно найти здесь .

РЕДАКТИРОВАТЬ: если файл содержит сериализованные объекты Delphi, то вы должны написать небольшую программу Delphi, которая загружает ее, и "преобразовать" данные самостоятельно в нечто нейтральное, например, XML. Если вам удастся сделать это, вы должны проверить и посмотреть, поддерживает ли Delphi сериализацию в XML. Затем вы можете получить доступ к этим объектам с любого языка.

5 голосов
/ 22 июня 2009

Программа "strings" из GNU binutils очень полезна. Он будет печатать строки печатаемых символов в файле, нередко давая понять, что содержит файл или программа.

3 голосов
/ 22 июня 2009

Если file не дает значимого ответа, вы можете попробовать TRiD от Marco Pontello, чтобы определить, хранятся ли ваши данные в известном формате.

3 голосов
/ 22 июня 2009

Если у вас есть доступ к приложению, которое создает файл, вы можете применить изменения к приложению, затем сохранить файл и просмотреть эффекты (имейте в виду, что числа, вероятно, хранятся в little endian ) :

  • Сначала создайте файл несколько раз. Если файлы не имеют двоичного значения, текущая дата / время, вероятно, хранятся в той области, где возникают различия.
  • Может быть, вы хотите повторить это с программным обеспечением, работающим в разных средах, чтобы увидеть, хранятся ли версии ОС и т. Д., Но это довольно необычно.
  • Далее вы можете попытаться изменить отдельные переменные и создать несколько файлов, которые отличаются только значением этой переменной. Это поможет вам определить, где хранится эта переменная.
  • Таким образом, вы также можете исключить переменные, которые не хранятся в файле: если вы измените их, но созданные файлы идентичны, они не будут сохранены.

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

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

3 голосов
/ 22 июня 2009

Команда unix "file" действительно полезна - я не знаю, есть ли что-нибудь подобное в windows. Вы запускаете это так:

file myfile.ext

И оно выдает текстовое описание, основанное на магических числах и данных, содержащихся в нем.

Возможно, он содержится в cygwin .

2 голосов
/ 23 июня 2009

Загрузите приложение Delphi и откройте его в бесплатной версии IDA Pro , найдите место, куда он записывает файл, и декодируйте, как оно записывает файл таким образом.

Если это не текст плана.

...