Cracking tutorial #1 by lukep

Zawartosc :

  1. Lamanie programow z zabezpieczeniem czasowym .
  2. Pozbywamy sie Nagscreenow .
  3. Jak zarejestrowac program bez pomocy Soft Ice'a .
  4. Jak pozbyc sie CD checka z naszych ulubionych gier .
  5. Cos ambitniejszego , sledzenie rejestrow Win32 , i jak polapac sie o co tam chodzi (na przykladzie Paint Shop Pro 5.03 Evaluation) .
  6. ...i cos jeszcze .

Witam wszystkich ktorzy staraja sie zostac Crackerami, Reversami...?? Mam nadzieje, iz wiesz co nieco na temat lamania ( idealnie by bylo gdybys juz cos zlamal ), gdyz ten tutorial nie jest dla kompletnych nowicjuszy /???/, choc kto wie moze sie myle. Jedno jest pewne , nie bede dokladnie opisywal jaki klawisz do czego sluzy w naszych ulubionych narzedziach. Nie bede rowniez uczyl asemblera, no moze troche... Chce Was nauczyc jak myslec (hmmm mam nadzieje, iz nikt sie nie smieje), jak podchodzic do zabezpieczen, jak szukac, jak je analizowac, a wreszcie jak omijac i zabijac !!!

To na tyle, zaczynamy : CO JEST NIEZBEDNE ( jezeli chodzi o ten tutorial ) :
  1. WDasm32 v.8.93
  2. Hiew v.6.04 => http://www.corleone.net/t_o_o_l_s.html
  3. RegMon v.X.XX
  4. Umiejetnosc pisania w Pascalu , C , C+ ... lub dobry patcher
  5. Jako taka znajomosc Asemblera => przeczytac i dokladnie sie zapoznac z "ART OF ASSEMBLY LANGUAGE" znajdziesz np. na: http://www.corleone.net/a_s_s_e_m_b_l_y.html
  6. Mozg i intuicja !!!
  7. Sporo czasu i konsekwentnej dobrej roboty.
Nasz przykladowy SOFTWARE :
  1. AxMan 3.00 (Official Realese) - byl na CHIPIE 6\99 , albo z sieci to http://www.mosaicware.com.
  2. Paint Shop Pro 5.03 Evaluation Chip 7\99 i tysiac innych gazet...
  3. Gry :BLOOD 2 v.1.0 ,BLOOD 2 (Nightmares levels) , Quake2 v.3.05,SIN v 1.00,1.01,1.03 => na pewno ktos ze znajomych ma te gry , jesli ich sami jeszcze nie macie.
Jeszcze na temat Patcherow :

Wiem iz wielu z Was slabo lub bardzo slabo zna jakikolwiek jezyk programowania, dlatego tez stworzono wiele patcherow ktore same generuja gotowe pliki exe , com z przygotowanymi przez Was "udoskonaleniami" :) Oto krotki przeglad dostepnych patcherow dla nieznajacych lub leniwych !!!

I to na tyle jest jeszcze kilka innych programow do patchowania , sam musisz wybrac ten najlepszy, albo nauczyc sie programowac...

Te i inne patchery mozesz znalezc: http://www.corleone.net/p_a_t_c_h_e_r_s.html

!!! U W A G A !!!

Aby uniknac ewentualnych pytan zwiazanych z nizej zamieszczonym textem : Wszystkie programy ktore posluza nam za przyklady mozna zlamac przy pomocy Soft Ice'a. Lecz w tym tutorialu chodzi o poznanie innych zasad lamania (innymi narzedziami),ostatnio powstaja tysiace tutoriali na temat Soft Ice'a , dlatego zdecydowalem ,iz polamiemy WDasmem. Ponadto istnieja programy ktore bardzo ciezko lamac SI, i wtedy WDasm wypelnia ta luke. Jezeli chcesz poczytac na temat lamania SI to polecam tutoriale mNICH'a , SirGrega, oraz Fravie (tam ostatnio tylko o tym),lub przeczytaj moj nastepny tutor , hehe !

Time Limit Cracking

Software = AxMan 3.00

