                     _______                   ______
                     |   _   |-----.--.--.-----.   _  \
                     |   1___|  -__|  |  |  -__|.  |   |
                     |____   |_____|\___/|_____|.  |   |
                     |:  1   |                 |:  |   |
                     |::.. . | POLISH CRACKERS |::.|   |
                     `---===='__             __`-==_---'
                        |       |-----.---.-.   Y   |
                        |.|   | |  -__|  _  |.      |
                        `-|.  |-'_____|___._|. \_/  |
                          |:  |             |:  |   |
                          |::.|             |::.|:. |
                          `---'             `--- ---'

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=i n f o r m a t i o n s-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

   prog name   : cRACK-Me #3 by THE_q/PC
   Date        : 12.06.2000
   Writen by   : plastek
   What        : tut ;)

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-t u t o r i al-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Dzisiaj (ty moze jutro, albo za miesiac, ale ja dzisiaj) zajmiemy sie crackme'kiem produkcji zagranicznej (bo cosik ciekawe polskie nie wychodza, ale mam zaklepane juz kilka wiec jak wyjda to zaczynam pisac). Crackme to zostalo opatrzone etykieta Phrozen Crew, co w swobodnym tlumaczeniu oznacza chyba Mrozona Kurew (nie Kurwa tylko Kurew), oczywiscie nie recze za to tlumaczenie bo nie korzystalem z English Translatora ;).
BTW. etykietka Mrozona Kurew jest dosyc znana w kregach krakerskich i radze ja zapamietac.
Hmm (wiecie co znaczy Hmm, jesli nie to przypominam Hmm=w tym momencie kraker mysli pijac piwo) jak zwykle czas juz konczyc ta mila gadke i przejsc do rzeczy (do kodu???).

Na poczatek niezbedniki:

1. cRACK-Me #3 by THE_q/PC - powinno byc zzipane z tym txt.
2. SoftICE x.xx - prawdziwi krakersi korzystaja tylko z tego.
3. W32dasm x.xx - taki sobie disasemblerek do skromnych zastosowan.
4. Troche mozgu - moze byc cielecy, ale nie oczekuj po nim zbyt wiele(musze cos nowego wymyslic).
5. Duza dobra piwa - najlepiej Lech Premium Sport (ups krypto-reklama - ale wielbicielem Lecha dalej jestem).
6. Kot FileMon - moze byc Jinx, ale nie wiem czy on sie orientuje w plikach.
7. RegMon - tu chyba nic nie trzeba wyjasniac
BTW. dzisiaj zajebiscie duzo narzedzi :).

