Jakie są zalety zaciemnienia kodu wydania?

12

Konkretny przykład, który mam na myśli, dotyczy obecnie alfa gry Minecraft, ale myślę, że jest to ogólne pytanie, które uzasadnia rozmowę.

Minecraft jest napisany w Javie, a ślady stosu zwykle wyglądają tak (prawdziwy przykład):

java.lang.NullPointerException
    at d.a(SourceFile:247)
    at gi.b(SourceFile:92)
    at bd.a(SourceFile:33)
    at bn.a(SourceFile:69)
    at bn.e(SourceFile:115)
    at bn.d(SourceFile:103)
    at net.minecraft.client.Minecraft.i(SourceFile:1007)
    at net.minecraft.client.Minecraft.run(SourceFile:596)
    at java.lang.Thread.run(Unknown Source)

Oczywiście nie są to prawdziwe nazwy pakietów i metod, których programista używa podczas pisania. Ponieważ jest on w fazie alfa, wydaje się, że deweloper powinien mieć możliwość śledzenia śladów stosu, szczególnie jeśli ktoś jest w stanie podać jeden raport o błędzie. W tej chwili jest to w większości bez znaczenia.

Jaką korzyść można uzyskać, zaciemniając jego kod w taki sposób, że przezwycięża on wady trudniejszej identyfikacji błędów?

StrixVaria
źródło
1
Mówiąc najprościej, zaciemnianie zmienia ekonomię wstecznej inżynierii kodu, nic więcej.
Mark Booth,

Odpowiedzi:

22

Również zaciemniamy nasz kod Java ....

Zaletą jest to, że trudniej jest dokonać inżynierii wstecznej (jeśli martwisz się, że ktoś ukradnie twoją bazę kodu i użyje jej jako podstawy do stworzenia podobnego konkurencyjnego produktu, na przykład itp.).

Możesz odzyskać oryginalny ślad stosu: istnieją narzędzia zaciemniania, które tworzą specjalne pliki referencyjne, których możesz użyć do uruchomienia zaciemnionego śladu stosu, i wychodzi on z oryginalnym śladem stosu źródłowego. Są one generowane przez sam proces zaciemniania, więc nie możesz odzyskać oryginalnego śladu stosu, chyba że masz w ręce plik referencyjny, którego użyłeś do zaciemnienia kodu.

To naprawdę nie ma wad. :)

Stoły Bobby'ego
źródło
3
Ciekawe, nigdy nie wiedziałem, że pojawiły się z „stosowaniem un-zaciemniania” (nigdy nie używał obfuscatora) ... co za fajny pomysł :-)
Dean Harding
1
Jedyną wadą, na jaką kiedykolwiek natknąłem się, jest od czasu do czasu zaciemnienie (w tym przypadku w wersji .NET) do tego stopnia, że ​​jitter nie mógł nawet odczytać (nielegalne instrukcje). Ogromna porażka.
vcsjones
@vcsjones: To nie jest tak naprawdę zaciemnianie ...
konfigurator
3
  • chroniąc twoją własność intelektualną

Większość zaciemniaczy optymalizuje również kod , usuwa niepotrzebne metadane lub nieużywany kod, kompresję, eliminację martwego kodu lub eliminację duplikatów.


źródło
Jeśli do takich optymalizacji trzeba użyć obfuscatora, używany kompilator musi być naprawdę leniwym oprogramowaniem.
fresnel
@phresnel: Tak, obfuscator może zrobić całkiem niezłą robotę
@phresnel: prawdopodobnie niekompletny, ale gówniany ...
Masz rację. Pozwól, że opublikuję ponownie.
fresnel
1
To nie tak, że ci nie wierzę; Ja robię! Ale wszystkie te optymalizacje są zwykle wykonywane przez nowoczesne kompilatory. Przynajmniej wiem, że gcc ma je wszystkie. Więc moim zdaniem jest tak: jeśli zaciemnienie naprawdę daje znaczące przyspieszenie, to albo kompilator [dostawca] nie próbował wystarczająco mocno, albo nie otrzymał odpowiednich flag optymalizacji.
fresnel