Najlepszy obfuscator Java? [Zamknięte]


107

Tworzę oprogramowanie zabezpieczające i chcę zaciemnić mój kod java, aby niemożliwe było odtworzenie kodu źródłowego. Jaki jest najbardziej niezawodny obfuscator Java?


10
@Xinus „stał się niemożliwym do odtworzenia inżynierii wstecznej” - raczej nie próbowałem i nie udało się
mrówka

212
Miałem kilku kolegów, którzy stworzyli mocno zaciemniony kod. Ale to nie był ich zamiar.
Steve McLeod

7
It was once said that if you had an infinate amount of monkeys on typewiters and an infinate amount of time, they would write all of the great works of Shakespeare.- Dilbert
ant

7
Nie da się uniknąć inżynierii odwrotnej.
Mnementh

11
@Mnementh: wystarczy, aby inżynieria wsteczna była zbyt kosztowna dla Twojej konkretnej aplikacji.
Dmitry Leskov

Odpowiedzi:


99

Po pierwsze, naprawdę musisz pamiętać, że nigdy nie jest niemożliwe wykonanie inżynierii wstecznej. Wszystko można zhakować. Inteligentny programista korzystający ze inteligentnego IDE może już zajść wystarczająco daleko.

Cóż, tutaj możesz znaleźć listę. ProGuard jest całkiem niezły. Sam go użyłem, ale tylko do „zminimalizowania” kodu Javy.


1
@BalusC: Więc jakiego narzędzia używasz do zaciemniania kodu java? zaciemniasz swój kod java, prawda?
Thinhbk

@Thinhbk Maskowanie utrudnia uzyskanie przydatnych śladów stosu.
Thorbjørn Ravn Andersen

@ ThorbjørnRavnAndersen: Zgadzam się. IMO, zaciemnianie sprawi, że ślady stosu staną się w większości bezużyteczne. W takim przypadku używam jakiejś sztuczki z log msg, która może pomóc.
Thinhbk

2
@Thinhbk Proguard generuje mapę w celu przetłumaczenia niewyraźnych śladów stosu z powrotem na oryginalny kod. W przeciwnym razie, jak powiedziałeś, ślady stosu staną się bezużyteczne (ale kto i tak dostanie niezłapane wyjątki ... ;-))
Matthieu

@Matthieu: Czy można automatycznie przetłumaczyć ślad stosu z powrotem na oryginalny kod? Byłoby wspaniale i nowość dla mnie. Po prostu wiem, że ręczne tłumaczenie zwrotne może być trudne, jeśli baza kodu jest ogromna.
Thinhbk

33

Jeśli komputer może go uruchomić, odpowiednio zmotywowany człowiek może go odtworzyć.


3
Ile osób może czytać zaciemniony kod i rozumieć logikę? Mam wielu przyjaciół inżynierów, a oni nie mogą tego zrobić. Tylko John Nash może to zrobić;)
kodmanyagha

5
@kodmanyagha Gdyby byli wystarczająco zmotywowani, nauczyliby się tego. To nie jest trudne.
Thorbjørn Ravn Andersen

1
W sensie matematycznym można go uruchomić bez możliwości przeprowadzenia inżynierii wstecznej. O to właśnie chodzi w szyfrowaniu homomorficznym, ale istnieje wiele przeszkód, które należy rozwiązać, aby było praktycznie możliwe do wykorzystania w oprogramowaniu komputerowym, w przeciwieństwie do SaaS. Poruszamy się tam powoli. Przełomowe prace Gentry'ego dotyczące w pełni homomorficznego szyfrowania i „matematycznych puzzli” autorstwa Amita Sahai i in. zrobił ogromny skok w tym kierunku. Brakuje tylko jednego elementu (który nazywam „funkcją bariery”), dzięki któremu cały schemat byłby wykonalny. To, co niemożliwe teraz, będzie możliwe w przyszłości.
ogggre

30

Zapoznaj się z moim artykułem Chroń swój kod Java - przez zaciemniacze i nie tylko [zarchiwizowane], w którym omówiono zaciemnianie w porównaniu z trzema innymi sposobami na zwiększenie kosztów inżynierii wstecznej aplikacji, a także zbiór linków do narzędzi i dalszych materiałów do czytania.


1
Właśnie tego potrzebuję. Chcę napisać zaciemniacz PHP dla moich projektów. Logika jest wszędzie taka sama. Dzięki ...
kodmanyagha

1
Fajny i obszerny artykuł o zaciemnianiu języka Java i kolekcji oprogramowania.
m3nda

15

Myślę, że Proguard jest najlepszy. Możliwe jest również zintegrowanie go ze swoim IDE (na przykład NetBeans). Pamiętaj jednak, że jeśli zaciemnisz swój kod, śledzenie problemów w dziennikach może być trudne.


6
+1 za „weź pod uwagę, że jeśli zaciemnisz swój kod, śledzenie problemów w dziennikach może być trudne”. Właśnie wtedy, gdy pomyślałeś, że debugowanie jest wystarczająco trudne ...
Adam Paynter

7
Dobry obfuskator, który zmienia nazwy i informacje o numerze linii, powinien utworzyć dziennik, za pomocą którego można odwrócić proces. W ten sposób przynajmniej ślady stosu pozostają użyteczne w przypadku zaciemnionych plików binarnych.
Joachim Sauer

3
ProGuard tworzy takie pliki odwrotne do debugowania. :-)
Malax



7

Prawdą jest, że zawsze można odtworzyć jakiś kod, tak jak nie da się porządnie zabezpieczyć domu i nikt nie może go ukraść. Nie powstrzymuje mnie to jednak przed zamknięciem drzwi. Właściwie nie jestem w świecie java, używam BitHelmet dla .net.


7
+1, aby wrócić do siatki 0. Ta odpowiedź nie jest nieprzydatna.
HaloWebMaster

6

Kiedyś pracowałem z Klassmasterem w mojej poprzedniej firmie i działa to naprawdę dobrze i może całkiem dobrze zintegrować się z systemami kompilacji (wsparcie maven jest doskonałe). Ale to nie jest darmowe.



6

Nie wiem na pewno, czy rozwiązanie jest bezpieczne, ale jeśli chodzi o rozwiązanie ClassGuard , warto przeczytać artykuł i komentarz pod adresem : http://www.javaworld.com/community/?q=node/1604#comment -12296


Inną alternatywą, która również używa kodu natywnego zamiast defineClass, jest JarCrypt
Renato,

Artykuł uczący łamania zabezpieczeń ClassGuard : setrst.blogspot.com/2010/04/classguard-unguarded.html . Po prostu nie wiem, czy to nadal działa w najnowszej wersji.
Renato
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.