Skip to main content

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.

Metadata

Release files for deaced 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for deaced 0.1.0
File Size Uploaded
deaced-0.1.0.tar.gz 46.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for deaced 0.1.0
File Interpreter ABI Platform
deaced-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 76.5 kB

Release files / deaced-0.1.0.tar.gz

Download URL deaced-0.1.0.tar.gz
Size 46.7 kB
Tags Source
SHA-256 checksum
How to use checksums
fd63dd69fca554d7a5fcecc6625a2f4f06afcb6a9b4b5fe0cb8765e5384ced22
BLAKE2b-256 checksum
How to use checksums
97925b281e88103c9e8ddeb91f6b0243c7bf2dcb922e9b4877cc481cd0c73304
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 27, 2026.

Transparency log

Release files / deaced-0.1.0-py3-none-any.whl

Download URL deaced-0.1.0-py3-none-any.whl
Size 29.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
fc4bb77c4627222c719fa4c7f3ff29d929fc95eda72c30a598a0b3c5d0af3210
BLAKE2b-256 checksum
How to use checksums
075f265a7462f20a100420f8bceb387e943082c25d5689e7651e5cdccb51194c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 27, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page