Cracking tutorial #4 by lukep

Zawartosc :

  1. VB to prostsze niz myslisz...
  2. Smart Check potyczka druga
  3. VB - znaczy slabo zabezpieczone...???
  4. Calkowita zmiana tematu, czyli Cd Checki ciag dalszy...

Kolejny raz zasiadamy do komputera w celach edukacyjnych, dzis obiecany odcinek o Visual Basic - tak znienawidzony przeze mnie jezyk (?), programowania. Naucze Was jak lamac kolejnym doskonalym narzedziem od NuMegi czyli Smart Check'iem. Nauczymy sie jak go poprawnie skonfigurowac i urzywac, pamietaj SC to najpotezniejsza bron w walce z VB, jesli opanujesz zasade dzialania i wykorzystywania tego narzedzia...To zaden program napisany w VB nie oprze sie Twojej sile :)

Oczywiscie nie moglo zabraknac cyklu CD Checki, a w nim KingPin 1.21, bardzo ciekawy schemat zabezpieczenia (to nie znaczy, iz skomplikowany :))

Zaczynamy !!!

Narzedzia:

  1. WDasm32 v.8.93
  2. Hiew v.6.16
  3. SoftIce v.4.01
  4. Smart Check v.6.01 (jest juz 6.03, ale nie moge zlokalizowac)
  5. Umiejetnosc pisania w Pascalu , C , C+ ... lub dobry patcher
  6. Dosc dobra znajomosc Asemblera => przeczytac i dokladnie sie zapoznac z "ART OF ASSEMBLY LANGUAGE".
  7. Mozg i intuicja !!!
  8. Sporo czasu i konsekwentnej dobrej roboty.

Nasz przykladowy SOFTWARE :

  1. Texturizer version 1.45 - 1999-07-01 - ENTER 9\99 CD 1
  2. KingPin 1.21
  3. PixMachine99 => http://www.techsono.com/pixmachine99/
  4. Time & Chaos 5.3.5 => CHIP 6\99

O VISUAL BASIC SLOW KILKA

Jak zapewne wiekszosc z Was wie VB to raczej jezyk skryptowy, a nie typowy jezyk programowania. Programy pisane w VB sa zbudowane bardzo specyficznie, to znaczy, iz ich pliki nie sa do konca tym, czym sie wydaja byc :) Aby uruchomic program VB nalezy posiadac na dysku tzw. VBruntime dll Dotad powstalo szesc wersji tych bibliotek, kazdy napisany w VB posiada odwolania do schematow dzialania ukrytych w danej wersi vb.dll, dlatego tez programy te sa znaczaco wolniejsze w dzialaniu, dzialaja w sposob posredni... Tak wiec gdybysmy chcieli debugowac taki program, zglosi nam sie w SI, zamiast pliku wykonywalnego programu, odpowiednia biblioteka VB. Poruszanie sie po bibliotekach VB nie nalezy do najprzyjemniejszych rzeczy, ale przy odrobinie cwiczen i pewnej wprawie mozna tam wszystko znalezc, podobnie jak w zwyklych programach. Aktualnie mozemy spotkac programy pisane od wersi biblioteki 4 do 6, inne juz praktycznie nie sa wykorzystywane. Do wersi 4 mamy biblioteke vb40032.dll, wersja 5 msvbvm50.dll i szosta msvbvm60.dll, najczesciej spotykana aktualnie jest wersja 5. Jezeli mamy do dyspozyci tylko SI to nalezy w pliku winice.dat dopisac sciezke do danej biblioteki VB, np.: C:\Windows\System\msvbvm50.dll, najlepiej przy szukaniu seriala poslugiwac sie nastepujacymi komendami: MultiByteToWideChar, rtcR8ValFromBstr, WideCharToMultiByte, __vbaStrCmp, __vbaStrComp, __vbaStrCopy, __vbaStrMove, __vbaVarTstNe

Jezeli chcemy znalezc sie w poblizu kodu wyswietlajacego jakiegos NagScreen'a to najlepiej: rtcBeep, rtcGetPresentDate (time API), rtcMsgBox

I to wszystko, jezeli chodzi o SI.

!!!!W32Dasm893 i VB !!!!

