Ochrona oprogramowania przez szyfrowanie

Dla naszego oprogramowania używamy kluczy sprzętowych do ochrony oprogramowania. Żadna Ochrona nie jest doskonała, ale to komercyjne rozwiązanie jest niedrogie i utrzymuje uczciwych ludzi uczciwych (jak wspomniano w innym wątku). Zaletą jest 128-bitowy klucz, który jest przechowywany "nieczytelny" na kluczu sprzętowym.

Chcemy usunąć ten klucz sprzętowy i zacząć używać ochrony oprogramowania. Zasadniczo możemy użyć produktu komercyjnego, ale z drugiej strony, który również nie będzie Nietłukący. Niewiele wiem. o szyfrowaniu i dlatego to zamieszczam. Jak przechowywać klucz na komputerze z systemem Windows, który nie będzie możliwy do odczytania za pomocą reflektora lub czegoś innego? Jednak powinienem być w stanie uzyskać dostęp do klucza do testowania kodu licencji.

Chciałbym tylko prostego rozwiązania, którego nie da się zhakować po prostu używając Reflektora.

Czy zadaję bardzo głupie pytanie?


Dziękuję wszystkim za bardzo szybkie i przydatne odpowiedzi. Nie chcę używać licencji na internet, ponieważ aplikacja działa nie zawsze na podłączonych komputerach. Wtedy otrzymam prawdopodobnie więcej problemów, a następnie je rozwiążę. Teraz najprawdopodobniej wybierzemy rozwiązanie komercyjne. Wygląda na to, że ochrona nie jest trywialna.

Wielkie dzięki!!

Author: Michael Myers, 2008-10-23

14 answers

Prowadzę firmę programistyczną, która zajmuje się tym problemem od prawie 20 lat. Jako deweloper i właściciel firmy chciałbym najpierw zachęcić Cię do nieco poszerzenia swoich celów. Na przykład błędem jest zdefiniowanie problemu jako " zapobieganie piractwu."Twoim celem powinno być maksymalizacja przychodów.

Mając to na uwadze, są ludzie, którzy po prostu nigdy nie kupią Twojego oprogramowania, ale mogą podjąć dość znaczące wysiłki, aby uzyskać je za darmo. To nie jest "fair", że oni uzyskaj bezpłatną kopię, ale umieszczenie wielu zasobów w wysiłku, aby zapobiec temu, jest w dużej mierze stratą czasu. Rzeczywiście, ci ludzie często kończą "legalnie" po prostu, aby dostać się na naszą listę aktualizacji, aby uzyskać wsparcie lub ponieważ ich firma rozwija się do tego stopnia, że mogą sobie pozwolić na naszą licencję. W takich przypadkach pierwotne piractwo zwiększa nasze dochody.

Więc, jak licencjonować?

Generujemy losowy Numer licencji z każdą nową instalacją (liczba między 10K i 99K robi ładnie). Następnie mamy algorytm generowania pasującej liczby (zrobi to wszystko, co nietrywialne). Nawiasem mówiąc, używamy losowej liczby, aby każda próba ponownej instalacji na innym komputerze skutkowała różnymi numerami licencji / dopasowania.

Następnie prosimy użytkowników o zadzwoń do nas przez telefon, aby uzyskać pasujący numer dla ich licencji (jest to ważne). Oprogramowanie patrzy na dopasowany numer, który wprowadzają i porównuje go z dopasowaną wartością wygenerowaną Po Stronie Użytkownika. Jeśli jest dopasowanie, oprogramowanie jest w pełni aktywowane.

Mówię, że telefon do nas jest ważny, ponieważ używamy go jako okazji, aby porozmawiać z nimi o ich konfiguracji, odpowiedzieć na wszelkie pytania i dać im znać, że mają do czynienia z prawdziwymi ludźmi. Bardzo niewiele osób ma czelność dzwonić i podszywać się pod inną firmę (sprawdzamy je i porównujemy ich informacje z naszą bazą zakupów). Należy pamiętać, że nasz pakiet działa prawie $2K więc rozmowy telefoniczne są rozsądne. Jeśli Twoja paczka kosztuje mniej i ma większą objętość, możesz to zrobić za pośrednictwem poczty elektronicznej. Na koniec używamy funkcji call-in, aby poinformować użytkowników, jak uzyskać aktualizacje i wsparcie techniczne z nową licencją.

Na koniec przechowujemy klucz w bazie danych aplikacji (lokalnie zainstalowanej bazie MSDE/SQL Express), dzięki czemu każda próba skopiowania aplikacji będzie a) nietrywialna i B) przyniesie wiele danych specyficznych dla organizacji, która jako pierwsza kupiła legalną wersję (co zmniejsza prawdopodobieństwo ich udostępnienia). Licencjonowanie klucz jest szyfrowany i "dzielony" na dwa różne klucze, które są przechowywane w dwóch różnych tabelach. Tak więc proste "znajdź klucz i wprowadź go w pirackiej wersji" nie będzie działać.

