Analiza algorytmu Brute Force.

panczo12d

Użytkownik
Dołączył
Styczeń 22, 2011
Posty
61
Cześć. Znalazłem na internecie Kod PHP łamiący metodą Brute Force np. hasz MD5.
http://eternalrise.com/blog/brute-force-php-script/
Przy mógłby mi ktoś przedstawić ten algorytm w schemacie blokowy, liście kroków, gdyż nie za bardzo rozkminiam ten fragment kodu:

PHP:
function recurse($width, $position, $base_string)
{
    global $charset, $charset_length;
     
    for ($i = 0; $i < $charset_length; ++$i) {
        if ($position  < $width - 1) {
            recurse($width, $position + 1, $base_string . $charset[$i]);
        }
        check($base_string . $charset[$i]);
    }
}
recurse(PASSWORD_MAX_LENGTH, 0, '');

Pętla for sprawia że mózg mi się zapętla gdy próbuję to ogarnąć.
Dzięki za wszelką pomoc.
Ps. Czy 3 argument przekazywany do funkcji recurse to może być "sól" dodawana przed hasłem czy coś w tym stylu?
 

Dark Smark

Były Moderator
Dołączył
Kwiecień 29, 2006
Posty
1953
Jeżeli nie rozumiesz to raczej podszkol swój język PHP, a raczej poczytaj jakieś fajne książki do algorytmiki.

Odpowiem na ostatnie pytanie. Jest to bazowy string używany w rekurencji, tutaj jest zastosowana sztuczka przekazująca wynik cząstkowy z poziomu niższego na wyższy. Czyli kolejne wywołanie funkcji
Kod:
[COLOR=#0000BB][FONT=monospace]recurse[/FONT][/COLOR][COLOR=#007700][FONT=monospace]([/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]$width[/FONT][/COLOR][COLOR=#007700][FONT=monospace], [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]$position [/FONT][/COLOR][COLOR=#007700][FONT=monospace]+ [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]1[/FONT][/COLOR][COLOR=#007700][FONT=monospace], [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]$base_string [/FONT][/COLOR][COLOR=#007700][FONT=monospace]. [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]$charset[/FONT][/COLOR][COLOR=#007700][FONT=monospace][[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]$i[/FONT][/COLOR][COLOR=#007700][FONT=monospace]]);[/FONT][/COLOR]
wykorzystuje to co obecnie mamy (zaczynamy od spacji, widzimy to niżej w kodzie w linku którym podałeś) i doklejamy do tego $charset[$i]. Mechanizm jest dość prosty i aż toporny do opisania. Najlepiej widać to na funkcji silnia bo najczęściej implementuje się ją rekurencją. Tutaj fajnie jest to pokazane:

http://piotao.inf.ug.edu.pl/manta/Programowanie/img/silnia.gif

Funkcja wywołuje siebie, wykorzystując swoje dane (bazowe) i kolejne wywołania robią to analogicznie.

Pozatym w php łamanie md5 jest kiepskie. Po 1 nie zaimplementowano tu wątków, po 2 są aplikacje nawet open soruce wykorzystujące karte graficzne do obliczeń co znacznie przyspiesza proces łamania (chyba nawet hashcat).


BTW (C++ ale odczytasz): http://www.youtube.com/watch?v=tYpRksl71Bg
 
Ostatnia edycja:

panczo12d

Użytkownik
Dołączył
Styczeń 22, 2011
Posty
61
dzięki za odpowiedź,
Pozatym w php łamanie md5 jest kiepskie. Po 1 nie zaimplementowano tu wątków, po 2 są aplikacje nawet open soruce wykorzystujące karte graficzne do obliczeń co znacznie przyspiesza proces łamania (chyba nawet hashcat).

Nie zależy mi na łamaniu hasła. Gdybym sobie chciał złamać md5 to bym skorzystał z tęczowych tablic (strony online) :) Po prostu chcę sobie przeanalizować algorytm brute force.
PHP i C++ też umiem w dobrym stopniu.
tylko nie rozumiem czemu najpierw jest: aaaa, a potem aaab etc.
Czy mógłbyś mi wyjaśnić za co odpowiada pętla for, warunek if, rekurencja w tej implementacji?
 
Do góry Bottom