Czy użycie obfuscatora wystarczy, aby zabezpieczyć mój kod JavaScript?

Pracuję nad zbudowaniem narzędzia programistycznego, które jest napisane w JavaScript.

Nie będzie to projekt open source i będzie sprzedawany (miejmy nadzieję) jako produkt komercyjny.

Szukam najlepszego sposobu na ochronę mojej inwestycji. Czy użycie obfuscatora (code mangler) wystarczy, aby w rozsądny sposób zabezpieczyć kod?

Czy są inne alternatywy, których nie jestem świadomy?

(nie jestem pewien, czy obfuscator to właściwe słowo, jest to jedna z aplikacji, która pobiera Twój kod i sprawia, że jest bardzo nieczytelny.)

Author: Jason Plank, 2008-08-27

9 answers

Powiem ci sekret. Kiedy to zrozumiesz, poczujesz się o wiele lepiej o tym, że zaciemnianie Javascript jest naprawdę przydatne tylko do oszczędzania przepustowości podczas wysyłania skryptów przez przewód.

Twój kod źródłowy nie jest wart kradzieży.

Wiem, że to szok dla ego, ale mogę to powiedzieć z pewnością, nie widząc linii kodu, który napisałeś, ponieważ poza nielicznymi światami rozwoju, gdzie dzieje się poważna magia, to prawda o wszystkich kod źródłowy.

Powiedzmy, że jutro ktoś wrzucił ci na progu stertę płyt DVD zawierających kod źródłowy Windows Vista. Co by pan mógł z tym zrobić? Oczywiście, możesz go skompilować i rozdać kopie, ale to tylko jeden krok więcej wysiłku niż kopiowanie wersji detalicznej. Możesz mozolnie znaleźć i usunąć kod sprawdzający licencję, ale to coś, co jakiś bystry dzieciak już zrobił z binariami. Wymień logo i grafikę, udawaj, że sam to napisałeś i sprzedaj to jako "Vicrosoft Mista"? Złapią cię.

Można spędzić ogromną ilość czasu czytając kod, próbując go zrozumieć i naprawdę "kraść własność intelektualną", którą Microsoft zainwestował w rozwój produktu. Ale byłabyś rozczarowana. Kodeks to długa seria przyziemnych decyzji, podejmowana jedna po drugiej. Niektórzy byliby mądrzejsi, niż ci się wydaje. Niektórzy zostawiliby Cię kręcącego głową, zastanawiającego się, jakie małpy tam zatrudniają. Większość po prostu wzruszyłaby ramionami i powiedziała: "tak, tak się to robi."

Podczas tego procesu dowiesz się wiele o pisaniu systemów operacyjnych, ale to nie zaszkodzi Microsoftowi.

Zamień "Vista" na "Leopard" i powyższe akapity nie zmieniają ani jednego bitu. To Nie Microsoft, to oprogramowanie. Połowa osób na tej stronie mogłaby prawdopodobnie opracować Klon przepełnienia stosu, z lub bez patrzenia na źródło tej strony. Po prostu nie. kod źródłowy Firefoksa a WebKit jest tam dla każdego do czytania. Teraz idź napisać własną przeglądarkę od zera. Do zobaczenia za kilka lat.

Tworzenie oprogramowania to inwestycja czasu. To absolutna pycha, aby wyobrazić sobie, że to, co robisz, jest tak wyjątkowy, że nikt nie mógł sklonować go bez patrzenia na źródło, lub nawet że uczyniłoby to ich pracę o wiele łatwiejszą bez możliwej do zaskarżenia (i łatwo wykrywalnej) ilości cięcia i pasty.

 142
Author: Charles Miller,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-07 12:43:43

Nie zgadzam się z większością powyższych odpowiedzi.

To prawda, że każde oprogramowanie może zostać skradzione pomimo zaciemnienia, ale przynajmniej trudniej jest wyodrębnić i ponownie wykorzystać poszczególne części oprogramowania i o to chodzi.