Program ten to naprawde dobry spliter (dzieli pliki na dowolne czesci). Wlanczamy AM 3.00 , uupss Nagscreen informujacy, iz mamy trzydziesci dni aby nacieszyc sie programem , trzy przyciski, OK wciskamy I agree , jestesmy wewnatrz , nacisni Help ,jest tam raz Register... oraz dwa About AxMan...klikni Register, trzy pola Name,Company,Registration key ,tym zajmiemy sie pozniej,teraz About AxMan,aha tu program wyswietla prawidlowo wprowadzone info rejestracyjne ,jako ze teraz nic nie zostalo wprowadzone mamy UNREGISTERED ,tym rowniez zajmiemy sie nieco pozniej... Teraz przestaw zegar na dwa miesiace do przodu...Masz ,dobrze, uruchom AM i co wcisnales I Agree, a tu nic tylko info :"This copy of AxMan has expired! To register - send email to..." etc.

No dobra robimy kopie pliku AxMan.exe (ja po prostu zipuje),otwieramy WDasm'a32, klikamy na Disassembler =>Open file to disassemble... Wybieramy sciezke dostepu do naszego AxMana.exe i czekamy , czekamy... czekamy o nareszcie jest , co my tutaj widzimy ??? A widzimy czysty kod Asemblera naszego programu,no dobra ale jak znalezc gdzie znajduje sie ten wlasciwy kawalek kodu ,aaaaa Wdasm oprocz kodu asemblera ma mozliwosc wyswietlania odnosnikow textowych do ktorych odwoluje sie kod asemblera ,nazywa sie to Refs,i znajduje sie kolo Helpa ,to co nas interesuje to String Data References ,poniewaz to tam znajduje sie caly zbior wszystkich odnosnikow = polecen... Zastanowmy sie chwile, pamietamy text ktory pojawil informujac nas o uplywie czasu korzystania z AM ,dobrze wiec znajdzmy ten text,klikamy na String Data References (SDR), i przeszukujemy w poszukiwaniu naszego nieszczesnego komunikatu ... , ...ooo jest "This copy of AxMan has expired!" ,teraz klikni dwukrotnie na ten komunikat, WDasm przeniosl nas do miejsca gdzie ten komunikat pojawil sie po raz pierwszy w kodzie Asemblera, a w oknie widzicie cos takiego:

* Referenced by (U)nconditional or (C)onditional Jump at Address:
 :0040308A (C)

:00403095  33C0                 xor   eax,eax

* Referenced by (U)nconditional or (C)onditional Jump at Address:
 :00403093 (U)
 
:00403097  8BC8                 mov   ecx,eax
:00403099  E8E2270000           call  00405880
:0040309E  8BC8                 mov   ecx,eax
:004030A0  E82B080000           call  004038D0
:004030A5  3C01                 cmp   al,01
:004030A7  7537                 jne   004030E0
:004030A9  6A30                 push  00000030

* Possible StringData Ref from Data Obj -> "AxMan"

:004030AB  6830F24500           push  0045F330

* Possible StringData Ref from Data Obj -> "This copy of AxMan has expired!"

:004030B0  6888F24500           push  0045F288

 itd.

To co musimy przeanalizowac znajduje sie pomiedzy 00403097 a 004030A7 (dlaczego??? Poniewaz program wykonuje tam kilka bardzo ciekawych operacji, tuz przed wyswietleniem nam komunikatu "This copy of AxMan has expired!"): Ponizszy kawalek kodu to nic innego jak sprawdzanie ilosci dni poczawszy od dnia instalacji, program sprawdza date instalacji , nastepnie aktualna date systemowa ,nastepnie dokonuje porownania (cmp), jezeli porownanie to wciaz miesci sie w okresie time trial to nastepuje skok do 004030E0 i mozemy nadal korzystac z programu, w przeciwnym wypadku skok jne nie nastepuje, a program wykonuje procedure przewidziana po uplywie 30 dnii (przestaje funkcjonowac).

:00403097  8BC8                 mov   ecx,eax
:00403099  E8E2270000           call  00405880
:0040309E  8BC8                 mov   ecx,eax
:004030A0  E82B080000           call  004038D0
:004030A5  3C01                 cmp   al,01
:004030A7  7537                 jne   004030E0  <==== jezeli nie rowny wynik porownania al z 01 skocz 

Czyli przed uplywem 30 dni wynik w al jest 00 , po uplywie 30 dni w al mamy 01 i skok nie nastepuje. Dobrze, ale co zrobic aby po uplywie 30 dni program nadal wykonywal skok do 004030E0 ??? Najprostsza metoda jest zmiana skoku jne (jump if not equal = skocz jesli nie rowne), na je (jump if equal=skocz jesli rowne), Hex wartosci obu instrukcji to jne = 75 a je = 74 , teraz wystarczy w Hiew zmieniamy wartosc 75 na 74 i zabilismy time limit.Dobrze do dziela klikamy na pole instrukcji