The bottom line? Kiedy tworzysz cały pakiet więcej niż tylko oprogramowanie, budujesz kilka podstawowych mechanizmów ochronnych i wprowadzasz ludzki element, powinieneś zobaczyć, że nie potrzebujesz wydatków i kłopotów klucza sprzętowego, aby zmaksymalizować przychody.

 13
Author: Mark Brittingham,
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-10-22 21:12:53

Nie da się całkowicie zabezpieczyć klucza. Jeśli może być odczytany przez twój program, to może być odczytany przez inny program.

 17
Author: Ignacio Vazquez-Abrams,
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-10-22 20:12:10

Absolutną odpowiedzią jest oczywiście to, że zdeterminowany i zręczny atakujący może złamać każdą ochronę, ale szczególnie w przypadku oprogramowania, które nie jest na wysokim poziomie popytu lub sławy, umiejętni i zdeterminowani atakujący są rzadkością, więc podejmowanie środków ochronnych ma sens.

Aby zweryfikować licencję, wysłanie klucza do centralnej lokalizacji jest najbezpieczniejszym sposobem, ponieważ musieliby złamać twój serwer (lub protokół, uważaj), aby móc zweryfikować. Wymagałoby to podłączenia do oprogramowanie, które może, ale nie musi być wykonalne. Możesz również rozpowszechniać "serwer licencyjny" wraz z oprogramowaniem dla dużych instalacji, które wymagają tylko dostępu do sieci lokalnej. Jeśli nie możesz i musisz walidować tylko lokalnie, możesz napisać bibliotekę dll w kodzie natywnym, co utrudniłoby inżynierię wsteczną.

Aby chronić sam kod i utrudnić jego obejście, zaciemnić:

Podsumowując, możesz uzyskać lepszą wartość z pakowanego rozwiązania.

 10
Author: Vinko Vrsalovic,
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 10:27:51

I dlatego ochrona przed kopiowaniem i 'utrzymywanie uczciwych użytkowników uczciwych' jest przegraną bitwą. Nie musisz utrzymywać uczciwych użytkowników uczciwych, oni już są.

WiÄ ™ kszoĹ "Ä ‡ efektywnych schematĂłw ochrony przed kopiowaniem skupia siÄ ™ obecnie na wykonywaniu sporadycznych sprawdzaĺ" klucza na centralnym serwerze. Niech aplikacja co jakiś czas sprawdza klucz na centralnym serwerze i może określić, czy oprogramowanie jest poprawnie licencjonowane. Oczywiście jestem już za upraszczaniem, ale to jest jeden podejdźcie.

 3
Author: foxxtrot,
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-10-22 20:20:19

Przeczytałem ciekawą prezentację o jak skype podchodzi do zadania ochrony oprogramowania za pomocą szyfrowania.

 3
Author: codeinthehole,
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-11-02 17:51:39

Zasadniczo będziesz musiał użyć komercyjnego rozwiązania. Podejście tutaj różni się od klucza sprzętowego i nie można oczekiwać po prostu replikacji klucza sprzętowego.

Zamiast tego, głównym rozwiązaniem jest użycie pewnego rodzaju klucza, który jest obliczany częściowo z rzeczy o komputerze, na którym działa oprogramowanie. Keygens, które robią to samo mogą być wykonane przez krakersy, ale tak to idzie. Mogli po prostu naprawić twoje oprogramowanie, aby nie szukać klucza sprzętowego.

 1
Author: Marcin,
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-10-22 20:20:36

Moim zaleceniem jest, jeśli jest znośny, trzymaj się klucza. To są najbardziej realne podejścia.

Jeśli nie jest to opcja, zdecydowanie przejdź do zewnętrznego dostawcy. Będziesz szukał między innymi kilku kluczowych funkcji (nie zamierzony kalambur):

  • bezpieczne przechowywanie klucza
  • Sprawdzanie licencji
  • [5]}maskowanie w czasie kompilacji (aby utrudnić demontaż aplikacji)

Nic z tego nie jest pewne-ogień. Najważniejsze jest to, że deweloperzy od dawna walczą z piractwem i zawsze przegrywamy, gdy piraci są wystarczająco zdeterminowani. Jeśli twoim głównym celem jest utrzymanie uczciwych ludzi w uczciwości, to przyzwoity pakiet ochrony oprogramowania komercyjnego prawdopodobnie zrobi to za Ciebie.

 1
Author: John Rudy,
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-10-22 20:24:32

Chociaż nic nie będzie idealne, sprawdź CRYPTPROTECTDATA API, jeśli chcesz zrobić to sam.

Szczerze mówiąc, prawdopodobnie będziesz miał mniej bólu głowy po prostu kupując rozwiązanie.

 0
Author: Rob Walker,
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-10-22 20:19:59

Czy te dane są po prostu komercyjnymi rzeczami, czy rzeczami, którymi dzielisz się z pracownikami i tak dalej?