!!! Jezeli chcesz znalezc info w dzialce SDR musisz dokonac modyfikacji w pliku W32dsm89.exe znajdz offset 16B6C (ciag 28F6FF) i zmien na 98F4FF - teraz otwierajac programy VB bedziesz widzial odnosniki w dzialce SDR !!!!

Ale po co sie meczyc skoro istnieje inne, wydajniejsze narzedzie = SmartCheck !!!! Do walki z VB urzywam tylko tego, dzieki SC praca stala sie latwa i przyjemna !!! :) Dobrze ale jak SmartCheck'a urzywac??? Wlasnie tego chce Was nauczyc !!! Ja posiadam wersje 6.01, ale jest juz wersja nowsza. Otwieramy SmartCheck'a - ladny interface, musimy teraz skonfigurowac nasze narzedzie tak, aby dzialalo z maxymalna moca i wydajnoscia...

Najpierw musimy zaladowac program ktory chcemy Crackowac do SC. Czyli File -> Open, zaladowalismy program, w lewym dolnym rogu widzimy Nazwa programu - Program Transcript, musimy teraz ustawic warunki "debugowania" naszego programu, klikamy na program -> Settings... W zakladce Error Detection musimy miec zaznaczone wszystkie boxy oraz funkcje reports errors immediately, nastepnie przechodzimy do Advanced i musimy tam zaznaczyc komendy:

- Report errors caused by other errors
- Report errors even if no source code is available
- Report each error only once
- Check all heap blocks on each memory function call

Dobra, teraz zakladka Reporting, tu musimy zaznaczyc wszystki funkcje oprocz Report MouseMove events from OCX controls. W zakladce Files to Check - Wszystkie elementy musza byc zaznaczone !!! W zakladce Error Suppression - musza byc zaznaczone plik glowny exe badanego programu, oraz odpowiednia VB.dll, reszta nie musi byc (czasem jednak jest konieczne zaznaczenie wiekszej ilosci plikow i bibliotek).

Zakladka Program Info jest dla nas nieistotny...

Teraz mozemy przeisc do najwazniejszej czesci naszego "debugowania", na pasku zadan widzimy znaczek podobny do znaczka "Play", to on uruchomi nasz program, tak wiec odpalamy !!! po chwili zobaczymy okno podzielone na trzy czesci, to co na razie nas interesuje to czesc znajdujaca sie w gornym lewym podoknie...

Kiedy pojawi nam sie informacja o jakimkolwiek bledzie programu nalezy wciskac Acknowledge, NIGDY Suppress... !!!

Dobra - program nam sie otworzyl, teraz musimy sprawdzic czy w zakladce View mamy zaznaczone:

- Show all events
- Suppressed errors 
- Arguments

Jezeli tak to nasz Smart Check 6.01 jest gotowy do pracy !!! Teraz jeszcze kilka najbardziej przydatnych funkcji VB (String Functions):

Val()    - Zmienia (konwertuje), stringi na liczby
Str$()   - Zmienia (konwertuje), liczby na stringi (ciagi Hex)
Left$()  - Pozostawia, jedynie okreslona dlugosc znakow od lewej strony zapisu np. Left$(Cracking, 4) = "Crac".
Right$() - Pozostawia, jedynie okreslona dlugosc znakow od konca prawej strony zapisu
Ltrim$() - Usuwa spacje(lub inne znaki), z lewej czesci zapisu np. Ltrim$ (" Crack ") = "Crack "
Rtrim$() - Usuwa spacje(lub inne znaki), z prawej czesci zapisu
Trim$()  - Usuwa spacje(lub inne znaki), z obu czesci zapisu
Asc()    - Zmienia char. do kodu ANSI np. Asc("A") = 65.
Chr$()   - Zmienia kod ANSI do char. np. Chr$(65) = "A". 

To najwazniejsze wiadomosci, ktore trzeba znac, aby zaczac Crackowac programy napisane w VB... Teraz przejdziemy do zadan praktycznych !!!


SmartCheck1 - szukamy poprawnego numeru!

Software: Texturizer version 1.45 - 1999-07-01 - ENTER 9\99 CD 1 Texturizer 1.45 korzysta z MSVBVM50.DLL. Zabieramy sie do pracy...

Otwierajac Texturizera, po kliknieciu na pole About T..., mamy mozliwosc wpisania danych rejestracyjnych (Register). Rejestracja odbywa sie poprzez wpisanie odpowiedniej kombinacji Name - Code.

