Jak skuteczne jest zaciemnianie?

Inne pytanie, tj. Best. Net obfuscation tools / strategy, stawia pytanie, czy zaciemnienie jest łatwe do zaimplementowania przy użyciu narzędzi.

Moje pytanie brzmi, czy zaciemnianie jest skuteczne? w komentarzu odpowiadającym na ta odpowiedź, ktoś powiedział, że "Jeśli martwisz się o kradzież źródła... zaciemnienie jest niemal trywialne dla prawdziwego krakersa ".

Spojrzałem na wyniki z edycji społecznościowej Dotfuscator: i wygląda na zaciemniony dla mnie! I nie chciałbym tego utrzymywać!

Rozumiem, że samo "pękanie" zaciemnionego oprogramowania może być stosunkowo łatwe: ponieważ musisz tylko znaleźć dowolną lokalizację w oprogramowaniu, która implementuje to, co chcesz złamać (zazwyczaj Ochrona licencji), i dodać skok, aby to pominąć.

Jeśli zmartwienie jest czymś więcej niż tylko pękaniem przez użytkownika końcowego lub "pirata": jeśli zmartwienie jest "kradzieżą źródeł", tzn. jeśli jesteś sprzedawcą oprogramowania, a Twoim zmartwieniem jest inny sprzedawca (potencjalny konkurent) inżynieria odwrotna źródła, które następnie mogą wykorzystać lub dodać do własnego produktu ... w jakim stopniu zwykłe zaciemnianie jest odpowiednią lub niewystarczającą ochroną przed tym ryzykiem?


1. edycja:

Omawiany kod to około 20 KLOC, który działa na maszynach użytkowników końcowych (kontrola użytkownika, nie Usługa zdalna).

Jeśli zaciemnienie naprawdę jest " prawie trywialne dla prawdziwego krakersa ", chciałbym mieć pewien wgląd w Dlaczego jest nieskuteczne (i nie tylko " ile " to nie jest skuteczne).


2. Edycja:

Nie martwię się o to, że ktoś odwróci algorytm: bardziej martwię się o to, że przerobią rzeczywistą implementację algorytmu (tj. kodu źródłowego) do swojego własnego produktu.

Zastanawiając się, że 20 KLOC to kilka miesięcy pracy nad rozwojem, czy potrzeba więcej czy mniej niż to (kilka miesięcy), aby deobfuscate to wszystko?

Czy w ogóle konieczne jest deobfuscate coś w aby "ukraść" to: a może rozsądny konkurent po prostu włączyć go hurtowo do swojego produktu, podczas gdy nadal zaciemniony, zaakceptować, że-jest to koszmar konserwacji, i nadzieję, że potrzebuje niewiele konserwacji? Jeśli ten scenariusz jest możliwością, to czy zasłonięty Kod. Net jest bardziej podatny na to niż skompilowany kod maszynowy?

To w większości obfuskowany "wyścig zbrojeń" mający na celu przede wszystkim uniemożliwienie ludziom nawet "pęknięcia" czegoś (np. odnalezienia i usunięcia fragment kodu, który implementuje ochronę licencji/egzekwowanie), bardziej niż zapobieganie "kradzieży źródeł"?

Author: Community, 2009-02-16

9 answers

Omówiłem, dlaczego nie sądzę, aby zaciemnienie było skutecznym środkiem ochrony przed pękaniem tutaj:
Chroń kod. NET przed inżynierią odwrotną

Jednak twoje pytanie dotyczy konkretnie kradzież źródła, ciekawy temat. W książce Eldada Eiliamsa "Reversing: Secrets of Reverse Engineering" autor omawia kradzież źródeł jako jeden z powodów inżynierii odwrotnej w dwóch pierwszych rozdziałach.

Zasadniczo, sprowadza się to do tego, że jedyną szansą na kradzież źródeł jest to, że masz jakiś bardzo specyficzny, trudny do zaprojektowania algorytm związany z twoją domeną, który daje Ci przewagę nad konkurencją. Jest to jedyny czas, w którym opłacalna byłaby próba inżynierii wstecznej niewielkiej części aplikacji.

Więc, jeśli nie masz jakiegoś ściśle tajnego algorytmu, którego nie chcesz, aby Twoja konkurencja miała, nie musisz się martwić o kradzież źródeł. Koszt udział w cofnięciu znaczącej ilości kodu źródłowego z Twojej aplikacji szybko przekracza koszt ponownego napisania go od podstaw.

Nawet jeśli masz jakiś algorytm, którego nie chcesz, nie możesz zrobić zbyt wiele, aby powstrzymać zdeterminowane i wykwalifikowane osoby przed jego otrzymaniem (jeśli aplikacja jest wykonywana na ich komputerze).

