LEKCJA15.TXT

(13 KB) Pobierz
Lekcja XV - "Techniki lamamniu zabezpieczen keyfile"

Narzedzia:
1. Softice

-----------------------
     WSTEPNIAK
-----------------------

czy to ptak??.. nie!
czy to samolot??.. nie!
To muSzyn piszacy swoje teksty !
hi hi.. zawsze chcialem to powiedziec.. a ty co taki smutny.. hmm.. no co ci jest?? he he.. nie martw sie bedzie dobrze.. sam jeszcze pamietam swoje wejscia na crack scene (uhh.. ile tego bylo..)..
Ja bylem trudny przypadek... przejscie przez "brame" cracku.. tzn. zlamanie pierwszego proga przyszlo mi.. ekhm... az trudno mi to przez gardlo przechodzi... ponad 1,5 roku po tym jak zaczalem sie tym interesowac.... pamietam, to bylo 23 maja 199x roku w
8 klasie podstawowki.. ach co to byl za dzien... na nim zrobilem to pierwszy raz.. ach ! co to byl za dzien !! to byl on ! taki piekny vcdrom... szczegolnie ze... jak ostatnio patrzylem tlock'iem zabezpieczony a ten kto sie interesuje to wie ze zaraz na
poczatku wystarczy tylko odpowiedni rejestr wylukac i juz mamy serialka... teraz by mi to samo zajelo 3s... a wtedy siedzialem nad tym dwa dni!.. takie zycie moi mili... tak jestem tym przejety (mam juz plazme na mozgu) ze postanowilem wszystkie nowo wy
chodzace wersje tlock'a keygenowac... juz jednego mam na koncie.. 1:0 dla mnie (yeah!) ale malo mi ciagle tego badziewia.. a i jakbys mial info o jakis nowych progach zabezpieczonych tym badziewiem to mailme < muszyn@hoga.pl > i zapodaj jakis kontakt z t
ym progiem (link'a, chip itp..).. wtedy napewno podziele sie z toba efektami mojej pracy.. o kurde ale sie rozpisalem a ty czekasz i czekasz az skoncze pierniczyc i przejde do konkretow wiec zaczynajmy wreszcie nareszcie...

-----------------------
      LET'S GO
-----------------------

Po (dlugim??) krotkim wejsciu czas na jakis pierniczony konkret.. nie?? Tym razem mamy cosik innego niz do tej pory wiec warto przeczytac... nauczyc sie czegos nowego az w koncu przerobic caly ten kursik i zaczac (wreszcie) lamac samemu...

-----------------------
  OPIS ZABEZPIECZENIA
-----------------------

Tym razem mamy zabezpieczenie typu "keyfile". Tak chlopak, widze jak ci juz mozg sciska. To zabezpieczenie charakteryzuje sie tym ze wszystkie dane potrzebne do rejestracji znajduja sie w pliku. Ogolnie program zabezpieczony keyfile musi zrobic jedna rze
cz, a mianowicie musi OTWORZYC plik... tak, juz widze ten twoj crackerski usmieszek... tu go lapiemy...
Uscislajac i zwezajac temat program zabezpieczony keyfile musi wykonac nastepujace czynnosci:
- otworzyc plik (o tym juz sobie powiedzielismy ;-])
- odczytac z niego odpowiedni string...
- jako ze pobral juz to co go interesowalo.. to moze dalej robic/mieszac/kodowac/dekodowac i wogole wszystko co normalnie robi z wpisywanym serialem/haslem,

Zabezpieczenie takie ma jedna wade.. cholernie latwo jest je zlapac... Ale znow ma zalete.. do pliku mozesz zapisywac wartosci ktorych z klawiatury nie wprowadzisz tzn. z klawiatury mozesz wprowadzic wartosci od 21h do ok. 7Eh (gornej granicy dokladnie n
ie znam ale to jest cos kolo podanej wartosci plus special char). Pod win otwieranie pliku odbywa sie poprzez wywolanie funkcji:

CreateFileA

Nastepnie odczytywanie:

ReadFile

ew. zapisywanie:

WriteFile

jeszcze podczas operacji na plikach czesto spotykane sa:
SetFilePointer
GetFileSize

