2012-03-09 14 views
9

Zajmuję się tworzeniem aplikacji przy użyciu java, ale nie zamierzam zwolnić kodu. Problem polega na tym, że przetestowałem jeden z tych de-kompilatorów i udało mi się uzyskać kod z mojego pliku JAR prawie idealnie! Moje pytanie brzmi: jak mogę rozprowadzić mój plik JAR bez wyciągania z niego mojego kodu?Jak chronić plik Jar przed dekompilacją?

+0

Dowiedziałem się, że sugerowany duplikat faktycznie odpowiada na moje pytanie. Dzięki za wskazówki. – Pouya

Odpowiedz

8

Ponieważ Java zachowuje większość "metadanych" podczas kompilacji (co pozwala na dynamiczne ładowanie i odbijanie), jest to proste do dekompilacji (nie tylko demontażu) skompilowanych plików klas. Dlatego odzyskany kod jest bardzo podobny do oryginału.

Chociaż nie jest to idealne, prawdopodobnie jedyną opcją jest użycie obfuscatora, takiego jak ProGuard.

6

Nie możesz. Co najmniej JVM będzie musiała uzyskać kod, aby go uruchomić. A jeśli JVM może uzyskać kod, każdy może.

Najlepsze, co możesz zrobić, to zaciemnić kod, ale polecam go, ponieważ będzie to bardzo utrudniało śledzenie błędów produkcyjnych, ponieważ ślady stosu będą trudne do naśladowania.

+1

Rozumiem (dobre) narzędzia obfuskacji udostępniają tabelę, której można użyć do przetłumaczenia wyjścia stosu uruchamianego na oryginalne klasy i linie kodu. Ale generalnie bardziej skutecznie kompresują kod, niż go chronią. –

2

Nie ma możliwości zabezpieczenia kodu przed demontażem. Możesz użyć narzędzia obfuskacji, takiego jak "proguard". Nawet po dekompilacji prawie niemożliwe będzie zrozumienie kodu.

1

Zaszyfruj kod za pomocą jakiegoś obfuscatora na rynku. Obfuscators zmieniają nazwy twoich zajęć i ich metody na dziwnie wyglądające imiona, tak aby ludziom trudno było zrozumieć kod. Miejcie na uwadze, że ludzie nadal będą w stanie dekompilować kod, ale tylko z powodu pomieszanych nazw trudno będzie je zrozumieć.

Wadą tego jest to, że trudno byłoby debugować i obsługić zaciemniony kod w przypadku, gdy klient napotyka pewne problemy, ponieważ ślady stosu w wyjątkach zawierałyby pomieszane nazwy klas i metod.

1

Nigdy nie jest niemożliwe do inżynierii wstecznej w java , ale myślę, że Proguard jest najlepszy. Możliwe jest również zintegrowanie go z IDE (na przykład NetBeans). i ygard dla ant

Powiązane problemy