Autor Wątek: Tworzenie zabezpieczeń w grach.  (Przeczytany 3083 razy)

Offline eggman

  • Użytkownik

# Sierpień 01, 2008, 00:21:31
Witam serdecznie!
Szukałem w (czy jak niektórzy ludzie mawiają "na") internecie czegoś o tworzeniu zabezpieczeń w grach pisanych w C++ przed crackingiem, wyłapywaniem zmiennych i haseł, zmianą np. IP serwera w grze on-line etc. (dochodzi też temat tworzenia unikalnych i stałych identyfikatorów konkretnych komputerów).
Znalazłem masę stron o ich łamaniu, ale o tworzeniu - cóż...

Dlatego właśnie moja prośba: znacie może linki do artykułów lub możecie mi jakoś pomóc w tej sprawie? (na forum niestety też raczej nie bardzo można znaleźć)

p.s.
Nie znam asembla ;-)

p.s.2.
Tylko proszę Was...
Lubie open-source, ale nie jest to moim zdaniem "jedyna słuszna droga" (od razu zaznaczam że to nie temat na dyskusję o tym ;-) ), więc nie piszcie, żebym otworzył kod, to go nie będzie nikt chciał zhackować ;-)
« Ostatnia zmiana: Sierpień 01, 2008, 00:27:07 wysłana przez eggman »

Offline Mr. Spam

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

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Sierpień 01, 2008, 00:30:10
Cytuj
więc nie piszcie, żebym otworzył kod, to go nie będzie nikt chciał zhackować ;-)
Nie tyle co nie będzie chciał... nie będzie musiał. ;)

Offline eggman

  • Użytkownik

# Sierpień 01, 2008, 00:31:48
No wiedziałem że pierwszy post będzie o tym.
Ludzie bądźcie ludźmi i darujcie dyskusję o licencjach bo nie czas i nie miejsce po temu ;-)
« Ostatnia zmiana: Sierpień 01, 2008, 00:37:11 wysłana przez eggman »

Offline Harven

  • Użytkownik

# Sierpień 01, 2008, 00:38:23
(dochodzi też temat tworzenia unikalnych i stałych identyfikatorów konkretnych komputerów).

Z tym generialnie nie jest latwo zwlaszcza, jesli jesli zalezy Ci na obsludze wielu platform. Jasne jest, ze taki unikalny i staly identyfikator tworzy sie na bazie sprzetu (numery seryjne roznych komponentow). Jednak wyciagniecie tych informacji moze byc czasem problematyczne. Jesli zalezy Ci tylko na uzytkownikach windowsa to rzuc okiem na WMI, sa tam klasy typu Win32_BaseBoard, Win32_BIOS, Win32_DiskDrive itp. Maja one pola SerialNumber. Jednak z opisu wyglada, ze np. pod win95 raczej tego nie uzyjesz. Link: http://msdn.microsoft.com/en-us/library/aa394084%28VS.85%29.aspx

Offline Zielony

  • Użytkownik
    • Ghurund Engine

# Sierpień 01, 2008, 00:41:08
Ludzie bądźcie ludźmi i darujcie dyskusję o licencjach bo nie czas i nie miejsce po temu ;-)

w Polsce nie chroni się kodu, więc licencja nic tu nie daje

edit: dobra, nie piszę, sorry :]
« Ostatnia zmiana: Sierpień 01, 2008, 01:32:42 wysłana przez Zielony »

Offline asasm

  • Użytkownik