ale uzywanie ich do zlapania programu jest.. ekm... durne... tak nawet sobie nie wyobrazacie jak duzo moze byc setfilepointer w jednym programie podczas jego inicjacji... powiem tylko ze przeszedlem to na wlasnej skorze i moze byc baaardzo duzo... ponad
godzine ctrl-d ciskalem po zalozeniu tej pulapki...;-))
Obecnie zabezpieczenie typu keyfile jest przynajmniej przeze mnie coraz rzadziej a wlasciwie prawie wcale spotykane. Coraz wiecej programow kryje swoje zabezpiecznie w rejestrze win i chyba na tym trzeba skupic swoje dzialania. Ale my mamy keyfile i musi
my to polamac bo przeciez co to za cracker co keyfile nie lamal...

-----------------------
   ROZPRACUJMY TO
-----------------------

Jak juz wczesniej powiedzielismy do otwierania pliku sluzy funkcja CreateFileA, sluzy ona nie tylko do otwierania, rowniez do tworzenia i takich tam roznych zwiazanych z tym rzeczy.
Mysle ze juz mamy wszystkie informacje aby powolutku zaczac lamac keyfile. Uruchom test_crackme nr 4. Od razu dostajesz wiadomosc ze jeszcze nie scrackowales tego crackme... wiec czas mu pokazac szkole.. no ale co to.. popatrz na naglowek okna,, he .. "u
ncracked".. co znaczy ze test_crackme nie jest jeszcze sccrackowane, patrzysz nie ma miejsca zeby wpisac haslo czy cos.. aaaaah tak.. no zapomnialem.. przeciez to keyfile... i wszystkie dane pobiera z pliku... ale jakiego pliku??? wogole to skad on wiedz
ial ze ja go jeszcze nie zcrackowalem?? odpowiedz sie nasuwa sama... wiedzial ze nie jest zcrackowany po tym ze nie znalazl pliku.. jakiego?? zamknij crackme.. zaloz pulapke w si na createfilea:

bpx createfilea

juz masz??.. oki.. na poczatek musisz wiedziec ze si przerwie ci na kazdym wywolaniu createfilea... inaczej mowiac przerwie na kazdej PROBIE otwarcia/utworzenia pliku, a probie dlatego ze otwarcie pliku moze sie niepowiesc np. dlatego ze pliku nie ma jak
 rowniez tworzenie tez moze sie nie powiesc chocby dlatego ze jest pelen dysk, a dla nas to nawet lepiej bo my niemamy pliku a tak bedziemy wiedzieli kiedy i co chce otworzyc... jesli zalozyles pulapke to teraz wyjdz z si.. i uruchom test_crackme... i co
?? przerwal?? no pewnie ze tak... ale jak juz powiedzielismy wczesniej przerwie na kazdej probie otwarcia pliku a klikajac dwukrotnie na ikone test_crackme.. probowales go otworzyc a nas nie interesuje test_crackme tylko jakis plik ktory powinien byc na
zewnatrz.. wiec ctrl-d.. i juz jestesmy spowrotem.. teraz F11 i widzisz cos takiego:

015F:00401048  68000000C0          PUSH      C0000000
015F:0040104D  682F314000          PUSH      0040312F <- XXX
015F:00401052  E8A7010000          CALL      KERNEL32!CreateFileA

tu jest bardzo wazny kawalek kodu... poza tym ze jest to wywolanie funkcji odpowiedzialnej za tworzenie/OTWIERANIE plikow... to bardzo latwo mozna sprawdzic co jest otwierane/tworzone poprzez ta funkcje a konkretnie jaka nazwe nosi ten obiekt.. a robi si
e to w sposob nastepujacy.
Pamietasz jak mowilem o getwindowtexta i o odnajdywaniu adresu pod korym jest zapisywane haslo... w ten sam sposob odnajdujemy otwierany/tworzony obiekt po wywolaniu funkcji createfilea.. z ta tylko drobna roznica ze argument nas interesujacy to nie prze
dostatni tylko... ostatni, czyli to jest ten oznaczony XXX... no to jesli chcesz wiedziec co chce otwierac/tworzyc ta funkcja wystarczy ze zapodasz:

d 0040312F [enter]

