Zabezpieczenie przed kopiowaniem małego programu

0

Witam,

Jestem obecnie na finiszu tworzenia niewielkiego dodatku do Excela i Worda. Ponieważ dodatek(nawet w wersji "roboczej") przydał mi się bardzo podczas pisania mojej pracy magisterskiej pomyślałem że możnaby na nim zarobić parę groszy (dosłownie, myślę że max to 20 zł/licencję) i ułatwić życie zwłaszcza studentom kierunków typu budownictwo, mechanika itd.

Chciałbym zabezpieczyć w jakiś sposób mój program przed instalowaniem go na wielu kompach. Zastanawiam się w jaki sposób zrobić to, żeby wyszło z tego zabezpieczenie tanie ale też mało uciążliwe. Myślałem nad sposobem z plikiem licencji:

1.Osoba ściąga wersję 30-dniową jakoś tam ograniczoną. Jeśli się jej spodoba, program generuje numer na podstawie sprzętu(wiem temat rzeka, co brać pod uwagę itd.)

2.Osoba wpisuje wygenerowany numer na stronie mojego programu, przechodzi całą procedurę mikropłatności itd, na tej podstawie strona generuje zaszyfrowany plik licencji który użytkownik pobiera.

  1. W programie użytkownik wskazuje plik licencji tym samym odblokowuje program. Program deszyfruje plik licencji za pomocą numeru sprzętowego wygenerowanego wcześniej. Sprawdza sumę kontrolną itd.

Czy zabezpieczenie tej postaci ma w ogóle sens ? Klucz szyfrujący byłby tak naprawdę cały czas jawny - musiałby go podać użytkownik w trakcie rejestracji programu na stronie, co w sumie trochę mnie martwi biorąc pod uwagę że użytkownik mógłby go łatwo odszyfrować i zmienić powiedzmy okres trwania licencji itd( czy to da się załatwić przez sumę kontrolną pliku?).

Problem jest też w tym że o ile całość będzie chodziła pod .NET, to już proces generowania licencji na stronie będzie musiał być napisany w PHP, nie interesuję się tym zbytnio. Da radę w ogóle coś takiego osiągnąć ?

Czy jakieś inne proste rozwiązania? Nie chciałbym tworzyć bazy danych numerów licencji ani w ogóle rejestrować użytkowników. Kto wiem jak to będzie wygldało za jakiś czas- może się zdarzyć że porzucę wsparcie dla programu i tysiąc innych rzeczy więc aktywacje, rejestracje itd nie chodzą w grę. Nie interesuje mnie w sumie kto ten program pobiera liczy się tylko to żeby jedną licencję dało się zarejestrować na jednym komputerze i nie dało się jej przekazać komuś innemu.

Ktoś ma może zdanie na ten temat ?

0

@W2K gdyby się tak dało to wielkie koncerny nie wydawałyby milionów $ na tworzenie nowych zabezpieczeń. Co byś nie zrobił to niestety ale da się to złamać. Skoro program w .NET to można go sobie reflectorem zdekompilować i zobaczyć co z tego pliku licencji i jak wczytujesz i zrobić sobie własny plik licencji ;] Albo jakiś banalny jmp dopisać w kodzie do ominięcia procedury sprawdzania licencji.

0
Shalom napisał(a):

@W2K gdyby się tak dało to wielkie koncerny nie wydawałyby milionów $ na tworzenie nowych zabezpieczeń. Co byś nie zrobił to niestety ale da się to złamać. Skoro program w .NET to można go sobie reflectorem zdekompilować i zobaczyć co z tego pliku licencji i jak wczytujesz i zrobić sobie własny plik licencji ;] Albo jakiś banalny jmp dopisać w kodzie do ominięcia procedury sprawdzania licencji.

Ale ja nie oczekuję że będzie to zabezpieczenie nie do pokonania, bo wiem że się tak nie da. Chodzi mi bardziej o ocenę sensowności tego co napisałem powyżej. Sensowności pod kątem wyważenia midyz stopniem skomplikowania zabezpieczenia a ceną programu. Sam program to też nie jakieś cudo które będą kopiowac wszyscy, niemniej jakieś minimalne zabezpieczenie chciałbym zrobić.

0

@W2K no dobra, to przeleć swój program relfectorem i zobacz ile zajęłoby ci wywalenie tego testowania licencji i skompilowanie bez niego ;)

0

No ok. Faktycznie byłoby to banalne. Ale po zastosowaniu zaciemniania kodu itd już jakiś poziom bezpieczeństwa da się chyba osiągnąć ?

0

Zrób wirtualną maszynę do wykonywania abstrakcyjnego kodu. Później zrób program do tłumaczenia kodu wykonywalnego na kod VM. Albo nie...

Zrób generator maszyn wirtualnych! Niech sekcje krytyczną (tą którą chcesz ukryć) wykonuje maszyna wirtualna, która wykonuje VM, która wykonuje VM ... tak ze 20 razy .. która wykonuje kod Twojego programu.

Trudne? Dlaczego więc myślisz, że ktoś miałby udostępnić to za darmo?

0

@W2K niestety zaciemnienie kodu jest średnio/mało skuteczne, szczególnie Dotfuscator dostępny w VS. Jeśli zależy ci na bardziej skutecznych metodach to możesz zrobić mały trik i przenieść część funkcjonalności wraz z generowaniem klucza(HWID) do zewnętrznej dllki napisanej np. w C++. Potem zabezpieczyć dllke, dzięki temu cracker nie będzie mógł w tak prosty sposób ominąć zabezpieczeń.

0
Shalom napisał(a):

zobaczyć co z tego pliku licencji i jak wczytujesz i zrobić sobie własny plik licencji ;]

Przed zrobieniem własnego pliku licencji akurat można się łatwo zabezpieczyć, stosując jakiś szyfr asymetryczny, np. RSA.

Shalom napisał(a):

Albo jakiś banalny jmp dopisać w kodzie do ominięcia procedury sprawdzania licencji.

Można próbować to utrudnić poprzez wstawienie procedury sprawdzania pliku licencji w różnych miejscach programu, w różnej postaci (żeby uniknąć find & replace), najlepiej korzystając z jakiegoś makrogeneratora.

Tajiri napisał(a):

Jeśli zależy ci na bardziej skutecznych metodach to możesz zrobić mały trik i przenieść część funkcjonalności wraz z generowaniem klucza(HWID) do zewnętrznej dllki napisanej np. w C++. Potem zabezpieczyć dllke, dzięki temu cracker nie będzie mógł w tak prosty sposób ominąć zabezpieczeń.

Trzeba by przy tym zwrócić uwagę na to, aby podmiana dll na specjalnie spreparowaną, np. generującą klucz niezależny od sprzętu nie było za proste.

0

Ja używam tego do zaciemienia http://confuser.codeplex.com/

1 użytkowników online, w tym zalogowanych: 0, gości: 1