Есть же у некоторых форматов и другие отличительные особенности помимо заголовка - вот, например, PNG завершается концовкой IEND + имеет свою специфику кодирования битов и вставки того же CRC между их блоками.
Здесь ТСу, походу, нужна нейросетка определяющая вероятность того или иного формата. Существование оных сомнительно, но сейчас попробую поискать, тоже интересно.
Описанную вами задачу принято называть AFTI (Automated file type identification), по ней все еще клепают алгосики ученые, но нормального софта вроде не подвезли.
…умеющее определять известные форматы (e.g. PNG) без заголовков?
В такой формулировке задача не решается. Есть сигнатурный и шаблонный поиск (см. YARA). Но основной инструмент реверсера — по–прежнему собственный мозг и знания. Волшебного софта с кнопкой «сделать зашибись» всё ещё не изобрели.
UPD: Вот файл.
По энтропии видно, что файл несжатый (сравниваем размер с этим же файлом, затоптанным в .zip).
Наивное предположение — скорее всего сырые битмапы, в том формате, который принимает матрица дисплея (подсказка: поискать даташит).
И как это должно быть реализовано, без заголовков–то? Как должен выглядеть алгоритм, который бы угадывал, что «вот те 100500 байт в середине файла — это на самом деле сырой битмап, пожатый алгоритмом XXX и потом зашифрованный YYY с ключом ZZZ»?
Повторюсь, libastral.so ещё не изобрели. Если сигнатур известных форматов действительно не нашлось, я знаю только одну рабочую стратегию — смотрим глазками в хексредактор, вычленяем структуру, проверяем гипотезы. Рассматриваем контекст — что это за бинарник, для чего он, что может быть внутри.
Если есть живая железка — определяем архитектуру, читаем даташиты, ищем отладочный порт, пытаемся подцепится и поглядеть на содержимое памяти. Потом пытаемся точечно портить отдельные байтики и смотрим, что изменяется.
сырой битмап, пожатый алгоритмом XXX и потом зашифрованный YYY с ключом ZZZ»?
Что за дебильная привычка додумывать?!
Ещё раз: есть какие-то данные, и если их можно оперделить, то оперделить и показать процентную вероятность возможного формата данных для дальнейшего диггинга. Всё!
Естественно для пожатых/зашифрованных данных это работать не будет, но по отдельным сигнатурам без заголовка можно предположить содержимое.
Ладно просто побайтно просматривать, но "примерять" 100500 форматов — это слишком.