Crackme/Reverseme [2010.01.09]

hxv

Były Moderator
Dołączył
Sierpień 9, 2006
Posty
797
Nudziłem się trochę, włączyłem masm32 i po pewnym czasie powstał ten oto program.
Zadanie - wyświetlić okienko z wiadomością "OK". Trzeba dojść skąd program pobiera klucz i jak on powinien wyglądać, nie jest to chyba zbyt trudne, po prostu chciałem się pobawić z kodem, sami zobaczcie efekt ;)
Samo sprawdzanie poprawności kodu jest banalne, problemy (mam nadzieję :>) mogą pojawić się w pierwszej części.
Jak komuś uda się zrobić to prosiłbym o podanie rozwiązania w temacie, ocenę i ew. uwagi :)
 

untam3d

Użytkownik
Dołączył
Październik 2, 2009
Posty
36
Bardzo ciekawe crackme ;]
Ocena: 8/10

Opinia: za proste, na tacy podany adres RegQueryValueExA co psuje zabawe (znaczy strasznie ulatwia). Ale ogolnie bardzo pozytywne wrazenie i nie zaluje czasu spedzonego nad programikiem ;]
Aha i takie pytanie, do czego sluzy UNICODE "ait)" ?


--- Opis:
A wiec tak, na poczatku mamy ladny balagan w kodzie, oczywiscie wszystko sie ladnie wykonuje (seria StepIn'ow) ale skoki sa rozniesione do "wewnatrz" innych instrukcji zdeasemblowanych przez Ollyego. Czasami warto zaNOPowac odpowiednie bajty (wczesniejsze) aby zobaczyc jaka instrukcja kryje sie pod dana adresem.

Dalej, pod offsetem 10C3 odkladany jest adres: advapi32.RegQueryValueExA i nastepuje RETN pod adres tejze API, odkladajac wczesniej na stos parametry:

RegQueryValueExA( HKEY_CURRENT_USER, "pff", NULL, REG_NONE, (LPVOID)00402000, 256);

nastepnie powrot z tejze funkcji, test'owany jest eax i jesli znaleziono wpis HKEY_CURRENT_USER->"pff" (typ ignorowany) to program ladnie wykonuje sie dalej. Nastepnie od adresu 401043 przeliczana jest dlugosc zawartosci tegoz wpisu (8 znakow wymagane).

[!] Stepujac w kodzie nie mozemy dopuscic do skoczenia pod adres 40105A, gdzie odkladana na stos jest stala 0xDEADFACE oznaczajaca martwa twarz.

Dalej... Od adresu 401061 do 401080 wykonywane sa testy bajtow, bedacych wielokrotnasciami dwojki (z wpisu "pff" ) tak jak:
jesli wpis zawieral wartosc: ABCDEFGH to porownywane sa bajty (liczone od 1) -> 2 ("B"), 4 ("D"), 6 ("E"), 8 ("G") -> i jak widzimy nie mozemy dopuscic do wykonania JNZ czyli bajty 2,4,6,8 musza byc takie same.
Innymi slowy zawartosc musi wygladac tak:

0102030405060708 => 02 == 04 == 06 == 08
??XX??XX??XX??XX
Gdzie pod wildcard "??" mozemy wstawic co chcemy.


Peace.
 
Ostatnia edycja:
Do góry Bottom