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.3

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.3
File Size Uploaded
protoloom-0.1.3.tar.gz 237.1 kB Details

Built distribution (wheel)

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

Total release size: 325.6 kB

Release files / protoloom-0.1.3.tar.gz

Download URL protoloom-0.1.3.tar.gz
Size 237.1 kB
Tags Source
SHA-256 checksum
How to use checksums
cf9a0353d7f7dbd3c0685629402acc025fbf2162ec9810c0b83138c69af1618c
BLAKE2b-256 checksum
How to use checksums
2873a77152c245ef6cf62e5d64b5ed2c6e42486c7277297460ff8dcf66043963
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 11, 2026.

Transparency log

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

Download URL protoloom-0.1.3-py3-none-any.whl
Size 88.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a2bf44b8643f57a8901f3b8e0133fb28e05c8f5d17ce73415c00e9668b81b8c3
BLAKE2b-256 checksum
How to use checksums
e48b4e4d250dd68be4a11ca629f6bbeeefde305c98517f065da10e10e7258df7
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 11, 2026.

Transparency log

Release history Release notifications | RSS feed

0.1.4

2 release files

This release

0.1.3 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