O que é o formato de ficheiro SER?
Um arquivo .ser contém um fluxo de objeto serializado Java - uma codificação binária de um ou mais objetos Java produzidos por ObjectOutputStream e lidos de volta por ObjectInputStream. O formato foi introduzido com o Java 1.1 em 1997 e é definido na Especificação de Serialização de Objetos Java.
Cada arquivo .ser válido começa com a sequência mágica de 4 bytes AC ED 00 05: os bytes 0-1 contêm STREAM_MAGIC (0xACED) e os bytes 2-3 contêm STREAM_VERSION (0x0005). O fluxo codifica o descritor de classe de cada objeto, campos e dados aninhados usando marcadores de bloco tipados: TC_OBJECT (0x73), TC_CLASS (0x76), TC_ARRAY (0x75), TC_STRING (0x74) e TC_NULL (0x70).
A serialização foi amplamente utilizada para armazenar em cache o estado da aplicação, passar objetos entre JVMs e persistir dados de configuração. No entanto, a desserialização Java é uma vulnerabilidade de segurança conhecida - fluxos criados de forma maliciosa podem explorar cadeias de dispositivos («gadget chains») no classpath para obter execução remota de código. O Java 9 introduziu o ObjectInputFilter para restringir quais classes podem ser desserializadas, e as orientações modernas de Java desencorajam fortemente o uso de arquivos .ser para dados não confiáveis.
Alternativas modernas preferidas incluem JSON (via Jackson ou Gson), Protocol Buffers ou Kryo. O GeneMapper (Thermo Fisher Scientific) usa arquivos .ser para dados de projetos de bioinformática. O utilitário SerializationDumper pode inspecionar o conteúdo de arquivos .ser sem executá-los.
Segurança e proteção
RISCO: HIGHA desserialização Java é uma das superfícies de ataque de maior gravidade em aplicações Java (historicamente no OWASP Top 10). Abrir um arquivo .ser não confiável em uma aplicação vulnerável pode executar código arbitrário via cadeias de dispositivos (cf. exploit Apache Commons Collections, 2015). Os usuários finais devem apenas abrir arquivos .ser de fontes confiáveis e em sua aplicação pretendida. Para analisar arquivos .ser desconhecidos: use o SerializationDumper (despejo estático, não executa a carga útil) em vez de desserializá-los em uma JVM ativa.
Detalhes do formato
em resumo- Arquivo de Projeto GeneMapper - O software Applied Biosystems/Life Technologies GeneMapper usa .ser como seu contêiner proprietário de dados de projeto.
- Cache de dados de aplicação genérica - Qualquer aplicação Java pode serializar objetos arbitrários para .ser; o conteúdo é inteiramente específico da aplicação.
Programas que abrem arquivos SER
Detalhes técnicos
especificação profunda| Bytes mágicos | AC ED 00 05 no deslocamento 0 - STREAM_MAGIC (0xACED) seguido por STREAM_VERSION (0x0005) |
| Codificação | Binário, big-endian |
| Tipo MIME | application/x-java-serialized-object |
| API de Serialização | java.io.ObjectOutputStream (escrita) / java.io.ObjectInputStream (leitura); as classes devem implementar java.io.Serializable |
| Versão do protocolo | Protocolo de serialização versão 2 (versão de fluxo 5), estável desde Java 1.2 |
| Versionamento de classe | Cada classe incorpora um serialVersionUID; a incompatibilidade de versão lança InvalidClassException no momento da desserialização |
| Marcadores de conteúdo | TC_OBJECT (0x73), TC_CLASS (0x76), TC_ARRAY (0x75), TC_STRING (0x74), TC_NULL (0x70) |
| Risco de segurança | Vetor de ataque conhecido por cadeia de dispositivos de desserialização; Java 9+ mitiga via lista de permissões de classe ObjectInputFilter |
| Tamanho típico | Alguns bytes para objetos simples até centenas de MB para grandes grafos de objetos serializados |
| Portabilidade de plataforma | Legível por qualquer JVM no Windows, Linux ou macOS; não é portátil fora do ecossistema Java |
| Compressão de fluxo | Não compactado no nível do formato; o encapsulamento GZIPOutputStream é aplicado opcionalmente na camada de aplicação |
| Integridade | Sem soma de verificação integrada; a integridade é fornecida por assinatura na camada de aplicação ou transporte seguro |
| Aplicação conhecida | GeneMapper (Thermo Fisher Scientific) usa .ser para arquivos de dados e projetos de bioinformática |
| Lançado | 1997 (Java 1.1, JDK 1.1) |
| Versão mais recente | Stream version 5 (serialization protocol version 2, since Java 1.2) |
| Padrão aberto | Sim · livre de royalties |
| Especificação | docs.oracle.com |
Conversões de SER
Perguntas e Respostas da Comunidade
perguntado por usuáriosAinda não há perguntas - seja o primeiro a perguntar sobre arquivos SER.