# Sierpień 01, 2008, 00:43:36
a o czym ma być niby ten wątek ? Jeżeli znalazłeś masę stron o łamaniu zabezpieczeń, to jednocześnie znalazłeś strony o tym jak wyglądają. Oczywiście nie bezpośrednio, bo crackera nie interesuje, czy programista stworzył klasę, referencje, wskaźnik, czy tabelę wirtualną. on ma kod asemblerowy i każdy dword wskazujący na miejsce w innej sekcji na stosie na zaalokowanej pamięci czy gdzie indziej jest dla niego rodzajem wskaźnika (to tak dla przykładu). Jeśli nie znasz asma to niewiele i tak Ci to wyjaśni. Natomiast oglądając takie zabezpieczenie uczysz sie jednak czegoś o jego budowie, choć oczywiście nie przełożysz tego łatwo na kod w języku wyższego poziomu. Słowem bez znajomości dobrej języków niskiego i wysokiego poziomu i dużego doświadczenia, raczej będzie Ci ciężko. Bo nawet jeśli znajdziesz stronę, w której ktoś Ci pokaże jak zbudować dane zabezpieczenie, to skoro nie wiesz jak ono działa na poziomie kodu maszynowego, nie jesteś w stanie ocenić jego słabych i mocnych stron. A co do lektury polecam na początek Kris Kaspersky "Dezasmeblowanie kodu" pozycja pokazująca, jak programy pisane w C i skompilowane różnymi kompilatorami
wyglądają w kodzie maszynowym, jakie są charakterystyczne struktury itd. itp. I trzeba dużo grzebac w kodzie, żeby do czegoś dojść bo bez pracy...

Offline eggman

  • Użytkownik

# Sierpień 01, 2008, 00:45:09
Jednak z opisu wyglada, ze np. pod win95 raczej tego nie użyjesz.

Pod win95 akurat nie muszę ;-)
Tylko przydałoby się na Linuxach.

W każdym razie thx za konkretną pomoc.

btw Zielony - nie pisz na ten temat, proszę.

asasm - nie uważam że łamanie jest tyle ważniejsze od tworzenia zabezpieczeń by nie uczyć zabezpieczać "z pierwszej ręki" zamiast szukać w tutkach (bardzo legalnych zresztą zwykle) o ich łamaniu między wierszami o tym jak się bronić.
Łatwiej zniszczyć niż zbudować ;-)
« Ostatnia zmiana: Sierpień 01, 2008, 00:46:57 wysłana przez eggman »

Offline Sethis

  • Użytkownik

# Sierpień 01, 2008, 00:46:05
Tak czy inaczej, NIE da sie calkowicie zabezpieczyc gry przed zcrackowaniem, predzej czy pozniej ktos wyNOPuje co trzeba i po zabawie.
(sry za brak polskich znakow, mam ustawiony jezyk na int zeby tylde latwiej mi sie pisalo :P)

Offline Harven

  • Użytkownik

# Sierpień 01, 2008, 00:47:45
P.S.
Jakbys znal asembler to moglbys troche namieszac umieszczajac niektore kluczowe dla Ciebie zmienne w sekcji programu co w pewnym stopniu utrudniloby dezasemblowanie Twojej gry (a raczej analize tego co by powstalo). Moze zakup (i przeczytanie) ksiazki "Dezasemblowanie kodu. Zaawansowane techniki zabezpieczania programów." bylby dobrym poczatkiem.

Offline eggman

  • Użytkownik

# Sierpień 01, 2008, 00:47:53
Tak czy inaczej, NIE da sie calkowicie zabezpieczyc gry przed zcrackowaniem, predzej czy pozniej ktos wyNOPuje co trzeba i po zabawie.
(sry za brak polskich znakow, mam ustawiony jezyk na int zeby tylde latwiej mi sie pisalo :P)

Nie ma nic doskonałego.
Nie chce pisać idealnego programu, tylko dobry.
Bądźcie bardziej konkretni.
Na razie na temat i pomocnie napisał tylko Harven, za co bardzo mu dziękuję, bez podlizywania się ;-)

Harven- no dobra daj ten kod w asemblu, będę musiał odświeżyć moją słabą z nim znajomość ;-)
« Ostatnia zmiana: Sierpień 01, 2008, 00:50:05 wysłana przez eggman »

Offline Knopi

  • Użytkownik

# Sierpień 01, 2008, 00:50:20
Skoro wiesz jak wyglądają luki w zabezpieczeniach to je załataj i po szpilu :)

Offline Harven

  • Użytkownik

