Autor Wątek: Budowanie prostego systemu DRM  (Przeczytany 4222 razy)

Offline Mormegil

  • Użytkownik
    • Moj dev blog

# Styczeń 29, 2009, 12:49:24
Fingerprint >> wiedza o tym czyja kopia wypłynęła do p2p dużo nie da. Po pierwsze trzeba by monitorować setki stron z torrentami, warez'ami, emul'a itp. Coś nie widzi mi się, żeby komukolwiek chciało się chodzić po całym tym syfie tylko po to, żeby... no właśnie żeby co ? Żeby odciąć użytkowników od teoretycznych bonusów i update'ów. A jak się któryś wkurzy i nas pozwie, to co ? W sądzie powie taki, że padł ofiarą kradzieży. Dałoby się udowodnić, że tak nie było, ale trzeba by monitorować sieci p2p, wyłapać ip seed'ow, powiązać ip z user'em. Krótko mówiąc trzeba by zatrudnić spory aparat śledczy.
Samo generowanie to raczej nie powinien być problem. Ostatecznie ile czasu może zająć wygenerowanie kilku liczb i ich zapisanie w bazie danych.

Zabezpieczenia >> Klucz jest fajny. Pirat rozpowszechnia grę razem z kluczem i wszyscy złodzieje są happy. Że da się stwierdzić czyj to był klucz. No i znowu jak udowodnić, że pirat nie padł ofiarą kradzieży ? Autor ma za to więcej pracy, bo musi stworzyć algorytmy generacji kluczy, weryfikacji kluczy, dystrybucji kluczy, odzyskiwania kluczy.
Aktywacja klucza. Jak rozpoznać czy klucz jest aktywowany drugi raz przez tą samą osobę, czy przez inną ? Jak stwierdzić czy ta inna osoba nie kupiła legalnie gry od tej pierwszej ? O ile jest to gra sieciowa, no to sprawa jest jasna. Nie może być dwóch użytkowników z tym samym kluczem równocześnie. Jeśli jednak sieciowa nie jest, to jak przekonać użytkownika, że jej komunikacja z siecią jest nieszkodliwa ? No i raczej bez netu się nie pogra, co może być uciążliwe.

Jeżeli nie planujesz działań a'la topware, czyli śledzenie i pozywanie wszystkich piratów, to ja bym sobie odpuścił i liczył na uczciwość klientów (pewnie jestem frajer ;) ).

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Styczeń 29, 2009, 13:33:01
Cytuj
Zgadzam się - Jedyne, co jest w miarę bezpieczne, to po prostu nie dołączanie resourców pełnej wersji gry do triala.
A czy ktos by mógł mi wyjaśnić, co w tym jest bezpieczniejszego w porównaniu z metodą proponowaną przeze mnie? :)

Cytuj
Co do fingerprintów, to wydaje się to sensowne rozwiązanie, ale wystarczy w teorii 'odjąć' od siebie dwie wersje gry, żeby zaleźć w którym miejscu fingerprint się znajduje. Dzięki temu bardzo łatwo będzie namierzyć dokładne miejsce sprawdzania zabezpieczeń w pliku wykonywalnym i się go po prstu pozbyć, na dodatek zaburzając fingerprinta.
Żeby nikt nie mógł wyłaczyć sprawdzania zabezpieczeń, najlepiej ich po prostu nie sprawdzać i zastosować np. proponowaną metodę z kodowaniem danych. ;)

Cytuj
Na dodatek, generowanie wersji z fingerprintem byłoby raczej mocno obciążające dla serwera, co jest sprawą dość kłopotliwą.
Na generowanie danych z unikatowym seedem, jak w mojej propozycji, można sobie pozwolić, bo cały algorytm sprowadza się do kryptograficznego generatora liczb losowych i xora, a więc można to zrobić w locie podczas pobierania pliku. Należało by tylko sprytnie tą możliwość wykorzystać. :)

Cytuj
Uruchamiając grę, musi się zalogować
Powyższe w większości wypadków może być zbyt dużym ograniczeniem. Zresztą, jeżeli da się grę uruchomić, to da się ją także złamać. :)

