Что такое формат файла SER?
Файл .ser содержит поток сериализованных объектов Java - двоичную кодировку одного или нескольких объектов Java, созданную с помощью ObjectOutputStream и считываемую обратно с помощью ObjectInputStream. Формат был представлен в Java 1.1 в 1997 году и определен в спецификации Java Object Serialization.
Каждый валидный файл .ser начинается с 4-байтовой магической последовательности AC ED 00 05: байты 0-1 содержат STREAM_MAGIC (0xACED), а байты 2-3 - STREAM_VERSION (0x0005). Поток кодирует дескриптор класса каждого объекта, поля и вложенные данные с использованием типизированных маркеров блоков: TC_OBJECT (0x73), TC_CLASS (0x76), TC_ARRAY (0x75), TC_STRING (0x74) и TC_NULL (0x70).
Сериализация широко использовалась для кэширования состояния приложений, передачи объектов между JVM и сохранения данных конфигурации. Однако десериализация Java является известной уязвимостью безопасности - специально созданные потоки могут использовать «цепочки гаджетов» (gadget chains) в classpath для удаленного выполнения кода. В Java 9 был представлен ObjectInputFilter для ограничения классов, которые могут быть десериализованы, а современные рекомендации по Java настоятельно не рекомендуют использовать файлы .ser для недоверенных данных.
Предпочтительные современные альтернативы включают JSON (через Jackson или Gson), Protocol Buffers или Kryo. GeneMapper (Thermo Fisher Scientific) использует файлы .ser для данных биоинформатических проектов. Утилита SerializationDumper позволяет проверять содержимое .ser без его выполнения.
Безопасность и защита
РИСК: HIGHДесериализация Java является одной из самых критических поверхностей атаки в приложениях Java (исторически входит в OWASP Top 10). Открытие недоверенного файла .ser в уязвимом приложении может привести к выполнению произвольного кода через цепочки гаджетов (например, эксплойт Apache Commons Collections 2015 года). Конечным пользователям следует открывать файлы .ser только из доверенных источников и в предназначенных для них приложениях. Для анализа неизвестных файлов .ser используйте SerializationDumper (статический дамп, не выполняет код) вместо десериализации в живой JVM.
Детали формата
в двух словах- Файл проекта GeneMapper - Программное обеспечение Applied Biosystems/Life Technologies GeneMapper использует .ser в качестве проприетарного контейнера данных проекта.
- Общий кэш данных приложений - Любое приложение Java может сериализовать произвольные объекты в .ser; содержимое полностью зависит от конкретного приложения.
Программы, открывающие файлы SER
Технические подробности
глубокая спецификация| Магические байты | AC ED 00 05 по смещению 0 - STREAM_MAGIC (0xACED), за которым следует STREAM_VERSION (0x0005) |
| Кодировка | Бинарная (Binary), big-endian |
| MIME-тип | application/x-java-serialized-object |
| API сериализации | java.io.ObjectOutputStream (запись) / java.io.ObjectInputStream (чтение); классы должны реализовывать java.io.Serializable |
| Версия протокола | Протокол сериализации версии 2 (версия потока 5), стабилен со времен Java 1.2 |
| Версионность классов | Каждый класс внедряет serialVersionUID; несоответствие версий вызывает InvalidClassException во время десериализации |
| Маркеры содержимого | TC_OBJECT (0x73), TC_CLASS (0x76), TC_ARRAY (0x75), TC_STRING (0x74), TC_NULL (0x70) |
| Риск безопасности | Известный вектор атак через цепочки гаджетов десериализации; Java 9+ смягчает риски через белые списки классов ObjectInputFilter |
| Типичный размер | От нескольких байт для простых объектов до сотен МБ для больших графов сериализованных объектов |
| Переносимость платформы | Читается любой JVM на Windows, Linux или macOS; не переносим за пределы экосистемы Java |
| Сжатие потока | Не сжимается на уровне формата; обертка GZIPOutputStream опционально применяется на уровне приложения |
| Целостность | Нет встроенной контрольной суммы; целостность обеспечивается подписью на уровне приложения или защищенным транспортом |
| Известное приложение | GeneMapper (Thermo Fisher Scientific) использует .ser для файлов биоинформатических проектов и данных |
| Выпущен | 1997 (Java 1.1, JDK 1.1) |
| Последняя версия | Stream version 5 (serialization protocol version 2, since Java 1.2) |
| Открыть стандартное | Да · без роялти |
| Спецификация | docs.oracle.com |
Конвертации SER
Вопросы и ответы сообщества
спрошено пользователямиВопросов пока нет - станьте первым, кто спросит о файлах SER.