Przejdź do zawartości

Cracking

Z Wikipedii, wolnej encyklopedii

Cracking – dziedzina informatyki zajmująca się łamaniem zabezpieczeń oprogramowania, a także sam proces łamania danego zabezpieczenia. Pojęcie cracking odnosi się do zbioru działań polegających na analizie i zmianie działania funkcji programu w szczególności związanych z jego zabezpieczeniami w celu ich ominięcia bez korzystania z kodu źródłowego programu. Fundamentem crackingu jest tak zwana inżynieria wsteczna polegająca na tłumaczeniu skompilowanego programu z powrotem na język programowania najczęściej niższego poziomu[1]. Słowo cracking wywodzi się od angielskiego czasownika crack („łamać”). Cracking dokonywany jest najczęściej z naruszeniem praw autorskich, a tym samym nielegalnie (wyjątkiem od tej reguły jest łamanie crackme). Termin cracking zaczął być używany w odniesieniu do łamania zabezpieczeń oprogramowania w latach 80. XX w. (zobacz: crack, cracker). Czasami można również spotkać się z użyciem pojęcia cracking sieciowy jako alternatywa dla terminu hacking w odniesieniu do łamania zabezpieczeń komputerów w sieciach komputerowych. Łamanie oraz rozpowszechnianie zmodyfikowanego przez crackerów oprogramowania poza nielicznymi wyjątkami (crackme) jest obecnie nielegalne i karane w większości krajów na świecie.

Cracking oprogramowania

[edytuj | edytuj kod]

Historia łamania zabezpieczeń oprogramowania sięga lat 80. XX w. i komputerów Atari oraz Commodore. Już wtedy producenci oprogramowania zaczęli stosować zabezpieczenia przed nielegalnym kopiowaniem oprogramowania. Wraz z wprowadzeniem zabezpieczeń do oprogramowania pojawiły się też osoby, które zaczęły te zabezpieczenia analizować i łamać. Z czasem osoby te zaczęły tworzyć grupy, które wspólnie zajmowały się łamaniem zabezpieczeń w oprogramowaniu, rywalizując między sobą.

Łamanie zabezpieczeń oprogramowania opiera się na inżynierii wstecznej. Kod programu poddawany jest dezasemblacji, a następnie analizowany przez crackera w celu usunięcia zabezpieczenia z wykorzystaniem deasemblerów takich jak IDA czy W32Dasm, bądź też analizowany bezpośrednio w trakcie działania programu z wykorzystaniem debuggerów takich jak SoftICE lub OllyDbg. Działania te wymagają dobrej znajomości asemblera oraz wykorzystywanych przez oprogramowanie funkcji API. Czasami możliwe jest również wykorzystanie dekompilatora w celu przekształcenia skompilowanego programu na język programowania wyższego poziomu, np. gdy program został napisany w języku Java. Do najczęściej łamanych typów zabezpieczeń oprogramowania zalicza się ograniczenia czasowe lub funkcjonalne (wersje trial oprogramowania), pliki z kluczem, sprawdzanie obecności oryginalnej płyty CD lub klucza sprzętowego, klucze licencyjne wprowadzane w aplikacji oraz tzw. nag screeny, czyli okienka nakłaniające do kupna pełnej wersji programu. Producenci komercyjnego oprogramowania stosują wiele technik zabezpieczających je przed nieuprawnionym użyciem, a tym samym zabezpieczających należny im dochód ze sprzedaży. W celu utrudnienia złamania zabezpieczeń oprogramowania stosuje się m.in. obfuskację kodu, szyfrowanie danych, kod samomodyfikujący, wykrywanie modyfikacji kodu programu, fałszywe funkcje zabezpieczające, a także wykrywanie obecności popularnych narzędzi stosowanych przez crackerów. Ominięcie lub likwidacja tych zabezpieczeń jest dla crackerów okazją wykazania swoich umiejętności oraz udowodnienia słabości zabezpieczeń. Cracker oraz osoby korzystające z rezultatów jego pracy mają też możliwość używania programu nielegalnie lub w sposób niedozwolony przez producenta.

