Tworzenie komercyjnego oprogramowania Java (DRM)

Zamierzam zrobić jakiś program do sprzedaży przez internet. Stworzyłem wcześniej tylko open-source, więc naprawdę nie mam pojęcia, jak chronić go przed pęknięciem i dystrybucją jako warez. Mając na uwadze, że znam jak dwa programy, które nie są ani popękane, ani niezbyt przydatne, zdecydowałem, że jedyny mniej lub bardziej niezawodny sposób może wyglądać tak:

  1. Połącz się z serwerem i podaj informacje o licencjach oraz informacje o podsumowaniu sprzętu
  2. Jeśli wszystko jest w porządku, serwer zwraca kilka kluczowych brakujących części programu związanych z danym komputerem wraz z limitem użycia powiedzmy 2 dni
  3. te kluczowe rzeczy nie są zapisywane na dysku twardym, więc są pobierane za każdym razem, gdy program się uruchamia, jeśli program działa dłużej niż 2 dni, dane są pobierane ponownie
  4. jeśli te same informacje są używane z różnych komputerów, zawieś konto klienta

Co o tym myślisz? To może wydawać się trochę restrykcyjne, ale lepiej zrobić mniej sprzedaż na początku, a następnie w końcu zobaczyć mój precious killer aplikacja pobrana za darmo. Tak czy inaczej, najpierw potrzebuję jakiejś podstawowej teorii/samouczków/przewodników o tym, jak zapewnić, że użytkownik używa tylko określonej aplikacji Java, Jeśli za nią zapłacił, więc proszę zasugeruj niektóre.

Thanks

Author: Fluffy, 2010-03-18

14 answers

Pracuję dla firmy sprzedającej chronione oprogramowanie Java.

Nie będę komentował schematu uwierzytelniania użytkowników, ale mogę skomentować sprawdzenie licencji online.

Nie rób tego nawet "przez dwa dni": tak piratuję większość oprogramowania... Maszyna wirtualna ustawiona "wstecz w czasie" i zewnętrznie Firewall tak, że nie" dzwoni do domu " już (to znaczy: pozwala tylko raz skontaktować się z serwerem, aby uzyskać klucz próbny), zawsze ponownie od punktu, w którym oprogramowanie zostało świeżo zainstalowane i bingo, 30-dniowa wersja próbna (lub dwudniowa wersja próbna) stała się dożywotnią wersją próbną. Dlaczego to robię? Aby dowiedzieć się, jak lepiej chronić naszą aplikację, oczywiście ;) (ok, OK, robię to też dla zabawy)

To, co robimy w naszym komercyjnym oprogramowaniu Java, to Sprawdzanie licencji przy każdym starcie.

Mamy setki klientów i nikt nigdy o tym nie narzekał. Ani razu. Na każdym biegu generujemy unikalną klasę, która jest inna na każdym biegu, która zależy zarówno od rzeczy unikalne dla tego uruchomienia po stronie klienta i na rzeczy generowane raz po stronie serwera.

Oprócz tego, że aplikacja kontaktuje się z serwerem przy każdym uruchomieniu to świetny sposób na zebranie danych analitycznych: współczynnik pobierania do wersji próbnej, średnia liczba uruchomień nb na wersję próbną itp. I nie jest już paskudny niż posiadanie Urchin/Google JavaScript tracker na każdej stronie jest paskudny.

Po prostu wyjaśnij ludziom, że Twoje oprogramowanie wykonuje sprawdzenie licencji online: Mamy ogromne pole wyboru albo włączone, albo wyłączone, mówiąc: "Weryfikacja licencji Online: OK / Failed". I to wszystko. Ludzie wiedzą, że jest czek. Jeśli im się to nie podoba, używają gorszych produktów konkurencyjnych, a życie jest dobre.

Ludzie są przyzwyczajeni do życia w świecie przewodowym.

Jak często można nie uzyskać dostęp do Gmaila, ponieważ połączenie internetowe jest wyłączone? Jak często można nie dostęp do FaceBook lub tak, ponieważ połączenie internetowe jest wyłączone?

Chodzi o to, aby wykonać tyle obliczeń, ile możliwe zależne od strony serwera:

  • sprawdzenie prawa jazdy
  • Zapisz preferencje użytkownika
  • kopia zapasowa danych wygenerowanych przez Twoją aplikację
  • itd.

