mrkeyoor.com_
Wed 07 Oct 06:41 UTC
Dev Toolsevaluationupdated 07 Oct 2026

ddc review

ddc is a Rust command-line decompiler that turns Android DEX bytecode into readable Java and lets you query an APK without decompiling the whole file. It also exposes its inspection commands through REST and MCP, which makes it useful in scripts and agent-assisted reverse-engineering work.

Verdict

Our ddc run built in 45 seconds and passed all 152 tests, making the repository easy to trust as a fast APK query tool. Use it before jadx when you need strings, references, manifests, or one class in a scriptable form, especially through JSON or MCP. Keep jadx nearby for careful source reading because ddc's own validation still shows roughly twice as many type-related compilation errors.

We ran it

Lab card: what happened when we ran ddcScreenshot of ddc (github.com/ejfkdev/ddc)
Install✓ · 12s29 packages
Build✓ · 45s
Tests✓ · 18s152 passed · 0 failed of 152 (cargo test)
Repo69 files~44,848 lines of source · 6.5 MB · 2 CI workflows

Answers from our run

Does ddc build from source?

Dependencies installed in 12 seconds (29 packages), and the build succeeded in 45 seconds. We cloned commit 121e198 into a clean Debian container with 3 CPUs and no project-specific setup.

Do ddc's tests pass?

Yes: 152 of 152 passed when we ran the project's own test command (cargo test). Some failures need services or credentials a bare container does not have.

Who should not use ddc?

Analysts who need the best possible reconstructed Java: the README reports about 7,500 ddc-attributable full-classpath errors across 0.91 million files, roughly twice the jadx result on the same battery.

What are the alternatives to ddc?

jadx, Apktool, Enjarify. Our ddc run built in 45 seconds and passed all 152 tests, making the repository easy to trust as a fast APK query tool.

Setup4/5Prebuilt binaries exist; our source build passed in 45 seconds
Docs5/5Bilingual references explain commands, architecture, tests, and limits
Community3/5360 stars, 1 open issue, and an October 6 release
Maturity4/5152 tests and 2 CI workflows, though the project is still v0.1

Who it’s for

Android security engineers who need quick class, string, reference, manifest, or hierarchy lookups.
Developers processing many APKs who want a native binary and machine-readable output.
Teams building internal analysis services around REST, JSON, JSONL, or MCP.
jadx users who want a faster first-pass companion for triage.

Who it’s NOT for

Analysts who need the best possible reconstructed Java: the README reports about 7,500 ddc-attributable full-classpath errors across 0.91 million files, roughly twice the jadx result on the same battery.
Anyone expecting decompiled output to rebuild immediately: the project's javac claim is a syntax gate, and missing Android classes plus occasional type-confused locals still produce semantic errors.
GUI-first investigators: ddc is a CLI, HTTP, and MCP tool; it does not provide jadx's desktop code browser.
Reproducibility jobs that cannot tolerate variation: the README says a handful of deadline-truncated monster methods can differ between runs.
APK modification workflows centered on resources and repackaging: ddc reads manifests and resources, but its documented job is DEX analysis and Java emission, not rebuilding an APK.

Setup reality

Our Rust sandbox installed commit 121e198 in 12 seconds with 29 packages. The release build succeeded in 45 seconds, and cargo test finished in 18 seconds with 152 passed and 0 failed.

No credential or external service is needed for the CLI. Homebrew, Scoop, cargo-binstall, and raw binaries cover common platforms; building from source needs stable Rust. Serving HTTP or MCP adds bind-address, authentication, TLS, and CORS choices that a local command does not.

The 6.5 MB checkout contained 69 files and about 44,848 lines of source. It had 2 CI workflows, no Dockerfile, and no separate tests directory; tests live with the Rust crates. Full Java compilation also needs the relevant Android classpath, and syntax-clean output is not the same as semantically correct source.

ddc is a fast APK index before it is a source recovery tool

A full decompile is only one of ddc's jobs. Fifteen query subcommands can list classes, find strings and references, inspect a hierarchy, extract manifest facts, or decompile one method. That matters when the question is "where is this hostname used?" rather than "show me the whole application." Output can be text, tables, Markdown, JSON, or JSONL, so the same command works at a terminal and inside a larger analysis pipeline.

The distinction protects buyers from the wrong expectation. ddc emits Java that passes a syntax check across the project's corpus, but its README does not claim perfect source reconstruction. A separate full-classpath battery over 0.91 million files leaves about 7,500 errors attributable to ddc, with jadx at roughly half that number. The gap is concentrated in type recovery. Fast triage is the strong case; a final human reading may still belong in jadx.