Jeśli jest to drugie, być może możesz napisać szybki program c++, aby go xor. Zasadniczo, jeśli długość klucza jest równa długości dokumentu, powinna być " niezniszczalna."To, co robię w c++, to tworzenie bufora losowych znaków o rozmiarze dokumentu, następnie xor go, a następnie po prostu Wyślij Dokument i plik klucza osobno, a następnie druga osoba xor je razem, aby odzyskać dokument.

Nie wiem, czy to ci pomoże.

 0
Author: ,
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-10-22 20:28:44

Jeśli przechowasz klucz na komputerze lokalnym users, cracker będzie w stanie go zdobyć bez względu na to, jak bardzo starasz się temu zapobiec.

Dlaczego nie przechowywaæ klucza lub kluczowej czê ¶ ci kodu ochrony przed kopiowaniem zdalnie i mo ¿e przetwarzaæ go zdalnie?

 0
Author: QAZ,
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-10-22 20:31:41

Wygeneruj hash (SHA1, MD5, itp.) dla klucza i Zakoduj go na twardo w aplikacji. Udostępnij klucz swoim użytkownikom. W pliku wykonywalnym można sprawdzić hash klucza określonego przez użytkownika w stosunku do zakodowanego na twardo hasha:

bool CheckKey(string keyFromUser) 
   return SHA1(key) == "ABC2983CF293892CD298392FG";
}

Oznacza to, że każdy, kto może zdobyć klucz od twojej organizacji (lub innego użytkownika), może uruchomić aplikację, praktycznie trudno będzie określić klucz, sprawdzając plik wykonywalny.

To oczywiście nie jest bardzo silny Ochrona.

 0
Author: Hallgrim,
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-10-22 20:46:18

Ogólnie rzecz biorąc, oprogramowanie na maszynie niezwiązanej z siecią może zostać złamane. Jeśli Twoja aplikacja nie jest na tyle niszowa, że piraci mogą sprzedawać pęknięte kopie, zobaczysz, że tam. Jednym z rozwiązań, o którym słyszałem, że najwyraźniej się powiodło, jest samoodtwarzający się kod.

 0
Author: Paul Nathan,
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-10-22 21:08:37

Możesz wypróbować standardowe metody zwykle używane w grach PC, takie jak: SafeDisc,StarForce,SecuROM lub jakiekolwiek inne oprogramowanie zabezpieczające przed kopiowaniem. Systemy te należą do najbardziej rozwiniętych systemów oprogramowania do ochrony aplikacji.

Niemniej jednak doświadczenie mówi, że nie tylko-system ochrony oprogramowania jest nie do złamania, a czas potrzebny hakerom na ich złamanie jest wprost proporcjonalny do wartości chronionych treści. Nie ważne jak zaawansowany system ochrony ben używany do zapobiegania pirackich kopii popularnej gry, crack czeka na kilka miesięcy do przodu.

Stwierdziłeś, że serwer licencyjny jest problemem dla Twojego systemu, ale nie rzuciłbym go od razu. Myślę, że serwer licencyjny, który wydaje licencję przynajmniej przy pierwszym uruchomieniu programu (powiedzmy klucz deszyfrujący inny na instalację) jest najlepszym środkiem odstraszającym, aby zmniejszyć piractwo. Nie tylko ze względu na siłę metody szyfrowania, ale także i przede wszystkim ze względu automatyczny system rejestracji. Jeśli poinformujesz swoich klientów, że klucz aktywacyjny oprogramowania jest unikalny dla każdej instalacji/użytkownika i że jest przechowywany i dopasowany do profilu użytkownika, zastanowią się dwa razy nad rozdaniem klucza+oprogramowania.

 0
Author: Fernando Miguélez,
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-10-22 21:12:33

Pozwól mi dodać kilka myśli do twojego pytania:

  • Czy Twoje oprogramowanie wymaga jakiegokolwiek połączenia z Internetem?
    • Jeśli odpowiedź brzmi "tak", możesz monitorować użycie. (Poinformuj klienta o tej funkcjonalności!)
    • Jeśli odpowiedź brzmi "nie", nadal możesz monitorować użycie w większości przypadków, ale nie możesz wymusić połączenia z serwerami, aby produkt działał.
  • Czy chcesz dodać ochronę przed kopiowaniem do swojego oprogramowania? To nie pytanie retoryczne, ponieważ
    • Niektóre programy muszą być dostosowywane przez firmę programistyczną lub jej partnerów. Jeśli ktoś zrobi kopię oprogramowania, która musi być dostosowana przez ekspertów, po prostu nie będzie mu potrzebna.
    • np. jeśli pracownik Twojego klienta chce używać twojego wysokiej klasy oprogramowania do projektowania obwodów do swoich prywatnych projektów w domu, a Ty dajesz mu na to zgodę, masz kogoś w witrynie klientów, kto zagłosuje na Twój produkt przy każdym zakupie decyzja.
    • wysiłek dla roboczy Odbitkowy Ochrona móc wyższy strata tworzyć nieautoryzowany Kopia. (Pamiętaj, nadal możesz dołączyć go do następnej wersji.)
 0
Author: Black,
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-11-02 17:14:02