Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Java - zabezpieczenie kodu.

mmilart 10 Gru 2012 14:40 2949 6
  • #1 10 Gru 2012 14:40
    mmilart
    Poziom 6  

    witam, zadaje kolejne pytanie jako newbee, ale niestety nie znalazlem na forum nic podobnego z tego zakresu.
    Chodzi o program pisany w jezyku Java, ktory chcialbym zabezpieczyc jakos przed skopiowaniem kodu a zarazem dawac innym program do testow. Czy mozna jakos zabezpieczyc program, aby dac go komus do testow, i aby mogl go sprawdzic i uruchomic na linuxie tak aby nie mial dostepu do kodu zrodlowego? Nie chodzi o sprawdzanie kodu zrodlowego ale o poprawnosc koncowego zachowania programu. W jaki sposob wygenerowac taki plik. Pewnie chodzi o plik "build", tylko jak go uruchomic na takim linuxie zeby nie musiec tego kodu dawac komus za kazdym razem do ponownego kompilowania na okrojonym linuksie jako zrodla tylko jako plik do uruchomienia skompilowany. Czy takie cos przejdzie wogole?
    Potrzebuje pomocy bo nie chce stracic tyle czasu pracy na marne.
    Niestety nie mam wiedzy o kompilatorach / interpreterach i nie wiem jak wyglada taka wymiana danych, jak wyglada kompatybilnosc wygenerowanych takich kodow ze soba.
    Prosze bardziej doswiadczonych o pomoc,

    Pozdrawiam serdecznie i Dziekuje za pomoc z gory.

    0 6
  • Pomocny post
    #2 10 Gru 2012 18:15
    mi14chal
    Poziom 28  

    Nie wiem co masz na myśli, ale jeśli się kompiluje program napisany w Javie to potem się eksportuje do jar i to będzie działać na Linuksie o ile tam jest Java zainstalowana. Oczywiście można kod zdekompilować, ale tego zwykły użytkownik raczej nie zrobi. Jak już się tak o to obawiasz to możesz użyć obfuscatora np. ten: proguard.sourceforge.net.

    0
  • Pomocny post
    #3 10 Gru 2012 18:18
    Oberon
    Poziom 15  

    Myślę, że to czego kolega potrzebuje to obfuskacja kodu. Prosze poczytać o obfuskacji i dostępnych tool'ach KLIK

    0
  • Pomocny post
    #4 10 Gru 2012 18:29
    McMonster
    Poziom 32  

    Tworząc plik JAR dostaniesz swój program w uruchamialnej postaci bez bezpośredniego podawania kodu źródłowego. Ale jeśli ktoś będzie chciał i będzie wiedział jak, to będzie w stanie zdekompilować sobie klasy. Wszystko zależy od tego, dla kogo przeznaczony jest program i jak krytyczna jest ochrona kodu. Plik JAR w znakomitej większości przypadków będzie wystarczył.

    Istnieją sposoby na dalsze zabezpieczenie kodu, ale jak ktoś ma wiedzę, to i tak sobie poradzi.

    0
  • #5 11 Gru 2012 10:44
    mmilart
    Poziom 6  

    Dziękuje - takiego info mi było potrzeba!
    Niestety nie działa link http://proguard.sourceforge.net/,
    jednakże i tak odpowiedzi były bardzo pomocne. Dzięki wielkie!

    Dodano po 2 [godziny] 14 [minuty]:

    Chodzi mi o taka czynność w eclipse ADT, jakąś radę jak to można zrobić. przejrzałem trochę internet w poszukiwaniu tego, ale niestety nadal nie wiem jak to zastosować w Eclipse ADT, aby wyeksportować takowy plik Jar tak przerobiony ta technika rozbijania kodu. Podrzuci ktoś łatwego tipa ? Będę wdzięczny bardzo.

    0
  • Pomocny post
    #6 23 Gru 2012 12:11
    phanick
    Poziom 28  

    Witam serdecznie.
    Kiedyś bawiłem się w dekompilowanie i rozgryzanie działania apletów javy popularnej strony z grami oraz z czatem i udało mi się z powodzeniem nawet na tej podstawie napisać własnego klienta do obu serwisów.

    Także skutecznej metody zabezpieczenia nie ma. Pliki JAR są to spakowane algorytmem ZIP skompilowane do byte-codu klasy (pliki .CLASS). Maszyna JAVA jest maszyną stosową, bardzo prostą i z małą liczbą instrukcji, także dekompilacja tego z powrotem na pliki .JAVA jest możliwa. Istnieje szreg programów ułatwiających dekompilację, np Jad v1.5.8f.

    Są oczywiście programy utrudniające powrotną dekompilacje - tzw. obfuscatory (zaciemniające kod). Ich działanie polega na:
    * zmianie nazw zmiennych, pól, metod, klas na jednoliterowe, nic nie znaczące nazwy
    * zamiana nazw metod klas nawet na takie same nazwy, różniące się jedynie sygnaturą (przeciążanie)
    * kodowanie występujących jawnie ciągów tekstowych na formę zaszyfrowaną.

    Przykład takiego appletu:

    Kod: java
    Zaloguj się, aby zobaczyć kod

    Widoczne tutaj ciągi tekstowe są zakodowane, natomiast funkcja y.z() służy do odkodowywania.
    Całość jest o tyle przemyślnie zrobiona, że w każdej klasie kodowanie będzie trochę inne, przez co aby rozszyfrować całość trzeba się zdeczka napracować.

    Po zastosowaniu owego dekompilatora uzyskujemy praktycznie gotowy kod, który można nawet od razu uruchomić. Czasami jednak zdarzają się instrukcje (głownie switch), które nie w pełni się dekodują, jednak nie przeszkadza to w zrozumieniu ich działania.

    Niżej zdekodowana powyżej omawiana metoda y.z()
    Kod: java
    Zaloguj się, aby zobaczyć kod


    Powyższa metoda przepisana na C:
    Kod: C
    Zaloguj się, aby zobaczyć kod


    Nie ukrywam jednak, że rozgryzienie działania takiego zdekompilowanego appletu jest dużo trudniejsze, wymaga pewnej wprawy i czasu, ale jeśli komuś będzie bardzo zależało (jak mi), to podejmie każde możliwe środki.

    0
  • #7 07 Sty 2013 08:59
    mmilart
    Poziom 6  

    Dziekuje za pomocna odpowiedz! :), pozdrawiam

    0