¿Qué es el formato de archivo SER?
Un archivo .ser contiene un flujo de objetos serializados de Java (Java serialized object stream): una codificación binaria de uno o más objetos Java producidos por ObjectOutputStream y leídos de nuevo por ObjectInputStream. El formato se introdujo con Java 1.1 en 1997 y se define en la Especificación de Serialización de Objetos de Java.
Cada archivo .ser válido comienza con la secuencia mágica de 4 bytes AC ED 00 05: los bytes 0-1 contienen STREAM_MAGIC (0xACED) y los bytes 2-3 contienen STREAM_VERSION (0x0005). El flujo codifica el descriptor de clase de cada objeto, los campos y los datos anidados utilizando marcadores de bloque tipados: TC_OBJECT (0x73), TC_CLASS (0x76), TC_ARRAY (0x75), TC_STRING (0x74) y TC_NULL (0x70).
La serialización se utilizó ampliamente para el almacenamiento en caché del estado de las aplicaciones, el paso de objetos entre JVM y la persistencia de datos de configuración. Sin embargo, la deserialización de Java es una vulnerabilidad de seguridad conocida: los flujos creados de forma maliciosa pueden explotar cadenas de dispositivos («gadget chains») en el classpath para lograr la ejecución remota de código. Java 9 introdujo ObjectInputFilter para restringir qué clases pueden deserializarse, y las directrices modernas de Java desaconsejan encarecidamente el uso de archivos .ser para datos no confiables.
Las alternativas modernas preferidas incluyen JSON (a través de Jackson o Gson), Protocol Buffers o Kryo. GeneMapper (Thermo Fisher Scientific) utiliza archivos .ser para datos de proyectos de bioinformática. La utilidad SerializationDumper puede inspeccionar el contenido de los archivos .ser sin ejecutarlos.
Seguridad y protección
RIESGO: HIGHLa deserialización de Java es una de las superficies de ataque de mayor gravedad en las aplicaciones Java (históricamente en el Top 10 de OWASP). Abrir un archivo .ser no confiable en una aplicación vulnerable puede ejecutar código arbitrario a través de cadenas de dispositivos (véase el exploit Apache Commons Collections de 2015). Los usuarios finales solo deben abrir archivos .ser de fuentes confiables y en su aplicación prevista. Para analizar archivos .ser desconocidos: use SerializationDumper (volcado estático, no ejecuta la carga útil) en lugar de deserializarlos en una JVM activa.
Detalles del formato
en pocas palabras- Archivo de proyecto GeneMapper - El software GeneMapper de Applied Biosystems/Life Technologies utiliza .ser como su contenedor de datos de proyecto propietario.
- Caché de datos de aplicación genérica - Cualquier aplicación Java puede serializar objetos arbitrarios a .ser; el contenido depende totalmente de la aplicación.
Programas que abren archivos SER
Detalles técnicos
especificación profunda| Bytes mágicos | AC ED 00 05 en el desplazamiento 0 - STREAM_MAGIC (0xACED) seguido de STREAM_VERSION (0x0005) |
| Codificación | Binario, big-endian |
| Tipo MIME | application/x-java-serialized-object |
| API de serialización | java.io.ObjectOutputStream (escritura) / java.io.ObjectInputStream (lectura); las clases deben implementar java.io.Serializable |
| Versión del protocolo | Protocolo de serialización versión 2 (versión de flujo 5), estable desde Java 1.2 |
| Versionado de clases | Cada clase incrusta un serialVersionUID; la discrepancia de versiones lanza InvalidClassException al momento de la deserialización |
| Marcadores de contenido | TC_OBJECT (0x73), TC_CLASS (0x76), TC_ARRAY (0x75), TC_STRING (0x74), TC_NULL (0x70) |
| Riesgo de seguridad | Vector de ataque conocido mediante cadenas de dispositivos de deserialización; Java 9+ lo mitiga mediante listas de permitidos de clases con ObjectInputFilter |
| Tamaño típico | Desde unos pocos bytes para objetos simples hasta cientos de MB para grandes grafos de objetos serializados |
| Portabilidad de plataforma | Legible por cualquier JVM en Windows, Linux o macOS; no es portable fuera del ecosistema Java |
| Compresión del flujo | Sin comprimir a nivel de formato; el envoltorio GZIPOutputStream se aplica opcionalmente en la capa de aplicación |
| Integridad | Sin suma de comprobación integrada; la integridad se proporciona mediante la firma en la capa de aplicación o el transporte seguro |
| Aplicación conocida | GeneMapper (Thermo Fisher Scientific) utiliza .ser para archivos de datos y proyectos de bioinformática |
| Lanzado | 1997 (Java 1.1, JDK 1.1) |
| Última versión | Stream version 5 (serialization protocol version 2, since Java 1.2) |
| Estándar abierto | Sí · libre de regalías |
| Especificación | docs.oracle.com |
Conversiones de SER
Preguntas y respuestas de la comunidad
preguntado por usuariosAún no hay preguntas; sea el primero en preguntar sobre los archivos SER.