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

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

   Tut name   : CrackMe1 by massh^CookieCrk (easy)
   Date       : 08 May 2000
   Writed by  : Jube
   What       : How to find password

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-t u t o r i a l-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

Na poczatku musze zaznaczyc ze jest to raczej tutorial dla newbies.
Jezeli nie jestes poczatkujacy to mozesz najpierw sam sprobowac rozwalic
to crackme i dopiero w razie problemow skorzystac z tego tutoriala.

No dobra, zaczynamy! :)

Bedzie nam potrzebne kilka rzeczy:
1. Crackme1 by massh - dolaczone do tutoriala na stronie: 
   http://www.cookiecrk.z.pl/ 
2. SoftIce - ja mam wersje 4.00 ale moze byc inna
   http://www.crackpltools.prv.pl/
3. Mozg :) i ochote do czytania 

SoftIce musi byc zaladowane do systemu. Uruchamiamy program i widzimy
ze trzeba wpisac haslo (password). Wpisujemy byle co, wchodzimy do SoftIce
(CTRL-D), zakladamy breakpointa na funkcji GetDlgItemTextA poleceniem

: bpx GetDlgItemTextA

Wychodzimy z SI (F5 lub CTRL-D) i naciskamy OK. No i jestesmy z powrotem 
w SoftIce. Oto co widzimy:

:00401080 6A34                    push 00000034
:00401082 6886204000              push 00402086			<-offset kodu
:00401087 68E8030000              push 000003E8
:0040108C FF7508                  push [ebp+08]
:0040108F E8AF000000              Call GetDlgItemTextA
:00401094 85C0                    test eax, eax			<-tu jestesmy
:00401096 743A                    je 004010D2
:00401098 68D3204000              push 004020D3
:0040109D 6A00                    push 00000000
:0040109F 6A0C                    push 0000000C
:004010A1 68E8030000              push 000003E8
:004010A6 FF7508                  push [ebp+08]
:004010A9 E8A1000000              Call SendDlgItemMessageA
:004010AE E83D000000              call 004010F0			(A)
:004010B3 BEBB204000              mov esi, 004020BB
:004010B8 E856000000              call 00401113			(B)
:004010BD 85C0                    test eax, eax
:004010BF 7407                    je 004010C8			<-bad guy

Funkcja GetDlgItemTextA pobiera wpisany przez nas tekst i laduje go do 
pamieci pod adresem 00402086. Mozemy to sprawdzic poleceniem:
:d 00402086
Funkcja SendDlgItemMessageA kasuje wpisane przez nas dane (za kazdym razem
musimy wpisywac je od nowa). Mozna ta niedogodnosc usunac, ale nam nie bedzie
to potrzebne. Omijamy to funkcje i przechodzimy przez kolejnego calla (F10)
i widzimy ze nasz kod zostal zmodyfikowany. Wchodzimy do nastepnego calla (B)
przy pomocy klawisza F8 i jestesmy wewnatrz:

:00401113 33C0                    xor eax, eax		(1)
:00401115 B915000000              mov ecx, 00000015	(2)
:0040111A F3A6                    repz cmpsb		(3)
:0040111C 7501                    jne 0040111F		(4)
:0040111E 40                      inc eax		(5)
:0040111F C3                      ret			(6)

To jest cala funkcja. Ok, teraz trzeba zobaczyc co ona robi.
1 - wyzerowanie rejestru EAX
2 - wrzucenie do ECX liczby 15h czyli 21
3 - powtarzanie porownania bajtow znajdujacych sie pod adresem [ESI]
    z bajtami z pod adresu [EDI]. Ilosc powtorzen to ECX.
    Po kazdym wykonaniu porownania EDI i ESI sa zwiekszane o 1, a
    ECX zmniejszany o 1. Procedura jest przerywana kiedy wartosci nie sa
    rowne, albo ECX jest rowne 0.
4 - jezeli nie rowne to skok do (6)
5 - zwieksz EAX czyli EAX=01
6 - powrot z funkcji