DEX 035 through 041 and APK containers are covered

The parser handles the standard DEX versions from 035 to 041, multi-dex APKs, and XAPK, APKS, and APKM containers. It recovers useful Java forms such as lambdas, method references, and string concatenation from newer bytecode patterns. Kotlin null-check noise is removed, synthetic access bridges can be folded into call sites, and Android constants can replace opaque integers. Those changes make emitted code easier to scan without claiming it matches the original source.

Architecture is split across 3 crates. One reads DEX containers and instructions, another lifts registers into an intermediate form and emits Java, and the CLI handles containers, resources, localization, and queries. The shared jdc-core crate also powers a JVM class-file decompiler. The 44,848 source lines in our checkout are substantial for a project created in September 2026, yet the documentation maps the major passes closely enough to debug a wrong result.

What happened when we ran it

Our sandbox installed commit 121e198 in 12 seconds, bringing in 29 packages. A release build completed in 45 seconds. cargo test then finished in 18 seconds with 152 passed and 0 failed. The checkout occupied 6.5 MB and contained 69 files. These are repository checks, not an independent decompilation speed or accuracy benchmark.

The run used an unprivileged container with 3 CPUs and 12 GB of RAM. We found 2 CI workflow files, no Dockerfile, and no separate tests directory. Rust commonly keeps unit tests next to the code, and the 152 passing results show that tests were present despite that directory signal. We did not feed ddc the project's 39-APK corpus, compare its Java to source, or reproduce the performance tables in the README.

REST and MCP expose the same typed reports

Release v0.1.26 added HTTP REST and MCP frontends around the query commands. ddc serve publishes both an OpenAPI document and a streamable MCP endpoint, while dedicated modes can run REST alone or MCP over standard input or HTTP. Structured reports avoid scraping terminal tables. That makes ddc unusually easy to place behind an internal analysis service or give to an MCP client as a bounded set of APK tools.

Serving a reverse-engineering tool deserves more care than running one command. The help includes bearer authentication, TLS, and CORS examples, but an operator still chooses the bind address and access policy. APK contents may be proprietary or hostile. Keep uploads isolated and do not expose the service anonymously. A local binary needs none of this, and our 18-second test run did not exercise a live HTTP or MCP endpoint.

Syntax-clean Java can still be semantically wrong

The README says all emitted files in its 7-app headline set parse with javac, covering 909,689 files. It immediately qualifies that result: missing Android classpaths cause normal diagnostics, and rare register-heavy methods can produce a local with the wrong type. A few large methods fall back under a deadline and may vary between runs. These are the sorts of limits a decompiler should state plainly.

Open issue 2 supplies a sharper warning from an older v0.1.4 comparison. On one small APK, the reporter found undeclared variables, wrong types, an invalid return, and a missing nested class, while jadx produced much cleaner source. The maintainer shipped a newer version in response, but the issue remains open. That report does not describe v0.1.26 as a whole. It does support the README's current advice that type recovery still trails jadx.

October activity shows quick maintenance on a young project

Version v0.1.26 was published on October 6, 2026, the same date as the latest push. GitHub showed 360 stars and 1 open issue on October 7. Recent work added structured output and the server frontends, fixed stale field reads and lost exception-path values, and closed a filename collision that could overwrite non-ASCII classes. Two CI workflows give those frequent changes an automated check.

ddc is easiest to recommend as the front desk for APK investigation. Ask it cheap, narrow questions first, save JSON when a script needs the answer, and open the hardest classes in jadx when type reconstruction matters. Our 152 passing tests back the command layer. The project's own 0.91-million-file comparison explains why it should complement a mature decompiler rather than replace one.

Alternatives

ProjectWhat it isPick it when
jadx gh↗A mature DEX-to-Java decompiler with both command-line and desktop interfaces.pick this instead when reconstructed source quality and interactive code browsing matter more than ddc's query speed.
Apktool gh↗An APK reverse-engineering tool focused on resources, smali, decoding, and rebuilding.pick this instead when you need to edit resources or produce a rebuilt APK rather than read Java-like output.
EnjarifyA translator from Dalvik bytecode to Java bytecode for use with JVM tooling.pick this instead when your workflow needs a JAR for another Java decompiler or bytecode tool.

What people are saying

  1. [velocity-scout] ejfkdev/ddc

Sources

  1. ddc repository
  2. ddc README
  3. ddc architecture
  4. ddc v0.1.26 release
  5. ddc output-quality issue

More dev tools reviews

skills · niimbot · sys1grep · ZygiskNext · AirCard-iOS · expo-dynamic-notifications · the whole board →