Nikt nie będzie narzekał. Będziesz miał 0.1% użytkownika narzekać i tak nie chcesz tych użytkowników: to oni będą narzekać na inne rzeczy i pisać negatywne opinie na temat aplikacji online. Lepiej mieć ich, aby w ogóle nie używać swojego oprogramowania i narzekać na fakt, że wymaga zawsze włączone połączenie internetowe (które 99.99% docelowej grupy demograficznej, a tym samym nie będzie obchodzić się ze skargą), a nie w rzeczywistości, aby korzystali z aplikacji i narzekali na inne rzeczy związane z aplikacją.

Odnośnie dekompilacji, .Klasa zazwyczaj może być dekompilowana z powrotem do .java, chyba że używasz obfuscatora przepływu kodu, który tworzy poprawny bajt kodu, ale z którego nie można go wygenerować .plik java (stąd niemożliwe jest odzyskanie poprawnego .java plik).

String obfuscator pomaga trudniej to zrozumieć.

Kod źródłowy obfuscator utrudnia zrozumienie.

Bytecode obfuscator jak wolny Proguard utrudnia (i generuje szybszy kod, szczególnie zauważalny w świecie mobilnym), aby dowiedzieć się.

Jeśli wysyłasz tylko Windows / Linux, możesz użyć konwertera Java-to-native, takiego jak Excelsior Jet (nie jest darmowy i trochę drogi dla startupów, ale produkuje natywny kod, z którego można po prostu nie można znaleźć .Java files back).

Jako zabawna uwaga na marginesie zobaczysz ludzi próbujących zadzierać z Twoim serwerem online... Na około 30 beta-testerów mieliśmy już ludzi (o których wiemy gdzie część trialu) próbujących piratować nasze serwery online.

 16
Author: SyntaxT3rr0r,
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
2010-03-17 23:30:36

Przykro mi, że cię odrzucam, ale Najpierw powinieneś mieć pojęcie o tym, co chcesz zbudować; następnie powinieneś udowodnić , że twój pomysł nie tylko działa, ale jest również uwielbiany przez użytkowników do tego stopnia, że chcą Go piracić. Po trzecie, musisz upewnić się, że czas, który inwestujesz w uczynienie go "bezpiecznym", jest rzeczywiście wart wartości aplikacji.

Jeśli sprzedasz go za dolara, a sprzedasz tylko dziesięć kopii i spędzisz 100 godzin, aby go zabezpieczyć, policz sobie i powiedz, Czy twój czas był wart tych pieniędzy.