Patrzymy co jest pod EDI - nasze zmodyfikowane haslo, teraz sprawdzamy co 
jest w ESI - jakies dziwne liczby. Hmm... zastanowmy sie co oznacza wartosc
wprowadzana do ECX ? Tak ! :) To jest wlasnie dlugosc hasla czyli 21.
Nasze zmodyfikowane haslo musi rownac sie temu co jest pod ESI (004020BB).
Teraz musimy sie dowiedziec jak jest modyfikowane nasze haslo. W tym celu
musimy wrocic do programu (F5) wpisac byle co i nacisnac OK. Znowu jestesmy w
SoftIce. Tym razem wchodzimy do calla A (F8) i analizujemy:

:004010F0 BF86204000              mov edi, 00402086		<-nasze haslo
:004010F5 57                      push edi			(0)
:004010F6 803F00                  cmp byte ptr [edi], 00	(1)
:004010F9 7416                    je 00401111			(2)
:004010FB 8B07                    mov eax, dword ptr [edi]	(3)
:004010FD C1C803                  ror eax, 03			
:00401100 3578563412              xor eax, 12345678
:00401105 86E0                    xchg al, ah
:00401107 C1C003                  rol eax, 03
:0040110A 8907                    mov dword ptr [edi], eax	(4)
:0040110C 83C704                  add edi, 00000004		(5)
:0040110F EBE5                    jmp 004010F6			(6)
:00401111 5F                      pop edi			(7)
:00401112 C3                      ret				(8)

A teraz krotki opis:
0 - wrzucenie EDI na stos
1 - sprawdzenie czy nie koniec hasla
2 - jezeli koniec to skok do 7
3 - wrzuca do EAX wartosc spod adresu EDI czyli pierwsze 4 litery naszego
    hasla. Litery sa oczywiscie "od konca" co wynika ze sposobu zapisywania
    liczb w pamieci.
4 - wrzuc zmodyfikowane EAX z powrotem do EDI
5 - dodaj do EDI wartosc 4
6 - skok do 1 czyli petla
7 - sciagnij ze stosu wartosc EDI
8 - koniec funkcji

Miedzy liniami (3) i (4) jest modyfikacja naszego hasla. 
Nalezy odwrocic te polecenia podstawiajac do EAX kolejne wartosci z pamieci
pod adresem 004020BB (do tego jest porownywane nasz zmodyfikowane haslo).
Pierwsze 4 bajty to:
 D6 81 D2 E5
Po skopiowaniu tego do EAX mamy (odwrotna kolejnosc) E5D281D6.
Teraz odwrocenie algorytmu czyli do konca:

rol eax, 03	przesuniecie o 3 w lewo, z powrotem czyli ror eax, 03
xchg al, ah
xor eax, 12345678
ror eax, 03	z powrotem czyli rol eax, 03

#####################
#Odwrocony algorytm #
#####################
# rol eax, 03       #	
# xor eax, 12345678 #
# xchg al, ah       #
# ror eax, 03       #
#####################	

Teraz przepuszczamy przez to nasze EAX (E5D281D6) i wychodzi nam 74736146.
Po wpisaniu z powrotem do pamieci daje nam to 46617374 (odwrocona kolejnosc).
A liczba ta oznacza zawiera kody AscII kolejnych znakow naszego prawidlowego
hasla, czyli 'Fast'. Tak nalezy odwrocic wszystkie wartosci pod 004020BB.
Otrzymamy cale haslo, ktore brzmi : "Faster than lightning".

To juz koniec :) Mam nadzieje ze jeszcze sie spotkamy :)
Jezeli czytasz ten tutorial napisz do mnie zebym wiedzial, ze moja praca
nie idzie na marne. Wszystkie uwagi ------> jube2@poczta.onet.pl

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-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 : mNICH, Plastek, Maxibogas, massh
     groups : CrackPL, AAOCG, CookieCrk

  My e-mail: jube2@poczta.onet.pl
             ~~~~~~~~~~~~~~~~~~~~
  SeveN TeaM - Official WebPage:  http://www.7team.z.pl
                                  ~~~~~~~~~~~~~~~~~~~~~
-=-=-=E-O-F=-=-=-=E-O-F=-=-=-=E-O-F=-=-=-=E-O-F=-=-=-=E-O-F=-=-=-=E-O-F=-=-=-