Skip to main content

Crate java_serialization

Crate java_serialization 

Source
Expand description

Java object serialization stream parser.

Parses Java serialization streams according to the Java Object Serialization Specification. Supports all type codes (TC_OBJECT, TC_ARRAY, TC_CLASSDESC, TC_ENUM, TC_PROXYCLASSDESC, etc.), block data, annotations, and handle references.

Automatically detects and handles JDK 8u20 exploit payloads that omit a TC_ENDBLOCKDATA byte, retrying with the missing byte inserted.

§Example

use java_serialization::parse_serialization_stream;

// Minimal valid Java serialization stream: magic 0xACED, version 5
let data: &[u8] = &[0xAC, 0xED, 0x00, 0x05];
let (remaining, stream) = parse_serialization_stream(data).unwrap();
assert!(remaining.is_empty());
assert_eq!(stream.version, 5);

Structs§

FieldValueSet
Set of field values for a class.
NewArray
TC_ARRAY: new array.
NewClass
TC_CLASS: reference to a class.
NewEnum
TC_ENUM: new enum constant.
NewObject
TC_OBJECT: new object.
NormalClassDesc
TC_CLASSDESC: normal class descriptor.
ObjectAnnotation
Object annotation: contents between the class data and TC_ENDBLOCKDATA.
ObjectFieldDesc
Object field descriptor.
PrimitiveFieldDesc
Primitive field descriptor.
ProxyClassDesc
TC_PROXYCLASSDESC: proxy class descriptor.
SerializationStream
Parsed Java serialization stream.
StreamString
TC_STRING / TC_LONGSTRING.

Enums§

AnnotationElement
Elements in class annotation (between classDescInfo and superClassDesc).
ArrayValues
Array values based on component type.
BlockData
Block data.
ClassData
Class data for one class level in an object.
ClassDesc
Class descriptor: either a normal class or a proxy class.
ClassDescRef
Reference to a class descriptor - either inline or a back-reference.
ContentElement
Top-level content elements in a serialization stream.
FieldDesc
Field descriptor in a class descriptor.
FieldValue
A single field value.
StreamObject
An object in the serialization stream.

Constants§

BASE_WIRE_HANDLE
First wire handle to be assigned.
SC_BLOCK_DATA
Externalizable data written in Block Data mode.
SC_ENUM
Class is an enum type.
SC_EXTERNALIZABLE
Class is Externalizable.
SC_SERIALIZABLE
Class is Serializable.
SC_WRITE_METHOD
Serializable class defines writeObject method.
STREAM_MAGIC
Magic number written to the stream header.
STREAM_VERSION
Version number written to the stream header.
TC_ARRAY
New Array.
TC_BLOCKDATA
Block of optional data (short).
TC_BLOCKDATALONG
Long block data.
TC_CLASS
Reference to Class.
TC_CLASSDESC
New Class Descriptor.
TC_ENDBLOCKDATA
End of optional block data blocks.
TC_ENUM
New Enum constant.
TC_EXCEPTION
Exception during write.
TC_LONGSTRING
Long string.
TC_NULL
Null object reference.
TC_OBJECT
New Object.
TC_PROXYCLASSDESC
New Proxy Class Descriptor.
TC_REFERENCE
Reference to an object already written into the stream.
TC_RESET
Reset stream context.
TC_STRING
New String.

Functions§

parse_serialization_stream
Parse a Java serialization stream.
preprocess_jdk8u20
Preprocess JDK 8u20 serialization data by inserting a missing TC_ENDBLOCKDATA.