#
#
# 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



default:
	@echo 
	@echo "####  NOTE  #########################################"
	@echo
	@echo "MDcrack is compiling for little endian processors."
	@echo
	@echo "Try: \"make big\" and then \"make install\" if u need a big endian binary."
	@echo
	@make bin/mdcrack 



bin/mdcrack: src/md5c.o src/core1b.o src/core2b.o src/core3b.o src/core1.o src/core2.o src/core3.o src/md5c.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/md5c.o src/core1b.o src/core2b.o src/core3b.o src/core1.o src/core2.o src/core3.o src/title.o src/mesgs.o src/mdcrack.o src/stats.o  src/hash.o src/charset.o
	@echo
	@echo "ok."
	@echo
	@echo
	@echo "to install -- \"make install\""
	@echo "to test -- \"make test/bigtest\""
	@echo


big:
	@echo
	@echo "####  NOTE  #########################################"
	@echo
	@echo "MDcrack is compiling for big endian processors."
	@echo
	@echo "Try: \"make\" if u need a little endian binary."
	@echo
	@make bin/mdcrack MDARCH="-DISBIG_ENDIAN=1"



src/core1.o: src/generic.h src/core1.c 
	$(CC)  -c $(CFLAGS) $(NCURSES) $(CPU) $(MDCRACK_OPTS) $(MDARCH) $(BLOCK) src/core1.c -o src/core1.o

src/core2.o: src/generic.h src/core2.c 
	$(CC)  -c $(CFLAGS) $(NCURSES) $(CPU) $(MDCRACK_OPTS) $(MDARCH) $(BLOCK) src/core2.c -o src/core2.o

src/core3.o: src/generic.h src/core3.c 
	$(CC)  -c $(CFLAGS) $(NCURSES) $(CPU) $(MDCRACK_OPTS) $(MDARCH) $(BLOCK) src/core3.c -o src/core3.o


src/core1b.o: src/generic.h src/core1b.c
	$(CC)  -c $(CFLAGS) $(NCURSES) $(CPU) $(MDCRACK_OPTS) $(MDARCH) $(BLOCK) src/core1b.c -o src/core1b.o

src/core2b.o: src/generic.h src/core2b.c
	$(CC)  -c $(CFLAGS) $(NCURSES) $(CPU) $(MDCRACK_OPTS) $(MDARCH) $(BLOCK) src/core2b.c -o src/core2b.o

src/core3b.o: src/generic.h src/core3b.c
	$(CC)  -c $(CFLAGS) $(NCURSES) $(CPU) $(MDCRACK_OPTS) $(MDARCH) $(BLOCK) src/core3b.c -o src/core3b.o

src/md5c.o: src/generic.h src/md5c.c
	$(CC)  -c $(CFLAGS) $(NCURSES) $(CPU) $(MDCRACK_OPTS) $(MDARCH) $(BLOCK) src/md5c.c -o src/md5c.o

src/mdcrack.o: src/generic.h src/mdcrack.c 
	$(CC)  -c $(CFLAGS) $(NCURSES) $(CPU) $(MDCRACK_OPTS) $(MDARCH) $(BLOCK) src/mdcrack.c -o src/mdcrack.o

src/title.o: src/generic.h src/title.c 
	$(CC)  -c $(CFLAGS) $(NCURSES) $(CPU) $(MDCRACK_OPTS) $(MDARCH) $(BLOCK) src/title.c -o src/title.o

src/stats.o: src/generic.h src/stats.c
	$(CC) -c $(MDFLAGS) $(NCURSES) $(CPU) $(CFLAGS) $(MDARCH) src/stats.c -o src/stats.o

src/mesgs.o: src/generic.h src/version.h src/mesgs.c
	$(CC) -c $(MDFLAGS) $(NCURSES) $(CPU) $(CFLAGS) $(MDARCH) src/mesgs.c -o src/mesgs.o

src/hash.o: src/hash.c
	$(CC) -c $(MDFLAGS) $(NCURSES) $(CPU) $(CFLAGS) $(MDARCH) src/hash.c -o src/hash.o

src/charset.o: src/charset.c
	$(CC) -c $(MDFLAGS) $(NCURSES) $(CPU) $(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 so 3 different levels of code optimization.
#A randomizer string follows the password.


core1:
	@make default
	@echo
	@echo  "Core 1 (password <= 12) : Cracking \"hack\" string with [a-z0-9] charset."
	@echo
	bin/mdcrack -s abcdefghijklmnopqrstuvwxyz0123456789 d78b6f30225cdc811adfe8d4e7c9fd34 
	@echo
	@echo  "ok."
	@echo

core12:
	@make default
	@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   
	@echo
	@echo  "ok."
	@echo


core2:
	@make default
	@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    
	@echo
	@echo  "ok."
	@echo



core3:
	@make default
	@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 
	@echo
	@echo  "ok."
	@echo


core1b:
	@make default
	@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 
	@echo
	@echo  "ok."
	@echo


core1b2:
	@make default
	@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
	@echo
	@echo  "ok."
	@echo


core2b:
	@make default
	@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 
	@echo
	@echo  "ok."
	@echo


core2b2:
	@make default
	@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
	@echo
	@echo  "ok."
	@echo



core3b:
	@make default
	@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
	@echo
	@echo  "ok."
	@echo


core3b2:
	@make default
	@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
	@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  "Cleaning binaries..."
	rm -f src/*.o src/*~ src/*#  
	rm -f bin/*~ bin/mdcrack bin/*#
	@echo
	@echo  "ok."
	@echo

install: 
	@make default
	@echo
	@echo  "Installing mdcrack in /usr/sbin/mdcrack"
	cp bin/mdcrack /usr/sbin/mdcrack
	@echo
	@echo "ok."
	@echo
	@echo "Please send me your benchmark"
	@echo "type: mdcrack -t 10"
	@echo "Wait 10 seconds and note the average speed it reports."
	@echo "Don't forget to add your system configuration (cpu, OS, mdcrack version)"
	@echo "Send it to c3rb3r@hotmail.com"
	@echo
	@echo "good crack ;)"
	@echo
	@echo
	@echo