Przeczytajmy sobie pliczek .nfo dolaczony do crackmisia, gdyz jak juz stwierdzilem (patrz plastshit 1,2,3) w takich pliczkach mozna znalezc ciekawe (i)nfo.
Hmm, wiec zabezpieczenie opiera sie na pliku, autora nie ma przez dwa miesiace w domu (ciekawe!!!), anti-FileMon i anti-RegMon oraz zaszyfrowany plik. Wiem, ze po takiej lekturze odechciewa sie lamania, ale w rzeczywistosci zabezpieczenia oparte na plikach z kluczem nie sa trudniejsze od innych po prostu jest to inna metoda pobierania seriala, autor juz jest w domu (bo to bylo w 98 roku), anti-Mony nie dzialaja na nowsze wersje :), a szyfrowanie jest tak lame, ze szkoda nawet rozpakowywac plik.
Odpalmy, wiec FileMona i crackme i obserwujmy wyniki. Najpierw pojawia sie nag z reklama Mrozonej Kurwy, klikamy Continue i pojawia sie wlasciwy GUI. Widzimy info o braku korka, ogladamy log z FileMona i nic nie stwierdzamy :(. Odpalmy wiec RegMona i crackme i obserwujmy wyniki. Znowu info o braku korka, ogladamy log i okazuje sie ze nasze crackme otwiera klucz o nazwie
HKLM\SOFTWARE\Netscape\Netscape Navigator\Users, u mnie niestety z niewielkim powodzeniem. 
Tu zrobimy mala dygresje ;), trzeba zwracac uwage na takie klucze/pliki ktore, moglyby sie wydawac, sa otwierane przez system. Czesto programisci ukrywaja znaczace pozycje w rejestrze w podkluczach Microsoft\Windows\ itd.
Ok u mnie takiego klucza nie bylo wiec tworze klucz o tej nazwie(tzn nie bylo podklucza \Users, ale jesli u ciebie nie ma nawet \Netscape musisz stworzyc cala galaz od poczatku). Ok po odpaleniu crackme okazuje sie, ze kolejnym krokiem jest stworzenie Wartosci Ciagu (tak to sie nazywa, nie klucza) o nazwie CurrentUser w kluczu \Users. Mozecie sie spytac skad wiem, ze mamy utowrzyc Wartosc Ciagu, a nie kolejny podklucz. Odpowiem, ze nie wiem :), ja to robie na wyczucie i czesto musze tworzyc i klucz i Wartosc Ciagu, aby zadzialalo. Nastepnie jako CurrentUser wpisujemy np. lamer i ponawiamy nasze czynnosci. Okazuje sie, ze program odczytuje zawartosc CurrentUser (u nas jest to "lamer") i probuje otworzyc podklucz klucza \Users o nazwie \lamer.
Tworzymy podklucz lamer i sprawdzamy co sie dzieje. Teraz program odczytuje zawartosc Ciagu DirRoot, czyli tworzymy taka Wartosc Ciagu w kluczu \lamer i wpisujemy jako zawartosc np. "D:" - D i : bez cudzyslowow (mozesz wpisac C: bo jest to nazwa dysku). Zamykamy RegMona i odpalamy FileMona, aby sprawdzic co przyniosly nasze zabawy z rejestrem. Huraa!!! program otwiera plik o nazwie BOOKMARK.HTM (kolejne zmylenie) na dysku D: (C:). Od tego momentu zaczyna sie zabawa z keyfilem i kodem programu, ale nalezy zapamietac, ze keyfile nie musi byc od razu tworzony przez program, moze byc, tak jak tu, sprawdzana odpowiednia pozycja w rejestrze i dopiero po spelnieniu okreslonych warunkow tworzony jest plik.
Zastawmy bpx na CreateFileA i w momencie kiedy bedzie tworzony plik o nazwie BOOKMA... nacisnijmy F12 (w podrecznikach pisza, ze F11, ale ja wole F12), aby wrocic do kodu programu. Mamy cos takiego:
015F:00401221  CALL 	 KERNEL32!CreateFileA	;tu bylismy
015F:00401226  CMP       EAX,-01		;sprawdzenie czy plik jest na dysku 
015F:00401229  JZ        00401269		;jesli nie to bye bye
czyli tworzymy pliczek o nazwie BOOKMA... i wpisujemy do niego cos w stylu "Glupi lamer", moze byc nawet z cudzyslowami.
[...]
015F:0040122F  MOV       [00402220],EAX		;handle do pliku
015F:00401234  PUSH      00402224		
015F:00401239  PUSH      DWORD PTR [00402220]
015F:0040123F  CALL      KERNEL32!GetFileSize	;pobranie rozmiaru pliku
015F:00401244  MOV       EBX,EAX		;rozmiar pliku do EBX
015F:00401246  SHR       EAX,10			;to jakies przesuniecie
015F:00401249  MOV       DX,AX			
015F:0040124C  MOV       AX,BX
015F:0040124F  CALL      0040107A		;a tu sie rozgrywa cala akcja
015F:00401254  CMP       EAX,01
015F:00401257  JNZ       00401269		;bood/gad
Hmm, wchodzimy wiec w call 040107A:

015F:0040107A  PUSH      AX			;tu jakies bajery
015F:0040107C  MOV       [0040201A],DX		;i tu tez
015F:00401083  MOV       [0040201C],DX		;
015F:0040108A  XOR       AX,AX			;
015F:0040108D  MOV       [00402022],AL		;
015F:00401092  CMP       WORD PTR [0040201A],00	;jesli plik ma >65536 bajtow to nie bedzie
015F:0040109A  JZ        004010DC		;skoku, a jesli mniej to bedzie :)
nie bedziemy przesadzac z wielkoscia pliku, wiec skoczymy sobie tu:
[...]
015F:004010DC  POP       CX
015F:004010DE  AND       ECX,0000FFFF
015F:004010E4  PUSH      00
015F:004010E6  PUSH      00402018
015F:004010EB  PUSH      ECX			;liczba bajtow do odczytu=rozmiar pliku
015F:004010EC  PUSH      00402226		;bufor na odczyt
015F:004010F1  PUSH      DWORD PTR [00402220]
015F:004010F7  CALL      KERNEL32!ReadFile	;odczyt
015F:004010FC  CALL      00401000		;znowu tajne rozgrywki ;)
015F:00401101  CMP       AL,01			
015F:00401103  JMP       0040110A		
wchodzimy w call 00401000:

015F:00401000  MOV       DX,[0040201A]		;znowu te bajery
015F:00401007  MOV       AX,[0040201C]		;i tu tez
015F:0040100D  SUB       DX,AX
015F:00401010  MOV       [00402020],DX
015F:00401017  XOR       BX,BX
015F:0040101A  MOV       ESI,[00402023]		;do esi przenoszony jest adres 402000, zapisany pod 402023, jest to wskaznik na string 'http://phrozencrew.org' poprzedzony bajtem 16h