Cytuj
oznaczenie procesu pod WinVista jako DRM-secure
Na tym to akurat bym nie polegał - jeżeli włączane jest to automatyznie podczas ładowania programu, można poprzestawiać odpowiednie bity w exeku czy manifeście, a jeżeli włącza się już po uruchomieniu, to podłożyc odpowiednią DLLkę. ;) W najgorszym wypadku można cały system postawić na maszynie wirtualnej i łamać z tego poziomu. :)

Cytuj
Po pierwsze trzeba by monitorować setki stron z torrentami, warez'ami, emul'a itp. Coś nie widzi mi się, żeby komukolwiek chciało się chodzić po całym tym syfie tylko po to, żeby... no właśnie żeby co ?
Ale po co od razu ktoś ma po tym chodzić, skoro robią to boty google? ;)

Cytuj
Jak stwierdzić czy ta inna osoba nie kupiła legalnie gry od tej pierwszej ?
Dopisać odpowiedni zapis w licencji, że nie można odsprzedawać i po sprawie. ;)


Offline misioslaw

  • Użytkownik
    • www.asmforce.eu

# Styczeń 29, 2009, 14:12:11
Cytat: Krzysiek
Cytuj
Jak stwierdzić czy ta inna osoba nie kupiła legalnie gry od tej pierwszej ?
Dopisać odpowiedni zapis w licencji, że nie można odsprzedawać i po sprawie. ;)
O ile dobrze pamiętam to ustawa z 1994 roku zezwala na odsprzedaż oprogramowania.
Posiadacz może jednorazowo i bezwarunkowo zrzec się praw do tego oprogramowania na rzecz innej osoby,która musi przyjąć i zaakceptować umowę licencyjną programu.
Więc ten zapis w licencji byłby nieważny.
« Ostatnia zmiana: Styczeń 29, 2009, 14:14:24 wysłana przez misioslaw »

Offline Yarek

  • Użytkownik

# Styczeń 29, 2009, 15:17:48
Jeżeli musi już być jakieś zabezpieczenie to proponuje trzymać save'y na serwerze. Jeden minus to potrzebny dostęp do sieci i w razie problemów z siecią brak możliwości zapisania gry. W ten sposób łatwo zrobić prostego triala - user który nie ma pełnej wersji może robić zapis tylko do pewnego etapu :) Jak kupi pełną wersję wystarczy mały wpis w bazie danych i zdjęcie ograniczeń.

Ogólnie jestem przeciwny wszelkim zabezpieczeniom (nawet głupie wymaganie CD/DVD w napędzie podczas gry). Jak komuś będzie się chciało to każde zabezpieczenie złamie, a ktoś kto ma oryginał będzie się tylko irytował. Jak ktoś nie zamierzał kupić gry to i tak jej nie kupi a jak pogra w pirata to może się zdecyduje ;)

Offline Mormegil

  • Użytkownik
    • Moj dev blog

# Styczeń 29, 2009, 15:30:40
Ale po co od razu ktoś ma po tym chodzić, skoro robią to boty google? ;)
Trzeba jeszcze pobrać każde wystąpienie. Co jednak oznacza taki czy inny kontakt ze sporą ilością stron :(

Offline Asmodeusz

  • Użytkownik
    • Bogumił Wiatrowski: Blog

# Styczeń 29, 2009, 15:46:45
Cytuj
oznaczenie procesu pod WinVista jako DRM-secure
Na tym to akurat bym nie polegał - jeżeli włączane jest to automatyznie podczas ładowania programu, można poprzestawiać odpowiednie bity w exeku czy manifeście, a jeżeli włącza się już po uruchomieniu, to podłożyc odpowiednią DLLkę. ;) W najgorszym wypadku można cały system postawić na maszynie wirtualnej i łamać z tego poziomu. :)
Nie poprzestawiasz, bo te parametry ustawia instalator w usłudze DRM; jeśli dodamy w nim weryfikację online w czasie instalacji (można to łatwo połączyć z rejestracją), nie dystrybuujemy niezaszyfrowanego pliku. Jeśli podłożysz DLLkę i systemowi coś się nie spodoba (a tu akurat MS wykazał się wręcz niebywałą paranoją), albo sypnie się program, albo sypnie się usługa DRM (czyli w efekcie da nam to BSoDa). Wywołania lecą przez kernel.

