Java Decompiler – dekompilacja programów w języku Java

Czy zdarzyło wam kiedyś utracić zmiany w plikach *.java mając jednocześnie plik *.jar ze skompilowanymi tymi źrodłami? Np. w czasie testów nowych funkcjonalności?

Jak się okazuje, bardzo prosto jest odzyskać napisany kod, dysponując jedynie plikami *.jar ze skompilowanym kodem. Zobaczcie przykłady.

Kod przed kompilacją:

public void parse( String str, uc8051 uc ) throws ParseException {
            //wyczyszczenie tablicy labelów
            labels = new Vector<Label>();
            this.uc = uc;
            StringReader reader = new StringReader( str );
            Parser p = new Parser( reader );
            p.Start( this );
            currentStepInstructionPosition = 0;
	}

Następnie kod został skompilowany do pliku *.class i spakowany do archiwum jar. Po użyciu programu do dekompilacji otrzymałem następujący rezultat.

Kod po dekompilacji:

public void parse(String str, uc8051 uc)
    throws ParseException
  {
    this.labels = new Vector();
    this.uc = uc;
    StringReader reader = new StringReader(str);
    Parser p = new Parser(reader);
    p.Start(this);
    this.currentStepInstructionPosition = 0;
  }
Java Decompiler
Java Decompiler

Prawda, że to niezły wynik?

Jedyne różnice jakie widać to formatowanie. Dodatkowo porządek deklaracji i definicji elementów klasy (atrybutów, metod) byl inny w oryginalnym pliku .java niż w zdekompilowanym kodzie. Stąd płynie kolejny wniosek – dbanie o własność intelektualną. Nie oddawajcie nigdy klientowi prostego i czystego kodu w Javie, skompilowanego w standardowy sposób. Zawsze starajcie się użyć jakiegoś programu do obfuskacji (zaciemnienia) kodu. Dzięki takim zabiegom zwiększycie prawdopodobieństwo, że waszego kodu nikt nie ukradnie.

Program wykorzystany do tego przykładu to:
Java Decompiler. Serdecznie polecam.

Dodaj komentarz