Oto komunikat: wszystko można złamać lub skopiować. Na koniec są dużo jaśniejsi ludzie niż my (pękanie iPhone ' a, telewizja cyfrowa, Gry itp.) i nikt nie znalazł srebrnej kuli. Jedyną rzeczą, którą możesz zrobić, to sprawić, że będzie trudniej złamać Twoją aplikację (często kosztem użyteczności, łatwości instalacji i przez cięcie narożników w niektórych scenariuszach użytkowania). Zadając sobie pytanie, czy warto kłopoty to zawsze dobry punkt wyjścia.

 10
Author: lorenzog,
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
2010-03-17 23:11:58

Nie kłopocz się.

[[0]}branża gier od dziesięcioleci walczy z piractwem. Gry Wieloosobowe Online z centralnym serwerem zazwyczaj wymagają subskrypcji. Model ten jest dość odporny na piractwo. Prawie wszystkie inne gry są mocno pirackie, pomimo niezliczonych prób DRM.

Twoja aplikacja będzie pęknięta i piracka, bez względu na to, w jakim języku ją piszesz i jakich narzędzi używasz, aby temu zapobiec. Jeśli DRM faktycznie działa, ludzie, którzy by go Piraci i tak tego nie kupię. Ponadto uprawnieni użytkownicy będą preferować inne produkty, które nie mają natrętnych DRM. Jeśli nie ma konkurencyjnych produktów, a Twój ma jakiś rynek, o którym można mówić, ktoś go stworzy.

 6
Author: Zak,
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
2010-03-17 23:14:02

O ile Twoja aplikacja nie jest specjalnie oparta na sieci, Twoi użytkownicy będą mieli ogromny problem z wymaganiem połączenia z Internetem, aby mogli uzyskać dostęp do produktu. To, co sugerujesz, zadziała, chyba że się zepsuje, tak jak wszystkie systemy DRM. Rozumiem, że chcesz chronić swoją własność intelektualną, ale z wieloma firmami jako przykładami, systemy te są zwykle zepsute lub produkt robi znacznie gorzej z ich powodu.

 3
Author: zellio,
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
2010-03-17 23:10:39

Naprawdę nie mam pojęcia jak chronić przed pęknięciem i dystrybuowane jako warez.

Po pierwsze, lepiej wybrać język oprócz Javy, jeśli to jest problem. Dlatego C++ wciąż żyje i ma się dobrze w świecie aplikacji komercyjnych. Jeśli nie zamierzasz użyć prawdziwego kompilatora Javy do natywnego exe, rozważyłbym Javę ze względów ochrony IP.

W tym przypadku nawet C++ nie jest odporny na pękanie, ale prorekcja IP vs. cracking to dwa osobne, ważne sprawy.

 2
Author: codenheim,
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
2010-03-17 22:50:51

To naprawdę trudne zadanie, szczególnie gdy coś działa w maszynie wirtualnej. Powiedziałbym, że myślisz we właściwym kierunku. Zaciemnienie go, aby utrudnić jego modyfikację, może uniemożliwić obejście wbudowanych kontroli licencji.

Jednak ostatecznie, jeśli aplikacja jest samodzielna, zawsze będzie można ją złamać. Jeśli możesz zbudować go tak, aby korzystał z usług , które dostarczasz, to prawdopodobnie możesz polecić jego użycie.

 1
Author: Tomislav Nakic-Alfirevic,
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
2010-03-17 22:48:40

Parafrazując Pana Jeffa Atwooda, lepiej jest ułatwić klientowi zapłacenie Ci, niż złamać aplikację. Innymi słowy, myślę, że atakujesz zły problem. Spraw, aby kupowanie produktu było naprawdę łatwe, a następnie twoi klienci nie poczują, że muszą podjąć wysiłek jego pęknięcia.

 1
Author: mR_fr0g,
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
2010-03-17 23:15:34

Chciałbym spojrzeć na luz z gry Sport przed podjęciem decyzji o systemie licencji. Mieli to telefon do domu, i tylko dozwolone tak wiele instalacji, itp. itd. itd. Sport miał być ich "App Killer" i to naprawdę miał trudny czas po prostu z powodu licencji. Mówisz, że chcesz mieć mniej sprzedaży niż zobaczyć ludzi korzystających z niego za darmo, ale może chcesz być ostrożny, o co prosisz. Byłem naprawdę nie mogę się doczekać Sport (i tak były moje dzieci), ale nigdy kupiłem go z powodu systemu DRM.

Bez względu na to, co robisz, będzie pęknięty w bardzo krótkim czasie, zwłaszcza jeśli program naprawdę jest coś wart.

Jeśli korzystasz z systemu licencjonowania, uczyń go prostym i użytecznym, aby nie karać tych, którzy faktycznie zapłacili za Twoje oprogramowanie. Również, chciałbym uniknąć wszelkich kontroli stylu phone-home, w ten sposób Twoi klienci będą mogli nadal korzystać z oprogramowania, nawet jeśli nie chcesz płacić za tę domenę 3 lata od teraz.

 1
Author: digitaljoel,
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
2010-03-17 23:16:30

Widzę konkretną słabość w twoim przykładzie, poza komentarzem, który większość osób już wstawiła, że DRM jest trudny (niemożliwy) do wdrożenia i często prosty do obejścia.

W drugim punkcie:

Jeśli wszystko jest w porządku, serwer zwraca kilka kluczowych brakujących części program związany z danym komputerem wraz z limitem użycia powiedzmy 2 dni

Ten limit 2 (lub X) dni będzie najprawdopodobniej niezwykle prosty do obejścia, to tylko kilka minuty do znalezienia i łatania (pęknięcia).

Jeśli naprawdę chcesz mieć model DRM, jedynym rozsądnym sposobem jest umieszczenie znacznej części aplikacji jako usługi internetowej i Wymaganie stałego połączenia od użytkowników.

Zanim spróbujesz tego, przeczytaj wykorzystywanie Oprogramowania , a zastanowisz się dwa razy, zanim spróbujesz zrobić DRM.

 1
Author: Rickard von Essen,
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
2010-03-17 23:22:11

Myślę, że biorąc pod uwagę kontekst, najskuteczniejszą formą ochrony na razie byłoby podejście ograniczone demo / license key: dałoby to ludziom czas na zakochanie się w Twojej aplikacji, aby byli gotowi za nią zapłacić, ale zapobiegali przypadkowemu kopiowaniu.

Gdy już wiesz, że Twoja aplikacja uderzyła w nią mocno, a krakersy udowodniły, że wysysają znaczną część Twoich możliwych zarobków, możesz nadal dodawać dodatkowe czeki.

Kolejną rzeczą do rozważenia jest to, gdzie jest Twoja aplikacja będzie używany: jeśli jest to coś, co ludzie umieszczą na swoich laptopach, aby korzystać z nich w podróży, łączność sieciowa nie jest podana.

 1
Author: Lars,
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
2010-03-17 23:43:37

To jeden z najostrzejszych DRM, o jakim słyszałem, Twoi użytkownicy by go znienawidzili.

Należy również pamiętać, że istnieje wiele dobrych dekompilatorów Javy ze względu na naturę języka i ktoś wystarczająco zdeterminowany może po prostu znaleźć obszary programu zajmujące się Twoim DRM i obejść/wyłączyć go , a następnie przekompilować go (zgodnie z tym rekompilacja byłaby nierealna)... więc musiałbyś nawet pójść z drogi, aby zaimplementować swój kod tak złożony, jak możliwe, aby zapobiec sukcesowi hakera. (Co można zrobić za pomocą jednego z tych narzędzi zaciemniania kodu, które mogą tam mieć.)

 0
Author: defectivehalt,
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 11:46:49

Dopóki jest to aplikacja internetowa, możesz ją ograniczyć w ten sposób. Poza złamaniem programu, działa to dobrze, z wyjątkiem ataków replay.

Na przykład, jeśli Mogę uchwycić ruch, który trafia do twojego serwera, i po prostu odtworzyć go z powrotem do mojego programu za każdym razem, nadal jestem dobry. Na przykład mogę utworzyć własny "serwer WWW" i upewnić się, że program trafi, że zamiast serwera.

 0
Author: Marcus Adams,
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
2010-03-17 23:46:43

Powinieneś przeczytać "Ukryte oprogramowanie" od Collberga i nagry. Ta książka jest naprawdę dobra, aby pomóc ci zrozumieć, jak działają mechanizmy ochrony oprogramowania (takie jak zaciemnianie kodu, znak wodny, znakowanie urodzeń itp...).

Jak powiedział lorenzog, total security nie istnieje, a bezpieczeństwo oprogramowania jest jak ciągły wyścig między dostawcami oprogramowania a piratami.

Powinieneś użyć tanich przeobrażeń zaciemniających (aby koszty, które ponoszą, Nie zabijały wydajności), aby zapobiegaj jak największej liczbie atakujących (pamiętaj, że większość z nich to script kiddies), aby "ukraść" algorytmy zabójcy lub tajne dane.

Jeśli chcesz jeszcze bardziej zwiększyć bezpieczeństwo, możesz zaznaczyć swoje algorytmy i dodać znak wodny do swoich kopii, aby dowiedzieć się, kto wyciekł z twojego dzieła. Ale nawet jeśli to zrobisz, nie oznacza to, że Twoje oprogramowanie jest w 100% zabezpieczone. Dodatkowo czas, który poświęcisz na dodawanie tych mechanizmów, może nie być wart wysiłku.

Te pojęcia są naprawdę dobrze wyjaśnione w książce, o której wspomniałem wcześniej, którą warto przeczytać.

 0
Author: tchufa,
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
2010-03-17 23:56:25

Gdybym miał wystarczająco punktów reputacji, zagłosowałbym na to pytanie. Komercyjna ochrona oprogramowania jest stratą czasu, pieniędzy i wysiłku z wielu powodów. Skoncentruj się na tworzeniu oprogramowania, które warto kupić. Jeśli twoje oprogramowanie jest wystarczająco popularne, aby utrzymać szerokie zasiewanie przez piratów, prawdopodobnie jesteś na tyle skuteczny, że nie będziesz się nawet martwić o piractwo. W każdym razie, krakersy pękają ochronę oprogramowania głównie dla Zabawy. Im silniejsza ochrona, tym lepsze wyzwanie prezenty i tym bardziej chcą je złamać. Twój najlepszy wysiłek będzie cię kosztować tysiące, zajmie miesiące i zostanie pęknięty w ciągu zaledwie kilku dni.

 0
Author: Eric,
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
2010-03-29 01:26:24