Może jest tańsze i mniej ryzykowne użycie maskowania niż pozostawienie kodu otwartego i walka w sądzie po tym, jak ktoś ukradł najlepsze części naszego oprogramowania i zrobił niebezpieczną współbieżność.

Unobfuscated code whispers:

  • dalej, przeanalizuj mnie, wykorzystaj ponownie. Może mógłbyś zrobić lepsze oprogramowanie używając mnie.

Zakodowany kod mówi:

  • odejdź koleś. Tańsze jest używanie własnych pomysłów niż próbowanie mnie złamać.
 32
Author: pcjuzer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-19 13:43:22

Będziesz toczył przegraną bitwę, jeśli spróbujesz zaciemnić swój kod w nadziei, że ktoś go nie ukradnie. Możesz zatrzymać przypadkową przeglądarkę, ale ktoś oddany prawie na pewno byłby w stanie pokonać każdy środek, którego używasz.

W przeszłości widziałem, jak ludzie robią kilka rzeczy:

  1. Wklej wiele białych znaków na górze strony z komunikatem informującym ludzi, że kod jest niedostępny, gdy w rzeczywistości wystarczy przewinąć w dół kilka stron.
  2. uruchamianie go przez jakiś enkoder, jest to tak przydatne, ponieważ może być po prostu uruchamiane przez dekoder.
  3. inną metodą jest redukcja nazw zmiennych do jednego znaku i usunięcie białych spacji(jest to również sprawność).

Istnieje wiele innych metod.

W końcu twoje wysiłki mogą tylko powstrzymać zwykłą przeglądarkę od Zobaczenia Twoich rzeczy. Jeśli pojawi się ktoś oddany to nie ma wiele będziesz w stanie zrób. Musisz z tym żyć.

Moją radą byłoby stworzenie naprawdę niesamowitego produktu, który przyciąga najwięcej ludzi i pokonuje konkurencję, mając najlepszy produkt / usługę / społeczność, a nie najbardziej zaciemniony kod.

 3
Author: Doug Miller,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-15 21:59:03

Zawsze masz do czynienia z faktem, że każdy użytkownik, który przychodzi do twojej strony internetowej będzie pobrać jakąś roboczą wersję Źródła Javascript. będą miały kod źródłowy. Zaciemnienie go może bardzo utrudnić ponowne użycie go przez kogoś z zamiarem kradzieży twojej ciężkiej pracy. Jednak w wielu przypadkach ktoś może nawet ponownie użyć zaciemnionego źródła! Albo w najgorszym przypadku mogą ją rozwikłać ręcznie i ostatecznie zrozumieć.

Przykład takiej sytuacji jak Twoje może być Google Maps . Źródło Javascript jest wyraźnie zaciemnione. Jednak dla naprawdę prywatnej / wrażliwej logiki przepychają dane do serwera i każą serwerowi przetwarzać te informacje za pomocą XMLHTTPREQUESTS (AJAX). Dzięki tej konstrukcji masz ważne części po stronie serwera, znacznie bardziej ściśle kontrolowane.

 1
Author: Joseph Pecoraro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-27 02:53:19

To chyba najlepsze, co możesz zrobić. Po prostu należy pamiętać, że każdy z wystarczającym poświęceniem, może prawdopodobnie usunąć zaciemnienie programu. Po prostu upewnij się, że czujesz się z tym komfortowo przed rozpoczęciem projektu. Myślę, że największym problemem byłoby kontrolowanie, kto używa go na swojej stronie. Jeśli ktoś idzie na stronę z Twoim kodem i lubi to, co robi, nie ma znaczenia, że nie rozumie, co robi kod, lub nie może go odczytać, kiedy może po prostu skopiować kod kod, i używać go na własnej stronie.

 0
Author: Kibbee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-27 02:49:43

Obfuscator w ogóle Ci nie pomoże, jeśli ktoś chce rozgryźć kod. Kod nadal istnieje na komputerze klienta i mogą pobrać jego kopię i przestudiować go w wolnym czasie.

