Cracking – nielegalne łamanie zabezpieczeń oprogramowania.
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 tzw. inżynieria wsteczna polegająca na tłumaczeniu skompilowanego programu z powrotem na język programowania najczęściej niższego poziomu. 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 zaczął być używany w odniesieniu do łamania zabezpieczeń oprogramowania w latach 80. XX w. (zobacz: crack, cracker).
Zakres pojęcia nie jest ustalony jednolicie. Opublikowany przez IETF słownik terminów internetowych określa crackera jako osobę próbującą uzyskać nieuprawniony dostęp do systemów komputerowych, przeciwstawiając ją hakerowi; zaznacza przy tym, że słowa „haker” często używa się pejoratywnie tam, gdzie właściwe byłoby określenie „cracker”. Część polskich opracowań wyróżnia natomiast cracking sieciowy, czyli pokonywanie zabezpieczeń systemów komputerowych, oraz cracking oprogramowania – zaznaczając jednocześnie, że pierwszy z nich najczęściej określa się mianem hackingu.
Łamanie oraz rozpowszechnianie zmodyfikowanego przez crackerów oprogramowania jest w większości państw nielegalne. Środowisko crackerskie odróżniało jednak swoją działalność od piractwa komputerowego, którym zajmowały się osobne grupy określane jako warez dOOdz, rozprowadzające nielegalne kopie programów; do plików dołączanych do cracków często trafiało wezwanie, by kupić program, jeśli okaże się przydatny.
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. Wraz z nimi pojawiły się osoby, które zaczęły te zabezpieczenia analizować i łamać, z czasem tworząc grupy rywalizujące ze sobą.
Łamanie zabezpieczeń 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 wyższego poziomu, np. gdy program został napisany w języku Java.
Do najczęściej łamanych typów zabezpieczeń zalicza się ograniczenia czasowe lub funkcjonalne (wersje trial), 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. Producenci komercyjnego oprogramowania stosują w celu utrudnienia złamania zabezpieczeń 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.
Po złamaniu zabezpieczenia crackerzy często piszą programy, które automatycznie usuwają je z danego programu (tzw. cracki). Najczęściej crack ma formę tzw. patcha, czyli niewielkiego programu, który podmienia niektóre bajty w oryginalnym pliku wykonywalnym. Czasami można spotkać również cracki w formie tzw. loadera, który nie zmienia oryginalnego pliku, lecz modyfikuje pamięć programu po jego uruchomieniu. Takie rozwiązanie stosuje się np. wtedy, gdy oryginalny plik binarny jest skompresowany kompresorem 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, takich jak wymaganie oryginalnych nośników danych, kluczy sprzętowych, oglądania reklam lub rejestracji w Internecie. Bywa to problemem dla użytkownika, który np. wolałby korzystać z programu bez płyty CD, wykonać kopię zapasową lub zmienił komputer i ma teraz konfigurację uznawaną za niepoprawną przez oprogramowanie, które wcześniej legalnie zarejestrował.
Cracking dotyczy zazwyczaj płatnego, zamkniętego oprogramowania lub pisanych hobbistycznie tzw. crackme, czyli programów zawierających zwykle samo zabezpieczenie, bez innych funkcji. W przypadku wolnego oprogramowania zabezpieczenia zazwyczaj nie występują, gdyż użytkownik dysponuje pełnym dostępem do kodu źródłowego i może je sam swobodnie modyfikować.
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, datę wydania cracka bądź inne informacje o grupie.
W tutorialach grup crackerskich cracking bywał opisywany nie jako działanie wymierzone w sam program, lecz w zawartą w nim informację, co wiąże go ściśle z inżynierią wsteczną, rozumianą jako odkrywanie zasad działania oprogramowania. Z czasem punkt ciężkości przesuwał się od łamania zabezpieczeń programów komercyjnych ku analizie crackme, a zamiast gotowych cracków publikowano coraz częściej opisy sposobu złamania danego zabezpieczenia.
Określeniem cracking sieciowy bywa nazywane łamanie zabezpieczeń serwerów i innych systemów komputerowych, przy czym w praktyce częściej używa się w tym znaczeniu terminu hacking.
Za łamanie zabezpieczeń, oprócz np. kary umownej za naruszenie postanowień umowy lub odpowiedzialności za wyrządzoną szkodę, polskie prawo przewiduje sankcje karne.
Art. 1181 ust. 1
Art. 1181 ust. 2
Art. 121 ust. 1
Art. 269b § 1
Art. 269b § 1a
Art. 269b § 2