# # # MDcrack Makefile # # Gregory Duchemin, 11 Feb 2001 # c3rb3r@hotmail.com # # # #CC = gcc # Please set RESUME_FILE and choose a secure place for the resume file # before using mdcrack as root. # default is NOT secure and own an obvious race condition. # Nevertheless Mdcrack offer a protection against symlink attack style and will not create a resume file across a pre existing symlink. # BENCH_HASH corresponds to the default benchmark hash # In fact i did not try it no more longer than 10 secs, however if # it would collide too quickly for your tests, change it. # ALFA is the default charset string used to design passwords. # We can still use a customized one with -s option on the command line. MDCRACK_OPTS= -DRESUME_FILE="\"/tmp/.mdcrack-resume\"" -DBENCH_HASH="\"ffffffffffffffffffffffffffffffff\"" -DALFA="\"abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\"" # INF64 will determine if the designed passwords can be larger than a single # MD5 block, this value include naturaly eventual randomizer string. # Performance are affected if u decide to try larger passwords that don't # fit into 64bits block. MDFLAGS= -DINF64=1 # Just type, "make big", on BIG ENDIAN architectures if u don't want to catch ghosts instead of collisions. MDARCH= # BLOCKSIZE in MB is used for file bufferization. The input file is read block by block in memory, set the value as high as possible accordingly to your system size (memory, system load, disk speed etc...). # UNIX users: Do not forget to check your actual disk configuration with hdparm and if not already done, switch ON 32 bits mode and DMA when possible. # #hdparm -c 1 -d 1 /dev/hd* BLOCK=-DBLOCKSIZE=50 #full optimization CFLAGS += -O3 -fforce-addr -funroll-loops -fomit-frame-pointer -ffast-math # Ncurses, uncomment these 2 lines if you wish colors in your life. NCURSES= NCURSES=-DNCURSES #LDFLAGS= LDFLAGS=-lncurses # Debugging DEBUG= #DEBUG=-g default: @echo @echo @echo @echo "~ ~ ~~~ ~~ ~~~ ~~~ ~~ ~ ~ " @echo " /| | | ) __| | / " @echo "| || | | | | | / | | | | \\ " @echo "| | ___/ __/ | \\ | | __/ | \\ " @echo @echo " Makefile " @echo @echo @echo "to build for little endian ---------- \"make little\"" @echo "to build for big endian ------------- \"make big\"" @echo "to build/install in little endian --- \"make little install\"" @echo "to build/install in big endian ------ \"make big install\"" @echo "to test ----------------------------- \"make test/fulltest\"" @echo "to benchmark ------------------------ \"make bench\"" @echo little: @echo @echo "-*-*-*-*-*-*-*-*-* NOTE -*-*-*-*-*-*-*-*-*-*" @echo @echo "Compiling MDcrack for little endian processors." @echo @echo @make bin/mdcrack bin/mdcrack: src/coding.o src/NTLM1/core3.o src/NTLM1/core3b.o src/NTLM1/unicode.o src/MD4/core1b.o src/MD4/core2b.o src/MD4/core3b.o src/MD4/core1.o src/MD4/core2.o src/MD4/core3.o src/MD5/core1b.o src/MD5/core2b.o src/MD5/core3b.o src/MD5/core1.o src/MD5/core2.o src/MD5/core3.o src/title.o src/mdcrack.o src/stats.o src/mesgs.o src/hash.o src/charset.o $(CC) $(LDFLAGS) -o bin/mdcrack src/coding.o src/NTLM1/core3.o src/NTLM1/core3b.o src/NTLM1/unicode.o src/MD4/core1b.o src/MD4/core2b.o src/MD4/core3b.o src/MD4/core1.o src/MD4/core2.o src/MD4/core3.o src/MD5/core1b.o src/MD5/core2b.o src/MD5/core3b.o src/MD5/core1.o src/MD5/core2.o src/MD5/core3.o src/title.o src/mesgs.o src/mdcrack.o src/stats.o src/hash.o src/charset.o big: @echo @echo "-*-*-*-*-*-*-*-*-* NOTE -*-*-*-*-*-*-*-*-*-*" @echo @echo "Compiling MDcrack for big endian processors." @echo @echo @make bin/mdcrack MDARCH="-DISBIG_ENDIAN=1" #MD5 files src/MD5/core1.o: src/MD5/generic.h src/MD5/core1.c $(CC) -c $(CFLAGS) $(NCURSES) $(CPU) $(MDCRACK_OPTS) $(MDARCH) $(BLOCK) src/MD5/core1.c -o src/MD5/core1.o src/MD5/core2.o: src/MD5/generic.h src/MD5/core2.c $(CC) -c $(CFLAGS) $(NCURSES) $(CPU) $(MDCRACK_OPTS) $(MDARCH) $(BLOCK) src/MD5/core2.c -o src/MD5/core2.o src/MD5/core3.o: src/MD5/generic.h src/MD5/core3.c $(CC) -c $(CFLAGS) $(NCURSES) $(CPU) $(MDCRACK_OPTS) $(MDARCH) $(BLOCK) src/MD5/core3.c -o src/MD5/core3.o src/MD5/core1b.o: src/MD5/generic.h src/MD5/core1b.c $(CC) -c $(CFLAGS) $(NCURSES) $(CPU) $(MDCRACK_OPTS) $(MDARCH) $(BLOCK) src/MD5/core1b.c -o src/MD5/core1b.o src/MD5/core2b.o: src/MD5/generic.h src/MD5/core2b.c $(CC) -c $(CFLAGS) $(NCURSES) $(CPU) $(MDCRACK_OPTS) $(MDARCH) $(BLOCK) src/MD5/core2b.c -o src/MD5/core2b.o src/MD5/core3b.o: src/MD5/generic.h src/MD5/core3b.c $(CC) -c $(CFLAGS) $(NCURSES) $(CPU) $(MDCRACK_OPTS) $(MDARCH) $(BLOCK) src/MD5/core3b.c -o src/MD5/core3b.o #MD4 files src/MD4/core1.o: src/MD4/generic.h src/MD4/core1.c $(CC) -c $(CFLAGS) $(NCURSES) $(CPU) $(MDCRACK_OPTS) $(MDARCH) $(BLOCK) src/MD4/core1.c -o src/MD4/core1.o src/MD4/core2.o: src/MD4/generic.h src/MD4/core2.c $(CC) -c $(CFLAGS) $(NCURSES) $(CPU) $(MDCRACK_OPTS) $(MDARCH) $(BLOCK) src/MD4/core2.c -o src/MD4/core2.o src/MD4/core3.o: src/MD4/generic.h src/MD4/core3.c $(CC) -c $(CFLAGS) $(NCURSES) $(CPU) $(MDCRACK_OPTS) $(MDARCH) $(BLOCK) src/MD4/core3.c -o src/MD4/core3.o src/MD4/core1b.o: src/MD4/generic.h src/MD4/core1b.c $(CC) -c $(CFLAGS) $(NCURSES) $(CPU) $(MDCRACK_OPTS) $(MDARCH) $(BLOCK) src/MD4/core1b.c -o src/MD4/core1b.o src/MD4/core2b.o: src/MD4/generic.h src/MD4/core2b.c $(CC) -c $(CFLAGS) $(NCURSES) $(CPU) $(MDCRACK_OPTS) $(MDARCH) $(BLOCK) src/MD4/core2b.c -o src/MD4/core2b.o src/MD4/core3b.o: src/MD4/generic.h src/MD4/core3b.c $(CC) -c $(CFLAGS) $(NCURSES) $(CPU) $(MDCRACK_OPTS) $(MDARCH) $(BLOCK) src/MD4/core3b.c -o src/MD4/core3b.o #NTLM files src/NTLM1/core3.o: src/NTLM1/generic.h src/NTLM1/core3.c $(CC) -c $(CFLAGS) $(NCURSES) $(CPU) $(MDCRACK_OPTS) $(MDARCH) $(BLOCK) src/NTLM1/core3.c -o src/NTLM1/core3.o src/NTLM1/core3b.o: src/NTLM1/generic.h src/NTLM1/core3b.c $(CC) -c $(CFLAGS) $(NCURSES) $(CPU) $(MDCRACK_OPTS) $(MDARCH) $(BLOCK) src/NTLM1/core3b.c -o src/NTLM1/core3b.o src/NTLM1/unicode.o: src/NTLM1/unicode.c $(CC) -c $(DEBUG) $(CFLAGS) $(NCURSES) $(CPU) $(MDCRACK_OPTS) $(MDARCH) $(BLOCK) src/NTLM1/unicode.c -o src/NTLM1/unicode.o #root files src/mdcrack.o: src/MD5/generic.h src/mdcrack.c src/NTLM1/unicode.c $(CC) -c $(CFLAGS) $(NCURSES) $(CPU) $(MDCRACK_OPTS) $(MDARCH) $(BLOCK) src/mdcrack.c -o src/mdcrack.o src/coding.o: src/coding.c $(CC) -c $(CFLAGS) $(NCURSES) $(CPU) $(MDCRACK_OPTS) $(MDARCH) $(BLOCK) src/coding.c -o src/coding.o src/title.o: src/title.c $(CC) -c $(CFLAGS) $(NCURSES) $(CPU) $(MDCRACK_OPTS) $(MDARCH) $(BLOCK) src/title.c -o src/title.o src/stats.o: src/stats.c $(CC) -c $(MDFLAGS) $(NCURSES) $(CPU) $(MDCRACK_OPTS) $(BLOCK) $(CFLAGS) $(MDARCH) src/stats.c -o src/stats.o src/mesgs.o: src/version.h src/mesgs.c $(CC) -c $(MDFLAGS) $(NCURSES) $(CPU) $(MDCRACK_OPTS) $(BLOCK) $(CFLAGS) $(MDARCH) src/mesgs.c -o src/mesgs.o src/hash.o: src/hash.c $(CC) -c $(MDFLAGS) $(NCURSES) $(CPU) $(MDCRACK_OPTS) $(BLOCK) $(CFLAGS) $(MDARCH) src/hash.c -o src/hash.o src/charset.o: src/charset.c $(CC) -c $(MDFLAGS) $(NCURSES) $(CPU) $(MDCRACK_OPTS) $(BLOCK) $(CFLAGS) $(MDARCH) src/charset.c -o src/charset.o #Following are here for bench purposes, these 3 tests give stats for 3 different password sizes and, BTW, 3 different levels of code optimization. #A challenge follows the password. core1: @echo @echo "Core 1 (password <= 12) : Cracking \"hack\" string with [a-z0-9] charset." @echo bin/mdcrack -s abcdefghijklmnopqrstuvwxyz0123456789 d78b6f30225cdc811adfe8d4e7c9fd34 bin/mdcrack -M MD4 -s abcdefghijklmnopqrstuvwxyz0123456789 c1f9e5db622135eaca09665555b308da @echo @echo "ok." @echo core12: @echo @echo "Core 1 with ending string (password <= 12) : Cracking \"bbbhack\" string with [a-z0-9] charset." @echo bin/mdcrack -e ack -s abcdefghijklmnopqrstuvwxyz0123456789 afd3256209cb976c40495ea15548faca bin/mdcrack -e ack -M MD4 -s abcdefghijklmnopqrstuvwxyz0123456789 0b3128de2dd2d37ea87cc4eaedde68e1 @echo @echo "ok." @echo core2: @echo @echo "Core 2 with ending string (password <= 28) : Cracking \"bbbbbbbbbbbbbbbhack\" string with [a-z0-9] charset." @echo bin/mdcrack -e bbbbbbbbbbhack -s abcdefghijklmnopqrstuvwxyz0123456789 a22fcc8c0fbd42bc44c956ee64a93ef6 bin/mdcrack -e bbbbbbbbbbhack -M MD4 -s abcdefghijklmnopqrstuvwxyz0123456789 18acb3389f68c92df3d0cd713ef3ab84 @echo @echo "ok." @echo core3: @echo @echo "Core 3 with ending string (password <= 56) : Cracking \"bbbbbbbbbbbbbbbbbbbbbbbbbbbbhack\" string with [a-z0-9] charset." @echo bin/mdcrack -e bbbbbbbbbbbbbbbbbbbbbbbhack -s abcdefghijklmnopqrstuvwxyz0123456789 e9a2926c5540d4a853f463e3fbc4aba7 bin/mdcrack -e bbbbbbbbbbbbbbbbbbbbbbbhack -M MD4 -s abcdefghijklmnopqrstuvwxyz0123456789 f85cb507b9f0fb1f181854394892610a @echo @echo "ok." @echo core1b: @echo @echo "Core 1 with beginning string (password <= 12) : Cracking \"aaahack\" string with [a-z0-9] charset." @echo bin/mdcrack -b aaa -s abcdefghijklmnopqrstuvwxyz0123456789 16522beac358f4f75eafdda40180ff79 bin/mdcrack -b aaa -M MD4 -s abcdefghijklmnopqrstuvwxyz0123456789 3a0d395696a13d7633de725746f7c164 @echo @echo "ok." @echo core1b2: @echo @echo "Core 1 with beginning/ending string (password <= 12) : Cracking \"aaahack\" string with [a-z0-9] charset." @echo bin/mdcrack -b aa -e k -s abcdefghijklmnopqrstuvwxyz0123456789 16522beac358f4f75eafdda40180ff79 bin/mdcrack -b aa -M MD4 -e k -s abcdefghijklmnopqrstuvwxyz0123456789 3a0d395696a13d7633de725746f7c164 @echo @echo "ok." @echo core2b: @echo @echo "Core 2 with beginning string (password <= 28) : Cracking \"aaaaaaaaaaaaaaahack\" string with [a-z0-9] charset." @echo bin/mdcrack -b aaaaaaaaaaaaaaa -s abcdefghijklmnopqrstuvwxyz0123456789 707d4f8220ed0b6980cf74c190e95186 bin/mdcrack -b aaaaaaaaaaaaaaa -M MD4 -s abcdefghijklmnopqrstuvwxyz0123456789 ea5544cae8ac6fdfdc69a1fab32da03d @echo @echo "ok." @echo core2b2: @echo @echo "Core 2 with beginning/ending string (password <= 28) : Cracking \"aaaaaaaaaaaaaaahack\" string with [a-z0-9] charset." @echo bin/mdcrack -b aaaaaaaaaaaaaa -e k -s abcdefghijklmnopqrstuvwxyz0123456789 707d4f8220ed0b6980cf74c190e95186 bin/mdcrack -b aaaaaaaaaaaaaa -M MD4 -e k -s abcdefghijklmnopqrstuvwxyz0123456789 ea5544cae8ac6fdfdc69a1fab32da03d @echo @echo "ok." @echo core3b: @echo @echo "Core 3 with beginning string (password <= 56) : Cracking \"aaaaaaaaaaaaaaaaaaaaaaaaaaaahack\" string with [a-z0-9] charset." @echo bin/mdcrack -b aaaaaaaaaaaaaaaaaaaaaaaaaaaa -s abcdefghijklmnopqrstuvwxyz0123456789 6067f9a5081e0abadf5e01315f3dad17 bin/mdcrack -b aaaaaaaaaaaaaaaaaaaaaaaaaaaa -M MD4 -s abcdefghijklmnopqrstuvwxyz0123456789 c486a682f42e083e298677a4af6f62be @echo @echo "ok." @echo core3b2: @echo @echo "Core 3 with beginning/ending string (password <= 56) : Cracking \"aaaaaaaaaaaaaaaaaaaaaaaaaaaahack\" string with [a-z0-9] charset." @echo bin/mdcrack -b aaaaaaaaaaaaaaaaaaaaaaaaaaa -e k -s abcdefghijklmnopqrstuvwxyz0123456789 6067f9a5081e0abadf5e01315f3dad17 bin/mdcrack -b aaaaaaaaaaaaaaaaaaaaaaaaaaa -M MD4 -e k -s abcdefghijklmnopqrstuvwxyz0123456789 c486a682f42e083e298677a4af6f62be @echo @echo "ok." @echo test: @make core1 fulltest: @make core1 @make core12 @make core2 @make core3 @make core1b @make core1b2 @make core2b @make core2b2 @make core3b @make core3b2 clean: @echo @echo -n "Cleaning binaries and useless files ..... " @rm -f ./*.o ./*~ ./*# ./.#* @rm -f src/*.o src/*~ src/*# src/.#* @rm -f src/MD5/*.o src/MD5/*~ src/MD5/*# src/MD5/.#* @rm -f src/MD4/*.o src/MD4/*~ src/MD4/*# src/MD4/.#* @rm -f src/NTLM1/*.o src/NTLM1/*~ src/NTLM1/*# src/NTLM1/.#* @rm -f bin/*~ bin/mdcrack bin/*# bin/.#* @echo "ok." @echo install: @echo @echo -n "Installing mdcrack in ${PREFIX}/bin/mdcrack ..... " @cp bin/mdcrack ${PREFIX}/bin/mdcrack @echo "ok." @echo @echo "-*-*-*-*-*-*-*-*-*-*-*-*-*-*-" @echo " I need your benchmarks !!" @echo "-*-*-*-*-*-*-*-*-*-*-*-*-*-*-" @echo @echo "Just try: \"make bench\"" @echo "and accept to send the resulting report to my mailbox." @echo @echo "Have fun ! ;)" @echo @echo @echo bench: @echo @./bench.sh