SEMay 21, 2020

Java Decompiler Diversity and its Application to Meta-decompilation

arXiv:2005.11315v128 citations
Originality Incremental advance
AI Analysis

This work addresses decompilation quality for Java developers and reverse engineers, offering an incremental improvement by combining existing decompilers.

The paper tackles the problem of Java decompilation quality by assessing eight decompilers on syntactic correctness, syntactic distortion, and semantic equivalence, finding that no single decompiler handles all bytecode structures, with the best achieving 84% syntactic correctness and 78% semantic equivalence. It proposes Arlecchino, a meta-decompiler that merges partial decompilations, handling 37.6% of bytecode classes previously unhandled.

During compilation from Java source code to bytecode, some information is irreversibly lost. In other words, compilation and decompilation of Java code is not symmetric. Consequently, decompilation, which aims at producing source code from bytecode, relies on strategies to reconstruct the information that has been lost. Different Java decompilers use distinct strategies to achieve proper decompilation. In this work, we hypothesize that the diverse ways in which bytecode can be decompiled has a direct impact on the quality of the source code produced by decompilers. In this paper, we assess the strategies of eight Java decompilers with respect to three quality indicators: syntactic correctness, syntactic distortion and semantic equivalence modulo inputs. Our results show that no single modern decompiler is able to correctly handle the variety of bytecode structures coming from real-world programs. The highest ranking decompiler in this study produces syntactically correct, and semantically equivalent code output for 84%, respectively 78%, of the classes in our dataset. Our results demonstrate that each decompiler correctly handles a different set of bytecode classes. We propose a new decompiler called Arlecchino that leverages the diversity of existing decompilers. To do so, we merge partial decompilation into a new one based on compilation errors. Arlecchino handles 37.6% of bytecode classes that were previously handled by no decompiler. We publish the sources of this new bytecode decompiler.

Code Implementations1 repo
Foundations

The foundational work for this paper's niche, ranked by how specifically the neighbourhood builds on it — not by global fame.

Your Notes