015F:00401020  LODSB				;bajt 16h wedruje do AL (ESI=ESI+1)
015F:00401021  MOV       BL,AL			;a nastepnie do BL
015F:00401023  MOV       ECX,[00402018]		;do ECX wedruje rozmiar naszego pliku
015F:00401029  MOV       EDI,00402226		;a do edi wskaznik na zawartosc naszego pliku
015F:0040102E  LODSB				;do AL wedruje 'h' (bo ESI zostalo zwiekszone)
015F:0040102F  REPNZ SCASB			;dopoki bajt spod ESI!=bajtowi spod EDI porownoj
015F:00401031  CMP       ECX,00			;czy to juz ostatni znak???
015F:00401034  JNZ       00401040		;jesli nie to skok
015F:00401036  NOP				;a jesli ostatni to wypier...
[...]
015F:00401040  PUSH      EAX			;
015F:00401041  PUSH      EDI			;zachowanie rejestrow
015F:00401042  PUSH      ECX			;
015F:00401043  MOV       CX,BX			;tu wedruje te 16h
015F:00401046  DEC       ECX
015F:00401047  LODSB				;do AL znak spod ESI (ESI=ESI+1)
015F:00401048  MOV       AH,[EDI]		;do AH znak spod EDI
015F:0040104A  CMP       AH,AL			;i porownanie
015F:0040104C  JNZ       00401063		;jesli nie rowne to pa pa
015F:0040104E  NOP
015F:0040104F  NOP
015F:00401050  NOP
015F:00401051  NOP
015F:00401052  DEC       CX			;zmniejsz CX
015F:00401054  JZ        0040105D		;jesli juz koniec znakow to wyjscie
015F:00401056  NOP
015F:00401057  NOP
015F:00401058  NOP
015F:00401059  NOP
015F:0040105A  INC       EDI			;EDI= wskaznik na kolejny znak
015F:0040105B  JMP       00401047		;i powrot 
[...]
Postaram sie troche omowic te dwie procki.
W ESI jest string 'http://...', a w EDI nasz password z keyfile'a. Jesli w wyniku prownanina tych stringow okaze sie ze sa != (rozne) to ECX osiagnie wartosc 0 i crackme wywali info o niezlamaniu ;). Jesli ktorakolwiek ze znakow keyfile=temu spod ESI to program wyjdzie z repnz scasb sprawdzi ze ECX!=0 i pojdzie do dalszego sprawdzania. Druga procka to typowe porownanie, przy czym nie wazne jest to ile mamy znakow w keyfile'u i jakie tam sa jeszcze smieci, wystarczy ze gdzies znajduje sie string 'http://phrozencrew.org' (moze byc z cudzyslowami, bo jak powiedzialem smieci moga byc ;)) i program przyjmie haslo jako wlasciwe.
Wniosek:
tworzymy keyfile o dowolnej zawartosci, umieszczamy tam nasz string, odpalamy crackme i ono go lyka :).

CU do next release.<-to 'do' to nie jest ang. 'du' ;) tylko polskie 'do'.

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=members of SeveN TeaM-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

  Prezident:      MaxiBogas...........................founder/coder/cracker
  VizePrezident:  Plastek.............................founder/coder/cracker
  Seniors:
                  pawlos............................................cracker
                  Mr. Ketchup.......................................cracker 
                  Rusty.............................................cracker
  Division:
                  Jube........................................cracker/coder
                  {ATOM}....................................decoder/cracker
                  jamman............................................cracker
  Trial:
                  Pokropek..........................................cracker
                  lukasw............................................cracker
                  Dumboo............................................cracker
                  zoomek.....................................writer/cracker
  WebPage:
                  LIAR..............................webmaster/graphic/coder
                  _2000_.......................................server_admin

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-o t h e r s-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

  Greets to : Cys, mNICH, smola, Mietor, _r00t_, Liquid^, AraKuS
     groups : CrackPL, AAOCG, CookieCrk

  My e-mail: marbardi@alpha.net.pl
             ~~~~~~~~~~~~~~~~~~~~~
  SeveN TeaM - Official WebPage:  http://www.7team.z.pl
                                  ~~~~~~~~~~~~~~~~~~~~~
-=-=-=E-O-T=-=-=-=E-O-T=-=-=-=E-O-T=-=-=-=E-O-T=-=-=-=E-O-T=-=-=-=E-O-T=-=-=-=E-O-T=-=-=-=E-O-T=-