Skip to main content

Dump and inspect Java Object Serialization (0xAC 0xED) streams and RMI packets in human-readable form.

Project description

DeACED

CI License: MIT Python

Dump and inspect Java Object Serialization (0xAC 0xED) streams — and Java RMI packet contents — in a clear, human-readable, hierarchical form.

DeACED (a nod to the AC ED stream magic, and to de-serialization) is a small, dependency-free Python library and CLI. It is a port of SerializationDumper by Nicky Bloor, with several correctness fixes (see NOTICE).

Install

pip install deaced            # once published
# or from source:
pip install .

CLI

deaced -r dump.bin                 # raw serialized file
cat dump.bin | deaced -r -         # from stdin
deaced -x aced0005740004414243...  # hex on the command line
deaced -f hexdump.txt              # file of hex-ascii bytes
deaced -r dump.bin --offsets       # prefix each line with '@<byte-offset>|'
deaced -r dump.bin -o out.txt      # write to a file
deaced -r dump.bin -F json         # structured, machine-readable JSON
deaced -r dump.bin -F pretty       # compact, human-readable data tree

Example:

$ deaced -x aced0005740004414243447071007e0000

STREAM_MAGIC - 0xac ed
STREAM_VERSION - 0x00 05
Contents
  TC_STRING - 0x74
    newHandle 0x00 7e 00 00
    Length - 4 - 0x00 04
    Value - ABCD - 0x41424344
  TC_NULL - 0x70
  TC_REFERENCE - 0x71
    Handle - 8257536 - 0x00 7e 00 00

Library

from deaced import dump, parse

data = open("dump.bin", "rb").read()

print(dump(data))                       # text dump (default)
print(dump(data, offsets=True))         # with '@<offset>|' prefixes
print(dump(data, format="json"))        # structured JSON
print(dump(data, format="pretty"))      # compact human-readable tree

tree = parse(data)                      # the semantic AST (deaced.model.Stream)

Why a port?

Removes the JVM dependency (the original is a Java jar), runs anywhere Python does, integrates into Python tooling, and fixes real bugs in the original — most notably the (long)/(double) integer-shift bug (0xFFFFFFFFFFFFFFFF was shown as -4294967297 instead of -1). See NOTICE for the full list.

Safety

DeACED is built to inspect untrusted, attacker-controlled serialization streams (that is the usual reason to dump one), so:

  • It never deserializes Java objects. DeACED only reads and decodes the byte stream into a descriptive tree — it does not load classes, instantiate objects, or invoke readObject. The classic Java deserialization gadget chains cannot fire through it.
  • It fails cleanly on malformed input. Truncated or structurally-invalid streams raise a SerDumpError carrying the byte offset; negative lengths/counts are rejected rather than driving huge allocations; deeply nested streams raise an error instead of crashing the interpreter.

Resource use is still proportional to input size — apply your own limits when dumping data straight off the network. See SECURITY.md.

Development

pip install -e ".[dev]"
pytest            # tests (tiny synthetic fixtures)
ruff check .
ruff format --check .
mypy

Contributing

Contributions welcome — see CONTRIBUTING. The stream "rebuild" (-b) mode of the original is intentionally not ported (see NOTICE).

Credits & license

Python port by Alexander Gmar (@gmarav) — github.com/gmarav/DeACED. Based on SerializationDumper by Nicky Bloor (@NickstaDB). Licensed under the MIT License; port © 2026 Alexander Gmar, original © 2017 Nicky Bloor.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

deaced-0.1.0.tar.gz (46.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

deaced-0.1.0-py3-none-any.whl (29.8 kB view details)

Uploaded Python 3

File details

Details for the file deaced-0.1.0.tar.gz.

File metadata

  • Download URL: deaced-0.1.0.tar.gz
  • Upload date:
  • Size: 46.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for deaced-0.1.0.tar.gz
Algorithm Hash digest
SHA256 fd63dd69fca554d7a5fcecc6625a2f4f06afcb6a9b4b5fe0cb8765e5384ced22
MD5 a574b3deced2572f3b8c6e2dda0f1c04
BLAKE2b-256 97925b281e88103c9e8ddeb91f6b0243c7bf2dcb922e9b4877cc481cd0c73304

See more details on using hashes here.

Provenance

The following attestation bundles were made for deaced-0.1.0.tar.gz:

Publisher: publish.yml on gmarav/DeACED

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file deaced-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: deaced-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 29.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for deaced-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 fc4bb77c4627222c719fa4c7f3ff29d929fc95eda72c30a598a0b3c5d0af3210
MD5 875885c7bc7a311f795e0e4d3eb38ed2
BLAKE2b-256 075f265a7462f20a100420f8bceb387e943082c25d5689e7651e5cdccb51194c

See more details on using hashes here.

Provenance

The following attestation bundles were made for deaced-0.1.0-py3-none-any.whl:

Publisher: publish.yml on gmarav/DeACED

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page