Po prostu nie ma sposobu, aby ukryć kod napisany w Javascript, ponieważ kod źródłowy musi być przekazany do przeglądarki w celu wykonania.

Jeśli chcesz ukryć swój kod, masz następujące opcje:

1) Użyj środowiska, w którym skompilowany kod (nie źródłowy) jest pobierany do klienta, np. Flash lub Silverlight. Nie jestem nawet pewien, czy to niezawodne, ale na pewno jest o wiele lepsze niż Javascript.

2) mają back-end po stronie serwera, który wykonuje pracę i cienkiego klienta, który po prostu wysyła żądania do serwera.

 0
Author: 17 of 26,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-27 02:50:11

Powiedziałbym, że tak, wystarczy, jeśli również upewnisz się, że skompresujesz Kod również za pomocą narzędzia takiego jak Dean Edward ' s Packer lub podobnego. Jeśli myślisz o tym, co jest możliwe dzięki narzędziom takim jak.NET Reflector w zakresie inżynierii wstecznej skompilowanego kodu / IL w. NET, zdajesz sobie sprawę, że nic nie możesz zrobić, aby całkowicie chronić swoją inwestycję.

Z drugiej strony, pamiętaj, że ludzie, którzy publikują swój kod źródłowy, również wydają się robić całkiem ładnie i tak - to ich doświadczenie, że ludzie chcą więcej niż ich własność intelektualna.

 0
Author: Dylan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-27 02:52:30

Code obfuscator wystarczy na coś, co wymaga minimalnej ochrony, ale myślę, że zdecydowanie nie wystarczy, aby naprawdę chronić Ciebie. jeśli jesteś cierpliwy, możesz odeprzeć wszystko.. i jestem pewien, że są programy, które zrobią to za Ciebie.

To powiedziawszy, nie możesz powstrzymać nikogo przed piractwem Twoich rzeczy, ponieważ w końcu złamie każdy rodzaj ochrony, którą stworzysz. i jest espcially łatwe w języku skryptowym, gdzie kod nie jest opracowano na podstawie materiału źródłowego.

Jeśli używasz innego języka, może Javy lub. NET, możesz spróbować wykonać takie czynności, jak "wywołanie domu", aby sprawdzić, czy numer licencji pasuje do podanego adresu url. Co działa, jeśli Twoja aplikacja jest rodzajem aplikacji online, która będzie cały czas połączona z Internetem. Ale mając dostęp do źródła, ludzie mogą łatwo ominąć tę część.

W skrócie, javascript jest słabym wyborem dla tego, co robisz.
Krok w górę od tego, co robisz, to może Korzystanie z webservice backend, aby uzyskać dane. Pozwól webservice obsługiwać proces uwierzytelniania/weryfikacji. Wymaga trochę pracy, aby upewnić się, że jest kuloodporny, ale to Może działać

 0
Author: paan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-27 03:01:43

Jeśli jest to strona internetowa, która ze swej natury umieszcza przeglądanie swojego kodu o jedno kliknięcie w menu, to czy istnieje } Naprawdę jakiś powód, aby cokolwiek ukrywać? Jeśli ktoś chce ukraść twój kod, najprawdopodobniej podejmie wysiłek uczynienia nawet najbardziej zniekształconego kodu czytelnym dla człowieka. Spójrz na komercyjne strony internetowe, nie zaciemniają ich kodu, i nikt nie wychodzi i nie kradnie kodu z google apps. Jeśli naprawdę martwisz się kradzieżą kodu, argumentowałbym za napisaniem go w innym skompilowany język. (co oczywiście niszczy całą rzecz webapp...) Nawet wtedy, nie jesteś całkowicie bezpieczny, istnieje wiele de-kompilatorów tam.

Tak naprawdę, nie ma sposobu, aby zrobić to, co chcesz w obliczu kogoś z wystarczającą motywacją.

 0
Author: dwestbrook,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-27 03:06:46