CSIS 110 Article Review

CSIS 110 Article Review

Article Review: An Analysis on Java Programming Language Decompiler Capabilities

Objectives

  • The author explains more about reverse engineering and the different java programming language decompiler capabilities, which help in turning codes written in some programming language into a binary distribution by performing a reverse operation.
  • The purpose of the article is to compare the different java program decompiler capabilities in order to make evidence-based recommendations for software developers.
  • The author communicates to the audience that sometimes the revers operations are necessary especially when the programmer wants to fix defects on a library or program that was developed by another programmer some time ago, but the source code for such program is missing.
  • The author’s intention was to inform the audience that java programming language has several decompiling capabilities that a programmer can choose based on their preferences and reverse operation’s objectives. as such, it is necessary to compare the attributes, strengths and limitations of those capabilities before selecting the best capability for use.
  • This article explores decompiler programs in java programming language that could be useful in solving various programming problems such as studying computer viruses, obtaining information from libraries that have no source codes, or to fix defects on programs that have no source codes.

Summary

Java programming is one of the most popular programming languages in business and enterprise development. it is an object-oriented programming language that uses stack-based virtual machine executed bytecode instructions to perform tasks. One of the most advantageous attributes of java programming is that it is built on bytecodes instead of an assembly language. This characteristic makes it more useful in decompiling because it enables programmers to execute codes on different platforms, given the availability of virtual machine implementations for those platforms. From the perspective of reverse engineering, this means that the programmer will only need to process a bytecode, which has fewer instructions compared to assembly languages.

To turn the java bytecode into the source code, the programmer would need to transform at least 200 instructions, using a software called a decompiler. A dicompiler translates the binary artifacts into a source code with a certain precision. There are several decompiler for java programming including JD, CFR, Procyon, and Fernflower. A programmer would therefore choose the decopmiler that they are familiar with.

Among the four decompilers, JD and Fernflower are the most popular and recommended. However, JD performs poorly in java 7/8 feature decompilation. Also, its GNU GPLv3 licensing limits its usage in commercial projects. On the other hand, Fernflower performs generally well but has dismal performance when compiling java 7 features, even though it effectively supports java 8 features.

The two other decompilers have show the following results: CFR might not perform some java 7 test cases. Whereas it performs well in java 8 test cases and can be used in commercial projects, it is a closed source project, meaning it might be challenging to modify. Procyon can handle both java 7 and 8 test cases and produces results that are close enough to the original source code.

Results

  • Procyon presents as the best decompiler among the four
  • It performed well in java 7 and 8 test cases, has a friendly licensing model and has additional features

Leave a Comment

Your email address will not be published. Required fields are marked *