yet another password cracker
Po co powstają programy? Mówi się, że powstają gdy zachodzi taka potrzeba. Tak też było w tym wypadku – na początku sobie tak dla zabawy skrobałem prosty program do łamania md5, który niczym wyjątkowym nie był. Później się okazało że potrzebuję odzyskać hasło do hasha – ale nie miałem kompletnego, tylko kawałek. Z pewnej bazy danych udało mi się wyciągnąć tylko fragment hasha, i co tu teraz zrobić? Ano tak zrobiłem, by mój program porównywał tylko fragment hasha. Działało, hasło odzyskałem :)
Później przyszedł czas na kolejny pomysł – rozdzielić proces łamania haseł na wiele komputerów.
W wyniku burzliwej dyskusji na IRC wymyśliłem by program składał
się z kilku części – serwera, przydzielającego pracę; klienta, który odbiera porcje danych;
modułów klienta (czyli samodzielnych programów) które są startowane przez klienta. Jako moduł md5 zastosowałem właśnie ten program – w wielu miejscach zmodyfikowany, ale z grubsza on.
Od paru dni mam wolne, to go sukcesywnie zmieniam i dodaję nowe funkcje. Warto się chyba pochwalić, bo program już działa :)
Nie jest niestety ani najszybszy, ani najwygodniejszy. Bo nie o to chodzi w tym momencie – to nadal służy jako podstawka obliczeniowa do wcześniejszego projektu. Nadal ma też funkcję, której próżno szukać w innych programach, a która sprawiła że nie rzuciłem projektu po kilku chwilach.
Program jest wręcz minimalistyczny w wykonaniu i kodzie. Wątki? Zrzucone na system operacyjny. Benchmark? Niet, używałem ``time``. Nawet getopt nie ma. A kod jest na tyle dziwny, że ciężko powiedzieć czy to cpp czy jeszcze c. W obecnej fazie rozwoju obsługuje 2 algorytmy (md5 i sha1), oba mają nieco zmodyfikowane algorytmy, dzięki którym oszczędza się wiele operacji.
Przykład użycia:
$ python spawn.py 1 2 5 abcdefghijklmnopqrstuvwxyz a2b7caddbc353bd7d7ace2067b8c4e34db2097a3
Skrypt ten uruchomi dwa wątki programu, dzieląc między nich robotę – moduł sha1, w poszukiwaniu hasha a2b7caddbc353bd7d7ace2067b8c4e34db2097a3, używając tylko małych liter.
Kompilacja… no, ciężko. Od kiedy dodałem kilka funkcji dotyczących SSE2 (a których jeszcze nie używam :P) nie chce się kompilować w GCC ani w microsoftowym CL. Używam ICL (intelowy) i tam działa. Kompiluję to na windows xp, 32 bit. Ale i tak ICL generował najlepszy, najszybszy kod, więc inne kompilatory mnie niewiele obchodzą.
Jeśli kogoś ciekawi i dotrwał z czytaniem aż tutaj… to repo svn jest dostępne.
Uwaga! Licencja mówi że wolno programu używać tylko w złych celach! Jeśli chcesz „sprawdzić sobie własne zabezpieczenia” to umrzyj szybko, bo to służy do włamania na cudze komputery. O!
> nie chce się kompilować w GCC ani w microsoftowym CL.
a na assembi:
>But it works and is easy to compile everywhere, on any compiler.
flegmatyk: to się nazywa reklama ;)
Potem w FAQ: oh well, use ICL ;)
Cicho tam, już poprawilem, działa już na wszystkich kompilatorach :P