:004030A7  7537                 jne   004030E0

tak aby sie podswietlilo na dolnym pasku stanu WDasma powinnismy ujrzec offset podswietlonej instrukcji w naszym przypadku bedzie to: @offset 000030A7h , spisujemy go mozemy juz wyjsc z WDasma , ale najpierw zapiszmy aktualna sesje, tak abysmy podczas ponownego otwierania AM w WDasmie nie czekali zbyt dlugo. Otwieramy Hiew604 i wybieramy AxMan.exe ,naciskamy F4 i Decode.Nastepnie naciskamy F5 (szukanie ffsetu), wpisujemy nasz offset 30A7 (poczatkowe zera i ostatnie h pomijamy), juz po chwili Hiew znajdzie nam szukana wartosc, teraz naciskamy F3 i mozemy zmienic wartosc 75 na 74, zapisujemy zmiany F9 i opuszczamy Hiew. Z lekkim niepokojem uruchamiasz AxMana, najpierw pojawia sie Nag informujacy iz nasz czas trialu juz minal, naciskasz I Agree ...YES YES YES zlamany, cieszysz sie niemilosiernie ... ale musze Ciebie zmartwic - to nie jest dobry crack, dlaczego...??? Wyjdz z AxMana i cofni date na aktualna (bedzie to najwyzej dzien lub dwa po instalacji), teraz uruchom AM i co - dostales info , iz Twoj czas korzystania z programu dobiegl juz konca? Coz za przewrotnosc po 30-u dniach mozesz korzystac z AM chocby i cala wiecznosc, a teraz musisz czekac. Alez skad, pomyslmy, teraz w al jest 00 a je nie pozwala na wykonanie skoku, hmmmmm TAK a gdyby je zastapic instrukcja EB (jump directly to = skocz wprost do), to dobry pomysl, bez wzgledu na to jaka jest data skok zawsze zajdzie!!! Do dziela Hiew, zmien 74 na EB i uruchamiamy AxMana ,nareszcie wszystko dziala , teraz przestaw date na dwa miesiace wyprzedzenia, wlacz AM - dzialaaaaaa! Zrobione, teraz to dobra Crackerska robota :)