Po złamaniu zabezpieczenia crackerzy często piszą programy, które automatycznie usuwają zabezpieczenie z danego programu (tzw. cracki). Najczęściej crack ma formę tzw. patcha, czyli niewielkich rozmiarów programu, który podmienia niektóre bajty w oryginalnym pliku wykonywalnym, usuwając z niego zabezpieczenie. Czasami można spotkać również cracki w formie tzw. loadera, który nie zmienia oryginalnego pliku wykonywalnego, lecz modyfikuje pamięć programu po jego uruchomieniu[2]. Takie rozwiązanie może być zastosowane w przypadku, gdy oryginalny plik binarny jest skompresowany za pomocą kompresora do plików wykonywalnych np. UPX. Programów napisanych przez crackerów używają czasem również legalni użytkownicy, by pozbyć się uciążliwych zachowań programu, szczególnie takich jak np. wymaganie oryginalnych nośników danych, kluczy sprzętowych, oglądania reklam lub rejestracji w Internecie. Jest to często problem dla użytkownika, który np. wolałby mieć możliwość korzystania z programu bez płyty CD, wykonania kopii zapasowej programu, nieujawniania własnych personaliów lub zmienił komputer i teraz ma inną konfigurację uznawaną za niepoprawną przez oprogramowanie, które poprzednio legalnie zarejestrował (w wielu nowych komputerach brak np. stacji dyskietek).

Cracking dotyczy zazwyczaj płatnego, zamkniętego oprogramowania lub pisanych hobbistycznie tzw. crackme, czyli programów od crackera dla crackera zawierających zwykle samo zabezpieczenie bez żadnych innych funkcjonalności. W przypadku wolnego oprogramowania żadne zabezpieczenia zazwyczaj nie występują, gdyż użytkownik dysponuje pełnym dostępem do kodu źródłowego wykorzystywanego oprogramowania i może je sam swobodnie modyfikować. Wolne oprogramowanie zwykle nie posiada niepożądanych funkcji wymienionych powyżej, w związku z czym nie jest przedmiotem zainteresowania crackerów.

Program usuwający zabezpieczenia, czyli crack może być umieszczony w Internecie, BBS-ie lub na nośniku obok programu. Innym rozwiązaniem jest stworzenie generatora kluczy licencyjnych, czyli keygena. Czasem rozpowszechnianemu crackowi bądź keygenowi towarzyszy wstawka artystyczna tzw. cracktro lub w przypadku gier trainer. Często dołączany jest również plik tekstowy z rozszerzeniem NFO zawierający ASCII-Art grupy crackerskiej, która złamała dane zabezpieczenie, date wydania cracka bądź inne informacje o danej grupie crackerskiej.

Cracking sieciowy

[edytuj | edytuj kod]

Cracking sieciowy, inaczej hacking, odnosi się do łamania zabezpieczeń serwerów. W przypadku łamania takich zabezpieczeń cracker (w tym kontekście częściej nazywany hakerem) musi znaleźć lukę w zabezpieczeniach i albo wykorzystać ją, wpisując ręcznie polecenia, albo stworzyć exploit – mały program, który wykorzysta lukę do przejęcia kontroli nad maszyną, lub zmusi ją do wykonania żądanej przez nas operacji.

Cele łamania zabezpieczeń mogą być bardzo różne. Wcale nierzadkim może być chęć zabezpieczenia własnych serwerów i naprawianie własnych programów – wykryte błędy szybko można naprawić i opublikować razem z pełnym opisem (ang. full disclosure). Wykrycie i poprawa własnego błędu wpływa pozytywnie na reputację firmy. Znacznie gorzej jest w sytuacji, gdy błąd/lukę wykryje ktoś obcy, bowiem wtedy może zostać ona wykorzystana przeciwko użytkownikom tego oprogramowania. Pierwotnie celem ataków było wyłącznie zaszkodzenie właścicielom i użytkownikom serwera oraz działania propagandowe przeciwko nim – dotyczy to zwłaszcza łamania stron WWW. Każda firma lub organizacja, która zyska sobie wystarczająco złą opinię (np. RIAA, SCO czy Microsoft) musi liczyć się z tym, że stanie się potencjalnym celem ataków. Cracker, po włamaniu się do systemu, może ukrywać swoją obecność i zostawić sobie możliwość powrotu, tzw. backdoor, w celu późniejszego wykorzystania. Niektóre osoby łamią zabezpieczenia serwerów dla zysku, np. wykorzystując zdobyte w ten sposób dane do szantażowania ofiary lub też sprzedając je konkurencji.

