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

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

   prog name   : CrackMe by ^Mateus^/AAOCG 
   Date        : 06/26/2000
   Writen by   : Mr. Ketchup,
   What        : tutorial

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

Czesc!

W tym tutorialu opisze sposob zlamania CrackMe by ^Mateus^/AAOCG

Co bedzie nam potrzebne:
- SoftIce w wersji im nowszej tym lepiej
- Shl,Shr i inne by Pawl0s (Jest na stronie SeveN TeaM)
- Mozg. Rozumiem ze z tym moze byc najtrudniej ale chyba spobie poradzicie.:))

Ok. Odpalamy CrackMe i ruszamy do roboty. Statndardowo pulapka na 
 
 bpx getdlgitemtexta

No dobra CrackMe sie zlapalo wiec przechodzimy do analizy. 
(Najpierw bedzie kawalek kodu a potem opis)

00401187: 85C0                         test      eax,eax
00401189: 0F84BC000000                 je       .00040124B  

Sprawdzenie czy wpisalismy jakies znaki.
------------------------------------------------------------------------------------------------

0040118F: 83F810                       cmp       eax,010 
00401192: 0F85B3000000                 jne      .00040124B   

Sprawdzenie czy wpisalismy 10h znakow czyli 16.
Czyli password ma 16 znakow
------------------------------------------------------------------------------------------------

00401198: EB1D                         jmps     .0004011B7  

Stad nas wywali do sprawdzenia passwordu.

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

004011B7: BAE8304000                   mov       edx,0004030E8 (1)
004011BC: 8B1A                         mov       ebx,[edx]     (2)
004011BE: 83C204                       add       edx,004       (3)
004011C1: C1E303                       shl       ebx,003       (4)
004011C4: 81F3ABEDDDDA                 xor       ebx,0DADDEDAB (5) 
004011CA: C1DB05                       rcr       ebx,005       (6)
004011CD: 81F3FA21AF12                 xor       ebx,012AF21FA (7) 
004011D8: 2B19                         sub       ebx,[ecx]     (8)
004011DA: 83C104                       add       ecx,004       (9)
004011DD: 85DB                         test      ebx,ebx       (10)
004011DF: 756A                         jne      .00040124B  

Tutaj sa sprawdzane pierwsze 4 znaki.
1) - do edx idzie nasz password
     aby go zobaczyc wpis d edx 
2) - przepisanie do ebx naszego password
     aby go zobaczyc wpisz ?ebx
3) - zwiekszenie edx o 4
4) - obrot w lewo tego co jest w ebx czyli pierwszych 4 znakow ktore wpisalismy
5) - xor'owanie tego co powstalo przy obrocie z 0DADDEDAB
6) - Przesuniecie ebx o 5
7) - xor'owanie ebx z 012af21fa
8) - odejmowanie od ebx wartosci z ecx
9)-10  sprawdzenie czy wyjdzie 0. Jezeli tak to pierwsze 4 znaki sa dobre

w ecx sa takie wartosci:
 67 92 A1 24  | 8F 15 EA 80 | F0 C6 A7 02 | 29 BD 07 B7

Wartosci jakie potem bedziemy odejmowac to
 
 34 A1 92 64  | 80 EA 15 8F  | 02 A7 C6 F0  | B7 07 BD 29

Zapiszmy sabie wszystko co program robi w sposob matematyczne:

(((((XXXX shl 3) xor DADDEDAB) rcr 5) xor 12AF21FA) - 34A19264=0 
Teraz odwracamy

xxxx=((((34A19264 xor 12af21fa) rcl 5) xor DADDEDAB) shr 3)

Czyli pierwsze 4 znaki to "Crac"

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

004011E1: 8B1A                         mov       ebx,[edx]
004011E3: 83C204                       add       edx,004 
004011E6: 81F3DDCCBBAA                 xor       ebx,0AABBCCDD 
004011EC: C1D302                       rcl       ebx,002 
004011EF: C1E305                       shl       ebx,005 
004011F2: 81F3AFCDAAFF                 xor       ebx,0FFAACDAF 
004011F8: 2B19                         sub       ebx,[ecx]
004011FA: 83C104                       add       ecx,004 
004011FD: 85DB                         test      ebx,ebx
004011FF: 754A                         jne      .00040124B  
------------------------------------------------------------------------------------------------
Tutaj juz bedzie tylko zapis matematyczny i odwrocenie operacji. Mam nadzieje ze kazdy wie co ten
kawalek kodu robi:))

