Инструменты, помогающие реконструировать форматы двоичных файлов

82

Какие инструменты доступны для декодирования неизвестных форматов двоичных данных?

Я знаю, что Hex Workshop и 010 Editor поддерживают структуры. В определенной степени это нормально для известного фиксированного формата, но их трудно использовать с чем-либо более сложным, особенно для неизвестных форматов. Думаю, я ищу модуль для языка сценариев или инструмент графического интерфейса с поддержкой сценариев.

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

В моих снах, возможно, даже автоматически определяю возможные смещения и длины на основе того, что я уже сказал системе!

Мат
источник
1
Не прямой ответ на ваш вопрос: у вас нет исполняемых файлов, которые работают с этими двоичными файлами неизвестного формата? Использование отладчика Ring3, такого как OllyDbg, для обратного проектирования, было бы намного проще, чем пытаться перебором форматов файлов.
Дэниел Слоф
О да, одно из приложений, которое я должен был добавить к вопросу «какую программу вы когда-либо хотели написать, но никогда не находили для этого времени»;)
devio
В некоторых случаях у меня есть исполняемые файлы, которые в определенной степени их обрабатывают. Иногда файлы представляют собой исполняемый код (но не в стандартном формате) и вполне могут содержать собственные процедуры декодирования. У нас может быть ограниченное количество фрагментов частичной документации в качестве отправной точки. В остальных случаях у меня ничего нет.
Mat

Ответы:

22

Вот несколько советов, которые приходят на ум:

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

Проведите статистический анализ по различным частям. Случайные данные, например, скажут вам, что эта часть, вероятно, сжата / зашифрована. Нули могут означать отступы между частями. Разбросанные нули могут означать целые значения или строки Unicode и так далее. Попробуйте определить различные отклонения. Попробуйте преобразовать части двоичного файла в 2- или 4-байтовые целые числа или в числа с плавающей запятой, распечатайте их и посмотрите, имеют ли они смысл. Напишите несколько функций, которые будут искать повторяющиеся или очень похожие части в данных, чтобы вы могли легко обнаружить заголовки.

Попробуйте найти как можно больше строк, попробуйте разные кодировки (строки c, строки паскаля, utf8 / 16 и т. Д.). Для этого есть несколько хороших инструментов (я думаю, что у Hex Workshop есть такой инструмент). Струны могут рассказать вам о многом.

Удачи!

Untrots
источник
Hachoir из ответа ниже - это именно такая структура. Он поставляется с предопределенным набором полей: различные типы строк, дат, битов, чисел с плавающей запятой, заполнения и т. Д. Встроенные синтаксические анализаторы могут использоваться в качестве примеров вместе с документами.
roolebo
15

