		--==WOJ2==--
	--==PROUDLY      PRESENTS==--
--==JUBE'S CRACKME         V4.00 TUTORIAL==--
	--==      17.06.2005     ==--
                --==CrAcK==--


---------------------------------------------

Co: Jube's CrackMe v 4.00
Czym: SoftIce, win32dasm
Wynik: patch + key

---------------------------------------------

(Jeli czytasz to w Notatniku to wcz zawijanie wierszy)

Witam! Hehe CrackMe nr 4, a mj tutorial jest drugi:) amie nie pokolei:P no, ale co tam. Wane, e co wogle ami! No to do roboty!

1) Uruchamiamy CrackMe v 4.00... Patrzymy:) No i pole, w ktrym si wpisuje key jest zablokowane! Co zrobic???? Jeli spojrzymy do zasobw, wida, e normalnie ten edit nie jest zablokowany. Pomylmy... Program sam musi go blokowa... Oki wchodzimy do win32dasm i szukamy funkcji EnableWindow. S dwie, ale tylko jedna ma w parametrze 0, czyli blokuje.

:00401240	push 00000000				//parametr z 0, czyli ten co blokuje
:00401242	push dword ptr [004021E3]		//wskanik do uchwytu edita

* Reference To: USER32.EnableWindow, Ord:0000h
                                  |
:00401248 E819000000              Call 00401266		//wywoanie funkcji

2) Oki mamy funkcje blokujc edit, ale jak zapobiec jego blokowaniu?? Patrzymy co jest nad tym EnableWindow. Troche tego jest:), ale nie bj si, wszytko wytumacz.

* Reference To: USER32.MoveWindow, Ord:0000h		//funkcja ustawiajca okienko, nie wana	
                                  |
:00401207	Call 0040129C				//jej wywoanie
:0040120C	push [ebp+08]				//nie wane
:0040120F	pop dword ptr [004021E7]		//nie wane
:00401215	mov edi, dword ptr [004021FB]		//do edi scieka CM wraz z parameterami
:0040121B	inc edi					//nastpny znak z edi (bo pierwszy to ")

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00401223(U)
|
:0040121C     *-mov al, byte ptr [edi]			//do al znak z edi
:0040121E     | cmp al, 22				//porwnuje al z 22h (czyli z ")
:00401220     | jz 00401225				//jeli rwne to skok
:00401222     | inc edi					//nastpny znak edi
:00401223     *-jmp 0040121C				//skok

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00401220(C)
|
:00401225	add edi, 00000002			//omija dwa znaki w edi
:00401228	mov eax, dword ptr [edi]		//do eax 4 znaki z edi
:0040122A	add eax, FF989A8E			//eax+FF989A8E
:0040122F	jz 0040124D				//jeli wynik da 0 to skok

* Possible Reference to Dialog: DialogID_0064, CONTROL_ID:0069, ""
                                  |
:00401231	push 00000069				//identyfikator edita
:00401233	push [ebp+08]				//handle dialog boxa

* Reference To: USER32.GetDlgItem, Ord:0000h		//funkcja zwracajca w eax uchwyt
                                  |			//kontrolki
:00401236	Call 004012A8				//wywoanie funkcji
:0040123B	mov dword ptr [004021E3], eax		//uchwyt do [004021e3]

Ju, ju... Wyjaniam! Od pocztku. Na samej grze widzimy funkcj ustawiajc okienko, ale ona nas nie interesuje. Tu po niej do edi idzie scieka i ewentualne parametry do CrackMe (np. "C:\Crackmes\CM_jube4\crk_me41.EXE" parametr razem z cudzysowiami!!!). Poniej kady znak jest porwnywany z cudzwysowiem. Po co?? A no po to, eby si dosta do parametru. Jak program trafi na " to przesuwa jeszcze 2 znaki i jest ustawiony na parametrze. Pobiera do i dodaje FF989A8E i jeli wynik to 0 skok... Do czego?? Zaraz si dowiesz. Teraz o co chodzi z tym FF989A8E... Wpisz do SI ? FF989A8E i dowiesz, e na liczb dec da to -6776178, wic eby wyszo 0 w eax musi by 6776178. Jak to zrobi?? Przeliczamy t liczb na hexy co daje 676572. Hmmm... Wpisz do SI ? 676572 i wyjdzie Ci "ger" czytane od tyu "reg". No to ju wiemy co wpisa w parametr. S na to dwa sposoby. Pierwszy - atwiejszy: robimy skrt do CM i po sciece do programu dopisujemy " reg" (bez cudzysowiw), lub drugi - nie jest trudniejszy, ale trzeba si wicej narobi:) : Start->Uruchom i wpisujemy pen sciek do CM z " reg" na kocu.

3) Uruchamiamy CrackMe razem z "magicznym" parametrem no i faktycznie Edit jest odblokowany. Wpisujemy co do niego (ja wpisuj 30101990) i bpx getwindowtexta. NIC... Co jest?? Wchodzimy w win32dasm i szukamy GetWindowTextA... Jest!!!

* Possible Reference to Dialog: DialogID_0064, CONTROL_ID:0069, ""
                                  |
:004010FC	push 00000069				//identyfikator edita
:004010FE	push [ebp+08]				//uchwyt Dialog Boxa

* Reference To: USER32.GetDlgItem, Ord:0000h		//to ju znamy. Funkcja zwraca w eax
                                  |			//uchwyt kontrolki
:00401101	Call 004012A8				//wywoanie
:00401106	mov dword ptr [004021E3], eax		//uchwyt do [004021E3]
:0040110B	push eax				//parametr z uchwytem

