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

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

   prog name   : FightME 2.0 by Jube
   Date        : 28.07.2000
   Writen by   : plastek
   What        : tut ;)

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-t u t o r i al-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Cieszycie sie??? Znowu crackme by Jube :). I love it :).


Na poczatek to co trzeba:

1. FightME 2.0 by Jube lub podobny
2. SoftICE x.xx - ehh chyba juz wiecie kto tego uzywa
3. Troche mozgu - mozg sie zawsze przydaje nie tylko do lamania :).
4. Duza dobra piwa - najlepiej Lech Premium Sport, oczywiscie bezalkoholowe ;-).


OK na poczatek jak zwykle czytamy pliczek z info. Trzeba znalezc korekt kij bez paczingu aha i ze crackme to nie jest dla niuwbis (hehe awansowalismy :)).
Odpalamy crackme i widzimy okienko do wpisania Key'a, wpisujemy wiec cos i klikamy OK. Poniewaz kod jest zly programik wywala nam info. Poniewaz nie chce mi sie tu pisac za duzo powiem od razu ze ta procedurka sprawdzajaca jest fake i nawet jesli podamy dobry serial wywali nam info o lamerii itp. 
Wylaczmy crackme, zastawmy bpx na CreateFileA i odpalmy je ponownie, okazuje sie ze program proboje wykryc SI na rozne sposoby np. poprzez VXD SICE, NTICE itp. podejmuje tez probe wykrycia TRW. Jesli mu sie to nie uda (mozemy mu przeszkodzic patchujac SI albo bawiac sie w przestawianie flagi r fl z) dochodzimy tu:
015F:00401649  INC       BYTE PTR [00402044]
015F:0040164F  PUSH      00
015F:00401651  PUSH      00000080
015F:00401656  PUSH      03
015F:00401658  PUSH      00
015F:0040165A  PUSH      01
015F:0040165C  PUSH      80000000
015F:00401661  PUSH      00402044		;tu nazwa czegos w stylu keyfile b.key
015F:00401666  CALL      KERNEL32!CreateFileA
015F:0040166B  CMP       EAX,-01		;jesli jest pliczek o tej nazwie
015F:0040166E  JNZ       00401681		;skok GOOD :)

tworzymy wiec plik o nazwie b.key i wypelniamy go dowolnym txt, po tym zabiegu skaczemy tu:
015F:00401681  MOV       [0040203C],EAX		;handle pliku
015F:00401686  PUSH      00
015F:00401688  PUSH      00402014		
015F:0040168D  PUSH      04			;odczyt 4 bajtow
015F:0040168F  PUSH      0040212A		;bufor na pobrany txt
015F:00401694  PUSH      DWORD PTR [0040203C]
015F:0040169A  CALL      KERNEL32!ReadFile	;odczyt pliku
015F:0040169F  CMP       EAX,00
015F:004016A2  JNZ       004016B5		;jesli blad to nie skacze

a jesli spox to ladujemy tu:
015F:004016B5  PUSH      DWORD PTR [0040203C]
015F:004016BB  CALL      KERNEL32!CloseHandle	;zamkniecie handle pliku
015F:004016C0  MOV       EAX,0040212A		;tu nasz pobrany txt
015F:004016C5  MOV       EBX,[EAX]		;do EBX nasz txt
015F:004016C7  MOV       [00402038],EBX		;i ladowany pod adres 402038

Postaram sie wyjasnic po co te wszystkie zabiegi...
Tu mamy procedure obslugi wiadomosci z programu konkretnie wiadomosci WM_COMMAND czyli zwiazanej z przyciskami editami itd.
015F:004010FE  CMP       DWORD PTR [EBP+10],000000C9	;jesli wybrano przycisk about
015F:00401105  JZ        00401126			;skok do procedury jego obslugi
015F:00401107  CMP       DWORD PTR [EBP+10],000000C7	;jesli przycisk Exit
015F:0040110E  JZ        004010F0			;to koniec proga
015F:00401110  CMP       DWORD PTR [EBP+10],000000C8    ;jesli OK
015F:00401117  JNZ       0040111F			;to nie skacz
015F:00401119  JMP       [00402038]			;a tu skok do procedury ukrytej pod adresem 402038 czyli pod to co jest pobrane z naszego pliku.
Jesli nie ma keyfile'a lub zostanie wykryte SI/TRW standardowo pod ten adres trafia procedura pod adresem 40129A lub 401390 co oznacza ze sa to FAKE procki.
Ostatnia procedura ktora moglaby sluzyc do pobrania txt z dialoga znajduje sie pod adresem 401141, odpalamy wiec hexedit i wpisujemy do naszego keyfile'a:
41 11 40 00 <-czyli nasz adres w odwrotnej kolejnosci.