Otwieramy SC i ladujemy Texturizera...Mamy juz poprawnie skonfigurowany SC, tak wiec uruchamiamy program. Otrzymamy kilka informacji o bledach, jak pamietacie, trzeba naciskac ZAWSZE Acknowledge.Po kilku chwilach otworzy nam sie Texturizer, przechodzimy do pola rejestracyjnego i wpisujemy:

...Name: lukep
...Code: 9999x

Otrzymujemy info, iz kod jest niepoprawny (dlaczego :-)?). Teraz zamykamy Texturizera i patrzymy na to co wyswietlil nam SC... ...Ale informacji !!! Moze poszukamy nas interesujacych ??? Hmmm, wpiszmy lukep i wlaczmy szukanie, OK ? .................

Znalazl cos takiego:

_vbaStrCmp(String:"",String"lukep") returns DWORD:1

to tu po raz pierwszy pojawia sie nasz name, zobaczmy co sie z nim dzieje...? Tak, zamieniane sa stringi z rozbitego lukep na l, u, k, e, p. W jaki sposob?

string "l" ---> ASC "108" 
string "u" ---> ASC "117"
itd.

Co dalej, sprawdzana jest dlugosc stringu "lukep" = 5.

Nastepnie odbywa sie szereg manipulacji na naszym stringu i jego wartosciach ASC. Dochodzimy w naszym obserwacjach do miejsca w ktorym pojawia sie cos takiego:

Hex(VARIANT:Integer:106)... Mamy go ...!!!!!!!!!!!!!!!!!!!!!!

To tu zaczyna sie wylaniac prawidlowy, NASZ prawidlowy numer, obserwujmy....

Dochodzimy do:

_vbaVarCat(VARIANT:String:"B3,VARIANT:String:"6A")returns DWORD:6EDB98

uhmmm, nastepnie nastepuje laczenie poszczegolnych skladnikow... Zobaczmy co uzyskamy na zakonczenie tych wszystkich operacji??? Dochodzimy do: Right$(String:"B36A-A7E...",long:1), zobaczmy co mamy w prawym podoknie ---> jakis podejrzany ciag "B36A-A7E8-32", czy nie jest przypadkiem, nasz szukany numer !!!???

Dobra zamykamy SC i przechodzimy do Texturizera, wpisujemy nasze uzyskane dane:

...name: lukep
...code: B36A-A7E8-32
i wciskamy OK,... i uzyskujemy podziekowania :-)

Teraz w About bedziemy mieli informacje, iz ta kopia Texturizera jest zarejestrowana dla naszego name !!!! Aby program byl ponownie nie zarejestrowany, nalezy usunac z rejestrow (klucz HKEY_CURRENT_USER\SOFTWARE\DJST Productions\Texturizer]), wartosc User.

Pierwszy program VB scrackowany i to przy urzyciu SmartCheck'a !!!! :))))))

Jaki jest inny sposob na szybkie odszukanie poprawnego numeru w przypadku Texturizera??? Nooo, odpowiedzcie... sobie sami. Poobserwujcie kod.


SmartCheck atakuje po raz drugi

Software: PixMachine99 /TechSono Engineering, Inc./ => http://www.techsono.com/pixmachine99/ Versja VB = MSVBVM50.DLL

Jest to pakiet trzech programow, kazdy z nich to w zasadzie odzielnie dzialajacy prog (majacy swa wlasna procedure rejestracyjna), a PixMachine to pakiet tych programow (majacy wlasny kod rejestracyjny), jak sie zapewne domyslacie wystarczy zarejestrowac Pixmachine, aby zostaly wygenerowane poprawne kody do wszystkich trzech programow. Ciekawe, bedzie mozna pocwiczyc...

Ladujemy plik PixMachine99.exe do SC.

Oczywiscie odpalamy nasze skonfigurowane juz narzedzie, i czekamy... wciskajac w razie potrzeby Acknowledge.

Oooo, pokazal nam sie NagScreen z "przyciskiem" Enter Regi...etc., pokazuje sie kolejne okno z umowa licencyjna, o wreszcie mozliwosc wpisania danych... !!!

Name:
Registration Code:
ja oczywiscie wpisalem:
Name: lukep
Registration Code: 9999x

Klikamy na Register i ... Invalid Registration Code, hmmm, no tak :-) Zamykamy PixMachine i spogladamy w kod. Widzimy miedzy innymi:

Timer1_Timer
cbEnterKey_Click
Command1_Click
Register_Click

Tak jest, to sa czynnosci jakie wykonywal program, przyjzyjmy sie im blizej, klikamy na Register_Click i widzimy: Tak, znowu podobnie jak w przypadku Texturizer'a program rozbija stringi z name i dopisuje do nich wartosci ASC, popatrzmy co dzieje sie dalej...

Nie, to nie moze byc prawda... Widzicie:

Long (26705) --> String ("26705")

Sprawdzmy, otwieramy PixMachine99 i wpisujemy:

Name: lukep
Registration Code: 26705

Teraz Register... i otrzymujemy "Thank You For Your Support!" Niemozliwe, a jednak... Sila SmartCheck'a jest ogromna!!!

PixMachine wygenerowal poprawne kody do wszystkich trzech podprogramow. Fakt to jeden z najgorzej zabezpieczonych programow, z jakimi mozemy sie spotkac, ale tez majac do dyspozycj SC, ciezko bedzie cokolwiek przed naszym wzrokiem ukryc...!!! :-)

Aby usunac rejestracje, z klucza rejestrow: [HKEY_CURRENT_USER\SOFTWARE\VB and VBA Program Settings\PixMachine99\TheSection], usun wartosci przy: "UserName"=" " oraz "RegKey"=" "

i znow PixMachine bedzie nie zarejestrowany:

!!!Zadanie domowe:

Wspomnialem, iz kazdy z podprogramow ma wlasny kod rejestracyjny, sprobujcie zarejestrowac kazdy z podprogramow.

Klucze do rejestrow tych progow to:

PixNews99: [HKEY_CURRENT_USER\SOFTWARE\VB and VBA Program Settings\PixNews99\TheSection]

PixPlayer: [HKEY_CURRENT_USER\SOFTWARE\VB and VBA Program Settings\PixPlayer99\TheSection]

PixWeb: [HKEY_CURRENT_USER\SOFTWARE\VB and VBA Program Settings\PixWeb99\TheSection]

Usuwajac tam wartosci name i code, uzyskacie ponownie niezarejestrowane podprogramy!

Potrenujcie !!!

Nieco ciekawiej zabezpieczony VB ?!

Software: Time & Chaos 5.3.5 => CHIP 6\99 Versja VB = MSVBVM50.DLL

Jak zwykle ladujemy do SC nasz program, a nastepnie odpalamy...

Wyskoczy informacja, iz program byl kompilowany w p-code, ale my akceptujemy informacje i lecimy dalej. Troche sie nawciskamy Acknowledge. W koncu jestesmy. Musimy teraz dostac sie do okna dialogowego - rejestracyjnego... Znajduje sie ono w File -> Register Time & Chaos (F3)

Sa dwa pola:
Licensee:
Code:
Ja oczywiscie wpisalem
Licensee:lukep
Code:9999x

Dajemy Enter i otrzymujemy info, iz code jest niepoprawny, zamykamy program i przechodzimy do analizowania kodu programu. Wpisujemy szukanie i wyraz szukany lukep, nie interesuja nas lukeplc itp., musimy znalezc sie przy ciagu znakow lukep.

W koncu jest!
Mid$(String:"lukep",long:1,VARIAMT:Integer:1)  
Przeksztalceni, juz doskonale nam znane, az do:
ProcCallEngine returns DWORD:71E990

Sprawdzmyten numer, dziwne po wpisaniu otrzymujemy komunikat o bledzie Run-time ???

Czyli (chyba?), nie tedy droga... Spojrzmy moze co sie dzieje z naszym nieprawidlowym numerem. Przy koncu sprawdzania co sie dzieje z numerem ktory wstukalismy, zauwazylem, iz znowu zwracany jest string 71E990. Dziwne. Nastepnie wpadlem na pomysl, aby zobaczyc co sie dzieje chwile przed analizowaniem przez program naszego nieprawdidlowego numeru... ...I znalazlem cos takiego:

SysFreeString(BSTR:00532058) <- nasz niepoprawny numer

kliknalem na to i ...

SysFreeString(BSTR:0052E36C) <- dziwny ciag 36450

