Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

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

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

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

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

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

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

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

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

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

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

    file myfile.ext
    

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

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

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

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

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

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

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

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

    Дополнительная информация: http://www.codeproject.com/KB/DLL/ Win32APIHooking_Trouble.aspx

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

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

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

    http://www.sweetscape.com/010editor/

    Попробуйте открыть его в шестнадцатеричном редакторе и проанализировать.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top