Witam wszystkich :)
Wspomnianie w temacie crackme znajduje sie tutaj, zapraszam wszystkich do łamania. CM bardzo łatwe, nawet nie ma co porównywać z poprzednimi z 4p.... no ale też twórca mniej znany ;)
Co do samego cm - nie użyłem żadnego protectora/packera, jedno proste zabezpieczenie anty-debug i... tyle Wam wystarczy ;) Komuś kto ma chociaż o tym jako-takie pojęcie nie powinno zająć zbyt wiele czasu :) Licze, ze rano juz bedzie rozwiazanie :)
u mnie się wywala po wpisaniu hasła, chwilowo nie chce mi się dalej wnikać - to celowo?
Mozesz rozszerzyć "wywala" - co dokładnie się dzieje i jakie hasło wpisujesz? Byle jakie?
jakiekolwiek - dostaję AV. W2k3.
// ja też, XP - Cold
:/ Chyba już wiem o co chodzi.... Cholera dzisiaj nie mam czasu, jutro to poprawie....
Hah, a już myślałem że chodzi o cm które najpierw trzeba naprawić żeby potem je złamać ;P
lepiej - musisz najpierw złamać, żeby móc naprawić :P
No i widzisz Cyrielu, twoje CrackMe reklamowane jako "łatwe" okazało się ciężkim orzechem do zgryzienia. Zabezpieczenie anty-debug pierwsza klasa - no bo jak tu spokojnie i kulturalnie śledzić wykonywanie programu, który się wyjebuje z tytułu AV? :P
Rzuciłem na to okiem i powiem krótko - Cysiek, lecz się. Powody? Wymienię kilka, które rzucają się w oczy:
-
'oryginalny' antydebug polegający na kopiowaniu funkcji systemowej... jeżeli IsDebuggerPresent jest (s)patchowana to z patchem ją kopiujesz, jak stoi na niej breakpoint to z breakpointem ją skopiujesz - albo debuggera nie wykryjesz albo poinformujesz o próbie wykrycia. Rozmiar odczytywanego kodu masz na styk... a co z innymi wersjami Windowsa? Starczy adres względny w kodzie lub chociaż jeden bajt więcej i CM się wyłoży.
-
wspomniany AV:
push 0 ; lpNumberOfBytesWritten
push 4 ; nSize
lea eax, [esp+28h+address]
push eax ; lpBuffer
push (offset @@printMsg+1) ; lpBaseAddress
push ecx ; hProcess
mov [esp+34h+address+3], dl
call [ds:WriteProcessMemory]
@@printMsg:
push dword 0
call ebp
zmieniasz argument pusha poprzez WriteProcessMemory - dosyć głupie bo i tak sekcja musi mieć prawa do zapisu więc mógłbyś bezpośrednio. Wartość argumentu pochodzi od seriala, najniższy zaś bajt jest stały - 0x3C. W sumie najwyższy też bo pochodzi z róznicy znaku z samym sobą... x-x = 0 o ile jeszcze z podstawówki pamiętam. Prawidłowa wartość to 0x40313C, offset stringa 'Well done :)\n'
. AV w tym wypadku leci z powodu:
mov eax, [g_passLen]
xor eax, 0Dh
push ebp
mov ebp, [ds:printf]
push esi
push edi
jnz @@printMsg
czyli jak długość stringa jest niewłaściwa to odstawiamy 'printf(NULL);', odkrywcze. Żeby się binarka nie sypała to we wspomnianym pushu argumentem powinno być 0x4031AC czyli offset 'Bad password! Try again...!'. Żebym na stare lata uczył autora crackme jak ma crackme połatać żeby się nie sypało... tracę wiarę w ludzi.
-
mała uwaga - jest coś takiego jak puts, printf powinien przyjmować format string i formatowane argumenty, nie czysty tekst do wypisania, szczególnie z '\n'. Druga uwaga - używasz klasy string i operatora >> z cina do tego stringa ale wyjście to już na printf robisz, gdzie tu logka?
-
całe to sprawdzanie to luźno powiązane zależności znaków:
[9] - [4] / [7] - [2] = 0x31 // pierwszy fragment adresu
[6] - [0] = '0'
([11] - [3]) / 2 = [7] - [6]
([8] + [5]) % 156 - 1 = 0x40 // drugi fragment fragment adresu
[1] + [0] + 1 = [9]
[9] + 0x0D = [10]
[5] % [11] = [3]
([2] - [0]) * [0] - 5 = [12]
[12] = [12] // rożnica - 0 - to trzeci fragment adresu
kilka przekształceń i odpowiednia kolejność obliczeń i całość przeliczona:
1337cracker;]
- wybacz ale to wygląda na CM pisane całkowicie bez pomysłu, bez przetestowania... po prostu siadłeś i coś naklepałeś. Może jestem wredny ale na 4p jeszcze tak lichego crackme czy innego obiektu RE nie było, wspominałeś, że robisz HC, nie wygląda abyś był w stanie zrobić skoro nawet nie zauważyłeś wysypania się programu przy nieprawidłowej ilości znaków. Tak gdzieś raz na rok się jakieś 'wyzwanie' pojawia, tamte nie zawierały przynajmniej głupich błędów, były przetestowane i ciekawsze. Póki co w historii 'wyzwań' wypadłeś najgorzej. Więcej klepania postu niż RE...
Czas wracać do RE za pieniądze, koniec dnia dobroci dla ludzi...