Teraz chwile o innych typach zabezpieczen czasowych (klasyfikacja wedlug +ORC'a) :

  1. Programy dzialajace z gory okreslona ilosc dni np. 30, 21... nazywamy taki typ czasowego zabezpieczenia CINDERELLA.
  2. Programy konczace swoje dzialanie o specyficznej dacie, niezaleznej od daty instalacji BEST_BEFORE TIME PROTECTION
  3. Programy dzialajace przez kilka kilkanascie sekund, minut po kazdorazowym odpaleniu programu COUNTDOWN
  4. Programy pozwalajace na ich otworzenie kilka, kilkanascie razy. Nie jest to w czystej formie zabezpieczenie czasowe, lecz oparte jest na podobnych schematach zabezpieczen QUIVER.
To na tyle, poczytajcie, trenujcie, uczcie sie.

NAG SCREENY

Kolejny etap naszego Crackowania to usuwanie Nagscreenow. Nadal na przykladzie AxMan'a. Zaraz po uruchomieniu AM ukazuje nam sie info (okno), odliczajace pozostaly czas trial, oraz informacje na temat programu. Zaraz sprobujemy to zlikwidowac. Nagscreeny mozemy podzielic na kilka kategorii:

Jeden: Niezbyt skomplikowane - latwo je wykryc i usunac przy pomocy Hiew lub debugera (SI lub WDasm).

Dwa: Zaawansowane - czesto sprawiaja klopot, gdyz sa dobrze ukryte lub dobrze zintegrowane z programem czesto pomaga BPX DialogBoxParamA w Soft Ice.

Trzy: Bardzo skomplikowane - doskonale zamaskowane w kodzie programu, zawierajace np. animacje itp., nie dajace sie wywolac (w sposob prosty), komendami SI (BPX). Skuteczna metoda to komenda TASK w Soft Ice (poczytaj).

Nasz przykladowy program to typ pierwszy, czyli nie powinien nam sprawic trudnosci. Dwa podejscia sa mozliwe, oba tylko z uzyciem Hiew !!!

Otwieramy AxMan'a, patrzymy na Nagscreen, spisujemy jakis oryginalny wyraz np. AGREE , wchodzimy do Hiew, F4 nastepnie Hex oraz F7 (to opcja szukania), mamy tam dwa pola ASCII i Hex. W pole ASCII wpisujemy nasz szukany wyraz AGREE, uwaga program jest 32bitowy tak wiec kazda znak musi byc izolowany przez wartosc hex 00 !!! Czyli wpisujemy w ASCII litere A, down arrow 00, up arrow G, down arrow 00 ...itd. Hiew po chwili znajdzie nasz szukany wyraz oraz jego reprezentacje Hex, teraz szukamy w poblizu miejsca gdzie sie znalezlismy FF FF 82 lub FF FF FF FF 82 <- taki Hex reprezentuje wyswietlanie jakiegos okna z info. W naszym przypadku znajdziemy w 9 linijce ponizej naszego AGREE cos takiego -FF FF FF FF - FF FF 82, teraz najezdzamy kursorem na wartosc 82 wciskamy F3, a nastepnie zmieniamy wartosc 82 na 7E i juz nigdy nie ujrzymy Nagscreen'a. Proste!!! Prawda???

Po prostu wpisujemy w wartosci szukania Hiew HEX FF FF 82, czasem to trwa dluzej niz sposob pierwszy... Teraz juz mamy AxMana bez ograniczen czasowych + bez paskudnego Nag screen'a !


Rejestracja

Uruchamiamy AxMana i klikamy Helpa, a nastepnie Register..., wpisujemy dowolne dane i klikamy OK, no tak otrzymales komunikat "Invalid Registration Information" (nieprawidlowe informacje rejestracyjne).Moze juz wiesz co zrobic...??? ... Oczywiscie, otworzyc WDasm'a i poszukac w SDR sekwencji "Invalid Registration Information". Do dziela !!!

Oto co otrzymalismy po podwojnym kliknieciu na "Invalid Registration Information" :

:0040688B  50                  push eax
:0040688C  51                  push ecx
:0040688D  52                  push edx
:0040688E  8D4C241C            lea ecx, dword ptr [esp+1C]
:00406892  C644242803          mov [esp+28], 03
:00406897  E8E4F9FFFF          call 00406280
:0040689C  84C0                test al, al
:0040689E  6A30                push 00000030
:004068A0  7513                jne  004068B5

* Possible StringData Ref from Data Obj -> "AxMan - Error 400"

:004068A2  6850F84500          push 0045F850

* Possible StringData Ref from Data Obj -> "Invalid Registration Information"

:004068A7  682CF84500          push 0045F82C
:004068AC  8BCE                mov ecx, esi
:004068AE  E8F9710200          call 0042DAAC
:004068B3  EB49                jmp  004068FE

* Referenced by (U)nconditional or (C)onditional Jump at Address:
 :004068A0 (C)

* Possible StringData Ref from Data Obj -> "AxMan"

:004068B5  6830F34500          push 0045F330

* Possible StringData Ref from Data Obj -> "Thank you for registering your"
                                           "copy of AxMan"

:004068BA  68FCF74500          push 0045F7FC
etc. I znow sprobuj pomyslec nad tym fragmentem kodu... Hmmmmm, no dobrze cala esencja zabezpieczenia kryje sie:
:0040688E  8D4C241C            lea ecx, dword ptr [esp+1C]
:00406892  C644242803          mov [esp+28], 03
:00406897  E8E4F9FFFF          call 00406280
:0040689C  84C0                test al, al
:0040689E  6A30                push 00000030
:004068A0  7513                jne  004068B5

To tu program "decyduje" czy informacje ktore wpisalismy sa poprawne, jezeli nie to jne czyli jump if not equal = skocz jesli nie rowne, nie bedziemy analizowac w jaki sposob program transformuje nasze dane wstukane w pole rejestracyjne, a zajmiemy sie jedynie jak oszukac program. Bardzo prosto. Moze juz wiesz, oczywiscie zamieniajac jne na jmp (dlaczego na jmp ? pomysl...no wlasnie, co by bylo gdybys jakims cudem wpisal wlasciwa rejestracje???...).

Dalej to juz proste, Hiew w ruch znajdujemy offset 68A0 i zmieniamy 7513 na EB13, zapisujemy zmiany i uruchamiamy AxMan'a. Wpisujesz dowolne dane w oknie rejestracyjnym i OK, wyskakuje "Thank you for registering..." = zrobione !!!

Bardzo dobrze, a teraz klikni w Helpie About AxMan... OHHH SHITTTTT !!! Ty tez widzisz te trzy paskudne UNREGISTERED. Co jest grane??? Program musi gdzies jeszcze porownywac dane rejestracyjne wpisane przez uzytkownika z prawidlowymi, jezeli wszystko gra, prawidlowe dane rejestracyjne pojawiaja sie zamiast UNREGISTERED. Cos trzeba z tym zrobic.Otwieramy WDasm'a i SDR w poszukiwaniu wyrazu UNREGISTERED.

Mamy, klikamy dwukrotnie i ladujemy:

* Referenced by (U)nconditional or (C)onditional Jump at Address:

:004104CA (C)       <<======= UWAGA !!!

* Possible StringData Ref from Data Obj -> "Unregistered"

:004104F3  6844104600           push 00461044
:004104F8  8D8ED4000000         lea ecx, dword ptr [esi+000000D4]
:004104FE  E8F9ED0100           call 0042F2FC


* Possible StringData Ref from Data Obj -> "Unregistered"

:00410503  6844104600           push 00461044
:00410508  8D8E10010000         lea ecx, dword ptr [esi+00000110]
:0041050E  E8E9ED0100           call 0042F2FC


* Possible StringData Ref from Data Obj -> "Unregistered"

:00410513  6844104600           push 00461044

Sprubujmy odszukac komorke 004104CA, widzimy:

:004104BE  8D4C2424             lea ecx, dword ptr [esp+24]
:004104C2  E8B95DFFFF           call 00406280
:004104C7  3C01                 cmp al, 01
:004104C9  5F                   pop edi

:004104CA  7527                 jne  004104F3  <---- zly skok

Jne skacze do Unregistered gdy po sprawdzeniu w rejestrze dane nie zgadzaja sie z tymi ktore program wykalkulowal na podstawie wprowadzonych informacji przez uzytkownika, co mozemy zrobic? Proponuje offset 104CA i jne zastapic je, czyli 7527 zmienic na 7427 i wszystko powinno dzialac !

Sprawdzamy... Huuuraaaa, dziala !!!!!!!!!!!!!!!!!!!!!!

AxMan 3.00 w pelni skrakowany. Swietnie, a teraz zrobcie to jeszcze raz, SAMI !!!

Zadanie domowe: Oprocz AxMan'a w jego katalogu znajdziecie AxManRestore. Zarejestrujcie go !!!


GAMES AND CD-CHECK

Wielu z Was czesto pyta o to jak skrakowac gre, aby dzialala bez CD, teraz wlasnie nadszedl czas aby Was tego nauczyc:

Instalujemy Q2, przynajmniej Normal Install. Po udanej instalacji wyjmujemy plyte z napedu i uruchamiamy gre.

Wyskoczyl komunikat "You must have the Quake2 CD in the drive to play". Doskonale. Otwieramy WDasm'a i disassemblujemy plik Quake2.exe (291328 bajtow).

Czekamy, czekamy...uupsss... Jest, teraz SDR i szukamy naszego przeslania "You must have the Quake2 CD in the drive to play". Klikamy dwukrotnie i:

* Referenced by (U)nconditional or (C)onditional Jump at Address:
 :0042B21E (C)

:0042B235  8A442404              mov al, byte ptr [esp+04]
:0042B239  FEC0                  inc al
:0042B23B  3C7A                  cmp al, 7A
:0042B23D  88442404              move byte ptr [esp+04], al
:0042B241  0F8E6AFFFFFF          jle 0042B1B1

* Possible StringData Ref from Data Obj -> "You must have the Quake2 CD in the drive to play"

:0042B247  68644744              push 00444764
:0042B24C  6A00                  push 00000000
:0042B24E  E89D6CFEFF            call 00411EF0
:0042B253  83C408                add esp, 00000008

No i co my tu mamy, hmmm ciekawe zabezpieczenie...Jak myslicie gdzie kryje sie newralgiczny punkt zabezpieczenia...??? Moze 0042B21E ...moze 0042B241...nie, nie, autorzy byli sprytniejsi, centrum CD-check'a to call 0042B24E !!! Zwroccie uwage na ten typ zabezpieczenia, poniewaz wystepuje on coraz powszechniej, a latwo go pominac! Spryciarze z ID, no bo kto by szukal zabezpieczenia po komunikacie...?Jezeli chcecie przesledzcie losy naszego call'a, bo teraz trwalo by to zbyt dlugo. Co teraz? Hiew i szukamy offsetu 2A64E, mamy tam E89D6CFEFF, zmieniamy to na 9090909090. 90 oznacza instrukcje nop = no operation (brak operacji), dzieki temu cala procedura sprawdzania CD przestanie miec znaczenie!!! Odpalamy Q2, nerwowe chwile, ooooooo DZIALA bez CD!


Kolejna rewelacyjna gra, krwawa i mroczna, dokladnie to co lubie... ale do pracy! Zainstalowales juz pewnie Blood2: The Chosen, najlepiej full install. Wyjmii plyte z napedu i uruchom gre, smieszny Nag, wciskasz Launch Blood2 i... komunikat: "Please insert the Blood2 CD-ROM into your CD-ROM drive." No juz chyba wiesz co robic dalej.

WDasm, SDR i szukamy "Please insert the Blood2 CD-ROM into your CD-ROM drive."

I znajdujemy sie tu, kilka linijek powyzej znanego nam juz zlowrogiego informatora :)

:00403F6C  C78424D800000000000000     mov dword ptr [esp+000000D8], 00000000
:00403F77  E854010000                 call 004040D0
:00403F7C  85C0                       test eax, eax
:00403F7E  C78424D8000000FFFFFFFF     mov dword ptr [esp+000000D8], FFFFFFFF

:00403F89  0F8503010000               jne 00404092     <---nasz zly skok !!!

Nie pisalem calego kodu, gdyz po co...? Nasz cel to 00403F89 i jne, co mozemy zrobic, mozemy tak ustawic polecenie jump, iz bedzie ono wykonywane pomimo braku CD, trzeba zmienic jne na je, Hiew offset 3389, bedzie to wygladac pierwotnie 0F8503010000 na 0F8403010000. Wychodzimy z Hiew i uruchamiamy gre, i BoooM. ZROBIONE !!!

Teraz dodatek do B2 => Nightmares Levels ! Po zainstalowaniu Nightmares mozna grac w nowe plansze jak i w tradycyjnego B2. Beda tez potrzebne dwa Cracki. Instalujemy B2:Nightmares. Wyjmujemy plyte i uruchamiamy gre. Oczywiscie screen informujacy : "Please insert the "Blood2: Nightmares"CD-Rom into your CD-ROM drive."Robimy dokladnie co uprzednio, czyli WDasm, SDR ...

