Какие инструменты доступны для декодирования неизвестных форматов двоичных данных?
Я знаю, что Hex Workshop и 010 Editor поддерживают структуры. В определенной степени это нормально для известного фиксированного формата, но их трудно использовать с чем-либо более сложным, особенно для неизвестных форматов. Думаю, я ищу модуль для языка сценариев или инструмент графического интерфейса с поддержкой сценариев.
Например, я хотел бы иметь возможность найти структуру в блоке данных из ограниченной известной информации, возможно, магического числа. Как только я нашел структуру, следую известным словам длины и смещения, чтобы найти другие структуры. Затем повторите это рекурсивно и итеративно, где это имеет смысл.
В моих снах, возможно, даже автоматически определяю возможные смещения и длины на основе того, что я уже сказал системе!
Ответы:
Вот несколько советов, которые приходят на ум:
По моему опыту, интерактивные языки сценариев (я использую Python) могут мне очень помочь. Вы можете написать простую структуру для работы с двоичными потоками и некоторыми простыми алгоритмами. Затем вы можете написать сценарии, которые будут брать ваш двоичный файл и проверять различные вещи. Например:
Проведите статистический анализ по различным частям. Случайные данные, например, скажут вам, что эта часть, вероятно, сжата / зашифрована. Нули могут означать отступы между частями. Разбросанные нули могут означать целые значения или строки Unicode и так далее. Попробуйте определить различные отклонения. Попробуйте преобразовать части двоичного файла в 2- или 4-байтовые целые числа или в числа с плавающей запятой, распечатайте их и посмотрите, имеют ли они смысл. Напишите несколько функций, которые будут искать повторяющиеся или очень похожие части в данных, чтобы вы могли легко обнаружить заголовки.
Попробуйте найти как можно больше строк, попробуйте разные кодировки (строки c, строки паскаля, utf8 / 16 и т. Д.). Для этого есть несколько хороших инструментов (я думаю, что у Hex Workshop есть такой инструмент). Струны могут рассказать вам о многом.
Удачи!
источник
Для Mac OS X есть новый отличный инструмент, который даже лучше моего iBored: Synaliyze It! ( http://www.synalysis.net/ )
По сравнению с iBored , он лучше подходит для неблокированных файлов, а также дает полный контроль над структурами, включая возможность создания сценариев (с Lua). И он также лучше визуализирует структуры.
источник
Тупни ; насколько мне известно, не доступен напрямую из Microsoft Research, но есть статья об этом инструменте, которая может быть интересна тем, кто хочет написать аналогичную программу (возможно, с открытым исходным кодом):
Tupni: Автоматический обратный инжиниринг входных форматов ( цифровая библиотека @ ACM )
источник
Мой собственный инструмент «iBored», который я выпустил совсем недавно, может частично с этим справиться. Я написал инструмент для визуализации и отладки форматов файловых систем (UDF, HFS, ISO9660, FAT и т. Д.), А также реализовал поиск, копирование, а позже даже поддержку структуры и шаблонов. Поддержка структур довольно проста, а шаблоны - это способ динамической идентификации структур.
Все это программируется на диалекте Visual BASIC, что позволяет вам проверять значения, читать определенные блоки и все такое.
Инструмент бесплатный, работает на всех платформах (Win, Mac, Linux), но, поскольку это личный инструмент, который я только что опубликовал, чтобы поделиться им, он не очень документирован.
Однако, если вы хотите попробовать и оставить отзыв, я могу добавить больше полезных функций.
Я бы даже открыл его исходный код, но поскольку он написан на REALbasic , я сомневаюсь, что многие люди присоединятся к такому проекту.
Ссылка: домашняя страница iBored
источник
Я до сих пор иногда использую старый шестнадцатеричный редактор под названием AX, Advanced Hex Editor. Похоже, что сейчас он в значительной степени исчез из Интернета, хотя Google все еще может найти его для вас. Последней известной мне версией была версия 3.4, но на самом деле я использовал только бесплатную для личного использования версию 2.1.
Его наиболее интересная функция, которую я больше всего использовал для расшифровки различных игровых и графических форматов, - это режим графического просмотра. Это в основном просто показывает вам файл, каждый байт которого превращен в пиксель с цветовой кодировкой. И как бы просто это ни звучало, это в разы облегчало мои попытки обратного проектирования.
Я полагаю, что делать это на глаз - это полная противоположность автоматическому анализу, а графический режим не очень полезен для поиска и отслеживания смещений ...
В более поздней версии есть некоторые функции, которые звучат так, как будто они могут соответствовать вашим потребностям (скрипты, поиск регулярности, генератор грамматики), но я понятия не имею, насколько они хороши.
источник
Существует Hachoir, библиотека Python для разбора любого двоичного формата на поля, а затем просмотра полей. В нем есть множество парсеров для распространенных форматов, но вы также можете написать собственные парсеры для своих файлов (например, при работе с кодом, который читает или записывает двоичные файлы, я обычно сначала пишу парсер Hachoir, чтобы иметь помощь отладчика). Однако похоже, что проект в настоящее время практически неактивен.
источник
Мой проект icebuddha.com поддерживает это с помощью Python для описания формата в браузере.
источник
Отрезок моего ответа на аналогичный вопрос:
Один инструмент - WinOLS , который предназначен для интерпретации и редактирования двоичных компьютерных образов управления двигателем транспортного средства (в основном числовых данных в их справочных таблицах). Он поддерживает различные форматы с прямым порядком байтов (но не PDP, как мне кажется) и позволяет просматривать данные с разной шириной и смещением, определять области массива (карты) и визуализировать их в 2D или 3D со всевозможными вариантами масштабирования и смещения. Он также имеет эвристический / статистический автоматический поиск карт, который может сработать для вас.
Это коммерческий инструмент, но бесплатная демоверсия позволит вам делать все, кроме сохранения изменений в двоичном файле и использования функций управления движком, которые вам не нужны.
источник