Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Numery seryjne
Forum PHP.pl > Inne > Hydepark
nasty
Piszac aplikacje desktopowa dla klienta (.NET) zaczol mnie nurtowac pewien problem, jak do tej pory robilem jakies komercyjne programy to wymyslalem sobie jakis sposob na sprawdzanie poprawnosci seriala, co trudno nazwac algorytmem, bo głównie bylo to takie proste cos w stylu ze 3 litera klucza byla
czwarta litera md5 dziesiatej i podobne duperele, ale mysle ze to nie jest najlepsze rozwiazanie, szukalem po sieci o algorytmach numerow seryjnych to mi daje cos o generowaniu numerow produktow (jak barkody, czy numery IMEI komórek).

Innym pomyslem ktory robilem, to opieranie serialu (tez takie czord wie co tongue.gif), o configuracje sprzetu, jak np. ID. BIOS-u, itd....


I kupowanie gotowych zabezpieczen jest bez sensu bo sa popularne, a jak cos sie staje popularne to przestaje byc bezpieczne bo rosnie wtedy liczba
osob pubujacych to zlamac dla "sportu", tak wiec prosilbym bardzo o jakies linki do stron z takimi algorytmami, albo dac jakas idee.

Pozdrawiam i dziekuje.


--edit: Kto mi tu tak koloruje na czerwono ? biggrin.gif
NetJaro
Był o tym temat.. ale ja polecam ionCube - więcej info na google.
Mogę "Cię kodować" jak chcesz ;-) To na prawdę świetne rozwiązanie i bezpieczne smile.gif A tak to nie ma dobrego rozwiązania.. bo wszystko można złamać..
nasty
hmm, na poczatku pisalem wyraznie ze to jest aplikacja .net. winksmiley.jpg
I nie szukam aplikacji, czy przykladowego kodu, tylko ideei.
NetJaro
Ahh, faktycznie - sorry smile.gif

Idee były właśnie w tym temacie co wyżej napisałem - bo był już spory temat na ten temat smile.gif
mr.r
Program napisany w .net warto zabezpieczyc obfuscatorem, wtedy narzedzia typu .net reflector nie produkuja już tak ładnego kodu zrodlowego.

Jezeli chodzi o seriale, to warto w tym miejscu zainteresowac sie RSA albo jakims systemem sygnatur (DSA albo ElGamal) z rozsadna dlugoscia klucza. Jezeli chcesz jeszcze bardziej zmiejszyc prawdopodobienstwo zlamania i zmiejszyc dlugosc seriali to ECC jest dobrym wyborem (lub system sygnatur oparty na krzywych eliptycznych). Jezeli aplikacja do dzialania wymaga internetu to mozna pobawic sie z sprawdzaniem seriala na serwerze z baza seriali osob, ktore kupily program.

Oczywiscie na sposoby sa inne sposoby i tak system sygnatur mozna zlamac gdy sa za krotkie klucze lub zostaly zle wygenerowane. Gdy klucze sa odpowiedniej dlugosci zawsze mozna wygenerowac swoje i podmienic w programie, w takim wypadku warto zainteresowac sie jakimis sumami kontrolnymi z kodu programu. Tak samo mozna postapic z aktywacja przez internet i poprostu zapatchowac ja winksmiley.jpg

Najlepszym wyjsciem jest polaczenie kilku technik.

Jezeli w programie jest sprawdzanie tego typu: if(wprowadzony_serial == generuj_serial(name)) to takie zabezpieczenie jest nic nie warte nawet gdy oparte jest na konfiguracji sprzetu. .Net reflector produkuje kod swietnej jakosci (o ile program nie byl pojechany obfuscatorem) i zrobienie keygena to kwestia przekopiowania funkcji generuj_serial do projektu w Visual Studio

Mam nadzieje, ze chociaz minimalnie rozjasnilem kwestie zabezpieczenia Twojego programu smile.gif
nasty
Cytat
Program napisany w .net warto zabezpieczyc obfuscatorem, wtedy narzedzia typu .net reflector nie produkuja już tak ładnego kodu zrodlowego.

No, ja poszedlem jeszcze dalej, bo znalazlem soft co kopiluje dll-ki .NET-u do natywnych, i jak otwiram je w jakims reflectorze, to pokazuje tylko skielety funkcji, bez ich
"wnetrznosci" winksmiley.jpg cos jakby to byl interfejs albo klasa abstrakcyjna.
A obfuscator w tej sytuacji jest warty tyle co obfuskatory do php, tylko opuzni prace krakerowi, a skopilowana biblioteka sie dekompiluje tylko jako asm.

