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...
Daroo19