The Strengths and Behavioral Quirks of Java Bytecode Decompilers

  title={The Strengths and Behavioral Quirks of Java Bytecode Decompilers},
  author={Nicolas Harrand and C{\'e}sar Soto-Valero and Monperrus Martin and Beno{\^i}t Baudry},
  journal={2019 19th International Working Conference on Source Code Analysis and Manipulation (SCAM)},
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, the decompilation process, which aims at producing source code from bytecode, must establish some strategies to reconstruct the information that has been lost. Modern Java decompilers tend to use distinct strategies to achieve proper decompilation. In this work, we hypothesize that the diverse ways in which… Expand
A Large-Scale Empirical Study of Android App Decompilation
The empirical evaluation, complemented with an indepth manual analysis of a number of apps, indicate that code obfuscation is quite rarely encountered, even in malicious apps, which indicates that near-perfect Android decompilation is, at least in theory, achievable, with implementation-level improvements to decompilation tools. Expand
IoT-based green city architecture using secured and sustainable android services
IoT-enabled green city architecture for clone detection in android markets using a deep learning approach to avoid the release of pirated apps with various pirated labels in multiple app markets is proposed. Expand


Decompiling Java Bytecode: Problems, Traps and Pitfalls
The problems in assigning types to variables and literals, and the problems due to expression evaluation on the Java stack are outlined, and a particular emphasis on issues related to Java exceptions and synchronized blocks are looked at. Expand
An Evaluation of Current Java Bytecode Decompilers
This paper evaluates the currently available Java bytecode decompilers using an extension of the criteria that were used in the original study, found that none passed all the tests, each of which were designed to target different problem areas. Expand
Using compilation/decompilation to enhance clone detection
Compilation/decompilation canonicalise syntactic changes made to source code and can be used as source code normalisation and decompilation as normalisation to compliment clone detection are studied. Expand
Metrics for Measuring the Effectiveness of Decompilers and Obfuscators
By quantitatively comparing original Java source against decompiled and obfuscated code respectively, it is shown which decompilers produce "good" code and whether obfuscations result in "hard-to-understand" code. Expand
Towards Neural Decompilation
This work addresses the problem of automatic decompilation, converting a program in low-level representation back to a higher-level human-readable programming language, by presenting a novel approach to decompilation based on neural machine translation. Expand
An evaluation of output from current Java bytecode decompilers: Is it Android which is responsible for such quality boost?
This paper evaluated the output from current Java bytecode decompilers using test samples and metrics from previous surveys in 2003 and in 2009, and gave reasons why outdated decompilers from previous research perform almost same. Expand
Static Single Assignment for Decompilation
The goal of extending the state of the art of machine code decompilation has been achieved and the most promising areas for future research have been identified as range analysis and alias analysis. Expand
PsybOt malware: A step-by-step decompilation case study
This paper gives a step-by-step case study of decompiling a MIPS worm called psyb0t by using a retargetable decompiler that is being developed within the Lissom project, and describes the decompiler in detail. Expand
Evolving Exact Decompilation
A novel technique for C decompilation is introduced that provides the correctness guarantees and readability properties essential for accurate and efficient binary analysis and demonstrates the promise of this novel, general, and powerful approach to decompilation. Expand
Reconstruction of Composite Types for Decompilation
A method for automatic reconstruction of composite types in a high-level program during decompilation based on expressing memory access operations as pairs base offset, then building equivalence classes for the bases used in the program and accumulating offsets for each equivalence class. Expand