Cytat
Jezeli chodzi o seriale, to warto w tym miejscu zainteresowac sie RSA albo jakims systemem sygnatur (DSA albo ElGamal) Z rozsadna dlugoscia klucza. Jezeli aplikacja do dzialania wymaga internetu to mozna pobawic sie z sprawdzaniem seriala na serwerze z baza seriali osob, ktore kupily program.

System sygnatur? czytasz mi w myslach bo wpadlem na taki pomysl zeby olac numery seryjne, bo za duzo zachodu bedzie o to, i zastosowac plik licencyjny o takiej struktuze:
  1. <?xml version="1.0" encoding="utf-8" standalone="yes"?>
  2. <LicenseProvider>
  3.  <EntryGroup name="Product">
  4.    <Entry name="Name">Nazwa Produktu</Entry>
  5.    <Entry name="Version">Versja</Entry>
  6.    <Entry name="Test">Jakies inne dane o produkcie</Entry>
  7.  </EntryGroup>
  8.  <EntryGroup name="License">
  9.    <Entry name="Owner">Nazwa klienta</Entry>
  10.    <Entry name="Rules">
  11.      <Rule name="Expire">timestamp</Rule>
  12.      <Rule name="Test">Jakies inne warunki</Rule>
  13.    </Entry>
  14.    <Entry name="HardwareSignarure">Hasz identifikujacy sprzet komputera</Entry>
  15.  </EntryGroup>
  16.  <EntryGroup name="File">
  17.    <Entry name="Signature">I tutaj bedzie hasz z sygnatura tego pliku</Entry>
  18.  </EntryGroup>
  19. </LicenseProvider>

gdzie nie bede musial nawet szyfrowac tego pliku bo bedzie on chroniony przed modyfikacja haszem z File->Signature...
Co myslisz o tym rozwiazaniu?

ps. Zna ktos jakies pozadne forum .NET? bo na deveopers.pl jest kiepsko sad.gif a szukalem, to mi pokazuje jakies dot-net.fora.pl czy inne pierdoly... sad.gif
mr.r
Cytat(nasty_psycho @ 3.09.2006, 23:05:53 ) *
gdzie nie bede musial nawet szyfrowac tego pliku bo bedzie on chroniony przed modyfikacja haszem z File->Signature...
Co myslisz o tym rozwiazaniu?


Moze byc, keyfile bedzie nawet wygodniejszy dla koncowego uzytkownika. Tylko nie zadna ochrona przed modyfikacja hashem. W wezle <Entry name="Signature"> musi byc sygnatura DSA, ElGamal, ECDSA albo cos podobnego zrobiona z grupy Product i License. Piszac sygnatura nie mam na mysli hasha SHA1 czy MD5 tylko sytem sygnatur oparty na kluczu publicznym i prywatnym. Tak, ze Ty generujesz klucz prywatny i publiczny. Prywatny idzie do Twojego programu do generowania licencji a publiczny do chronionego programu (w uproszczeniu). Teraz potencjalny reverser nie majac klucza prywatnego nie moze wygenerowac sygnatury. Bez klucza prywatnego reverser moze go zdobyc tylko poprzez faktoryzacje N (w RSA) lub rozwiazujac DLP (w DSA lub ElGamalu) co jest strasznie czasochlonne jezeli klucze sa odpowiednich rozmiarow.

Dobrym rozwiazaniem zeby reverser mial duzo roboty jest uzywanie hidden checkow czyli sprawdzanie "jakis tam" czesci sygantury, seriala czy czegokolwiek w roznych miejscach programu, czy np. podczas zapisywania albo otwierania plikow, mozna dodac tez odrobine losowosci i nie zawsze sprawdzac tylko co np. pare dni.

Jezeli chodzi o Strong name signature to tez nie za bardzo chroni plik exe czy dll przed modyfikacja bo bardzo latwo mozna podmienic klucze.

Mam nadzieje, ze nie zamotalem zabardzo ale zabezpieczenia programow to dosc zlozony temat smile.gif

I jedna sprawa: czym zabezpieczenie jest bardziej "swoje", mam na mysli, ze nie kupione to tym wiecej cracker musi spedzic czasu nad nim. I nie jest powiedziane, ze jak zobaczy cos zamotanego to da sobie spokoj winksmiley.jpg
nasty
dzieki za wypowiedzi, i czy zna ktos jakies dobre forum o .NET ? zeby bylo na podobnym poziomie co forum.php.pl winksmiley.jpg
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.