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

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

   prog name   : Crackme 3.0 by Jube - skill very easy :(
   Date        : 04.06.2000
   Writen by   : plastek
   What        : tut ;)

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-t u t o r i al-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Dzisiaj zaczniemy bez gledzenia (chetnych odsylam do tuta do Crackme 2.0 by Jube).
Zakladam, ze juz wiesz jak sciaganc potrzebne pliki i je rozpakowac, obejrzales tez zapewne plik readme.7tm. Nie??? To na co czekasz!!!
Masz juz wszystko??? To zaczynamy :)
aha no jeszcze napisze co moze sie przydac:
1. Crackme 3.0 by Jube - jezeli masz starsza wersje to moze byc, ale nie oczekuj zbyt wiele.
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.
5. Duza dobra piwa - najlepiej Lech Premium Sport (ups krypto-reklama)

Ufffff wreszcie przechodzimy do sedna sprawy. Odpalamy crackmisia i .....nic nie widzimy :(, poza napisem unregistered i dwoma przyciskami. Prawdopodobnie napis unregistered ma sie zmienic na registered, ale jak to zrobic???. Hmmm (tu lyk piwa). Zastawiamy bpx na createfilea i odpalamy crackmisia. Huuuraaa!!! Zlapal sie!!! Tak, ale nie tu gdzie chcemy, czyli program nie korzysta z keyfile'a. Hmmm (lyk piwa). Odpalamy W32dasm i deasemblujemy plik.
Dajemy String Data Ref. i szukamy (un)registered. Tylko pare stringow i posrod nich sa te dwa. Klikamy na Registered i przenosimy sie tu:

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004011E5(C)
|

* Possible StringData Ref from Data Obj ->"Registered"
                                  |
:004011E9 B809214000              mov eax, 00402109
:004011EE 50                      push eax
Spod adresu 4011E5 jest wykonywany skok tutaj i wtedy jest wyswietlany string Registered.

Cofamy sie troche, do 4011E5:

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004011BD(C)
|
:004011C1 8B4704                  mov eax, dword ptr [edi+04]
:004011C4 BB00124000              mov ebx, 00401200
:004011C9 8B07                    mov eax, dword ptr [edi]
:004011CB 35B0B0B0B0              xor eax, B0B0B0B0
:004011D0 C1C007                  rol eax, 07
:004011D3 0522222222              add eax, 22222222
:004011D8 C1C007                  rol eax, 07
:004011DB 35DDDDDDDD              xor eax, DDDDDDDD
:004011E0 05706AAD9A              add eax, 9AAD6A70
:004011E5 7402                    je 004011E9			;tu jest nasz bad/good
:004011E7 FFE3                    jmp ebx

Widzimy ze jest to jakas procka rejestracyjna. Jadac w gore po kolejnych reference'ach dochodzimy w koncu do tego miejsca:

* Reference To: USER32.MoveWindow, Ord:0000h			;
                                  |				;
:00401134 E808010000              Call 00401241			;tu jest procka odpowiedzialna
:00401139 FF7508                  push [ebp+08]			;za ustawienie okna na srodku
:0040113C 8F05F8204000            pop dword ptr [004020F8]	
:00401142 8B3D78214000            mov edi, dword ptr [00402178]	;a tu do edi ladowane jest cos
:00401148 47                      inc edi			;spod 402178 i jest to nasze 
								;heselko :)
Wszystko OK tylko skad sie wzial pod 402178 adres do naszego hasla, jesli nigdzie nie bylo ono pobierane???. Dajemy szukanie w W32dasm i wpisujemy 402178, ustawiamy szukanie w gore, bo w dol i tak nie znajdzie (sprawdzone). Jest:

* Reference To: KERNEL32.GetCommandLineA, Ord:0000h
                                  |
:0040100C E806020000              Call 00401217
:00401011 A378214000              mov dword ptr [00402178], eax	;do 402178 trafia adres ktory
:00401016 6A00                    push 00000000			;byl w eax
:00401018 6850104000              push 00401050