Для Mac OS X есть новый отличный инструмент, который даже лучше моего iBored: Synaliyze It! ( http://www.synalysis.net/ )

По сравнению с iBored , он лучше подходит для неблокированных файлов, а также дает полный контроль над структурами, включая возможность создания сценариев (с Lua). И он также лучше визуализирует структуры.

Томас Темпельманн
источник
10

Тупни ; насколько мне известно, не доступен напрямую из Microsoft Research, но есть статья об этом инструменте, которая может быть интересна тем, кто хочет написать аналогичную программу (возможно, с открытым исходным кодом):

Tupni: Автоматический обратный инжиниринг входных форматов ( цифровая библиотека @ ACM )

Аннотация

Недавняя работа установила важность автоматического обратного проектирования спецификаций протокола или формата файла. Однако форматы, реконструированные предыдущими инструментами, упустили важную информацию, которая имеет решающее значение для приложений безопасности. В этой статье мы представляем Tupni, инструмент, который может реконструировать входной формат с богатым набором информации, включая последовательности записей, типы записей и ограничения ввода. Tupni может обобщить спецификацию формата для нескольких входов. Мы реализовали прототип Tupni и оценили его в 10 различных форматах: пяти форматах файлов (WMF, BMP, JPG, PNG и TIF) и пяти сетевых протоколах (DNS, RPC, TFTP, HTTP и FTP). Тупни идентифицировал все последовательности записей в тестовых входах. Мы также показываем, что, объединяя несколько файлов WMF, Tupni может получить более полную спецификацию формата для WMF. Кроме того, мы демонстрируем полезность Tupni, используя обширную информацию, которую он предоставляет для генерации сигнатур нулевых уязвимостей, что было невозможно с предыдущими инструментами обратного проектирования.

MaD70
источник
2
Ссылка на статью: research.microsoft.com/en-us/um/people/wdcui/papers/…
Стив Беннетт,
8

Мой собственный инструмент «iBored», который я выпустил совсем недавно, может частично с этим справиться. Я написал инструмент для визуализации и отладки форматов файловых систем (UDF, HFS, ISO9660, FAT и т. Д.), А также реализовал поиск, копирование, а позже даже поддержку структуры и шаблонов. Поддержка структур довольно проста, а шаблоны - это способ динамической идентификации структур.

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

Инструмент бесплатный, работает на всех платформах (Win, Mac, Linux), но, поскольку это личный инструмент, который я только что опубликовал, чтобы поделиться им, он не очень документирован.

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

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

Ссылка: домашняя страница iBored

Томас Темпельманн
источник
2
Похоже, чертовски хороший проект, чтобы присоединиться к нему ... Когда я работал исследователем антивирусов, это было бы очень удобно. Вместо этого я сделал все вручную ... Я скачаю и проверю. Спасибо вам за это, мне это пригодится. :)
LarryF
Похоже, начало хорошего инструмента для анализа двоичных файлов, но он все еще очень ориентирован на диск (512-байтовые блоки - это немного пустяк ...)
Стив Беннетт,
@SteveBennett: он любит кластеризовать файл в блоки равного размера, это правда, но можно легко изменить размер блока через меню. Кроме того, iBored может обрабатывать весь файл как один блок. Единственным недостатком является то, что у него будут проблемы с большими файлами, потому что он пытается показать все данные в одном прокручиваемом представлении блока, а затем как один блок, что может привести к проблемам с производительностью.
Thomas Tempelmann
6

Я до сих пор иногда использую старый шестнадцатеричный редактор под названием AX, Advanced Hex Editor. Похоже, что сейчас он в значительной степени исчез из Интернета, хотя Google все еще может найти его для вас. Последней известной мне версией была версия 3.4, но на самом деле я использовал только бесплатную для личного использования версию 2.1.

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

Я полагаю, что делать это на глаз - это полная противоположность автоматическому анализу, а графический режим не очень полезен для поиска и отслеживания смещений ...

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

меркатор
источник
URL мертв, может быть, он сейчас здесь: advanced-hex-editor-axe.en.softonic.com
Стив Беннетт
@Steve Спасибо за предупреждение. Это тот самый. Однако, несмотря на все обещания отсутствия вирусов, мой антивирусный сканер выдал мне предупреждение о вирусе при попытке его загрузки, поэтому я не стал беспокоиться. Я перефразировал свой ответ.
mercator
6

Существует Hachoir, библиотека Python для разбора любого двоичного формата на поля, а затем просмотра полей. В нем есть множество парсеров для распространенных форматов, но вы также можете написать собственные парсеры для своих файлов (например, при работе с кодом, который читает или записывает двоичные файлы, я обычно сначала пишу парсер Hachoir, чтобы иметь помощь отладчика). Однако похоже, что проект в настоящее время практически неактивен.

Оливер
источник
(Ссылка не работает)
jacobq 09
1

Мой проект icebuddha.com поддерживает это с помощью Python для описания формата в браузере.

0xdabbad00
источник
0

Отрезок моего ответа на аналогичный вопрос:

Один инструмент - WinOLS , который предназначен для интерпретации и редактирования двоичных компьютерных образов управления двигателем транспортного средства (в основном числовых данных в их справочных таблицах). Он поддерживает различные форматы с прямым порядком байтов (но не PDP, как мне кажется) и позволяет просматривать данные с разной шириной и смещением, определять области массива (карты) и визуализировать их в 2D или 3D со всевозможными вариантами масштабирования и смещения. Он также имеет эвристический / статистический автоматический поиск карт, который может сработать для вас.

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

синий сдвиг
источник