Skip to content

Build1 publisher3 min readPublished

jadx ran out of memory at 49% on the APK Droid ASC searched in 1.79 seconds

Droid ASC's Black Hat Europe Arsenal figures are its author's own, measured on four commercial APKs with jadx as the control. The run that ended in an out-of-memory kill tells a triage rotation more than the ratios do.

The Engineer · Build desk

Illustration accompanying jadx ran out of memory at 49% on the APK Droid ASC searched in 1.79 seconds

What happened

  • Droid ASC, an open-source Android reverse engineering tool, was unveiled at the Black Hat Europe 2026 Arsenal, aimed at the slow decompilation and high memory use of tools such as jadx on large APKs.
  • On the 352 MB Douyin package, jadx's global search reached 49% before an out-of-memory error terminated it, while Droid ASC produced results in 1.79 seconds.
  • Droid ASC writes no disk cache at all, against 119 MB to 322 MB of index cache written by jadx across the same tests.

Compiled by The EngineerSomething wrong?How this is made

Why it matters

  • cost A rotation that screens twenty large APKs writes 2.4 GB to 6.4 GB of jadx index cache, and the disk it lands on is the analyst's own laptop.
  • capability Large-APK triage moves onto ordinary hardware if the memory reduction holds, because there is no global index to hold in RAM and no cache to write.
  • constraint The maxima come from one four-APK test set chosen by the tool's side, so any coverage forecast built on 269x is a forecast about someone else's packages until you rerun it on yours.
  • decision The choice is now workload-shaped: one pass across many packages favours on-demand querying, while work whose output is a persistent cross-reference graph still has to pay for the index.

The order of work explains the memory curve. jadx's pipeline unpacks the APK, builds a global index and resolves cross-references before you ask your first question [8]. Droid ASC inverts that. It probes the Deflate stream directly, builds a dense Huffman lookup table, pulls only the core metadata blocks it needs and disregards the rest [9]. Bytecode offsets map to methods in constant time with no map table built [11]. On a hit, only the target class and its dependent bytecode are assembled into a self-consistent minimal DEX in memory [12].

The fourth piece is a bet on the compiler. R8 does deterministic constant propagation and instruction de-duplication. Both concentrate code physically, and the search exploits that layout [10]. For the search multiplier to transfer to your targets, those targets have to have been built the way the test set was built. The tool's side describes the comparison as official tests, on four real-world commercial APKs at ten threads with jadx as the control group [5], and the benchmark figure is credited to the GitHub repository MG1937/ASC [18].

Read the multipliers as maxima. Search is up to 269 times faster, decompilation up to 222 times faster and memory up to 125 times lower, each "up to" being the best of those four packages [3]. In its own summary, the write-up rounds the memory figure to two orders of magnitude [15].

I would budget on the Douyin comparison. jadx's global search on the 352 MB package reached 49% and was terminated by an out-of-memory error, while Droid ASC produced results in 1.79 seconds [6]. A screening pass that dies halfway has spent the analyst's twenty minutes and returned nothing about the app.

In the briefing, jadx on a several-hundred-megabyte APK pushes memory past ten gigabytes with progress crawling for tens of minutes [14]. If the 125x ratio held on that same package, the equivalent footprint is about 82 MB [1]. Those two numbers are not stated to come from the same APK, so treat 82 MB as an illustration of scale.

According to the tool's author, compilation output is highly structured data which modern decompilers rebuild into an unwieldy relational database, an approach that defies common sense [13]. That is a harsh way to describe an index, and roughly right for first-pass work. Zero indexing also means there is no persistent cross-reference graph to come back to [2]. Some review work wants exactly that.

The economics are asserted. The briefing notes that a single vulnerability may pay from thousands to tens of thousands, and that in per-vulnerability crowd-testing and SRC programmes tool efficiency converts into income [17]. Coverage per analyst-hour is the figure you would have to produce yourself. Droid ASC is pitched at red teams, SRC operations and emergency response, and recommended for authorised testing only [16].

What to watch

  • Independent benchmarks on APKs outside the author's four-package test set, especially ones whose DEX layout was not shaped by R8.
  • Publication of the full per-APK table with means rather than maxima, and timings for repeated queries against a package already indexed by jadx.
  • Whether Droid ASC adds cross-reference features, and what index or cache cost comes back with them.
Loading claim ledger
Loading source directory links
Loading share composer
Loading topic controls
Loading related stories