iPaf
@iPaf
Android Developer

Как разобрать бинарный файл, если не знаешь его структуру?

Всем привет! Имеется файл, о котором известно только то, что он сохраняется, как бинарный (по официальным данным). Необходимо в нем менять кусок данных, но нет информации о том, в каком именно месте (с какой позиции) начинать изменять данные.
Собственно вопросов несколько:
1. Если файл сохраняется как бинарный, он же не должен быть читаемым с помощью обычным текстовых редакторов вроде блокнота?
2. Если читаемый текст все-таки присутствует, говорит ли это о том, что файл сохранен не как бинарный?
3. Можно ли изменять данные в файле, не зная ничего о его структуре, вроде обычного Replace в текстовом редакторе?
4. Не повредится ли файл, если он сохранялся не как текст, а, например, сериализацией класса или структуры? На сколько знаю, при сериализации класса в файл обычно дописывается всякого рода "служебная" информация в виде дополнительных пробелов между данными и прочими нечитаемыми символами. И в случае удаления такого рода "информации" файл повредится и не откроется, или откроется не так, как должен.
5. Существуют ли анализаторы, которые могут создать программную структуру по данным, с помощью которой производилось сохранение? Да, знаю, что это нереально, но может есть.
  • Вопрос задан
  • 2913 просмотров
Пригласить эксперта
Ответы на вопрос 1
1. Блокнот не отображает специальные знаки. Для просмотра бинарных файлов выбирают специальные просмотрщики/редакторы, отображающие 16-ричные коды. Блокнот при сохранении бинарного файла портит его структуру, добавляя символы для перевода каретки строки.
2. Нет, наличие читаемых последовательностей знаков автоматически не означает что файл бинарный. Просто это может облегчить анализ файла.
3. Нет, не стоит так делать.
4. Да, повредится структура.
5. Мне самому интересно узнать есть ли такие. Есть ПО, способное анализировать содержимое файла и определять какого он формата из списка известных. Если формат открыт и есть для него документация, то ничего не мешает создать ПО для генерации кода. Например, библиотека protobuf позволяет, если структура файла описана на языке protobuf.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы