Cracking tutorial #2 by lukep

Zawartosc :

  1. Cos latwego na rozgrzewke, czyli szukamy numeru seryjnego dla treningu...
  2. Time-limit i Microsoft, czyli jak ograbic (im)potenta(ta).
  3. CdCheck'i ciag dalszy.
  4. Jeszcze raz time-limit.
  5. Zen Cracking.
  6. Maly bonus.

Witam wszystkich po raz drugi, mam nadzieje, iz dzis nauczymy sie efektywnie crackowac nieco bardziej skomplikowane aplikacje (MS), tym razem prawie bez wyjatku bedziemy poslugiwac sie Soft Icem, znakomitym narzedziem od Numegi. Zapewne dosc dobrze zapoznaliscie sie juz z SI ale na poczatek przypomne od czego zaczac, czyli jak skonfigurowac SI. Odpowiem takze na kilka pytan ktore do mnie dotarly w zwiazku z CD checkami.

Panie i Panowie przedstawienie czas zaczac :)

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. SoftIce v.3.24 (lub wyzsza)
  4. Umiejetnosc pisania w Pascalu , C , C+ ... lub dobry patcher
  5. Dosc dobra 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 :


SOFT ICE POCZATKI I DOBRE RADY

Macie juz zainstalowanego SI na swoim komputerze, jezeli chcecie aby dzialaly standarowe 32bitowe wywolania funkcji API to nalezy nieco zmodyfikowac plik ktory znajdziemy w katalogu gdzie zainsalowalismy SI, plik ten to Winice.dat, tuz przy jego koncu znajdziemy cos takiego:

; ***** Examples of export symbols that can be included *****
;       Change the path to the appropriate drive and directory
; ***** Examples of export symbols that can be included for Windows 95 *****
;       Change the path to the appropriate drive and directory

pod tymi komunikatami znajdziemy szereg bibliotek 32 bitowych, przed kazda z nich znajdziesz myslnik ; nalezy skasowac myslniki przed wszystkimi bibliotekami z ktorych funkcji masz zamiar korzystac, na poczatek proponuje skasowanie przed:

EXP=c:\windows\system\vga.drv
EXP=c:\windows\system\vga.3gr
EXP=c:\windows\system\sound.drv
EXP=c:\windows\system\mouse.drv
EXP=c:\windows\system\netware.drv
EXP=c:\windows\system\system.drv
EXP=c:\windows\system\keyboard.drv
EXP=c:\windows\system\toolhelp.dll
EXP=c:\windows\system\shell.dll
EXP=c:\windows\system\commdlg.dll
EXP=c:\windows\system\olesvr.dll
EXP=c:\windows\system\olecli.dll
EXP=c:\windows\system\mmsystem.dll
EXP=c:\windows\system\winoldap.mod
EXP=c:\windows\progman.exe 
EXP=c:\windows\drwatson.exe 
EXP=c:\windows\system\kernel32.dll
EXP=c:\windows\system\user32.dll
EXP=c:\windows\system\gdi32.dll
EXP=c:\windows\system\comdlg32.dll
EXP=c:\windows\system\shell32.dll
EXP=c:\windows\system\advapi32.dll
EXP=c:\windows\system\shell232.dll
EXP=c:\windows\system\comctl32.dll
EXP=c:\windows\system\crtdll.dll
EXP=c:\windows\system\version.dll
EXP=c:\windows\system\netlib32.dll
EXP=c:\windows\system\msshrui.dll
EXP=c:\windows\system\msnet32.dll
EXP=c:\windows\system\mspwl32.dll
EXP=c:\windows\system\mpr.dll

gdy juz dojdziesz do wprawy bedziesz mogl zdecydowac ktore biblioteki sa Ci NIEZBEDNE !!! Jezeli masz zamiar crackowac programy napisane w Visual Basic, nalezy dopisac biblioteki VB, czyli EXP=c:\windows\system\vb... - tu wlasciwa nazwa biblioteki VB.

Aby jakiekolwiek zmiany zaskutkowaly, nalezy ZRESTARTOWAC komputer !!!

W Winice.dat znajdziesz jeszcze linie :

INIT="x;",
zmien ja na (najczestsza konfiguracja) :
INIT="lines 60;color f a 4f 1f e;wd 22;wc 22;wr;code on;faults off;X;",

to ta czesc decyduje o tym co zobaczymy po wejsciu do SI. Mozesz ja dowolnie modyfikowac, wedle potrzeb. Jezeli masz rozna od 32 MB wielkosc pamieci RAM, to wpisz ta wartosc w linii:

PHYSMB=...

Jezeli masz inny procesor niz Pentium, czesto zaleca sie zmiane w linii: PENTIUM=ON na OFF. Ale OSTROZNIE, zrob to w ostatecznosci, gdy np. SI odmawia wspolpracy!!!

Jezeli wszystko sie wali, a po przejsciu do SI, system sie zawiesza, lub wystepuja inne nieprawidlowosci, to czesto pomaga zmiana ustawien karty graficznej (Display Adapter Selection ), na Standart VGA oraz Universal Video Driver, ukarze nam sie SI w oknie (sic!).

Makra- co tu pisac ulatwiaja zycie !!! Piszcie makra, ulepszajcie... Tak, ale co to jest??? Zapewne czesto przy szukaniu seriala bedziesz korzystac z kilku najpopularniejszych wywolan API getdlgitemtexta, getwindowtexta, messageboxa...Po co wpisywac za kazdym razem w oknie komend ich charakterystyke, skoro w pliku Winice mozemy zdefiniowac macro ktore bedzie zawieralo szereg podstawowych wywolan API i bedzie wywolywane komenda Macro XXX.

Gdzie dopisujemy makra? Tuz nad takim komunikatem w pliku Winice.dat:

; WINICE.DAT

; (SIW95\WINICE.DAT)
; for use with SoftICE Version 3.2 (Windows 95)
; 14 July 1997
Przykladowe macro:
MACRO bpxget32=" bpx getdlgitemtexta; bpx getwindowtexta"

Pozniej w SI wywolujemy samo macro komenda macro bpxget32. Ulatwia to prace. Sprobuj !!! Softice'owa klawiszologia:

Komendy:

OK, to najwazniejsze sprawy jesli chodzi o Soft Ice'a. Trenujcie i czytajcie co sie da na temat SI !!!


Jak znalezc numer rejestracyjny?

Software = Start Clean 1.2

Jest to maly (31Kb), stary Windowsowski programik, posiada bardzo proste zabezpieczenie. Po wpisaniu danych wymagany jest numer rejestracyjny do pelni szczescia. Czas przewidziany na jego zlamanie dwie minuty !!!

Uruchamiamy SC12 i widzimy okno Register! Jest tam mozliwosc rejestracji "Register...", oczywiscie klikamy na nie. Jestesmy w oknie rejestracyjnym i mamy tam:

Name:
Code:

Ja wpisalem Name:lukep Code:9999x

wchodzimy do SI i wpisujemy BPX getdlgitemtexta

wychodzimy z SI i w oknie rejestracyjnym klikamy OK, jestesmy ponownie w SI, znalezlismy sie w bibliotece USER32, naciskamy F11, aby znalezc sie w naszym programie i mamy STARTCLN!, widzimy cos takiego:

004011AD   8B35D8924000       MOV   ESI, [USER32!GETDLGITEMTEXTA]
004011B3   FFD6               CALL  ESI
004011B5   8D442410           LEA   EAX, [ESP+10]  <===tu ladujemy
004011B9   6800010000         PUSH  00000100       
004011BE   50                 PUSH  EAX
004011BF   6806040000         PUSH  00000406
004011C4   57                 PUSH  EDI
004011C5   FFD6               CALL  ESI            <===ponowne wywolanie getdlgitemtexta
004011C7   6830604000         PUSH  00406030       <===uupsss poprawny kod
004011CC   6830614000         PUSH  00406130       <===nasz Name !!!
004011D1   E8AA000000         CALL  00401280
004011D6   8D442418           LEA   EAX, [ESP+18]
004011DA   83C408             ADD   ESP, 08
004011DD   50                 PUSH  EAX
004011DE   6830604000         PUSH  00406030       
Jestesmy przy:
004011B5   8D442410           LEA   EAX, [ESP+10]
F10 kilka razy, az do
004011C5   FFD6               CALL  ESI
naciskamy ponownie F11, i znow jestesmy w naszym programie :
004011C7   6830604000         PUSH  00406030   dokladnie tu !

Wpisujemy d 00406030 i co widzimy porawny kod, w moim przypadku to 1196-11006-2465-477

przechodzimy linijke w dol (F10), d 00406130, nasz Name, czyscimy BrakePonint (BC0), wychodzimy z SI, uruchamiamy Start Clean'a 1.2 wpisujemu lukep i 1196-11006-2465-477, OK i...widzimy, iz program uruchamia sie z napisem Registered to lukep !!!

Proste, prawda...???

MICROSOFT I TIMELIMIT

Software: Microsoft PhotoDraw TM 2000 version 1.0 (30 day trial)

Jak zwykle produkty MS probuja udawac, iz sa dobrze zabezpieczone, i wiem, iz czesto im sie to udaje, gdy poczatkujacy Cracker probuje wywolac glowny program zglaszaja mu sie przedziwne biblioteki, w naszym przykladzie nic nie znaczaca (?) biblioteka pd1oc.dll - dobry pomysl MS...

No tak ale jesli uzyjemy W32Dasm'a to odkryjemy, iz pd1oc jest zabezpieczona przed jego dzialaniem, nic nam nie powie... Moze IDA, no tak ale po co? Przedstawie Wam sposob w jaki mozna aktualnie oszukac wiekszosc aplikacji MS dostepnych w wersjach trial !!!

Zmieniamy date systemowa, tak aby czas trialu minal i uruchamiamy PhotoD., widzimy taki oto komunikat:

"The Microsoft PhotoDraw trial offer has expired."

Znajduje sie tam rowniez OK, jesli na niego klikniemy to wychodzimy z programu.

Musicie wiedziec, iz programisci MS kochaja wszystki najbardziej elementarne wywolania funkcji API i mozecie byc pewni, iz Getlocaltime, Getsystemtime, Gettimezoneinformation na pewno doprowadza Was do ciekawych schematow kodu, ale ja preferuje wywolanie Messageboxa na Nagscreen informujacy o koncu trialu !

Sprobujmy...

Wchodzimy do SI, nastawiamy BPX Messageboxa, F5 uruchamiamy PhotoDraw i znow jestesmy w SI, znalezlismy sie w USER32!, naciskamy F11 wyszlismy z SI, naciskamy OK na messageboxa i znow SI tym razem w PD1OC!, naciskamy F12 i jest PHOTODRW!.Teraz musimy dotrzec do RET'a 000C, czyli F10, wyskoczylismy znow do PD1OC!, dokladnie w RET 000C, dalej F10 i ponownie jestesmy przy PHOTODRW!, widzimy cos takiego:

3000AE12   E859AA0E00              CALL   300F5870
3000AE17   83FE01                  CMP    ESI, 01   <= Tu jestesmy !
3000AE1A   7407                    JZ     3000AE23

To co nas najbardziej interesuje znajduje sie kilka instrukcji powyzej tego kawalka kodu, musimy przejsc tam naciskajac ctr + up arrow az zobaczymy cos takiego:

3000ADB8   83C404                  ADD   ESP, 04
3000ADBB   8D46FF                  LEA   EAX, [ESP-01]
3000ADBE   83F805                  CMP   EAX, 05
3000ADC1   773D                    JA    3000AE00
3000ADC3   FF2485D8B60030          JMP   [EAX*4+3000B6D8]
i dalej:
3000ADFB   E88E1B0000              CALL  3000C98E  <-do pd1oc.dll
3000AE00   85F6                    TEST  ESI, ESI  <-czy ESI jest 0, u nas nie jest            
3000AE02   741F                    JZ    3000AE23  <-skocz jesli jest zero w ESI, dobry skok!
3000AE04   83FE07                  CMP   ESI, 07   
3000AE07   741A                    JZ    3000AE23  <-Wszystko OK, dzialaj dalej !!!Jak nie wywal Nagscreen
Co dalej...?

Pomyslmy, mi przychodza na mysl dwa dobre pomysly, pierwszy zmieniamy 3000AE02 i 3000AE04 na skoki bezwarunkowe EB i program mysli iz jest wciaz w okresie trial, czyli spisujemy opcody: E88E1B000085F6741F83FE07741A i Hiew zmieniamy na: E88E1B000085F6EB1F83FE07EB1A i mamy bez ograniczen PhotoDraw, moglibysmy zmienic tylko 3000AE02, ale lepiej sie upewnic.

Drugi sposob: Postarajmy sie aby w EAX bylo na pewno 1, jak: zmieniajac 83C4048D46FF83F805773D na 83C40433C04883F805773D czyli zmienilismy instrukcje LEA EAX, [ESP-01] na XOR EAX, EAX + DEC EAX,

dalej szukamy: E88E1B000085F6741F83FE07741A i zmieniamy na: E88E1B000033F6741F83FE07741A, teraz mamy pewnosc, iz po naszej zmianie w 3000AE00 z TEST ESI, ESI na XOR ESI, ESI, jest w ESI 0 !!!

Obie metody sa dobre i obie dzialaja wspaniale!


CD CHECK cd.

Dostalem kilka pytan zwiazanych z grami i CD-checkami, postaram sie teraz na kilka z nich odpowiedziec:

  1. SIN i wersje powyzej 1.03, czyli jak dotad 1.04 i 1.05 NIE POSIADAJA CDCHECKA !!! Programisci zdecydowali sie na zniesienie tego ograniczenia, i wcale im sie nie dziwie przypominajac sobie prostote ich konstrukcji...
  2. HereticII, no dobra mala podpowiedz CDcheck kryje sie w quake2.dll...Dalej samemu.
  3. Resident Evil2, jeszcze sie za nia nie zabralem, ale wkrotce...

TUROK2:SEEDS OF EVIL

Niesamowita gra. Instalujemy ja, wyjmujemy CD z napedu, odpalamy gre i widzimy info:

"Unable to find Turok2 CD"...etc.

Wlaczamy W32Dasm'a i otwieramy Turok2.exe, ..., nastepnie szukamy w SDR naszego komunikatu "Unable to find Turok2 CD", jest, klikamy na niego i znalezlismy sie mniej wiecej tu:

:004A025B   39B4244C050000          CMP  DWORD PTR [ESP+0000054C], ESI
:004A0262   7430                    JE   004A0294                  <= dobry skok
:004A0264   39742414                CMP  DWORD PTR [ESP+14], ESI
:004A0268   752A                    JNE  004A0294                  <= dobry skok
:004A026A   8B942448050000          MOV  EDX, DWORD PTR [ESP+00000548]
:004A0271   6A05                    PUSH 00000005

* Possible String Data Ref from Data Obj -> "Turok CD Not Found !"

:004A0273   6810D65100              PUSH 0051D610

* Possible String Data Ref from Data Obj -> "Unable to find Turok2 CD, Verify"
                                         -> "CD is in drive and no other application"
                                         -> "is using CDROM Drive."

:004A0278   68B0D55100              PUSH 0051D5B0
itd.

Jak widzisz mamy dwie mozliwosci spatchowania tej gry, albo JE 004A0294 zamienic na JMP 004A0294 lub JNE 004A0294 na JMP 004A0294, lub spaczowac oba skoki!!!

Poza tymi dwoma jest jeszcze kilka innych sposobow... Czyli zmieniamy np.: offset A0268 z 752A na EB2A, F9, F10, odpalamy gre, !!!!!! Gramy bez CD.

SHOGO:MOBILE ARMOR DIVISION v.1.0

Jesli ktos z Was lubi Mange, to jest to gra dla niego.

Mamy juz zainstalowana gre, wyjmujemy CD i odpalamy gre, widzimy cos takiego:

"Please insert the Shogo CD-ROM into your CD-ROM drive."

Otwieramy W32Dasm'a i szukamy, "Please insert the Shogo CD-ROM into your CD-ROM drive.", jest klikamy dwukrotnie i widzimy cos takiego:

:00401075 50                      push eax

* Possible Reference to String Resource ID=00008: "Please insert the Shogo CD-ROM into your                                                    CD-ROM drive."

:00401076 6A08                    push 00000008
:00401078 51                      push ecx
:00401079 FFD3                    call ebx
:0040107B 85C0                    test eax, eax
:0040107D 7524                    jne 004010A3

* Possible StringData Ref from Data Obj ->"Please insert the game CD-ROM "

przechodzimy kilka linijek kodu w gore, az zobaczymy:

:0040103C 85C0                    test eax, eax
:0040103E C78424D8000000FFFFFFFF  mov dword ptr [esp+000000D8], FFFFFFFF
:00401049 0F8503010000            jne 00401152     <= nasz skok !!!
:0040104F E86EE70100              call 0041F7C2
:00401054 8B4804                  mov ecx, dword ptr [eax+04]
:00401057 E8764E0100              call 00415ED2
:0040105C 8BAC24E0000000          mov ebp, dword ptr [esp+000000E0]

* Reference To: USER32.LoadStringA, Ord:0183h <= wywolanie bardzo ciekawej funkcji API

Zrobienie crack'a to banalna sprawa zmienic : 0F8503010000 na 0F8403010000 i wszystko dziala bez CD !

Teraz sposob na SHOGO z uzyciem Soft Ice'a:

Pierwszy sposob to ...Oczywiscie BPX LoadStringA, tylko uprzedzam, iz mozecie troche sie nawciskac F5, ale potem kilka linii kodu wzwyz i mamy:

C78424D8000000FFFFFFFF  mov dword ptr [esp+000000D8], FFFFFFFF
0F8503010000            jne 00401152     <= nasz skok !!!
E86EE70100              call 0041F7C2  

Drugi sposob, lepszy: BPX messageboxa i podobnie jak w sposobie pierwszym szukamy naszego fragmentu kodu powyzej miejsca w jakim sie znalezlismy.

To na tyle jesli chodzi o CD-check'i.


TIME LIMIT cd.

Software: LView Pro version 2.1

Po instalacji przestawiamy date, tak aby Lview sie juz nie chcial uruchamiac. Ustawiamy BPX getsystemtime, uruchamiamy Lview i..., jestesmy juz w SI, dokladnie w KERNEL32, naciskamy F11, jestesmy w MSVCRT, F12 i MFC42, ponownie F12 i juz jest LVIEWPRO!, musimy jeszcze raz klepnac F12, aby znalezc sie bezposrednio w interesujacym nas miejscu!!! Widzimy:

004371A6   E874C0FCFF                   CALL   0040321F
004371AB   83C408                       ADD    ESP, 08   <= tu zladowalismy
004371AE   8BCF                         MOV    ECX, EDI
004371B0   50                           PUSH   EAX
004371B1   E80CB4FCFF                   CALL   004025C2
004371B6   E8D8ABFCFF                   CALL   00401D93
004371BB   85C0                         TEST   EAX, EAX
004371BD   750C                         JNZ    004371CB
004371BF   E882ADFCFF                   CALL   00401F46
004371C4   33C0                         XOR    EAX, EAX  <= zerujemy Eax
004371C6   E98B030000                   JMP    00437556
004371CB   8D542420                     LEA    EDX, [ESP+20]
004371CF   52                           PUSH   EDX
004371D0   E86AC8FCFF                   CALL   00403A3F
004371D5   83C404                       ADD    ESP, 04
004371D8   85C0                         TEST   EAX, EAX    <= czy Eax rozne ??? Jesli rowne 
004371DA   745C                         JZ     00437238    <= nasz skok !
004371DC   837C242024                   CMP    DWORD PTR [ESP+20], 24

Co mozna zrobic? Zmienic 004371D8 TEST EAX, EAX na XOR EAX, EAX (33C0), lub zamienic 004371DA JZ na JMP (EB). Obie metody sa dobre i skuteczne. Teraz mozemy bez ograniczen korzystac z LView Pro 2.1 !!!


ZEN CRACKING

Samo pojecie wymyslil +ORC, ktory to namietnie stosowal je w swoich rewelacyjnych Tutorach. Zen Cracking to lamanie programow do ktorych ciezko znalezc kod zabezpieczajacy, czesto zaszyfrowany i skompresowany. Programy te to tzw."OverProtected", gdzie czesto zabezpieczen jest kilka i bardzo ciezko znalezc klucz do ich odblokowania (np. pluginy firmy Timeworks - jak dotad tylko grupa RADIUM moze poszczycic sie ich zlamaniem :) ). Do Zen Crackingu oprocz ogromnej wiedzy potrzebny jest przeblysk geniuszu. Przy programach "OverProtected" nalezy myslec niestandardowo, "wejsc" w program calym soba, poczuc go !

Ciagly trening moze doprowadzic Was do takiego stanu, iz bedziecie potrafili blyskawicznie znalezc ten wlasciwy fragment kodu...

Powodzenia :))))

W nastepnym Tutorialu:

  1. Troche o szukaniu wlasciwego kodu.
  2. Na pewno jakis Time-limit
  3. CD-checki cd.
  4. Moze cos mnie olsni ???

! Jezeli uwazasz, iz moglbys przylaczyc sie do tworzonej wlasnie grupy Crackerskiej to mailme: lukep@gdansk.sprint.pl !


Links:


Thanx:

Anna, Martin, tkc, +ORC, Phrozen Crew, Crackpl, mNICH, ... i dla mnostwa innych osob !!!

Je¬eli zauwazyles jakies bledy napisz, brdr wdzieczny.

Mam nadzieje, i¬ pomoglem niekt¡rym z Was ...