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
Worldview Consideration–Ethical or Legal Considerations
An outstanding legal consideration this journal has highlighted is the licensure levels of each decompiler and how it limits the usage. Procyon presents as the best decompiler for commercial projects due to its licencing model, while JD and Fernflower present as limited to non-commercial projects.
Worldview Consideration–Christian Worldview
Questions have arisen as to how to java as a programming language can be used to develop commercial entreprises that go against the Christian faith. For example, java as a programming language has been criticized for enabling the development of websites that deal with anti-Christian activities such as human trafficking online markets, phonography sites and abusive content sites.
Questions
What are some of the other tasks involved in software engineering apart from artifact development?
Reverse engineering of binary artifacts is one of the most popular alternative tasks involved in software engineering
What are some of the easier ways of transforming java bytecode into a source code?
Decompilers present as one of the easiest ways to transform java bytecode into a source code because it does so with a certain level of precision.
What are the factors to consider when choosing a decompiler?
Level of familiarity with the decompiler and the licensing model for each.
References
Gusarovs, K. (2018). An analysis on Java programming language decompiler capabilities. Applied Computer Systems, 23(2), 109-117. doi: 10.2478/acss-2018-0014