Niektóre typowe środki przeciwzakłóceniowe to:

    [[22]}zaciemnianie-nie robi wiele w zakresie ochrony Twojego źródło lub zapobieganie jego pęknięciu. Ale równie dobrze możemy nie ułatwiać tego, prawda?
  • 3rd Party Packers - Themida jest jednym z lepszych. Pakuje plik wykonywalny do zaszyfrowanej aplikacji win32. Zapobiega odbiciu, jeśli aplikacja jest aplikacją. NET.
  • Custom Packers - czasami pisanie własnego Packera, jeśli masz do tego umiejętności, jest skuteczne, ponieważ w scenie pękania jest bardzo mało informacji o tym, jak rozpakować swój podanie. To może zatrzymać niedoświadczonych RE. ten tutorial daje kilka dobrych informacji na temat pisania własnego Packera.
  • trzymaj tajne algorytmy z dala od maszyny użytkowników. Wykonaj je jako usługę usuwania, aby instrukcje nigdy nie były wykonywane lokalnie. Jedyna "niezawodna" metoda ochrony.

Jednak packery można rozpakować, a zaciemnienie nie przeszkadza tym, którzy chcą zobaczyć, co robi Twoja aplikacja. Jeśli program jest uruchomiony na użytkownicy Maszyny to jest podatny.

Ostatecznie jego kod musi być wykonywany jako kod maszynowy i zwykle jest to kwestia uruchomienia debuggera, ustawienia kilku punktów przerwania i monitorowania instrukcji wykonywanych podczas odpowiedniej akcji i czasu spędzonego na przeglądaniu tych danych.


Wspomniałeś, że napisanie ~20kloc zajęło ci kilka miesięcy. To zajmie prawie rząd wielkości dłużej, aby odwrócić te równoważne 20kloc z twojego zastosowanie do wykonalnego źródła, jeśli podjąłeś minimum środków ostrożności.

Dlatego odwracanie małych, specyficznych dla branży algorytmów z aplikacji jest opłacalne. Cokolwiek innego i nie warto.

Weźmy następujący fikcyjny przykład: Powiedzmy, że właśnie opracowałem nową konkurencyjną aplikację dla iTunes, która miała mnóstwo bajerów i gwizdków. Załóżmy, że opracowanie zajęło kilka 100k LOC i 2 lata. Jedną z kluczowych cech, które posiadam, jest nowy sposób serwowanie Ci muzyki w oparciu o twój gust słuchania muzyki.

Apple (będąc piratami są) dostaje wiatr z tego i decyduje, że naprawdę podoba im się Twoja muzyka sugerować funkcji, więc postanawiają go odwrócić. Następnie udoskonalą tylko ten algorytm, a inżynierowie wsteczni w końcu wymyślą wykonalny algorytm, który serwuje równoważne sugestie, biorąc pod uwagę te same dane. Następnie implementują ten algorytm we własnej aplikacji, nazywają go "geniuszem" i robią następny 10 bilionów dolarów.

W ten sposób dochodzi do kradzieży źródeł .