* Reference To: USER32.GetWindowTextLengthA, Ord:0000h	//funkcja zwraca w eax dugo textu
                                  |			//znajdujcego si w miejscu podanym
:0040110C	Call 0040128A				//przez parametr z uchwytem
:00401111	add eax, FFFFFFF4			//eax+(-12) czyli eax-12
:00401114	jnz 0040117C				//jeli wynik nie 0 to skok

* Possible Reference to Dialog: DialogID_0064 
                                  |
:00401116	push 00000064				//ID edita
:00401118	push 004021FF				//adres do wpisania treci
:0040111D	push dword ptr [004021E3]		//adres uchwytu edita

* Reference To: USER32.GetWindowTextA, Ord:0000h

No to ju wiadomo, czemu nie byo GetWindowTextA... Co? Nie wiesz czemu?? OK. Poprostu funkcja GetWindowTextLengthA pobraa wczeniej dugo wpisanego keya, a ten co wpisaem by krtszy ni trzeba. Skd to wiem. Linijka "add eax, FFFFFFF4" dodaje do eax -12 czyli odejmuje 12. Czyli dokadnie key musi mie 12 znakw. Bo inaczej skok si wykona i spadnie bomba atomowa!!!!:P artowaem:) Poprostu skoczy do messaga o zym keyu:)

4) Okej przechodzimy do sedna sprawy czyli waciwego keya!!! Nie bd gada tylko wale kod i jedziemy!

* Reference To: USER32.GetWindowTextA, Ord:0000h	//zwraca w eax dugo pobranego stringa
                                  |
:00401123	Call 00401284
:00401128	cmp eax, 00000000			//porwnuje dudo z 0
:0040112B	jz 0040117C				//jeli rwne to skok
:0040112D	mov edi, 004021FF			//text do edi
:00401132	mov eax, dword ptr [edi]
:00401134	rol eax, 06
:00401137	xor eax, DEADDEAD
:0040113C	add eax, 30003C5B
:00401141	jnz 0040117C				//skok do badboy
:00401143	add edi, 00000004
:00401146	mov eax, dword ptr [edi]
:00401148	ror eax, 07
:0040114B	xor eax, 88888888
:00401150	add eax, D1ADAD9E
:00401155	jnz 0040117C				//skok do badboy
:00401157	add edi, 00000004
:0040115A	mov eax, dword ptr [edi]
:0040115C	rol eax, 05
:0040115F	xor eax, 12344321
:00401164	add eax, C9C5F07B
:00401169	jnz 0040117C				//skok do bad

* Possible StringData Ref from Data Obj ->"That's it! Send me your solution "
                                        ->"!"
                                  |
:0040116B 68AE214000              push 004021AE
:00401170 E8BEFEFFFF              call 00401033

Krtkie, prawda? Nie opisywaem kadej operacji przeprowadzanej na keyu bo po pierwsze s to tak proste instrukcje, e raczej kady je zna, a po drugie nie trzeba si w nie zagbia, aby pozna key, ale wystarczy je odwrci. Mona to zrobi w SI komend "a" i najpierw wyzerowa eax, wpisywa odwrotne polecenia od koca i pniej sprawdzi co jest w eax (np. pierwszy kawaek bdzie wyglda tak: sub eax,30003c5b xor eax,deaddead ror eax,06). BTW xor jest odwrotny sam do siebie, wic nie trzeba go zastpowa innymi poleceniami. Drugi sposb do spisa wszystkie polecenia i oblicza je jakim programem (ja uywam HTB Calc - super programik). Kiedy odwrcimy wszystki polecenia, spiszemy wszyskie eaxy to wyjdzie nam haso "tHE Summer !" (akurat jak pisz tego tuta to jest takie lato, e y sie nie da, bo jest tak strzasznie gorco, e ciko nawet z domu wyj:P). Gratuluj! Zamae kolejne CrackMe!:)

A teraz szybciutki kursik zamania tego crackme 4 gr8 lamerZ:P (wszyscy inni niech nie czytaj:))
1. Uruchom CrackMe z parametrem "reg" (o ile wiesz co to jest parametr)
2. Wpisz haso "tHE Summer !"
3. Ciesz si, e zamae program w 10 sekund:P (ale nie martw si i tak jeste lam:> )

Ewentualne pytania, sugestie dotyczce tutoriala lub czegokolwiek kierujcie na maila woj2s@vp.pl

---------------------------------------------------------------------------------------------

Teraz to co wszyscy lubi najbardziej, czyli
GREETZY:)

  GGGG   RRRR   EEEEEE  EEEEEE  TTTTTTT  ZZZZZZ
GG    G  R   R  E       E          T         Z 
G        R   R  EEE     EEE        T        Z
G   GGG  RRRR   EEE     EEE        T       Z
GG   GG  R  R   E       E          T      Z
 GGGGG   R   R  EEEEEE  EEEEEE     T     ZZZZZZ


  GGGG     OOOO    EEEEEE  ZZZZZZ
GG    G   O    O   E           Z
G        O      O  EEE        Z
G   GGG  O      O  EEE       Z
GG   GG   O    O   E        Z
 GGGGG     OOOO    EEEEEE  ZZZZZZ


TTTTTTT    OOOO
   T      O    O
   T     O      O
   T     O      O
   T      O    O
   T       OOOO

Jube (4 crackme)
Iczelion (4 gr8 asm tutorial)
Arkadiusz "Czajnick" Robiski (4 antoher gr8 tutorial:)

&

Ufcio, ReWolf, Butthead, Smola, Jopas

&

all Polish crackers & crack teams
You keep crack scene alife...