(((((xxxx xor AABBCCDD) rcl 2) shl 5) xor FFAACDAF) - 8F15EA80)=0

Czyli:

xxxx=((((8F15EA80 xor FFAACDAF) shr 5) rcr 2) xor AABBCCDD)

Teraz wiemy ze kolejne znaki to "kME "

Czyli mamy juz "CrackME "
------------------------------------------------------------------------------------------------

00401201: 8B1A                         mov       ebx,[edx]
00401203: 83C204                       add       edx,004 
00401206: 6BDB03                       imul      ebx,ebx,003 
00401209: 33DA                         xor       ebx,edx
0040120B: C1EB04                       shr       ebx,004 
0040120E: 2B19                         sub       ebx,[ecx]
00401210: 83C104                       add       ecx,004 
00401213: 85DB                         test      ebx,ebx
00401215: 7534                         jne      .00040124B  

Tutaj jest takie sprawdzanie passwordu ze najpierw trzeba obliczyc 4 ostatnie znaki password.
Skocz troche nizej i potem tutaj wroc!.
Nasze znaki sa mnozone o 3 i xor'owane z ostatnimi 4 znakami czyli z "kly!"
Wszystko jest shr'owane o 4 i od tego odejmowana jest wartosc 02A7C6F0. Jak to odwrocimy
to otrzymamy ze te 4 znaki to "Quic"
-------------------------------------------------------------------------------------------------

00401217: 8B1A                         mov       ebx,[edx]
00401219: C1FB06                       sar       ebx,006 
0040121C: 81C3AB121212                 add       ebx,0121212AB 
00401222: 81F31111AAAA                 xor       ebx,0AAAA1111 
00401228: C1CB03                       ror       ebx,003 
0040122B: 2B19                         sub       ebx,[ecx]
0040122D: 85DB                         test      ebx,ebx
0040122F: 751A                         jne      .00040124B  

Tutaj jest sprawdzanie ostatnich 4 znakow.
Do ebx ladowane sa 4 ostatnie znaki ktore wpisalismy. Dalej te znaki sa sar'owane o 6 i do 
wyniku dodawana jest liczba 121212AB. Wynik ktory uzyskamy jest xor'owany z AAAA1111 i rol'owany 
o 3. Na samym koncu odejmujemy wartosc z ecx czyli B707BD29. Ok teraz zapiszemy to sobie w 
postaci rownania. 


      (((((xxxx sar 6) +121212AB) xor AAAA1111) ror 3) -B707BD29)=0

Teraz to wszytko odwracamy

    xxxx=((((B707BD29 rol 3) xor AAAA1111) -121212AB) sal 6)

Powinno wam wyjsc ze 4 ostatnie znaki to "@ly!.
Ale co ta malpa(@) tutaj robi?? Jest tutaj gdyz operacje takie jak sar i sal daja bardzo wiele
kombinacji. Sa jeszcze inne litery ktore zamiast malpy dadza nam taki sam wynik. Dlugo nad tym
myslalem i wymyslilem ze najlepsza litera bedzie "k" Czyli teraz mamy "kly!"
Teraz wracamy do tych wczesniejszcych znakow.

Ok. Czyli nasz password to: "CrackME Quickly!"


                   Ale meczacy ten tutorial. Idzesz ze mna na piwo??(Bezalkoholowe)

Sorki ze tak zagmatwany ten tutor ale latwiej juz nie umialem.
I to by bylo na tyle. Wszelie uwagi kierowac pod adres mr_ketchup@poczta.onet.pl
Jezeli jednak ktos czegos nie rozumie to niech do mnie nie pisze. Wszystko wyjasnilem tak jak 
umialem najlepiej.

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

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

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

  Greets to : MGKiler, mARCO, Rusty, Pawlos, Jube, My dog
     groups : CrackPL, AAOCG, CookieCrk, ACG

  My e-mail: mr_ketchup@poczta.onet.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=-