Ne každý začátečník (kupodivu i mnoho pokročilých programátorů) v programovacím jazyce Java ví, že jím převedený zdrojový kód do bajtkódu je snadno dekompilovatelný - tedy zpět převeditelný do zdrojového kódu. Tato snadná dekompilace je dána hlavně tím, že jazyk Java je multiplatformní a při samotné kompilaci zdrojového kódu kompiluje pouze do bajtkódu, a že tento bajtkód se úplně kompiluje až při spuštěním ve virtuálním stroji Javy.
Toto je poměrně nevýhodná situace pro programátory, kteří nechtějí šířit svůj kód, ale chtějí se světu pochlubit pouze s binární podobou jejich aplikace. Exitují ale také takzvané obfuskátory. Obfuskátor je program, který se snaží znečitelnit kód pro případnou dekompilaci. Mezi hojně známe obfuskátory patří například ProGuard. Tento obfuskátor je zdarma a je poměrně použitelný. Mezi další obfuskátory patří například yGuard, Allatori Java Obfuscator nebo například RetroGuard. Ale o použití obfuskátorů si povíme až jindy.
Pro dekompilaci bajtkódu je napsán snadně použitelný program Jad. Tento program je celý napsán v jazyce C++ a dokáže dekompilovat velice rychle.
Můžete si ho stáhnout zde - www.kpdus.com/jad.html
Nyní si ukážeme, jak je snadné Jad použít. Nejprve si napíšeme aplikaci typu "Hallo World!" pro demonstraci.
package testing;
public class Main {
public static void main(String[] args) {
//toto je komentar
String text = "Brzy budou Vanoce!";
System.out.println(text);
}
}
Nyní v konzoli přejdu do složky, kde mám zkompilovaný soubor Main.class.
Dekompilaci spustím snadným příkazem - jad Main.class
Dekompilace je v tomto případě záležitostí necelé vteřiny. V aktuální složce se nám vytvořil soubot Main.jad. V tomto souboru se již nachází dekompilovaný zdrojový kód.
// Jad home page: http://www.geocities.com/kpdus/jad.html
// Decompiler options: packimports(3)
// Source File Name: Main.java
package testing;
import java.io.PrintStream;
public class Main
{
public Main()
{
}
public static void main(String args[])
{
String text = "Brzy budou Vanoce!";
System.out.println(text);
}
}
Jak vidíme, tak kód je téměř identický. Jen se přidal prázdný konstruktor a zmizel komentář. Komentáře se totiž do bajtkódu nevkládají.
Je to opravdu snadné. Proto je vhodné kód, který nechcete šířit otevřeně chránit.
