Nazwa Progu       : Strange Crackme 1.0 by ToMKoL
Data              : 24/05/2002
Napisal           : Kwasek[HTBteam]
Co                : tutorial
Skill		  : Easy

     Przedstawie  tutaj opis zlamania Strange  Crackme  1.0  by ToMKoL. Jest ono
nafaszerowane roznymi metodami AntiSi. Uruchamiane sa one przy odpaleniu Crackme
przez  CreateThread. Exe jest spakowany jakims exe  pakerem, nie wiem dokladnie
jaki  to  moze byc paker moze to byc Telock lub AspProtect, ale w sumie  to  bez
znaczenia, rozpakowany exek nie bedzie nam chyba potrzebny.
     A  wiec uruchamiamy icedumpa wchodzimy do Sofcika zakladamy pulapke na  bpm
CreateThread i odpalamy crackme, teraz zciagamy pulapke bc* i zakladamy  pulapke
na  bpx  CreateThread.  Teraz gdy wyjdziesz z SoftIce pojawi  sie  on  ponownie.
Nacisnij  raz  F12, pokaze sie kod crackme. Znajdziesz si w momencie  odpalania
watkow. Podjedz do najblizszego skoku i wpisz r fl z, zciagnij pulapke i wyjdz z
softicea.  Pokaze  nam  sie crackme, do wpisania mamy Name  i  Company,  dziwna
sprawa jest fakt ze nie mozemy wpisac nic w edicie o nazwie Serial. Mamy jeszcze
edit  o  nazwie  Date.  A wiec wpisz jakies dane, zaloz  pulapke  na  hmemcpy  i
nacisnij  Check. Naciskaj tyle razy F10 az znajdziesz sie w kodzie Crackme.  Gdy
juz tam bedziesz zciagnij pulapke bc*. Zobaczys miej wiecej cos takiego:

sub_401578 proc    near
push	offset dword_402976
push	5
push	0Dh
push	ds:dword_402984
call	sub_4019FB
push	offset dword_40297B
push	5
push	0Dh
push	ds:dword_40298C
call	sub_4019FB
push	offset dword_402976
call	sub_401A1F
push	4
push	offset dword_402976
call	sub_401392
push	offset dword_40297B
call	sub_401A1F
push	4
push	offset dword_40297B
call	sub_401392
call	sub_4017A5
retn
sub_401578 endp

Pobierane sa tutaj 4 pierwsze znaki Name i Company, znaki te sa, jesli  sa  duze
to  sa  zamieniane na male, dalej szyfrowane, a nastepnie porownywane z tablica.
Tablica ta to nic innego jak Shitlista, lista ksyw crackerow, a wiec sprawdz czy
na tej liscie nie ma twojej ksywy. Oczywiscie jesli sie znajduje to nie bedziesz
mogl  zarejestrowac crackme na swoj nik, czy swoja grupe majac do niego poprawne 
rozwiazanie.

Shitlista - ksywy:
antobenechencommdreahintkaliliqulukenoirspidturbcybumr. massdulehannk331lobioxca
_roobartdiviged_gustimagsmol_shacreematrlikomiodmusz_tesandycybeenonjubekwas^lil
lukiquasufciwilywitehauetepemanssawkcoxostr0virsapacmaryshiet0muwiew

Shitlista - grupki:
aaoccraccookxtrehtbtundegangatom[htb

Oto co bdzie dalej:

push	offset dword_402160
call	sub_401A97
mov 	ebx, offset dword_402160
movzx	eax, word ptr [ebx+6]
push	eax
call	sub_4013BE
mov 	eax, offset byte_4032E2
mov 	edx, offset byte_402B94
mov 	eax, [eax]
test	ah, ah
jnz 	short loc_401106
mov 	ah, 30h
xchg	ah, al
loc_401106:
mov 	[edx], eax
inc 	edx
inc 	edx
mov 	byte ptr [edx],    2Dh
movzx	eax, word ptr [ebx+2]
push	eax
call	sub_4013BE
mov 	eax, offset byte_4032E2
mov 	edx, offset byte_402B97
mov 	eax, [eax]
test	ah, ah
jnz 	short loc_40112B
mov 	ah, 30h
xchg	ah, al
loc_40112B:
mov 	[edx], eax
inc 	edx
inc 	edx
mov 	byte ptr [edx],    2Dh
movzx	eax, word ptr [ebx]
push	eax
call	sub_4013BE
mov 	eax, offset byte_4032E2
mov 	edx, offset dword_402B9A
mov 	eax, [eax]
mov 	[edx], eax
add 	edx, 4
xor 	eax, eax
mov 	[edx], eax
push	offset byte_402B94
push	3EEh
push	dword ptr [ebp+8]
call	sub_401A31
push	32h
push	offset dword_402181
push	3ECh
push	dword ptr [ebp+8]
call	sub_401A07
cmp 	eax, 4
jl  	loc_401068
mov 	ds:dword_4021E5, eax
push	32h
push	offset dword_4021B3
push	3EDh
push	dword ptr [ebp+8]
call	sub_401A07
cmp 	eax, 4
jl  	loc_401068
mov 	ds:dword_4021E9, eax
mov 	edi, offset dword_402181
add 	edi, ds:dword_4021E5
mov 	esi, offset dword_4021B3
xor 	ecx, ecx
xchg	al, cl
repe 	movsb
mov 	eax, offset dword_402181
mov 	ebx, ds:dword_4021E5
mov 	ecx, ds:dword_4021E9
add 	ebx, ecx
xor 	ecx, ecx
xchg	bl, cl
push	ecx
push	eax
cdq
loc_4011D6:
mov 	dl, [eax]
rol 	edx, cl
add 	ebx, edx
inc 	eax
loop	loc_4011D6
pop 	eax
pop 	ecx
loc_4011E1:
mov 	edx, [eax]
xor 	edx, ebx
bswap	edx
xchg	dl, dh
xor 	dx, bx
rcr 	edx, cl
add 	edx, ebx
xor 	edx, ebx
rcr 	edx, cl
xor 	edx, 0EBDEAD12h
rol 	edx, 16h
sub 	edx, ebx
inc 	eax
loop	loc_4011E1
mov 	eax, edx
mov 	ds:dword_402DBE, eax
push	eax
call	sub_4013BE
push	offset byte_4032E2
push	3EFh
push	dword ptr [ebp+8]
call	sub_401A31
push	offset aStrangeCrackme
push	0
call	sub_401A13
test	eax, eax
jz  	short loc_401274
mov 	ds:dword_4032C2, eax
call	sub_40140C
mov 	eax, ds:dword_4032C2
push	offset aRegisteredTo
push	eax
call	sub_401A2B
loc_40124B:
xor 	eax, eax
inc 	eax
jnz 	short loc_401274
mov 	eax, ds:dword_4032C2
push	offset aStrangeCrackme
push	eax
call	sub_401A2B
loc_401260:
push	0
push	offset aCongratulation
push	offset aRegisteredTo_0
push	dword ptr [ebp+8]
call	sub_4019F5
loc_401274:
jmp 	short locret_4012B7

Najpierw pobierana jest data ustawiona na danym kompie. Zostanie ona wyswietlona
w  edicie  date.  Nastepnie pobierane jest Name i Company(min.4 znaki).  Name  i
Company  zostaje  poloaczone np. Name: Tomasz Company:  HTBteam,  po  polaczeniu
wyjdzie  cos takiego TomaszHTBteam. Crackme oblicza z tego jakoms tam wartosc  i
wyswielta go w edicie Serial.
Gdy wyjdziemy z Softice, zobaczymy ze nazwa okna crackme zamiast Crackme Strange
Crackme  1.0  by ToMKoL jest oto taki napis Registered to: Tomasz. Crackme  niby
si  zarejestrowalo, ale co to za crackme ktore rejestruje sie na dowolne  dane.
Autor  Crackme  napisal ze trzeba zrobic keygena, takze chyba  nie  tedy  droga.
Najlepiej  jak  bysmy  rozpakowali Crackme. Ja to zrobilem  procdumpem    opcja
fulldump.  Exek  sie  nie  uruchamial, ale po zaladowaniu  do  IDY  miej  wiecej
wszystko bylo widac. Zauwazylem oto takie stringi: strange.key, key.dat. Crackme
otwiera jakies pliki, wiec stwoz je w katalogu z crackme i wpisz do nich  jakies
wartosci.  Zaloz  pulapke na bpm createfilea, otwoz crackme,  zciagnij  pulapke,
zaloz  pulapke  na  bpx  createfilea, wyjdz z softice, gdy  si  pojawi,zciagnij
pulapke  i  nacisnij F12. Znajdziesz sie w kodzie crackme. Nie bede tu pokazywal
kodu,  opisze  po  prostu co tam sie dzieje. Otwierany jest plik  key.dat,  jego
zawartosc (pierwsze 5 bajtow) kopiowane sa pod adres 0040124b, jest to dokladnie
tutaj:

loc_40124B:
xor 	eax, eax
inc 	eax
jnz 	short loc_401274
mov 	eax, ds:dword_4032C2
push	offset aStrangeCrackme
push	eax

Czyli  te  5  bajtow z keyfile to nic innego jak jakas instrukcja(e) assemblera,
jaka? to musimy zgadnac. No dobra na poczatek damy instrukcje nop i zobaczymy co
si  stanie. Otwoz plik key.dat i wpisz 5 nopow hex(9090909090). Odpal  Crackme,
wpisz  jakies  tam  dane  i nacisnij Check. Heh, pojawi  si  nam  messagebox  z
gratulacjami  i  napisem Registered to:, tylko jest maly problem  nie  ma  tam
naszej  ksywy.  A  wiec  musisz  dobrac  takie  bajty,  azeby  uzyskac  info   z
gratulacjami  wraz  ze swoja ksywa. Troche myslalem i myslalem  az  cos  mi  sie
przypomnialo. Crackmes przeciez otwiera gdzies drugi plik o nazwie  stranke.key.
No  nic, trzeba znalezc miejsce gdzie jest otwierany ten plik. Znajduje  si  on
pod  adresem 0040188B. Najlepsze jest to, ze crackme nie wywoluje w zaden sposob
tej   procedury  otwarcia  pliku.  Ale  na  pewno  juz  zczailes,  ze  masz   do
wykorzystania te 5 bajtow. Czyli musisz tam skoczyc aby wywolac ta procke.Mozesz
to  zrobic  przez  jmp lub call. Ja to zrobilem przez calla a  dokladniej  Call
0040188B, hex  E83B060000. No dobra stworz plik strange.key, wpisz ta watrosc i
odpal  crackme. Gdy znajdziesz sie w kodzie crackme wejdz do tego calla. W  tej
procedurze nastepuje otwarcie pliku o wyzej wymienionej nazwie, pobierane  sa  z
niego tylko 4 bajty. Nastepnie znajdziemy oto taka procke:

mov 	eax, _4bajty_z_strange.key
xor 	ecx, ecx
mov 	cl, 0Ch
mov 	edx, 0B2A916C4h
mov 	ebx, eax
mov 	esi, offset _data_na_kompie
loc_401917:
bswap	ebx
xor 	eax, ebx
add 	ax, bx
xor 	ah, bl
xor 	al, bh
xchg	ax, bx
bswap	ebx
rol 	ebx, cl
add 	eax, ebx
rcl 	eax, 10h
sub 	eax, ebx
bswap	ebx
xor 	ax, [esi+3]
rcr 	eax, cl
xor 	ebx, edx
sub 	eax, edx
ror 	ebx, 0Ch
ror 	eax, cl
add 	eax, ebx
xor 	eax, edx
sub 	ebx, edx
xchg	ax, bx
bswap	ebx
add 	ebx, [esi+6]
rcr 	ebx, cl
xor 	eax, ebx
sub 	ax, [esi]
add 	al, cl
sub 	ah, cl
ror 	eax, cl
add 	eax, edx
xor 	eax, ebx
rcl 	ebx, cl
add 	eax, ebx
xor 	eax, ebx
loop	loc_401917
mov 	edx, _wyliczona_watrosc_z_Name_i_Company
xor 	eax, edx
jz  	short loc_4019A3

Teraz  naszym  zadaniem  jest  obrocenie procki, ktora  to  nam  bedzie  twozyla
poprawnego keyfile. Mimo, ze procka na pierwszy rzut oka wyglada na taka,  ktora
da sie obrocic, to przez specyficzne zastosowanie instrukcji rcl i rcr procedura
staje sie nieodwracalna. Wyniki dzialania rcl i rcr zalezne sa od statusu flagi.
Nie  pozostalo  mi nic innego jak zrobic keygena wykorzystujacego  brute  focea.
Uwaga: cala  procka jest troche niedopracowana i moze sie zdarzyc ze dla  danego
name/company  i  daty, keygen(bruteforce) moze nie znalezc klucza.  Gdy  to  sie
zdarzy keygen o tym cie powiadomi.

				Name: ..::[Kwasek]::..
				Company: ..::[HTBteam]::..
				Data: 02-06-2002
				Strange.key: hex - 0109CF6B

Uwaga:	Keygen nie posiada procedury sprawdzania Name i Company znajdujacych sie 
	na shitliscie.  Wiec przed przystapieniem do generowania klucza, upewnij 
	sie, czy twoje dane nie znajduja sie wlasnie na tej liscie.

Kwasek2@wp.pl
www.Kwasek2.prv.pl
www.htbteam.z.pl
	
					