i nagle jak swiatlem porazony zobaczyles tajemniczy ciag:

crackme.key

he.. pomysl, co to moze byc?? ja nic nie mowie.. sprobuj sie domyslic.. ekkh... znow musze ci powiedziec?? dobra, ale to juz ostatni raz... otoz to jest potrzebny plik.. w zasadzie to tylko jego nazwa... ale to juz bardzo wiele.... no ale mozesz przeciez
 zapytac, "skad komputer wie czy plik jest czy tez go nie ma?? czy to jest wbudowane w srodku funkcji czy moze programista dopisal jakas procke sprawdzajaca to??".. powiem ze sprawdzenie takie jest bardzo proste do zrobienia i jest zaraz po wywolaniu fun
kcji:

015F:00401057  83F8FF              CMP       EAX,-01
015F:0040105A  0F84A8000000        JZ        00401108

tu mamy porownanie rejestru eax z -01. A czymze niby jest -01.... no wiec -01==FFFFFFFF a funkcja createfilea zwraca w przypadku niepowodzenia w rejestrze eax wartosc -01 czyli FFFFFFFF... a w przypadku powodzenia jakas tam inna wartosc ktora jest uchwyt
em pliku, ale to material na calkiem inny tutorial... nas intersuje to ze jezeli plik nie zostanie OTWARTY/utworzony do funkcja zwraca -01 (FFFFFFFF) a w przeciwnym wypadku liczbe rozna od -01 (FFFFFFFF) czyli moze to byc 0111h jak rowniez setki innych..
.
Wiec wniosek az sam pedzi do glowy... jezeli zaraz po wywolaniu funkcji porownamy zawartosc rejestru eax z -01 (FFFFFFFF) to jesli wynik bedzie pozytywny (wartosci beda takie same -  np. flaga Z ustawiona) to eax == -01 (FFFFFFFF) a to znaczy ze pliku ni
e ma... czyli dla naszego kawalka kodu jesli skok "jz" sie wykona to pliku nie ma... a my znajac nazwe pliku prawidlowego mozemy go utworzyc i w ten sposob pozbedziemy sie problemu z nie znalezieniem a w konsekwencji nie otwarciem pliku, co powoduje wyko
nanie skoku "jz" a my nie chcemy zeby sie wykonal wiec tworzymy plik, jaki??
to juz chyba pamietasz a jesli nie no to masz:

crackme.key

i teraz jesli go stworzyles znow zakladasz pulapke na createfilea i jedziesz dalej...
Teraz musisz dojsc do tego momentu na ktorym skonczylismy... juz jestes?? no to mozemy zawijac dalej (w te sreberka ;-])
Zobacz, teraz po wywolaniu funkcji w eax nie ma -01 (FFFFFFFF) jest jakas inna wartosc... czyli w naszym przypadku plik zostal OTWARTY... a jesli zostal otwarty to skok "jz" sie nie wykona czyli nasza przewaga i mozemy analizowac dalej kod:

015F:00401060  A351314000          MOV       [00403151],EAX

mozesz sie zastanawiac co to jest ale powiem ci ze to nas nie interesuje.. jesli bys chcial wiedziec co to robi to ci powiem.. ale krotko. Pamietasz jak wczesniej mowilem, ze w eax jest zwracany uchwyt pliku.. no i tu wlasnie ten uchwyt jest przenoszony
do zawartosci adresu 00403151... no ale teraz mozesz zapytac.. "co to jest ten uchwyt??".. nie bede sie nad tym rozwijal.. mozna ta liczbe uznac za taka raczke. Wez zagotuj sobie wody w czajniku.... po zagotowaniu woda jest goraca i czajnik ma temperatur
e ponad 100 C...i gdyby nie raczka ktora jest wmontowana w czajnik nie mogl bys zlapac tego czajnika.. no chyba ze jestes wytrzymaly na taki bol.. ale zakladam ze nie... a pomysl sobie ze ta raczka by byla na tym czajniku calyczas.. tylko nie wiedzialbys
 gdzie ona jest.. i ktos musialby ci dopiero powiedziec gdzie ona jest abys mogl wziac ten czajnik... i podobna sytuac...
Zgłoś jeśli naruszono regulamin