Aspekt prawny crackingu

[edytuj | edytuj kod]

Za łamanie zabezpieczeń, oprócz np. kary umownej za naruszenie postanowień umowy lub odpowiedzialności za wyrządzoną szkodę polski Kodeks karny i Ustawa o prawie autorskim i prawach pokrewnych przewidują sankcje karne:

Ustawa z dnia 4 lutego 1994 r. o prawie autorskim i prawach pokrewnych Art. 1181

ust. 1. Kto wytwarza urządzenia lub ich komponenty przeznaczone do niedozwolonego usuwania lub obchodzenia skutecznych technicznych zabezpieczeń przed odtwarzaniem, przegrywaniem lub zwielokrotnianiem utworów lub przedmiotów praw pokrewnych albo dokonuje obrotu takimi urządzeniami lub ich komponentami, albo reklamuje je w celu sprzedaży lub najmu,
podlega grzywnie, karze ograniczenia wolności albo pozbawienia wolności do lat 3.
ust. 2. Kto posiada, przechowuje lub wykorzystuje urządzenia lub ich komponenty, o których mowa w ust. 1,
podlega grzywnie, karze ograniczenia wolności albo pozbawienia wolności do roku.

Art. 121

ust. 1. W wypadku skazania za czyn określony w art. 115, 116, 117, 118 lub 118¹, sąd orzeka przepadek przedmiotów pochodzących z przestępstwa, chociażby nie były własnością sprawcy.

Art. 269b ustawy z dnia 6 czerwca 1997 – Kodeks karny § 1. Kto wytwarza, pozyskuje, zbywa lub udostępnia innym osobom urządzenia lub programy komputerowe przystosowane do popełnienia przestępstwa określonego w art. 165 § 1 pkt 4, art. 267 § 3, art. 268a § 1 albo § 2 w związku z § 1, art. 269 § 1 lub 2 albo art. 269a, a także hasła komputerowe, kody dostępu lub inne dane umożliwiające nieuprawniony dostęp do informacji przechowywanych w systemie informatycznym, systemie teleinformatycznym lub sieci teleinformatycznej, podlega karze pozbawienia wolności od 3 miesięcy do lat 5.

§ 1a. Nie popełnia przestępstwa określonego w § 1, kto działa wyłącznie w celu zabezpieczenia systemu informatycznego, systemu teleinformatycznego lub sieci teleinformatycznej przed popełnieniem przestępstwa wymienionego w tym przepisie albo opracowania metody takiego zabezpieczenia.

§ 2. W razie skazania sprawcy za przestępstwo określone w § 1, sąd orzeka przepadek określonych w nim przedmiotów, a może orzec ich przepadek, jeżeli nie stanowiły własności sprawcy.

Zobacz też

[edytuj | edytuj kod]

Literatura

[edytuj | edytuj kod]

Przypisy

[edytuj | edytuj kod]
  1. Jakub Zemánek, Cracking bez tajemnic : wszystko, co kiedykolwiek chciałeś wiedzieć o crackingu, Gliwice: Helion, 2004, ISBN 83-7361-444-3, OCLC 749394144.
  2. Pavol Červeň, Crackproof your software : the best ways to protect your software against crackers, San Francisco: No Starch Press, 2002, ISBN 1-59327-022-4, OCLC 70747001 [dostęp 2022-09-02].

Linki zewnętrzne

[edytuj | edytuj kod]