hehe czyzby nasze heselko bylo pobierane z lini komend???. TAK, nareszcie zajazyles, w nagrode lyk piwa.
Nie bedziemy uruchamiac krakmika z haslem jako parametr z lini komend bo po co sie meczyc, tworzymy skrot i tam gdzie mamy nazwe pliku do odpalenia, po spacji wpisujemy jakies heselko np. kurwa. Zastawiamy bpx na getcommandlinea i ruszamy. Program sie zaraz lapie i ladujemy w przytoczonym wyzej kawalku kodu. Zeby sie nie bawic zastawiamy bpm 402178 i program lapie nam sie 
tutaj:

:00401142 8B3D78214000            mov edi, dword ptr [00402178]		;
:00401148 47                      inc edi				;w tym fragmencie kodu 
:00401149 8A07                    mov al, byte ptr [edi]		;program ustawia wskaznik
:0040114B 3C22                    cmp al, 22				;w edi na wlasciwa czesc
:0040114D 7403                    je 00401152				;lini komend, aby pobrac
:0040114F 47                      inc edi				;heselko
:00401150 EBF7                    jmp 00401149				;
:00401152 83C702                  add edi, 00000002			;
:00401155 893D7C214000            mov dword ptr [0040217C], edi		;

:0040115B 57                      push edi
* Reference To: KERNEL32.lstrlenA, Ord:0000h				;lstrlenA liczy nam 
                                  |					;liczbe znakow heselka
:0040115C E8BC000000              Call 0040121D				
:00401161 83F808                  cmp eax, 00000008			;
:00401164 0F8596000000            jne 00401200				;musi byc rowna 8
jesli masz mniej/wiecej niz osiem to zmien heselko na 8 znakowe

:0040116A 8B3D7C214000            mov edi, dword ptr [0040217C]	        ;do edi wskaznik na haslo	
:00401170 8B1F                    mov ebx, dword ptr [edi]		;do ebx 4 znaki hasla
:00401172 8B4F04                  mov ecx, dword ptr [edi+04]		;do ecx kolejne 4
:00401175 6681F3ADDE              xor bx, DEAD				;
:0040117A 81F334122143            xor ebx, 43211234			;rozne zabawy z haslem
:00401180 C1C306                  rol ebx, 06				;
:00401183 81F144332211            xor ecx, 11223344			;
:00401189 C1C906                  ror ecx, 06				;
:0040118C 81F183190803            xor ecx, 03081983			;
:00401192 81F176B7AA89            xor ecx, 89AAB776			;
:00401198 03D9                    add ebx, ecx				;
:0040119A 7564                    jne 00401200				;bad/good

Hmm suma ebx i ecx ma byc =0, ale nie znamy ani ebx ani ecx - to oznacza ze mamy miliardy kombinacji, czyli opuszczamy te czesc kodu (potem sie przyda) i idziemy dalej:

:0040119C BB00124000              mov ebx, 00401200			;do ebx adres procki bad
:004011A1 8B07                    mov eax, dword ptr [edi]		;4 znaki do eax
:004011A3 35A0A0A0A0              xor eax, A0A0A0A0			;
:004011A8 C1C006                  rol eax, 06				;
:004011AB 0511111111              add eax, 11111111			;obliczenia :)
:004011B0 C1C006                  rol eax, 06				;
:004011B3 35CCCCCCCC              xor eax, CCCCCCCC			;
:004011B8 0522E2115E              add eax, 5E11E222			;
:004011BD 7402                    je 004011C1				;jesli skok to ok
:004011BF FFE3                    jmp ebx				;jesli nie to skok do bad

