Java obfuscator kodu źródłowego

0

Witam, szukam już godzinę na google jakiegoś darmowego obfuscatora kodu źródłowego pisanego w Javie (nie bytecodu) i nie mogę nic znaleźć...

Bardzo proszę kogoś o wskazanie chociaż jednego linka, dziękuję :)

0

A ja zadam to pytanie po raz kolejny. Po co? Jedyny, niewielki, zysk z obfuskacji kodu to zmniejszenie wielkości plików co bywa przydatne w JME. Poza tym nie ma to żadnego sensu.

edit: http://java-source.net/open-source/obfuscators

0

Dzięki za link ale chyba wszystkie te programy operują na bytecode... no nic najwyżej będę musiał się jakoś dostosować, ale w przypadku mojego projektu będzie to bardzo problematyczne.

Mówisz że nie rozumiesz jaki jest tego sens? Po prostu nie chcę widzieć w internecie po kilku dniach kopii mojego programu w wersji "ulepszonej"...

0

A jak wezmiesz proguarda, i ponziej zdekompilujesz? Dostajesz kod javowy ktory jest czytelny inaczej. Po co wlasciwie chcesz robic obfuskacje kodu?

0

Po pierwsze np. ProGuard operuje na kodzie źródłowym.

Po drugie obfuskacja nic nie daje. Na serio. Java, a ogólniej środowisko JVM, ma to do siebie, że operuje na bytecodzie, co powoduje, że kod jest podatny na dekompilację. Zresztą jedną z przyczyn dla których dawno temu java była uznawana za powolną było to, że bytecode jest mówiąc w bardzo dużym uproszczeniu interpretowanym językiem skryptowym. Dopiero rozwój różnych mechanizmów typu JIT, poprawienie sposobu zarządzania pamięcią oraz ogólny wzrost wydajności komputerów spowodowały, że java przestała być ociężałą krową.

Po trzecie obfuskowany kod jest w praktyce niemożliwy do utrzymania. Potencjalne komunikaty o błędach będą dość ciekawą łamigłówką pt. "co to może być za klasa co się nazywa Zcsdsfwe".
Po czwarte kod nawet "czytelny inaczej" nie jest wyzwaniem zarówno dla nowoczesnych IDE jak i dla osób, którym zależy na poznaniu kodu. Co z tego, że zamiast sytuacji gdzie Stokrotka dziedziczy z Kwiek będziesz miał Zsadfsfwe dziedziczące z Zdsdfweeve skoro:

  1. wiesz co kod robi
  2. wiesz jaki jest kontekst użycia klas
  3. zawsze możesz dla odkrytej zasady działania zastosować refaktoryzację Rename i nadać danemu elementowi ludzką nazwę?

Na obfuskację szkoda czasu i nerwów, bo zyski są mizerne.

0

"If it runs, it can be defeated."
G-RoM [17-12-1999]

Nie rozumiem nadal po co zaciemniać kod źródłowy? Nikt normalny z takiego kodu pożytku mieć nie będzie, a więc nikt takiego kodu nie weźmie. Zapewne więc rozprowadzasz już skompilowaną do bajtkodu wersję i wystarczy zaciemnić bajtkod.

0

operuje na bytecodzie, co powoduje, że kod jest podatny na dekompilację

Jednym z powodów, dla których tworzy się (pseudo)języki kompilujące się do bytecode'u to właśnie bezpieczeństwo i zwiększenie trudności w dekompilacji. Więc sam fakt, że Java kompiluje się do kodu pośredniego nie jest powodem samym w sobie, a raczej to, że bytecode Javy czy MSIL jest stosunkowo prosty i bardziej przypomina język wysokiego poziomu niż assembly x86.

0

Najśmieszniejsze w obfuskacji kodu, tutaj przytoczę przykład .NET-a jest to, że gdy staje się popularny to pojawiają się narzędzia do masowego jego łamania i analizy, jak de4dot, który potrafi odtworzyć chyba z 30 rodzajów obfuscatorów, bo jak się okazuje, jak szybko się tworzy obfuscatory, tak szybko można je przeanalizować i odtworzyć oryginalny kod i całe zabezpieczenia biorą w łeb.

Ma to typowo związek z trudnością tworzenia takich narzędzi, bo np. dewirtualizery, demutatory dla aplikacji typowo natywnych są bardzo skomplikowane w obsłudze i niepewne w działaniu, to ma to odbicie w technikach tworzenia takich zabezpieczeń.

Java nie jest tak popularna, ale debufuscatory do kilku takich narzędzi widziałem i mimo, że nie ma takiego pogromu zabezpieczeń jak obecnie przy .NET to niestety języki interpretowane są na to skazane.

Ogólnie obfuskacja jest OK, jeśli jednak miałbym wybierać to wziąłbym jakiś mniej popularny tools niż najbardziej znany ProGuard.

0
Koziołek napisał(a):

Po pierwsze np. ProGuard operuje na kodzie źródłowym.

Nie wiem skad masz takie informacje, ale sa zle. Jak zwykle gdy cos piszesz. Oto co jest na stronie glownej proguarda, zaraz u gory, jako pierwsze linijki, w ladnej, blekitnej ramce (fragmenty bold sa moje, zebys sie nie wysilal):

ProGuard is a free Java class file shrinker, optimizer, obfuscator, and preverifier. It detects and removes unused classes, fields, methods, and attributes. It optimizes bytecode and removes unused instructions. It renames the remaining classes, fields, and methods using short meaningless names. Finally, it preverifies the processed code for Java 6 or for Java Micro Edition.

Swoja droga, to co robi proguard (usuwanie nieuzywanych klas, metod, pol itp.) jest w miare latwe w bytecodzie (lub w code, jak mowi stronka). Gdyby to mialo byc robione na kodzie zrodlowym, wymagaloby to o wiele wiecej roboty, praktycznie wymaga takiego samego wnioskowania z kodu jak robi kompilator.

Nie uzywales to nie pisz bzdur. Nie znasz angieslkiego, to skorzystaj z translate.google.

1 użytkowników online, w tym zalogowanych: 0, gości: 1