Ufff w koncu doszlismy do wlasciwej procedurki pobierajacej i mielacej nasz txt :). Odpalamy crackme, wpisujemy jakis txt i zastawiamy bpx na GetDlgItemTextA. 
Program lapie nam sie, dajemy F11 i ladujemy tu:

015F:00401155  CMP       EAX,00		;czy wpisano heselko???
015F:00401158  JZ        00401275	;jesli nie to bye bye
015F:0040115E  MOV       EBX,EAX
015F:00401160  ROL       EBX,05		;tu procka odpowiedzialna za sprawdzenie liczby znakow
015F:00401163  XOR       EBX,12345678	;wpisanego heselka
015F:00401169  XCHG      BH,BL
015F:0040116B  SUB       EBX,00002710
015F:00401171  XOR       EDX,EDX
015F:00401173  CMP       EBX,1234D147	;jesli EBX rowna sie 1234D147 
015F:00401179  SETZ      DL		;do rejestru DL zaladowana zostaje liczba 1
015F:0040117C  XCHG      DL,DH		;nastepnie przeniesiona do DH
015F:0040117E  XOR       EAX,EAX	;czyszczenie EAX
015F:00401180  MOV       AH,DH		;do AH trafia zawartosc DH 
015F:00401182  CMP       EAX,00000100	;jesli nie rowne 100
015F:00401187  JNZ       00401275	;skok bad :(
po tych kilku operacjach rejestr EBX ma byc rowny 1234D147 aby bylo ok
procedura ta jest w pelni odwracalna, zrobimy tak odpalamy tryb asemblera komenda 'a' i dzialamy:
MOV	EBX,1234D147
ADD 	EBX,2710
XCHG 	BH,BL
XOR	EBX,12345678
ROR	EBX,5
Teraz przechodzimy przez ten kod i wynikiem operacji bedzie liczba 0Ch czyli 12 w EBX.
Wpisujemy wiec nasze heselko o dlugosci 12 znakow i przechodzimy dalej:

015F:0040118D  MOV       EAX,0040212A		;tu sie zaczyna szereg operacji majacych na celu
015F:00401192  MOV       ECX,00000003		;zmylenie przeciwnika czyli nas
po wstepnych ogledzinach dochodzimy do wniosku ze nie da sie na biezaco generowac kodu co oznacza koniecznosc skoku pod koniec procedury do sprawdzenia:

015F:004011E7  ADD       DWORD PTR [EBX],0086DC29	;w EBX nasze juz przemielone heselko
015F:004011ED  SUB       DWORD PTR [EBX+04],065676E7	;zostaje jeszcze raz przepuszczone
015F:004011F4  ADD       DWORD PTR [EBX+08],A701E01E	;przez wyzymaczke ;)
015F:004011FB  XOR       EAX,EAX
015F:004011FD  ADD       EBX,0B				;ustawienie EBX na ostatni znak heselka
015F:00401200  MOV       ECX,0000000B
015F:00401205  MOV       AH,[EBX]			;do AH ostatni znak
015F:00401207  MOV       AL,[EBX-01]			;do AL przedostatni
015F:0040120A  SUB       AH,AL				;odejmowanie ;)
015F:0040120C  CMP       AH,00				;jesli wynikiem jest 0
015F:0040120F  JZ        00401275			;bad :(
015F:00401211  CMP       AH,02				;jesli wynik jest wiekszy badz rowny 2
015F:00401214  JAE       00401275			;bad :(
015F:00401216  DEC       EBX				;ustawienie na poprzedni znak
015F:00401217  LOOP      00401205			;petelka az do wyczerpania znakow
hmm bardzo ciekawe sprawdzenie, to porownanie z 0 a nastepnie z 2 mogloby byc zastapione przez porownanie tylko z 1 ale dzieki temu jest ciekawiej :). Dla tych co jeszcze nie zalapali tlumacze, jesli roznica jakiegos znaku i poprzedzajacego go wynosi 0 to info o bledzie, jesli ta sama roznica jest wieksza badz rowna 2 to info o bledzie. Wniosek: roznica tych znakow musi byc rowna 1. Oznacza to tyle ze kolejne znaki naszego hasla (po przerobkach) sa o 1 jeden wieksze.
OK wiec mamy jedno rownanie (czysta matematyka), zapiszemy je tak:
y=x+1 czyli brakuje nam jeszcze jednego rownania, ale przejdzmy dalej:

015F:00401219  XOR       EAX,EAX
015F:0040121B  XOR       EDX,EDX
015F:0040121D  MOV       AL,[EBX+04]			;do AL 5 znak
015F:00401220  ADD       EDX,EAX			;dodaj do edx to co w EAX czyli 5 znak
015F:00401222  MOV       AL,[EBX+05]			;do AL 6 znak
015F:00401225  ADD       EDX,EAX			;i dodanie tego do EDX
015F:00401227  MOV       AL,[EBX+06]			;do AL 7 znak
015F:0040122A  ADD       EDX,EAX			;i znow dodanie
015F:0040122C  XOR       EDX,12				;po zxorowaniu z 12 mamy miec 0
015F:0040122F  JNZ       00401275			;bo inaczej bad :(
Suma piatego, szostego i siodmego znaku ma byc rowna 12. Czyli
x - 5-y znak
y - 6-y znak
z - 7-y znak
x+y+z=12h
y=x+1 -> x+(x+1)+z=12h  		 ;nawiasy dla przejrzystosci 
z=y+1 -> z=(x+1)+1 -> x+(x+1)+((x+1)+1)=12h -> 3x+3=12h -> 3x=Fh -> x=Fh/3 ->
x=5 <-to jest nasz 5-y znak
Tablica z naszym haslem w tablicy przed ostatnimi sprawdzeniami powinna wygladac tak:
01020304 05060708 090A0B0C  	;podzielilem na dwordy

Wracamy do ostatniej operacji na naszym hasle:
015F:004011E7  ADD       DWORD PTR [EBX],0086DC29	
DWORD PTR [EBX] to sa 4 pierwsze znaki naszego hasla w odwrotnej kolejnosci czyli:
04030201
aby to odwrocic nalezy zapisac cos takiego:
X+0086DC29=04030201 -> X=04030201-0086DC29 -> X=037C25D8 czyli po zapisaniu na odwrot
D8257C03

015F:004011ED  SUB       DWORD PTR [EBX+04],065676E7	
[EBX+4] to kolejne 4 znaki naszego hasla (na odwrot):
08070605
X-065676E7=08070605 -> X=08070605+065676E7 -> X=0E5D7CEC i na odwrot
EC7C5D0E

015F:004011F4  ADD       DWORD PTR [EBX+08],A701E01E
i ostatnie 4 znaki:
0C0B0A09
X=0C0B0A09-A701E01E -> X=650929EB po odwroceniu
EB290965

czyli nasze haslo przed ta operacja wyglada tak:
D8257C03 EC7C5D0E EB290965
Uff cofamy sie dalej ;)
015F:004011CF  MOV       ECX,00000003		
015F:004011D4  MOV       EAX,[EBX]		;w EBX nasze heselko
015F:004011D6  ADD       EAX,03081983		;do kazdych 4 znakow dodaje liczbe 0308....
015F:004011DB  MOV       [EBX],EAX		;i zapisuje je w hasle
015F:004011DD  ADD       EBX,04
015F:004011E0  LOOP      004011D4		;petelka 3 razy
To jest bardzo latwe do odwrocenia:
?037C25D8-03081983=00740C55 (oczywiscie wzialem 4 znaki hasla po odwroceniu)
?0E5D7CEC-03081983=0B556369 
?650929EB-03081983=62011068
Odwracamy kolejnosc wszystkich znakow i zapisujemy:
550C7400 6963550B 68100162

OK jeszcze jedno odwrocenie i koniec :)
015F:0040118D  MOV       EAX,0040212A		;EAX wskazuje na nasz password
015F:00401192  MOV       ECX,00000003
015F:00401197  MOV       EBX,[EAX]		;kolejne dwordy
015F:00401199  XOR       EBX,43214321		;sa xorowane z tym
015F:0040119F  MOV       [EAX],EBX		
015F:004011A1  ADD       EAX,04
015F:004011A4  LOOP      00401197		;i tak trzy razy
?00740C55^43214321=43554F74 czyli "CUOt"
?0B556369^43214321=48742048 ->	  "Ht H"
?62011068^43214321=21205349 ->	  "! SI"
no i odwrocimy wszystko i mamy nasze heselko :)
tOUCH tHIS !

I baaaaaardzo duzy lyk piva :).

BTW. Przy okazji powtorzylismy uklady rownan i rownania ;).


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