Stawianie systemu na maszynie wirtualnej też średnio zda rezultat: szyfrowanie SecuRom wymaga jakiegoś tam układu pomocniczego (szyfrowanie sprzętowe), ponadto kod jest deszyfrowany tylko na trasie RAM<->cache, więc w RAMie nie ma sytuacji, żebyśmy operowali na zaszyfrowanym kodzie. Jeśli komuś chce się odczytywać budowę programu z instrukcji trafiających do cache, powodzenia. Zwłaszcza przy średnio 80 procesach na czystej Viście ;)

Cytuj
Jak stwierdzić czy ta inna osoba nie kupiła legalnie gry od tej pierwszej ?
Dopisać odpowiedni zapis w licencji, że nie można odsprzedawać i po sprawie. ;)
Cóż, taki zapis ma zerową moc, ale można zabezpieczyć się na wypadek kradzieży, dodając opcję rejestracji i obowiązek oznaczenia produktu jako kradzionego w wypadku takiego zdarzenia. W tym momencie blokujemy klucz, a user dostaje zupełnie nowy, wygenerowany dla niego.

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Styczeń 29, 2009, 17:17:12
Cytuj
Nie poprzestawiasz, bo te parametry ustawia instalator w usłudze DRM; jeśli dodamy w nim weryfikację online w czasie instalacji (można to łatwo połączyć z rejestracją), nie dystrybuujemy niezaszyfrowanego pliku. Jeśli podłożysz DLLkę i systemowi coś się nie spodoba (a tu akurat MS wykazał się wręcz niebywałą paranoją), albo sypnie się program, albo sypnie się usługa DRM (czyli w efekcie da nam to BSoDa). Wywołania lecą przez kernel.
Czyli jak zwykle odpowiedzią jest odpalenie systemu na maszynie wirtualnej, ewentualnie zmodowanie Visty, chociaż może wystarczy już sama zabawa z poziomu kernel mode (np. tworząc odpowiedni "driver"). Będzie proporcjonalnie więcej dłubania, ale dopóki kod się wykonuje u Ciebie bez jakichś sprzętowych udziwnień, to złamać da się wszystko. :)

Cytuj
Stawianie systemu na maszynie wirtualnej też średnio zda rezultat: szyfrowanie SecuRom wymaga jakiegoś tam układu pomocniczego (szyfrowanie sprzętowe), ponadto kod jest deszyfrowany tylko na trasie RAM<->cache, więc w RAMie nie ma sytuacji, żebyśmy operowali na zaszyfrowanym kodzie.
Jak już postawisz to na maszynie wirtualnej, to z odrobiną uporu powinieneś być w stanie wszelkie myki typu SecuRom wyłączyć. ;)

Offline misioslaw

  • Użytkownik
    • www.asmforce.eu

# Styczeń 29, 2009, 18:39:04
SecuRom został już dawno połamany, pilnowanie procesu poprzez Games for Windows Live też.

Cytuj
oznaczenie procesu pod WinVista jako DRM-secure
Na tym to akurat bym nie polegał - jeżeli włączane jest to automatyznie podczas ładowania programu, można poprzestawiać odpowiednie bity w exeku czy manifeście, a jeżeli włącza się już po uruchomieniu, to podłożyc odpowiednią DLLkę. ;) W najgorszym wypadku można cały system postawić na maszynie wirtualnej i łamać z tego poziomu. :)
Nie poprzestawiasz, bo te parametry ustawia instalator w usłudze DRM; jeśli dodamy w nim weryfikację online w czasie instalacji (można to łatwo połączyć z rejestracją), nie dystrybuujemy niezaszyfrowanego pliku. Jeśli podłożysz DLLkę i systemowi coś się nie spodoba (a tu akurat MS wykazał się wręcz niebywałą paranoją), albo sypnie się program, albo sypnie się usługa DRM (czyli w efekcie da nam to BSoDa). Wywołania lecą przez kernel.