CD check kryje sie :
:0040118E  7410                         je  004011A0

offset 58E , proponuje aby zmienic 7410 na 9090. Odpalamy Nightmares. Wspaniale!!!!!!!!!!!!!!! Dziala!!!!!!!!!!!!!!!!!

To czesc pierwsza naszej crackerskiej pracy. Uruchom przywitalnego Screena B2, i odlacz Nightmares Add-on, teraz mozemy grac w tradycyjnego Blood'a 2.Lecz bez CD jest to jednak niemozliwe.Zadanie domowe usunac CD checka !!!! To naprawde nic trudnego!!!!!!!!


SIN version 1.00, 1.01, 1.03 Niezla gra...:)

Instalujemy Sin'a - Full Install, nastepnie wyjmujemy plyte i odpalamy gre. "You must have the Sin CD in the drive to play." Dalej czynnosci wciaz te same, WDasm...SDR...i szukamy "You must have the Sin CD in the drive to play." A kod wyglada tak:

* Referenced by (U)nconditional or (C)onditional Jump at Address:
 :004568B4

:0045BBB0  E8CBFEFFFF                 call 0045BA80
:0045BBB5  803800                     cmp byte ptr [eax], 00
:0045BBB8  750F                       jne  0045BBC9

* Possible StringData Ref from Data Obj -> "You must have the Sin CD in the drive to play."

:0045BBBA  685C014800                 push 0048015C

Coz za prostackie zabezpieczenie, no coz, chyba to widzisz...???!!! Jezeli plyta jest w napedzie CD to w eax mamy 1 i skok nastepuje, my chcemy aby skok nastepowal gdy plyty nie ma, wiec zmienimy offset 5AFB8, jne na je. Hiew 750F na 740F. Odpalamy gre i .........Huraaaaaaaaaaaaaaaa !!! Zlamane!!!!! :)

Dobra, to czesc pierwsza, teraz czas na Sin'a version 1.01 !!!

