Computer Systems Project Proposal
November 12, 2007
This project is a decompiler capable of processing outputted Java
bytecode into fully-recompilable and functionally-equivalent source
code. Several people could benefit from being able to decompile source
code, including potentially large companies.
Keywords: decompiler, static analysis, reverse engineering
1.1 Scope of Study
This project is designed to write a Java decompiler. At first, the goal will
be to process class files, one at a time, that were generated by the Java SE
6 compiler. Later, the program will be modified to be able to handle whole
JAR or ZIP files at once, and (if time permits) through multithreading to
take advantage of multiple-core processors.
It is also planned to support
some of the older compilers, and, hopefully, optimized code as well.
1.2 Type of research
This project is partially applied research and partially pure research: the
goal is to produce a final product, but some of its features may be more
esoteric in their application.
2 Background of current research
At this time, there exists several Java decompilers.
In the early days of
Java, several decompilers were written that took advantage of the ease of
decompiling bytecode, prompting several articles to be written detailing the
scope of issue, including fooling decompilers. Most of these early decompil-
ers are helpless at modern code, and several no longer exist. Furthermore,
very few decompilers exist for non-Java programs. A search of SourceForge
revealed one Flash decompiler, a Python decompiler, one C decompiler inca-
pable of decompiling even simple code (although it is innovative in its usage),
Boomerang (another C decompiler), and several defunct Java decompilers.
Aggregating all together, there are currently only four decompilers of note:
• Jad, the best Java decompiler currently out there (although closed
source and written in C).
• Boomerang, the best open-source C decompiler and the only one easily