# Sierpień 01, 2008, 00:53:25
Niestety kodu jak to zrobic nie mam. Mozesz poszukac w necie albo w ksiazce o ktorej pisalem :).

Offline misioslaw

  • Użytkownik
    • www.asmforce.eu

# Sierpień 01, 2008, 00:57:03
Daruj sobie z kombinowaniem z zabezpieczeniami. Dobre zabezpieczenia łamie się w jeden wieczór, te najlepsze w kilka dni.
Możesz użyć WMI tak jak radził Harven, ale to też nie stanowi żadnego problemu.

ps: jak sie komuś nudzi może obejrzeć mój lamerski tutorial nt pomijania pewnego zabezpieczenia.
http://www.savefile.com/files/1669384

edit:
do poniższego:
Sethis: hehehe, nie takie rzeczy się rozkminia. W obecnych zabezpieczeniach stosuje się nawet wirtualne maszyny, co i tak nie powstrzymuje tych którzy chcą.

Najskuteczniejszą metodą jest po prostu zniechęcenie.
Zastawić bezpośrednio w kodzie gry tyle pułapek ile będzie się dało(byle nie co ramkę w pętli renderującej :P, ale pomiędzy levelami czy podczas ładowania danych owszem) . Każda będzie sprawdzać co innego i reagować w inny sposób, jedna od drugiej niezależna.
W powyższym tutorialu bład programistów polegał na tym że zaufali jednej procedurze weryfikującej klucz i wszystko pozostałe było zależne tylko od rezultatu jaki ona zwróciła.A wystarczyło by wewnątrz tamtej zostawić wskaźnik dla innej procedury żeby bylo wiadomo że została ona wykonana a nie pominięta.
To już by utrudniło zadanie i zmusiło do śledzenia całej procedury weryfikującej.

Nie zapominajcie też że debuggery są coraz lepsze, wygodniejsze i potrafią same coraz więcej zrobić i pokazać.
« Ostatnia zmiana: Sierpień 01, 2008, 01:16:31 wysłana przez misioslaw »

Offline Sethis

  • Użytkownik

# Sierpień 01, 2008, 00:57:21
Poszukaj w goolgach "zaciemnianie kodu", jest to jedna z czesciej stosowanych ochrony programu przed disasmem (uzywa sie jej na przyklad przy tworzeniu robali itd.), oczywiscie nalezy ja zastosowac w polaczeniu z innymi, na przyklad cd-keyem albo rejestracja przez internet.

// EDIT by Q8 - @ asasm i misioslaw: przestańcie offtopować i licytować się kto jest the H4X0rZ! :P Pogadać to proszę na privie!
« Ostatnia zmiana: Sierpień 01, 2008, 10:04:30 wysłana przez Queight »

Offline głos

  • Użytkownik

# Sierpień 01, 2008, 11:06:47
Każdy program da się zhakować. Pytanie powinno być inne ile czasu zajmie złamanie zabezpieczeń. Jeżeli zbyt długo to dla prostego i względnie taniego programu jakim jest gra w większości przypadków łamanie zabezpieczeń będzie nieopłacalne.
Wg mnie wystarczającym zabepieczeniem jest:
1. szyfrowanie haseł, seriali itd
2. Kompresja wszystkich modułów -najlepiej niestandardowym narzędziem (blokada edytorów binarnych i większości debuggerów za wyjątkiem narzędzi typu ice)
3. Jeżeli masz czas to dodanie inteligentnych wstawek kontrolujących poprawność danych z pkt.1
   w różnych miejscach programu najlepiej każda inna. Większość hakerów nie zadaje sobie trudu sprawdzenia programu w działaniu (czyli tutaj grania  :)) i to zabepieczenie zawsze zadziała jeżeli zostanie dobrze napisane (i nawet narzędzia typu ice tutaj nie poradzą). Najlepiej nie poprzez komunikaty tylko nieprawidłowe działanie gry/programu i tyle. Jeżeli ktoś będzie chciał ukończyć grę (lub pracować na  programie) musi kupić oryginał.