Ok zaczynamy analize, a wlasciwie odwracanie tej procki.
Zeby bylo najlatwiej dajemy komende "a" w SI i wpisujemy nasza procke odwracajaca (Komendy "a" nie nalezy uzywac bedac pod jakas biblioteka systemowa gdyz mozna wywalic system! Uzywamy tej komendy na naszym crackme'ku, najlepiej po przejsciu danej procki aby ja na biezaco odwracac.)
czyli dajemy "a" i pojawiaja nam sie adresy w ktorych wpisujemy kod w asm:
mov eax,0
sub eax,5e11e222
xor eax,cccccccc
ror eax,6
sub eax,11111111
ror eax,6
xor eax,a0a0a0a0 

nastepnie wychodzimy z tej komendy dajac enter i przechodzimy po tym kodzie krok po kroku, po zaliczeniu ostatniej linijki w eax mamy pierwsze 4 znaki kodu :)))).
eax=6C422D48='lB-H' i po zapisaniu w odwrotnej kolejnosci jest to 'H-Bl' (bez apostrofow).

Ok idziemy dalej:

:004011C1 8B4704                  mov eax, dword ptr [edi+04]
:004011C4 BB00124000              mov ebx, 00401200
:004011C9 8B07                    mov eax, dword ptr [edi]
:004011CB 35B0B0B0B0              xor eax, B0B0B0B0
:004011D0 C1C007                  rol eax, 07
:004011D3 0522222222              add eax, 22222222
:004011D8 C1C007                  rol eax, 07
:004011DB 35DDDDDDDD              xor eax, DDDDDDDD
:004011E0 05706AAD9A              add eax, 9AAD6A70
:004011E5 7402                    je 004011E9				;good/bad
:004011E7 FFE3                    jmp ebx				;bad

ale odwrocenie tej procki da nam ten sam wynik, gdyz jest to (niepotrzebne) ponowne sprawdzenie 
pierwszyc 4 znakow hasla.
Ok moze dalej cos znajdziemy:

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004011E5(C)
|

* Possible StringData Ref from Data Obj ->"Registered"

Tu juz jest koniec procki i wyswietlenie Registered, wiec cofniemy sie do wczesniej opuszczonego kawalka kodu:

:0040116A 8B3D7C214000            mov edi, dword ptr [0040217C]	        ;do edi wskaznik na haslo	
:00401170 8B1F                    mov ebx, dword ptr [edi]		;do ebx 4 znaki hasla
:00401172 8B4F04                  mov ecx, dword ptr [edi+04]		;do ecx kolejne 4
:00401175 6681F3ADDE              xor bx, DEAD				;
:0040117A 81F334122143            xor ebx, 43211234			;rozne zabawy z haslem
:00401180 C1C306                  rol ebx, 06				;
:00401183 81F144332211            xor ecx, 11223344			;
:00401189 C1C906                  ror ecx, 06				;
:0040118C 81F183190803            xor ecx, 03081983			;
:00401192 81F176B7AA89            xor ecx, 89AAB776			;
:00401198 03D9                    add ebx, ecx				;
:0040119A 7564                    jne 00401200				;bad/good

Teraz majac 4 pierwsze znaki, ktore wczesniej obliczylismy, mozemy sie pokusic o obliczenie kolejnych 4 :).
Do ebx trafiaja nasze 4 pierwsze znaki (w odwrotnej kolejnosci) i sa na nich wykonywane rozne operacje ;), nie bedziemy ich wykonywac recznie gdyz program sam nam wyliczy wlasciwa wartosc ebx przed add ebx,ecx - odpalamy prosa i przechodzimy krok po kroku procke az staniemy na tej lini z add ebx,ecx i odczytujemy wartosc ebx.
EBX=D8F8744B
i teraz tylko odwrocenie procki :) (korzystamy znow z komendy "a" - chyba ze chcesz napisac oddzielny program, co nie ma sensu)
mov ebx,d8f8744b
mov ecx,0
sub ecx,ebx
xor ecx,89aab776
xor ecx,3081983
rol ecx,6
xor ecx,11223344

i po przejsciu tego wszytkiego ecx=786B636F='xkco' i po odwroceniu 'ockx' (bez apostrofow).
Teraz laczymy obie czesci hasla i uzyskujemy H-Blockx i to jest nasze haslo ktore podajemy jako parametr przy odpalaniu crackmisia :).

Do nastepnego crackme by Jube :).

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=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=-