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.
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
.protofiles, 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)
| File | Size | Uploaded | |
|---|---|---|---|
| protoloom-0.1.4.tar.gz | 278.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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 logRelease 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