Instalujemy upgrade do wersji 1.01. Odpalamy gre i ... oczywiscie "You must have the Sin CD in the drive to play." No dalej to juz sami... Mamy taki kawalek kodu :

* Referenced by (U)nconditional or (C)onditional Jump at Address:
 :004574444

:0045C770  E8CBFEFFFF                call 0045C640
:0045C775  803800                    cmp byte ptr [eax], 00
:0045C778  750F                      jne  0045C789

* Possible StringData Ref from Data Obj -> "You must have the Sin CD in the drive to play."

Chyba WIESZ co zrobic ? Sin version 1.03 zostawiam dla Was, uprzedzam, nie bedzie tam zadnych fajerwerkow :)

Jak widzicie lamanie CD checkow jest niezwykle prosta sprawa, dlatego tez zdobadz Heretic II i sprobuj zlamac !

Nie bedzie to juz takie proste...??? Powodzenia !!!


REJESTRY WINDOWS I JAK ZNALEZC TEN WLASCIWY...

Software - PAINT SHOP PRO 5.03 EVALUATION

PSP 5.03 posiada zabezpieczenie czasowe, po okresie probnym program sie nie uruchamia. Nie ma takze mozliwosci rejestracji, wpisania hasla, etc. Co oznacza ze bedziemy musieli gleboko pogrzebac w kodzie, aby unieaktywnic zabezpieczenie. To juz nieco wyzsza szkola crackingu, bedziemy potrzebowac RegMon, ja uzywam wersji 4.12 WDasm'a, Hiew oraz nieco z filozofii ZEN CRACKING... ZEN CRACKING - filozofia Crackerska (nie tylko), polegajaca na maxymalnym i intuicyjnym wczytywaniu sie w kod Asemblera, zrozumienia istoty dzialania zabezpieczenia, wnioskowani z niezwykle malej ilosci przeslanek. Nie dajcie sie jednak zwiezc, Zen Cracking to przede wszystkim ogromna wiedza i jeszcze raz wiedza !!! "FEEL THE CODE !!!"

Do dziela odpalamy PSP i widzimy Nag'a informujacego, iz iles tam dni uzywamy programu... Przestawmy zegar na dwa, trzy miesiace do przodu i widzimy, iz nasz trial period sie skonczyl. Co teraz, WDasm - moze byc, lecz niewiele nam to pomoze !Uruchamiamy RegMon'a, a nastepnie PSP, kiedy PSP pokaze nam Nag Screeny wychodzimy z niego (PSP), i spogladamy w okno RegMon'a, upssss, troche tego jest...

Pomyslmy, program musi gdzies w rejestrach miec zapisana date instalacji oraz tolerowana ilosc dni od instalacji, kiedy to mozemy go otworzyc, popatrzmy co sie dzialo podczas otwierania PSP. PSP musial podczas otwierania sprawdzic te informacje (daty), OK, ale gdzie, zastanow sie, gdybys byl programista, czy ukryl bys zabezpieczenie w jakims idiotyczni prostym do wychwycenia kluczu np.: HKEY_LOCAL_MACHINE\Software\PSP\Install Date..., czy tez ukryl bys ja przed wstretnymi Crackerami (fuuuuu, ohyda), gdzies w malo dostepnym miejscu, pod niepozorna nazwa ? Oczywiscie!!!, popatrz dobrze, co wydaje Ci sie podejrzane... Tak ! Cos czesto program odwolywal sie do klucza {84124FF1-5D04-11D1-A575-00A0C96F2B0D}, przyjrzyjmy mu sie z bliska.

Klikamy na ten klucz bedac nadal w RegMonie, powinien nam sie zglosic Regedit i otworzyc klucz {84124FF1-5D04-11D1-A575-00A0C96F2B0D}. Masz, doskonale, co tam widzimy: 8 podrzednych kluczy, przejrzy kazdy z nich, ... , kazdy odwoluje sie do PSP, najdziwniejszy i najbardziej podejrzany to MiscStatus\5031 i 5032 hmmmm, ten ciag liczb musi cos oznaczac, prawda...???!!!

Sprobujmy.

Otwieramy plik Psp.exe w WDasm'ie, troche to potrwa ... ... ... ... ...

Jest, swietnie, uprzedzam w SDR nic nie znajdziemy, ale sprobujmy opcja Search, wpisujemy wyraz MiscStatus i niech szuka, po chwili znajdzie cos takiego:

* Reference to: MFC42.Ordinal: 03AD, Ord: 03ADh