Nikt by tam nie siedział i nie cofał wszystkich 100K LOC, aby ukraść znaczące fragmenty skompilowanej aplikacji. Byłoby to po prostu zbyt kosztowne i zbyt czasochłonne. Około 90% czasu odwracali nudny, tajemniczy kod, który po prostu obsługiwał naciśnięcia przycisków lub obsługiwał wejścia użytkownika. Zamiast tego mogliby zatrudnić własnych programistów do napisania większości z nich od podstaw za mniejsze pieniądze i po prostu odwróć ważne algorytmy, które są trudne do zaprojektowania i które dają przewagę(np.

 37
Author: mmcdole,
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
2017-05-23 12:10:23

Zaciemnienie jest formą bezpieczeństwa poprzez zaciemnienie i chociaż zapewnia pewną ochronę, bezpieczeństwo jest oczywiście dość ograniczone.

Dla celów, które opisujesz, ciemność z pewnością może pomóc, a w wielu przypadkach jest odpowiednią ochroną przed ryzykiem kradzieży kodu. Jednak z pewnością nadal istnieje ryzyko, że kod będzie "niewidoczny", biorąc pod uwagę wystarczająco dużo czasu i wysiłku. Unobfuscating całej bazy kodowej byłoby skutecznie niemożliwe, ale jeśli zainteresowany strona chce tylko określić, jak zrobiłeś pewną część swojej realizacji, ryzyko jest wyższe.

W końcu tylko Ty możesz określić, czy ryzyko jest tego warte dla Ciebie lub Twojej firmy. Jednak w wielu przypadkach jest to jedyna opcja, jeśli chcesz sprzedać swój produkt klientom w celu wykorzystania w ich własnym środowisku.

Jeśli chodzi o "dlaczego jest nieskuteczny" - powodem jest to, że cracker może użyć debuggera, aby zobaczyć, gdzie działa twój kod niezależnie od tego, co stosuje się technikę zaciemniania. Następnie mogą użyć tego do obejścia wszelkich wprowadzonych mechanizmów ochrony, takich jak numer seryjny lub system "telefon domowy".

Nie wydaje mi się, aby ten komentarz odnosił się do "kradzieży kodu" w tym sensie, że Twój kod zostanie skradziony i użyty w innym projekcie. Ponieważ używali słowa "krakers", sądzę, że mówili o "kradzieży" w kategoriach piractwa oprogramowania. Krakersy specjalizują się w pracy z mechanizmami ochrony; są nie jestem zainteresowany używaniem kodu źródłowego do innych celów.

 10
Author: wuputah,
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
2009-02-16 00:50:55

Większość ludzi ma tendencję do pisania tego, co wydaje się być zaciemnionym kodem, a to nie powstrzymało krakersów, więc jaka jest różnica?

EDIT:

Ok, poważny czas. Jeśli naprawdę chcesz zrobić coś, co jest trudne do złamania, zajrzyj do kodowania polimorficznego (nie mylić z polimorfizmem). Zrobić kod, który jest samo-mutacji, i to jest poważny ból do złamania i będzie trzymać je zgadywania.

Http://en.wikipedia.org/wiki/Polymorphic_code

In the end, nie ma rzeczy niemożliwych do odwrócenia.

 7
Author: James Jones,
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
2009-02-16 00:56:44

Martwisz się, że ludzie kradną określone algorytmy używane w Twoim produkcie. Albo jesteś Sprawiedliwy , albo musisz odróżnić się bardziej niż sposób, w jaki x++;. Jeśli rozwiązałeś jakiś problem w kodzie, który nie może być rozwiązany przez kogoś innego zastanawiającego się nad nim przez kilka godzin, powinieneś mieć doktorat z informatyki i / lub patenty, aby chronić swój wynalazek. 99% produktów programistycznych jest NIE udanych lub specjalnych ze względu na algorytmy. Oni odnoszą sukces, ponieważ ich autorzy wykonali ciężki wysiłek, aby połączyć znane i łatwo zrozumiałe koncepcje w produkt, który robi to, czego potrzebują ich klienci i sprzedaje go taniej, niż kosztowałoby zapłacić innym, aby ponownie zrobić to samo.

 5
Author: Rex M,
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
2009-02-16 02:45:00

Spójrz na to w ten sposób; edytor WMD, do którego wpisałeś swoje pytanie, został zaprojektowany przez zespół SO w celu naprawienia niektórych błędów i wprowadzenia ulepszeń som. Ten kod był zaciemniony. Nigdy nie powstrzymasz inteligentnych zmotywowanych ludzi przed hakowaniem Twojego kodu, najlepsze, na co możesz mieć nadzieję, to utrzymanie uczciwych ludzi w uczciwości i uczynienie go nieco trudnym do złamania.

 2
Author: Ed S.,
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
2009-02-16 01:37:21

Wydaje mi się, że zaciemnianie nie jest zbyt skuteczne, jeśli chcesz chronić swoje źródło. Dla prawdziwego eksperta w tej dziedzinie (nie mam tu na myśli eksperta w dziedzinie oprogramowania lub crackera, mam na myśli eksperta w dziedzinie funkcjonalności kodu), zazwyczaj nie musi on widzieć kodu, po prostu zobaczyć, jak reaguje na specjalne wejścia, przypadki krawędzi itp., aby dowiedzieć się, jak zaimplementować kopię lub kod, który jest odpowiednikiem tej chronionej funkcjonalności. Tak więc, nie bardzo pomocne w ochronie Twojego know-how.

 1
Author: Diego Sevilla,
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
2009-02-16 00:17:58

Jeśli posiadasz adres IP w kodzie, który musi być chroniony za wszelką cenę, powinieneś udostępnić funkcjonalność swojego oprogramowania jako usługę, na zabezpieczonym zdalnym serwerze.

Dobra maskowanie ochroni cię do pewnego stopnia, ale chodzi o ilość wysiłku wymaganego do złamania go przed "nagrodą" posiadania kodu. Jeśli mówisz o zatrzymaniu przeciętnego użytkownika biznesowego, to komercyjny zaciemniacz powinien być wystarczający.

 1
Author: Mitch Wheat,
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
2009-02-16 00:18:28

Jeśli kiedykolwiek widziałeś wyjście z disassemblera, zdajesz sobie sprawę, dlaczego zaciemnianie zawsze zawodzi.

 1
Author: Benjamin Autin,
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
2009-02-16 03:20:43

Krótka odpowiedź brzmi tak i nie; to zależy całkowicie od tego, co próbujesz zapobiec. Sekcja dwunasta Secure Programming Cookbook ma kilka ciekawych komentarzy na ten temat na stronie 653 (która jest wygodnie niedostępna w Google books preview). Klasyfikuje anty-manipulowanie na cztery kategorie: Zero day( spowalnianie atakującego, więc zajmuje im dużo czasu, aby osiągnąć to, czego chcą), Ochrona zastrzeżonego algorytmu zapobiegającego inżynierii odwrotnej, ataki" ponieważ mogę" i nie pamiętam czwartego. Musisz zapytać, czemu próbuję zapobiec, a jeśli naprawdę martwisz się, że dana osoba spojrzy na Twój kod źródłowy, to zaciemnienie ma pewną wartość. Używany samodzielnie zwykle jest to po prostu irytacja dla kogoś, kto próbuje namieszać w Twojej aplikacji i jak każdy dobry środek bezpieczeństwa działa najlepiej, gdy jest używany w połączeniu z innymi technikami zapobiegania manipulacjom.

 0
Author: Kevin Loney,
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
2009-02-16 00:35:42