Mniejsza i bezpieczniejsza Java

Pojawiła się nowa wersja (3.1) ProGuard - doskonałego narzędzia do kompaktowania, 'obfuskacji' (czyli 'zaciemniania' kodu) i optymalizacji skompilowanych programów Javy. Program działa szybko, jest w miarę łatwo konfigurowalny i - co też ważne - darmowy. Jak wiele podobnych narzędzi, jest uruchamiany z linii poleceń, ale posiada także opcjonalny interfejs graficzny. Zoptymalizowane nim programy uruchamiają się szybciej i zajmują mniej miejsca na dysku oraz w pamięci.

ProGuard 3.1

ProGuard 3.1

Jak działa kompaktowanie?

Kod źródłowy Javy jest zamieniany przy kompilacji na tzw. b-code (byte code). Następnie z reguły kompresuje się gotowe programy lub biblioteki, przy pomocy kompresji ZIP i powstają archiwa dystrybucyjne Jar (Java Archive). Mimo, że b-code jest bardziej upakowany niż pliki źródłowe, to i tak znajduję się w nim wiele niepotrzebnych informacji. Programy kompaktujące, takie jak opisywany tu ProGuard, potrafią analizować b-code i usuwać z niego zbędny kod (np. nieużywane klasy, zmienne, czy metody). Oczywiście, działanie programu pozostaje przy tym niezmienione.

Co to jest obfuskacja?

Nawet po kompaktowaniu b-code'u, dalej znajdują się w nim informacje dla debuggera, które nie są wymagane do poprawnego działania programu. Są to na przykład nazwy plików źródłowych, numery linii, czy też nazwy klas, metod, argumentów itd. Na dodatek informacje te umożliwiają łatwą dekompilację programu i oglądanie źródeł. ProGuard potrafi usunąć te dane potrzebne debuggerowi, a wszystkie nazwy pozamieniać na nic nie znaczące ciągi znaków. Działanie programu nie zmienia się - z pewnymi drobnymi wyjątkami. Mianowicie w wypadku wystąpienia błędu w programie, w raporcie o nim (exception stack trace) nie uzyskamy poprawnych informacji o numerach linii oraz nazwach, które obfuskator pozamieniał.

Oprócz tych dwóch podstawowych optymalizacji, ProGuard potrafi dokonać jeszcze kilku. Może on między innymi:

- wyliczyć stałe wyrażenia;

- usunąć niepotrzebne wyliczenia, odwołania do metod, gałęzie kodu, czy porównania;

- usunąć pola "tylko do zapisu";

Należy dodać, że ProGuard poprawnie obsługuje kod wygenerowany przez nową wersję Javy (5.0). Możliwe jest także używanie go dla aplikacji pisanych na platformę J2ME (Java 2 Micro Edition) - co ciekawe, posiada też plugin do J2ME Wireless Toolkit, który na pewno ułatwi z nim pracę. Program dystrybuowany jest na licencji GNU.

Więcej informacji:

http://proguard.sourceforge.net


Zobacz również