:0058040B   E88A6B0500                  call 005D6F9A

* Possible StringData Ref from Data Obj -> "MiscStatus"

:00580410   680C766200                  push 0062760C
:00580415   8D4C2418                    lea ecx, dword ptr [esp+14]

...
a ponizej widzimy :
* Reference to: ADVAPI32.RegQueryValueExA, Ord: 017Bh

:00580456   8B3D583F6300                mov  edi, dword ptr [00633F58]
:0058045C   52                          push edi
:0058045D   8D4C2434                    lea ecx,  dword ptr [esp+34]
:00580461   8D542450                    lea ecx,  dword ptr [esp+50]
:00580465   51                          push ecx
:00580466   8B4C2434                    mov ecx,  dword ptr [esp+34]
:0058046A   52                          push edx
:0058046B   53                          push ebx
:0058046C   51                          push ecx
:0058046D   50                          push eax
:0058046E   FFD7                        call edi
:00580470   85C0                        test eax, eax

:00580472   750E                        jne  00580482    <== to tu !!!

...

Mam nadzieje, iz to widzicie, to tu wykonywany jest NASZ skok, lub tez nie, chcielibysmy aby ten skok byl wykonywany zawsze, prawda ??? No dobrze spisujemy offset (00180472h). Otwieramy Hiew i zmieniamy 750E na EB0E. Odpalamy PSP i ... informacja, iz jest to pierwszy dzien naszego uzytkowania Paint Shopu !!!!

A teraz zadanie domowe, pozbyc sie wstepnego, NagScreen'a w PSP! Jezeli uczynisz to samodzielnie - to wysli do mnie rozwiazanie, dwa: znalezc inny sposob na cracka do Paint Shop'a ! Takze i w tym przypadku prawidlowe odpowiedzi beda mile widziane !

DODATEK SPECJALNY

Wykaz podstawowych funkcji wykorzystywanych podczas Crackingu:

  HEX                   ASM                Znaczenie

75 lub 0F85             jne           jump if not equal = skocz jesli nie rowne
74 lub 0F84             je            jump if equal = skocz jesli rowne
EB                      jmp           jump directly to = skocz bezposrednio do
90                      nop           no operation = nic nie rob
77 lub 0F87             ja            jump if above = skocz jesli powyzej
0F86                    jna           jump if not above = skocz jesli nie powyzej
0F83                    jae           jump if  above or equal = skocz jesli powyzej lub rowne
0F82                    jnae          jump if not above or equal = skocz jesli nie powyzej 
                                                                   lub nie rowne
0F82                    jb            jump if below = skocz jesli ponizej
0F83                    jnb           jump if not below = skocz jesli nie ponizej
0F86                    jbe           jump if below or equal = skocz jesli ponizej lub rowne
0F87                    jnbe          jump if not below or equal = skocz jesli nie ponizej lub                                                                      nie rowne
0F8F                    jg            jump if greater = skocz jesli wiecej
0F8E                    jng           jump if not greater = skocz jesli nie wiecej
0F8D                    jge           jump if greater or equal = skocz jesli wiecej lub rowne
0F8C                    jnge          jump if not greater or equal = skocz jesli nie wiecej lub                                                                      nie rowne
0F8C                    jl            jump if less = skocz jesli mniej
0F8D                    jnl           jump if not less = skocz jesli nie mniej
0F8E                    jle           jump if less or equal = skocz jesli mniej lub rowne
0F8F                    jnle          jump if not less or equal = skocz jesli nie mniej lub nie rowne
UWAGA !!!

Wiem, ze wielu z Was chetnie korzysta z instrukcji 90 = NOP, ale uwazajcie, coraz wiecej programow potrafi wykryc anormalna ilosc 90 i zawiesza sie program lub system. Oprocz tutoriala otrzymaliscie katalog Achart z dokladnym wykazem ASCII i wszelkimi mozliwymi przeksztalceniami, naprawde dobra rzecz !!! Wlasnie organizuje zalozenie wiekszej grupy CRACKERSKIEJ, jezeli uwazasz, iz moglbys sie w to bawic zapraszam !

MAIL ME : lukep@gdansk.sprint.pl

W NASTEPNYM TUTORIALU :

Links: Thanx: Anna, Martin, tkc, +ORC, Phrozen Crew, mNICH, CP! ... i dla mnostwa innych osob !!!

Jezeli zauwazyles jakies bledy napisz, bede wdzieczny.

Gdansk Lipiec 1999