Sprawdzmy... No i otrzymalismy dziwne info: Thank You! Your Chaos32 Evaluation has been ...next 21 ... Co jest?- nie dosc, iz ten numer przedluza trial dla dowolnych danych, to jeszcze mozna go wklepac tylko raz, podczas aktualnej sesji z programem, po ponownym restarcje programu znow ten kod jest akceptowany. Mysle, iz ten program jest spieprzony, numer 71E990 jest na 99% naszym poprawnym numerkiem do lukep. Dlaczego nie jest akceptowany, no coz - programy maja mase bugow... Moglo sie tez tak zdarzyc, iz czegos nie dostrzegam, lub pomijam - dlatego tez, dalsza zabawe z tym programem - proponuje Wam. Jezeli wpadniecie na jakis ciekawy pomysl - mailme... Podsumowujac, znalezlizmy kod ktory powoduje przedluzenie czasu trialu i prawdopodobny poprawny kod, lecz z jakis powodow nie jest on przez program akceptowany... ??? Przede wszystkim chodzilo mi o zaprezentowanie jednego z najbardziej zamotanych programow VB, jakie ostatnio wpadly mi w rece, oraz pokazanie mozliwosci dzialania SC. Mam nadzieje, iz po tej lekcji bedziecie chetniej lamac przy pomocy, tego narzedzia... Wroce (kiedys), z cala pewnoscia do SC i lamania VB, jak tylko trafi do mnie cos wartego analizowania... To wszystko, jesli chodzi o VB w tym tutorialu....

Powodzenia w walce z tymi, hmmm, "programami" !


CD Checki - KingPin 1.21

Tak, seri CD Check ciag dalszy.

Dzis gra ktora ostatnio jest przerazajaco popularna, dostalem sporo maili na temat zabezpieczenia wykorzystanego w tejze grze. Zabierzmy sie wiec do analizowania...

Nizej opisany sposob pozbycia sie CD checka dziala na wersje 1.20 i 1.21, poprzednie wersje gry wymagaly wielu zmian, od wersi 1.20 wystarczy dokonac dwoch zmian, aby grac bez CD. Otwieramy KingPin.exe w W32Dasm'ie, nastepnie przechodzimy do SDR i szukamy komunikatu ktory pojawia sie gdy nie mamy CD w CDRomie: "You must have the KingPin CD in the drive..." Klikamy na komunikat dwukrotnie i jestesmy:

:00449065   833D4C1D480000    CMP  DWORD PTR [00481D4C], 00000000
:0044906C   7402              JE   00449070    <- Newralgiczny skok
:0044906E   EB67              JMP  004490D7    <- ten skok przenosi nas ponad sprawdzaniem CD

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

:00449070   E837FFFFFF        CALL 00448FAC
:00449075   8945FC            MOV  DWORD PTR [EBP-04], EAX
:00449078   837DFC00          CMP  DWORD PTR [EBP-04], 00000000
:0044907C   750F              JNE  0044908D

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

:0044907E   6860A04500        PUSH 0045A060    <- tu jestesmy !
Co mozna zrobic???

Moze usunac JE 00449070, czyli zamiast 7402 wstawic 9090. Wtedy zostanie wykonany skok JMP i mozemy grac bez CD, spisujemy offset - 4906C i przechodzimy do Hiew. Dokonalismy zmian, odpalamy KingPin'a i ...mozemy grac :-) Nie wiem czy zauwazyliscie, jak wiele jest komunikatow o braku CD, w poprzednich wersjach trzeba bylo dokonac wielu innych zmian, aby grac, ale autorzy od wersi 1.20 dodali piekny skok JMP 004490D7 i dzieki temu uproscili nam prace.

Kolejna gra pokonana...

Dobrnelismy do konca kolejnego tutora...

Mam nadzieje, iz pomogly zawarte w nim informacje w Waszej edukacji Crackerskiej.


W nastepnym Tutorialu:

Mysle, iz bedzie poswiecony lamaniu dongli (sic!). Chyba, ze wpadnie cos nowego godnego opisania...


Links:


Thanx: ... dla mnostwa osob !!! Kazdy wie, za co... :)
Jezeli zauwazyles jakies bledy napisz, bede wdzieczny. Mam nadzieje, iz pomoglem niektórym z Was ...
Do nastepnego spotkania ... Wkrotce !!!!!!!!!!!!! Cheers

Lukep contact: lukep@gdansk.sprint.pl

Gdansk, pazdziernik 1999