Solution to Crackme1'o by Agent
--
Level: very easy
Tools: SI, jakis hexeditor

	To CrackMe mialo status uncracked na www.crackmes.prv.pl dlatego sie za nie wzialem. 
Dobra, odpalam i... gosh, pojawilo sie okienko dosowe, w zyciu jeszcze takiego czegos nie kraczylem, wiec z poczatku troche nie wiedzialem jak sie za to zabrac ale udalo mi sie je puknac w jakies 10min ;). No wiec wpisuje sobie name jak zawsze "Agent" i stukam enter... a tu pojawia sie wredny napis "Something is missing here :-(...". No tego to sie nie spodziewalem, ale odrazu zaswitala mi w glowie mysl, ze czego moze brakowac jak nie keyfile'a, wiec standardowo potraktowalem exeka hiewem. Nie musialem nawet szukac bo odrazu przed oczami pojawil mi sie string klucz.key a troszeczke dalej klucz.txt. No wiec tworze sobie pliczek klucz.key i wpisuje do niego seriala 9873421. Odpalam crackmeka, wpisuje Agent i znow wredny napisik. No to sprobujmy zmienic nazwe naszego keyfile'a na klucz.txt. Kolejny raz uruchamiamy crackme, wpisujemy name i naszym oczom ukazuje sie napisik "NO,NO,NO!!! Try again :-)". No wiec mamy naszego keyfile'a.
	Teraz przydaloby sie znalezc procke sprawdzajaca poprawnosc jego zawartosci no wiec znow odpalamy crackme i wpisujemy name. Teraz trzeba wejsc so SoftIce'a i postawic "na cos" breakpointa, skoro jest to program dosowy to napewno na jakies przerwanie dosowe, hmm tylko jakie? Zastanow sie jak piszac program w asmie otworzyl bys plik i wyciagnij wnioski! Nie wiesz?!? Musisz postawic breakpointa na przerwanie 21 gdy wartosc ax==3D00h. No wiec ctrl+d i :bpint 21 if ax==3d00.
Wpisalismy juz name, wiec mozemy stuknac enter. Teraz pasowaloby znalezc nasze name w pamieci, no wiec :s 0 l ffff 'Agent' i znajdujemy nasz name pod adresem 0053. Teraz zakladmy breakpointa na 0053 (bpm 00000053), wylaczamy starego bpx'a (bd 0) i stukamy f5. Jesli wszystko poszlo dobrze powinnismy sie znalezc tu:

01FD	mov ax, [0152]		;numer aktualnie dodawanej litery name
	mov ax, [0154]		;ilosc liter name
	jg 0226			;jesli dodawanie dobiegnie konca to wyjdz z petli
	mov di, [0152]
	mov al, [di+0052]		;aktualnie wskazywana przez licznik litera name do al
020E	xor ah, ah			;TU JESTESMY
	mov [0156], ax		;
	mov ax, [0258]		;
	add ax, [0156]		;reszte to juz chyba kazdy sobie
	mov [0258], ax		;przetlumaczy ;) ogolnie chodzi o
	mov ax, [0152]		;to ze obliczana jest suma (w hex) 
	inc ax			;liter naszego name.
	mov [0152], ax		;w moim przypadku Agent==1EFh
	jmp 01DF			;

pare f10 pozniej zobaczymy kod:

025B	mov ax, [025A]		;dwa ostatnie bajty wartosci hex tego co wpisalismy do keyfilea
	cmp ax, [0258]		;[0258]==1EFh czyli suma naszego name
	jnz 02C9

Do keyfilea musimy wpisac 1EF, czyli sume znakow naszego name, zamieniana na wartosc decymalna, w moim przypadku 495. No wiec wpisujemy, odpalamy cm'ka wpisujemy name i naszym oczom ukazuje sie piekny napisik:

"YES YES q:-)
That's it! Now send Me your solution...

@@@@@@@@@@   mario16@poczta.fm   @@@@@@@@@@"

Crackme rozwiazane i wbrew temu co mi sie wydawalo na poczatku jest ono bardzo proste.

EOF


