• Artykuły
  • Forum
  • Ciekawostki
  • Encyklopedia
  • CrackMe

    Przeczytaj także...
    Technika odwracania, inżynieria odwrotna, inżynieria wsteczna, programowanie zwrotne (ang. reverse engineering) to proces badania produktu (urządzenia, programu komputerowego) w celu ustalenia jak on dokładnie działa, a także w jaki sposób i jakim kosztem został wykonany. Zazwyczaj prowadzony w celu zdobycia informacji niezbędnych do skonstruowania odpowiednika. Innym zastosowaniem jest porównanie lub zapewnienie współdziałania z własnymi produktami. Uwaga: inżynierii wstecznej nie należy mylić z business process reengineering czy z reengineeringiem oprogramowania, którego to inżynieria odwrotna jest tylko etapem wstępnym.SoftICE – znany debugger dla systemu Windows (95/98/NT/2000/XP), oferujący duże możliwości. Umożliwia śledzenie wykonywania kodu, ma wbudowanego disassemblera. Działa w niskopoziomowym trybie jądra (kernela), przez co umożliwia debugowanie sterowników, jest też często wykorzystywanym narzędziem do łamania zabezpieczeń programów (nag-screen, rejestrowanie, CD-protection itp.)
    OllyDbg – okienkowy debuger na platformę x86 napisany przez Oleha Yuschuka w roku 2000. OllyDbg jest programem wolnym od opłat, pomimo iż jego licencją jest Shareware. OllyDbg umożliwia prosty sposób poszerzania swoich możliwości poprzez sprawny system wtyczek.

    CrackMe – mały program stworzony wyłącznie w celu złamania jego zabezpieczenia (lub zabezpieczeń), czyli odgadnięcie klucza, odpowiednie spreparowanie kodu wykonywalnego itp. Pisany najczęściej przez jednego crackera dla innych crackerów w celu sprawdzenia umiejętności inżynierii odwrotnej.

    Crack (z ang. pęknięcie, szczelina) – sposób na przełamanie technicznych zabezpieczeń głównie oprogramowania, gier komputerowych, rzadziej sprzętu komputerowego, w sytuacji gdy jest to działanie nielegalne.Oprogramowanie (ang. software) – całość informacji w postaci zestawu instrukcji, zaimplementowanych interfejsów i zintegrowanych danych przeznaczonych dla komputera do realizacji wyznaczonych celów. Celem oprogramowania jest przetwarzanie danych w określonym przez twórcę zakresie. Oprogramowanie to dział informatyki. Oprogramowanie jest synonimem terminów program komputerowy oraz aplikacja, przy czym stosuje się go zazwyczaj do określania większych programów oraz ich zbiorów.

    Programy Crackme mają podobne zabezpieczenia do tych stosowanych w aplikacjach komercyjnych. Poprawne rozwiązanie danego crackme zwykle określa autor i dołącza tę informację w postaci pliku "readme" lub informacji w samym programie. Czasami pojawiają się zakazy co do używania konkretnego narzędzia, jednak respektowanie tych zasad zależy od crackera. Typ rozwiązania uzależniony jest od natury samego crackme przy czym można dokonać następującego podziału programów crackme ze względu na cel jaki postawił autor:

  • odnalezienie numeru seryjnego – co jest demonstracją zabezpieczenia "serial fishing",
  • napisanie keygena do crackme – ten typ crackme nazywany jest również mianem "KeygenMe",
  • stworzeniu cracka – czyli patcha zmieniający kod binarny crackme,
  • dopisaniu nowej funkcjonalności programu – typ nazywany jest także mianem "ReverseMe",
  • Część programów crackme zawiera kod wykrywający różne narzędzia, którymi często posługują się crackerzy (np. OllyDbg, SoftICE). Kod ten stosowany jest aby utrudnić analizę kodu crackme. Czasami należy zneutralizować taki kod, aby poprawnie rozwiązać dane crackme.

    Przykładowo prosty program CrackMe może wyglądać następująco:

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
      int serial = 123;
      int liczba;
    
      cout << "Podaj serial:" << endl;
      while(true)
      {
        cin >> liczba;
    
        if (liczba == serial)
        {
          cout << "Gratuluję, podany numer jest prawidłowy!" << endl;
          cout << "Koniec programu." << endl;
          return 0;
        }
        else
        {
          cout << "Numer nieprawidłowy." << endl;
        }
      }
    }
    

    Po skompilowaniu i przeanalizowaniu programu np. narzędziem IDA widać, że aby obejść zabezpieczenie wystarczy zmienić instrukcję jnz (skocz jeżeli nie zero) na jz (skocz jeżeli zero) i program zaakceptuje każdy numer seryjny poza oryginalnym (w tym wypadku 123). Nieskrakowany program skacze do funkcji wyświetlającej komunikat o dobrym numerze seryjnym, jeżeli wpisany numer jest identyczny z tym zapisanym w programie, natomiast program skrakowany w podany sposób działa odwrotnie.

    Plik wygenerowany programem IDA Pro pokazujący różnicę między wersją z zabezpieczeniem i zmodyfikowaną wersją bez zabezpieczeń może wyglądać w tym przypadku następująco:

    This difference file is created by The Interactive Disassembler
    crackme
    00000797: 75 74
    

    Dzięki temu wiadomo, że aby złamać to crackme, wystarczy w skompilowanym pliku przejść pod adres 797h i zmienić wartość bajtu z 75h na 74h.

    To przykładowe crackme przedstawia najprostsze możliwe zabezpieczenie. W przypadku tego programu można również w prosty sposób odczytać poprawny numer seryjny. Bardziej zaawansowane crackme generują fałszywe seriale, są skompresowane, zaszyfrowane lub wykorzystują skomplikowane algorytmy sprawdzające poprawność podanych danych, w związku z czym rozwiązanie ich wymaga dużo większego nakładu pracy.




    w oparciu o Wikipedię (licencja GFDL, CC-BY-SA 3.0, autorzy, historia, edycja)

    Reklama

    Czas generowania strony: 0.011 sek.