Skip to main content

ProtoLoom

Recover Protocol Buffer schemas from compiled apps and binaries.

Turn APKs, DEX files, native binaries, and Go programs into usable .proto files—with clear confidence and evidence for every result.

Python 3.11+ Apache 2.0

ProtoLoom recovering protobuf schemas from Bitwarden Authenticator

What it does

ProtoLoom finds protobuf information that remains inside compiled software and rebuilds it into files you can inspect and use. It works directly with:

  • Android apps and bundles (.apk, .aab, .dex)
  • Java archives (.jar, .zip)
  • Linux, macOS, and Windows binaries
  • Go binaries containing protobuf descriptors

No decompiler or AI service is required. When ProtoLoom cannot prove something, it reports the uncertainty instead of silently guessing.

Install

ProtoLoom requires Python 3.11 or newer. From a local checkout:

uv tool install .

Use

Inspect a file:

protoloom inspect app.apk

Recover its schemas:

protoloom extract app.apk --output out

Open out/dashboard/index.html for the visual report, or use the generated .proto files directly. The output also includes a descriptor set, recovery.json, and a Markdown report.

For difficult Android apps, jadx can be enabled as an optional fallback:

protoloom extract app.apk --jadx --output out

Try ProtoLoom without supplying a binary:

protoloom demo

Why ProtoLoom

  • Produces compilable .proto files, not raw string dumps
  • Shows where each recovered field came from
  • Keeps uncertain results visible
  • Runs deterministically without cloud services
  • Handles nested archives and multiple binary formats
  • Matches the established pbtk tool's schema fidelity exactly on a real, unobfuscated production app — plus native and Go descriptor recovery, which pbtk doesn't do
  • Is tested against pinned schemas, shipping apps, and a real exported payload

ProtoLoom is currently alpha software, but its numbers come from real shipping apps, not just synthetic fixtures. It matches pbtk on all nine measured metrics for Mullvad's protobuf-lite schema, and reaches the same 100% once Bitwarden Authenticator's and Gadgetbridge's proto packages are normalized to their compiled Java namespace — a real, documented ambiguity in what protobuf-lite compiles to, not a recovery bug. Where a signal is genuinely gone, ProtoLoom says so instead of guessing: Gadgetbridge's Java generator loses the exact source spelling of some field names, and a build optimizer can strip the last signal distinguishing some merged enum types on Smartspacer, so a minority of names and enum values in those apps stay unresolved rather than invented. Apps built with Square Wire instead of protobuf-lite (Signal, Molly, Meshtastic) aren't a supported schema source yet. Detailed measurements, methodology, and every known limitation are published in benchmarks/results.md.

Development

uv sync --extra dev --group dev
uv run make check

See CONTRIBUTING.md to contribute and SECURITY.md to report a vulnerability.

License

Apache License 2.0. See LICENSE.

Release files for protoloom 0.1.4

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

Source distribution (sdist)

Source distribution for protoloom 0.1.4
File Size Uploaded
protoloom-0.1.4.tar.gz 278.2 kB Details

Built distribution (wheel)

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

Total release size:387.0 kB

Release files / protoloom-0.1.4.tar.gz

Download URL protoloom-0.1.4.tar.gz
Size 278.2 kB
Tags Source
SHA-256 checksum
How to use checksums
8fb515be824325233849707b288244c94382fb58232574e8ded86f99fc2f2889
BLAKE2b-256 checksum
How to use checksums
f79d6299b47e6e019a1e790b2f40965cc636a3664cc58f86f243d29eb0551d60
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Sep 10, 2026.

Transparency log

Release files / protoloom-0.1.4-py3-none-any.whl

Download URL protoloom-0.1.4-py3-none-any.whl
Size 108.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3fe6c6938b06f7c9035f55937c8ce6394015f260fa1f87334e2dd7fabdf1ec7e
BLAKE2b-256 checksum
How to use checksums
803e1343753491d5e5ed8e3fe96728a020f45977df06009feb4547903086a458
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Sep 10, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.4 This release

2 release files

0.1.3

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