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?

Xinus
źródło
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.

BalusC
źródło
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ć.

Thorbjørn Ravn Andersen
źródło
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.

Dmitry Leskov
źródło
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.

andrew0007
źródło
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
10

Użyłem Allatori i całkiem dobrze wykonał swoją pracę.

zgubiony
źródło
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.

Daniel Dolz
źródło
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.

Anoop
źródło
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

Renato
źródło
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