Stawianie systemu na maszynie wirtualnej też średnio zda rezultat: szyfrowanie SecuRom wymaga jakiegoś tam układu pomocniczego (szyfrowanie sprzętowe), ponadto kod jest deszyfrowany tylko na trasie RAM<->cache, więc w RAMie nie ma sytuacji, żebyśmy operowali na zaszyfrowanym kodzie. Jeśli komuś chce się odczytywać budowę programu z instrukcji trafiających do cache, powodzenia. Zwłaszcza przy średnio 80 procesach na czystej Viście ;)

Czy takie coś zostało gdzieś zastosowane?

« Ostatnia zmiana: Styczeń 29, 2009, 18:41:25 wysłana przez misioslaw »

Offline asasm

  • Użytkownik

# Styczeń 29, 2009, 19:15:30
Podstawowa zasada anty-crackerska : jeśli program ma być demem czyli crippleware, to nie należy udostępniać w nim nic ponad to co ma zawierać demo. Żadnych "ślepych" funkcji, żadnych quasi nieaktywnych menu itd. Bo kompilator albo ich nie doda bo stwierdzi, że się nie wykonują, albo doda, a wtedy człowiek z debuggerem sobie poradzi. Jak w Monty Pythonie "not to be seen means not to be seen". Co do zabezpieczeń internetowych najlepsze są te online, które weryfikują co jakiś czas aplikację np. podając zmienny klucz (o ile gra powinna mieć stałe połaczenie z internetem). Większość mechanizmów zabezpieczających poległa dlatego, że istniała możliwość przechwycenia odszyfrowanej części kodu czy klucza. A systemów zabezpieczających Exe-ki jest i możliwością tworzenia kluczy licencyjnych jest sporo: od Asprotecta i Armadillo przez SecuRom'y, Pelocki, aż do Execryptore'a. Wszystko można znaleźć w google. Oczywiście większość jest do złamania czy obejścia, bo prawdziwi zapaleńcy mają dużo czasu i robią to dla sportu, ale z komercyjnego punktu widzenia potrwa to na tyle, że gra powinna się sprzedać/zwrócić...

Offline Avaj

  • Użytkownik

# Styczeń 29, 2009, 19:16:30
Z tego co pamiętam to SecuROMa na Spore złamano dwa dni przed premierą :)

Offline Mormegil

  • Użytkownik
    • Moj dev blog

# Styczeń 29, 2009, 19:48:23
Z tego co pamiętam to SecuROMa na Spore złamano dwa dni przed premierą :)
I to jest najlepszy komentarz do tematu :)

Offline Limal

  • Użytkownik
    • http://wolnik.co.uk

# Styczeń 29, 2009, 20:52:07
Na blogu Ayende (twórcy NHibernate) pojawił się ostatnio post autora, który ma ten sam problem co Ty, revo.

A complete and utter waste of my time. Warto przeczytać komentarze.

Offline Hadrian W.

  • Użytkownik
    • Homepage

# Styczeń 30, 2009, 10:28:43
Co do tego zabezpieczenia z Vistą, to czy czasem nie ograniczamy się wtedy tylko do Visty? Jeśli nie to czy nie wystarczy tego odpalić na systemie, który DRM-u nie wspiera?

Naprawdę DRM to tylko strata czasu. W tekście [1], który przytoczyłem na poprzedniej stronie była mowa o World of Goo (bez DRM). Możliwe, że o tej sprawie słyszeliście. W każdym razie wyliczyli orientacyjną ilość pirackich kopii i wyszło im, że "piracy-rate" wynosi około 90% (lub gdy trochę inaczej obliczyć 80%). Inny developer użył DRM-u i ich rate sięgnął podobnej liczby (bodaj 92%). No więc po co komu ten DRM?

[1] http://2dboy.com/2008/11/13/90/

Offline Esidar

  • Użytkownik

# Styczeń 30, 2009, 14:18:01
Tym się kończy zabezpieczenie gier http://www.gram.pl/pomoc_problem.asp?g=1255&p=3792