Gość Opublikowano 25 Października 2009 Udostępnij Opublikowano 25 Października 2009 Witam :) Wiem, że był temat o HackMe 3.0, ale nie chciałem go odświeżać. Zatrzymałem się na 12 levelu. Oblookałem ten kod źródłowy, sprawdziłem w Internecie jak działają zawarte tam funkcje, ale nadal nie mogę rozszyfrować tego hasła :/ Mógłby mi ktoś go podać? :) Z góry thx :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Nobody Opublikowano 25 Października 2009 Udostępnij Opublikowano 25 Października 2009 Po 1. lepiej już było odświeżyć tamten temat. Po 2. podaj może linka, bo nie chce mi się przechodzić tego od nowa, żeby Ci pomóc. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gość Opublikowano 26 Października 2009 Udostępnij Opublikowano 26 Października 2009 Link: HackMe 3.0 Level 12 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Nobody Opublikowano 26 Października 2009 Udostępnij Opublikowano 26 Października 2009 <script> code=eval(unescape("%66%75%6E%63%74%69%6F%6E%20%78%28%63%6F%29%7B%20%72%65%74%75%72%6E%20%63%6F%2A%63%6F%2A%63%6F%2D%31%3B%20%7D")); pobierz=prompt('Podaj haslo do levelu 12:',''); id=2;q=2+8-4+9-9+1-1+2+3+4+5+6+7+8+9*7*0; if (pobierz.indexOf("am")!=-1) { id=(2+2)*2; } if (pobierz.indexOf("pm")!=-1) { id=2+2*2; } liczba=x(3)*3+7; tmp=x(id)*x(id)*x(id); liczba=unescape("%"+liczba.toString(16)); if (pobierz.length>3) q=pobierz.substring(3,4);/* if (q<8) {q=12} else {q=3} */ if ((pobierz.length>3) && (pobierz.indexOf(liczba)==0) && (tmp==9938375) && (id==q) && (pobierz.length<5)) { alert('Udalo sie'); self.location.href=x(3)+'z'+pobierz+'.php'; } else {alert('Złe haslo');} </script> Przeanalizujmy: if ((pobierz.length>3) && (pobierz.indexOf(liczba)==0) && (tmp==9938375) && (id==q) && (pobierz.length<5)) { zmienna pobierz ( czyli podane hasło ) musi mieć 4 znaki ( długość większa od 3 i mniejsza od 5 ). Wiemy już ile znaków ma nasze hasło :) pobierz.indexOf(liczba)==0 Na początku hasła musi znajdować się wartość zmiennej liczba Tmp nas nie interesuje, bo akurat są tylko dwie możliwości hasła id==q q ma się równać id. Q jest ostatnim znakiem hasła ( linijka q=pobierz.substring(3,4); ) Mamy już większość, co powinniśmy wiedzieć o tym haśle. 4-znakowe, na początku wartość jednej zmiennej na końcu wartość drugiej zmiennej. if (pobierz.indexOf("am")!=-1) { id=(2+2)*2; } if (pobierz.indexOf("pm")!=-1) { id=2+2*2; } Te dwie linijki mówią nam o wartości id przy dwóch przypadkach: gdy w haśle będzie się znajdować "am" ( id=8 ), lub "pm" ( id=6 ). Znamy więc 3 znaki hasła ( *am8 lub *pm6 ). Zajmijmy się więc pierwszym znakiem: Odkodowując pierwszą linijkę otrzymujemy funkcję function x(co){ return co*co*co-1; }; liczba=x(3)*3+7; [...] liczba=unescape("%"+liczba.toString(16)); Obliczamy, że (3*3*3-1)*3+7 jest równe 85 co w systemie szestnastkowym ( toString(16) ) daje nam 55. Odkodowując %55 otrzymujemy duże U. Tak więc mamy dwie możliwości: Uam8 lub Upm6. Obliczając prawidłowe tmp możemy określić tylko jeden wynik ale po co, gdy możemy po prostu sprawdzić te dwie możliwości? I tak zajmie nam to krócej niż liczenie zmiennej tmp :P 13 poziom zajął mi niecałą minutę, uwierz naprawdę jest prosty. Przy 14 poziomie musisz napisać własny skrypt logowania ;) EDIT: Wkradł się mały błędzik z hasłem :P Poprawiłem Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się