Как анализировать двоичный файл?
У меня есть двоичный файл. Я не знаю, как это отформатировано, я знаю, что это только код delphi.
Существует ли какой-либо способ анализа двоичного файла?
Существует ли какой-либо "шаблон" для анализа и десериализации двоичного содержимого файла с неизвестным форматом?
Ответы
Ответ 1
Попробуйте следующее:
- Удалить данные: проанализируйте, как он скомпилировал ваш exe (попробуйте File Analyzer). Попробуйте десериализовать двоичные данные с открытым языком. Затем сериализуйте его в формате XML (независимо от языка), который может понимать каждый язык программирования.
- Анализ двоичных данных: старайтесь сохранять различные версии файла с небольшими вариациями и использовать программу diff для анализа значения каждого бита с помощью шестнадцатеричного редактора. Используйте его в сочетании с бинарными методами взлома (например, Как взломать формат двоичного файла от Frans Faase)
- Reverse Engineer приложение: попробуйте получить код с использованием инструментов обратного проектирования для языка программирования, используемого для сборки приложения (найдено с File Анализатор). В противном случае используйте инструмент анализа дизассемблера, например IDA Pro Disassembler
Ответ 2
Для моего проекта по хобби мне пришлось перепроектировать некоторые старые игровые файлы. Мои подходы:
- Имейте хороший редактор hex.
- Ищите читаемые слова в двоичном файле. Обратите внимание, как их распределение. Если расстояние между ними постоянное, вы знаете, что это список.
- Найдите 2-3 последовательных нули. Может указывать значение int32.
- Некоторые слова могут быть указателями в файл.
- Попробуйте идентифицировать повторяющиеся шаблоны в файле.
- Увидев много C0-CF, можно указать сжатые данные RLE.
Ответ 3
Обратное проектирование двоичного файла, когда у вас есть представление о том, что он представляет, является очень трудоемким процессом. Если вы не знаете, что это такое, это будет еще сложнее.
Возможно, однако, но у вас есть достаточно веская причина для этого.
Первым шагом было бы открыть его в шестнадцатеричном редакторе по вашему выбору и посмотреть, можете ли вы найти какой-либо текст на английском языке, чтобы указать вам в направлении того, что файл должен представлять. Оттуда, Google "Обратные инженерные двоичные файлы", есть гораздо более знающие люди, чем я, которые написали руководства об этом.
Ответ 4
Программа "строк" из GNU binutils очень полезна. Он будет печатать строки печатаемых символов в файле, нередко давая ключ к тому, что содержит файл или программа.
Ответ 5
Если данные представляют собой сериализованные объекты Delphi, вы должны начать чтение о процессе сериализации Delphi. Если это так, я думаю, что лучше всего загрузить его с помощью Delphi и продолжить анализ из среды IDE. Некоторые сведения о сериализации Delphi можно найти здесь.
EDIT: если файл содержит сериализованные объекты delphi, тогда вы должны написать небольшую программу delphi, которая загружает ее, и "конвертировать" данные самостоятельно в нечто нейтральное, например, xml. Если вам удастся это сделать, вы должны проверить и посмотреть, поддерживает ли delphi сериализацию в xml. Затем вы можете получить доступ к этим объектам с любого языка.
Ответ 6
Если у вас есть доступ к приложению, которое создает файл, вы можете применить изменения к приложению, затем сохранить файл и посмотреть эффекты (помните, что числа, вероятно, хранятся в немного endian):
- Сначала создайте файл повторно. Если файлы не являются двоичными, текущая дата/время, вероятно, сохраняется в области, где встречаются различия hte.
- Возможно, вы хотите повторить это с помощью программного обеспечения, запущенного в разных средах, чтобы проверить, сохранена ли версия ОС и т.д., но это довольно необычно.
- Далее вы можете попытаться изменить отдельные переменные и создать несколько файлов, которые отличаются только значением этой переменной. Это поможет вам определить, где хранится эта переменная.
- Таким образом вы также можете исключить переменные, которые не хранятся в файле: если вы их измените, но созданные файлы идентичны, они не сохраняются.
Чтобы проверить гипотезы, которые вы разработали с помощью приведенных выше шагов, отредактируйте один из файлов и попросите его прочитать его.
Если у вас нет доступа к самому приложению, я предлагаю вам забыть об этом и найти другой способ решить вашу проблему. Существует очень высокая вероятность того, что он будет быстрее...
Ответ 7
Если file
не дает значимого ответа, вы можете попробовать TRiD от Marco Pontello, чтобы определить, являются ли ваши данные хранится в известном формате.
Ответ 8
Знаете ли вы программу, которая ее использует? Если это так, вы можете подключить эти программы к файловой функции и получить представление о том, какие данные записываются, размер данных и где.
Дополнительная информация: http://www.codeproject.com/KB/DLL/Win32APIHooking_Trouble.aspx
Ответ 9
Команда unix "file" действительно полезна - я не знаю, есть ли что-нибудь подобное в окнах. Вы запускаете его следующим образом:
file myfile.ext
И он выплескивает текстовое описание, основанное на магических числах и содержащихся в нем данных.
Возможно, он содержится в cygwin.
Ответ 10
Получите приложение Delphi и откройте его в бесплатную версию IDA Pro и найдите, где он пишет файл, и расшифруйте, как он пишет файл таким образом.
Если он не планирует текст.
Ответ 11
Я разработал Hexinator (Window и Linux) и Synalyze It! (macOS) именно для этой цели. Эти приложения позволяют вам видеть двоичные файлы, как в других шестнадцатеричных редакторах, но дополнительно вы можете создать "грамматику" со спецификацией формата двоичного файла. Грамматика содержит все строительные блоки и используется для автоматического анализа файла.
Таким образом, вы можете сохранить полученные знания в анализе и применить его одновременно к нескольким файлам. Вы также можете кодировать биты и фрагменты форматов файлов для быстрого обзора в шестнадцатеричном редакторе.
Результаты анализа отображаются в древовидном представлении, где вы также можете легко изменять файлы (применяя endianness et cetera).
Ответ 12
В отличие от традиционных шестнадцатеричных редакторов, которые отображают только шестнадцатеричные байты файла, редактор 010 также может анализировать файл в иерархической структуре с использованием двоичного шаблона. Результаты запуска двоичного шаблона гораздо проще понять и отредактировать, чем использовать только шестнадцатеричные байты.
http://www.sweetscape.com/010editor/
Ответ 13
Попробуйте открыть его в шестнадцатеричном редакторе и проанализировать.