1# rcracki_mt is a multithreaded implementation and fork of the original
2# RainbowCrack
3#
4# Copyright Martin Westergaard Jørgensen <martinwj2005@gmail.com>
5# Copyright 2009, 2010 Daniël Niggebrugge <niggebrugge@fox-it.com>
6# Copyright 2009, 2010, 2011, 2012 James Nobis <quel@quelrod.net>
7#
8# This file is part of rcracki_mt.
9#
10# rcracki_mt is free software: you can redistribute it and/or modify
11# it under the terms of the GNU General Public License as published by
12# the Free Software Foundation, either version 2 of the License, or
13# (at your option) any later version.
14#
15# rcracki_mt is distributed in the hope that it will be useful,
16# but WITHOUT ANY WARRANTY; without even the implied warranty of
17# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18# GNU General Public License for more details.
19#
20# You should have received a copy of the GNU General Public License
21# along with rcracki_mt.  If not, see <http://www.gnu.org/licenses/>.
22
23SHELL = /bin/sh
24BIN = $(DESTDIR)/usr/bin
25CXX ?= g++
26# -mtune=native doesn't work on NetBSD 5.1 with gcc 4.1.3 and make (fine with gmake)
27#  -mtune=native doesn't work on OSX either
28#  add -mtune=native to OPTIMIZATION for better performance (if it works)
29OPTIMIZATION = -O3
30INCLUDES = -I. -I/usr/local/include
31CXXFLAGS += -Wall -ansi $(INCLUDES) $(OPTIMIZATION) -c $(DEBUG)
32LFLAGS = -Wall -ansi $(INCLUDES) $(OPTIMIZATION) $(DEBUG)
33# doesn't play well with some distros
34# LFLAGS += -filt
35LIBS = -L/lib -L/usr/lib -L/usr/local/lib -lcrypto -lpthread
36OBJS = BaseRTReader.o ChainWalkContext.o ChainWalkSet.o CrackEngine.o \
37	fast_md4.o fast_md5.o HashAlgorithm.o HashRoutine.o HashSet.o keyspace.o \
38	lm2ntlm.o MemoryPool.o Public.o RainbowCrack.o rcrackiThread.o RTReader.o \
39	RTIReader.o RTI2Reader.o
40COMMON_API_PATH = .
41CUDA_SHARED_PATH = ../../boinc_software/boinc_client_apps/distrrtgen_cuda
42#sha1.o
43WARNALL = -Wextra -Wunused-macros -Wunsafe-loop-optimizations -Wundef -Woverlength-strings -Wdisabled-optimization -Wformat-extra-args -Wformat-security -Winline
44
45OSNAME = $(shell uname -s)
46# apparently --strip-debug works on FreeBSD, Linux, NetBSD, OpenBSD, and NetBSD
47# but not on OSX which only takes the short name -S
48# OpenSolaris effectively uses -x
49# Oh lets just forget this until we have autoconf
50#STRIP = $(shell which strip) -S
51
52#LIBS_Darwin =
53#LIBS_FreeBSD =
54#LIBS_Linux =
55LIBS_NetBSD = -ldes
56#LIBS_OpenBSD =
57#LIBS_SunOS =
58
59LIBS += ${LIBS_$(OSNAME)}
60
61RELEASE_DIR = rcracki_mt_0.7.0_src
62
63#all: rcracki_mt strip
64all: rcracki_mt
65
66gui: CXXFLAGS += -DGUI=1
67gui: CXXFLAGS += -I../rcracki_mt-gui/gui
68gui: CXXFLAGS += $(shell pkg-config --cflags gtk+-2.0)
69gui: LFLAGS += $(shell pkg-config --libs gtk+-2.0)
70gui: $(OBJS)
71
72rcracki_mt: $(OBJS)
73	$(CXX) $(LFLAGS) $(OBJS) $(LIBS) -o rcracki_mt
74
75clean:
76	rm -f core *.o *.gcno *.gcda *.gcov rcracki_mt rcracki.session \
77		rcracki.progress  rcracki.precalc.0 rcracki.precalc.0.index
78
79debug: DEBUG += -DDEBUG -g
80debug: all
81
82debugall: DEBUG += -DDEBUG -g $(WARNALL)
83debugall: all
84
85dumpasmall: DEBUG += -S -fverbose-asm
86dumpasmall: all
87
88dumpasmprofileuseall: DEBUG += -S -fverbose-asm
89dumpasmprofileuseall: profileuseall
90
91debugprofileuseall: DEBUG += -fprofile-use
92debugprofileuseall: debugall
93
94m32: DEBUG += -m32
95m32: all
96
97m32debug: DEBUG += -m32
98m32debug: debug
99
100m32debugall: DEBUG += -m32
101m32debugall: debugall
102
103m32dumpasmall: DEBUG += -m32
104m32dumpasmall: dumpasmall
105
106m32dumpasmprofileuseall: DEBUG += -S -fverbose-asm -m32
107m32dumpasmprofileuseall: profileuseall
108
109m32profilegenall: DEBUG += -m32
110m32profilegenall: profilegenall
111
112m32profileuseall: DEBUG += -m32
113m32profileuseall: profileuseall
114
115profilegenall: DEBUG += -fprofile-generate $(WARNALL)
116profilegenall: all
117
118profileuseall: DEBUG += -fprofile-use $(WARNALL)
119profileuseall: rcracki_mt
120
121gcovall: DEBUG += -DDEBUG -g -fprofile-arcs -ftest-coverage
122gcovall: rcracki_mt
123
124gprofall: DEBUG += -DDEBUG -g -pg
125gprofall: rcracki_mt
126
127install:
128	install -d $(BIN)
129	install --group=root --owner=root --mode=755 rcracki_mt $(BIN)
130
131release: clean
132	mkdir $(RELEASE_DIR)
133	cp $(COMMON_API_PATH)/architecture.h $(COMMON_API_PATH)/BaseRTReader.* \
134		$(COMMON_API_PATH)/ChainWalkContext.* \
135		$(COMMON_API_PATH)/ChainWalkSet.* CrackEngine.* \
136		$(COMMON_API_PATH)/fast_md5.* $(COMMON_API_PATH)/keyspace.* \
137		$(COMMON_API_PATH)/HashAlgorithm.* $(COMMON_API_PATH)/HashRoutine.* \
138		HashSet.* $(COMMON_API_PATH)/global.h \
139		lm2ntlm.* $(COMMON_API_PATH)/fast_md4.* $(COMMON_API_PATH)/MemoryPool.* \
140		$(COMMON_API_PATH)/Public.* RainbowCrack.* $(CUDA_SHARED_PATH)/rcuda.h \
141		$(CUDA_SHARED_PATH)/rcuda.cu $(CUDA_SHARED_PATH)/rcuda_ext.cpp \
142		$(CUDA_SHARED_PATH)/rcuda_ext.h $(CUDA_SHARED_PATH)/rcuda_lm.inc  \
143		$(CUDA_SHARED_PATH)/rcuda_md4.inc $(CUDA_SHARED_PATH)/rcuda_md5.inc \
144		$(CUDA_SHARED_PATH)/rcuda_ntlm.inc $(CUDA_SHARED_PATH)/rcuda_sha1.inc \
145		rcrackiThread.* $(COMMON_API_PATH)/RTI2Common.* \
146		$(COMMON_API_PATH)/RT*Reader.* sha1.* ChangeLog.txt charset.txt COPYING \
147		INSTALLING.txt README.txt TODO rcracki_mt.ini ../../LICENSE.txt \
148		$(RELEASE_DIR)/
149	cat Makefile | sed 's/..\/..\/common\/rt_api/./' > $(RELEASE_DIR)/Makefile
150	cat Makefile.cuda | sed 's/..\/..\/common\/rt_api/./' | \
151		sed 's/..\/..\/boinc_software\/boinc_client_apps\/distrrtgen_cuda/./' \
152		> $(RELEASE_DIR)/Makefile.cuda
153
154rebuild: clean all
155
156static: DEBUG += -static -static-libgcc
157static: all
158
159#strip:
160#	$(STRIP) rcracki_mt
161
162uninstall:
163	rm -f $(BIN)/rcracki_mt
164
165BaseRTReader.o: $(COMMON_API_PATH)/BaseRTReader.h \
166	$(COMMON_API_PATH)/BaseRTReader.cpp
167	$(CXX) $(CXXFLAGS) $(COMMON_API_PATH)/BaseRTReader.cpp
168
169ChainWalkContext.o: $(COMMON_API_PATH)/ChainWalkContext.h \
170	$(COMMON_API_PATH)/ChainWalkContext.cpp $(COMMON_API_PATH)/HashRoutine.h \
171	$(COMMON_API_PATH)/Public.h
172	$(CXX) $(CXXFLAGS) $(COMMON_API_PATH)/ChainWalkContext.cpp
173
174ChainWalkSet.o: $(COMMON_API_PATH)/Public.h $(COMMON_API_PATH)/ChainWalkSet.h \
175	$(COMMON_API_PATH)/ChainWalkSet.cpp
176	$(CXX) $(CXXFLAGS) $(COMMON_API_PATH)/ChainWalkSet.cpp
177
178CrackEngine.o: $(COMMON_API_PATH)/Public.h HashSet.h \
179	$(COMMON_API_PATH)/ChainWalkContext.h $(COMMON_API_PATH)/MemoryPool.h \
180	$(COMMON_API_PATH)/ChainWalkSet.h rcrackiThread.h \
181	$(COMMON_API_PATH)/RTReader.h $(COMMON_API_PATH)/RTIReader.h \
182	$(COMMON_API_PATH)/RTI2Reader.h CrackEngine.h CrackEngine.cpp
183	$(CXX) $(CXXFLAGS) CrackEngine.cpp
184
185fast_md5.o: $(COMMON_API_PATH)/fast_md5.h $(COMMON_API_PATH)/fast_md5.cpp \
186	$(COMMON_API_PATH)/global.h
187	$(CXX) $(CXXFLAGS) $(COMMON_API_PATH)/fast_md5.cpp
188
189#HashAlgorithm.o: $(COMMON_API_PATH)/HashAlgorithm.h HashAlgorithm.cpp \
190	$(COMMON_API_PATH)/Public.h $(COMMON_API_PATH)/fast_md5.h \
191	$(COMMON_API_PATH)/fast_md4.h sha1.h
192HashAlgorithm.o: $(COMMON_API_PATH)/HashAlgorithm.h \
193	$(COMMON_API_PATH)/HashAlgorithm.cpp $(COMMON_API_PATH)/Public.h \
194	$(COMMON_API_PATH)/fast_md5.h $(COMMON_API_PATH)/fast_md4.h
195	$(CXX) $(CXXFLAGS) $(COMMON_API_PATH)/HashAlgorithm.cpp
196
197HashRoutine.o: $(COMMON_API_PATH)/HashRoutine.h \
198	$(COMMON_API_PATH)/HashRoutine.cpp $(COMMON_API_PATH)/global.h \
199	$(COMMON_API_PATH)/HashAlgorithm.h
200	$(CXX) $(CXXFLAGS) $(COMMON_API_PATH)/HashRoutine.cpp
201
202HashSet.o: HashSet.h HashSet.cpp $(COMMON_API_PATH)/Public.h
203	$(CXX) $(CXXFLAGS) HashSet.cpp
204
205keyspace.o: $(COMMON_API_PATH)/keyspace.h $(COMMON_API_PATH)/global.h \
206	$(COMMON_API_PATH)/architecture.h
207	$(CXX) $(CXXFLAGS) $(COMMON_API_PATH)/keyspace.cpp
208
209lm2ntlm.o: lm2ntlm.h lm2ntlm.cpp $(COMMON_API_PATH)/Public.h \
210	$(COMMON_API_PATH)/fast_md4.h
211	$(CXX) $(CXXFLAGS) lm2ntlm.cpp
212
213fast_md4.o: $(COMMON_API_PATH)/fast_md4.h $(COMMON_API_PATH)/fast_md4.cpp \
214	$(COMMON_API_PATH)/global.h
215	$(CXX) $(CXXFLAGS) $(COMMON_API_PATH)/fast_md4.cpp
216
217MemoryPool.o: $(COMMON_API_PATH)/MemoryPool.h \
218	$(COMMON_API_PATH)/MemoryPool.cpp $(COMMON_API_PATH)/Public.h \
219	$(COMMON_API_PATH)/global.h
220	$(CXX) $(CXXFLAGS) $(COMMON_API_PATH)/MemoryPool.cpp
221
222Public.o: $(COMMON_API_PATH)/Public.h $(COMMON_API_PATH)/Public.cpp \
223	$(COMMON_API_PATH)/global.h
224	$(CXX) $(CXXFLAGS) $(COMMON_API_PATH)/Public.cpp
225
226RainbowCrack.o: RainbowCrack.h RainbowCrack.cpp CrackEngine.h lm2ntlm.h
227	$(CXX) $(CXXFLAGS) RainbowCrack.cpp
228
229rcrackiThread.o: rcrackiThread.h rcrackiThread.cpp \
230	$(COMMON_API_PATH)/ChainWalkContext.h $(COMMON_API_PATH)/Public.h HashSet.h
231	$(CXX) $(CXXFLAGS) rcrackiThread.cpp
232
233RTReader.o: $(COMMON_API_PATH)/RTReader.h $(COMMON_API_PATH)/RTReader.cpp
234	$(CXX) $(CXXFLAGS) $(COMMON_API_PATH)/RTReader.cpp
235
236RTIReader.o: $(COMMON_API_PATH)/RTIReader.h $(COMMON_API_PATH)/RTIReader.cpp
237	$(CXX) $(CXXFLAGS) $(COMMON_API_PATH)/RTIReader.cpp
238
239RTI2Reader.o: $(COMMON_API_PATH)/RTI2Reader.h \
240	$(COMMON_API_PATH)/RTI2Reader.cpp $(COMMON_API_PATH)/BaseRTReader.h
241	$(CXX) $(CXXFLAGS) $(COMMON_API_PATH)/RTI2Reader.cpp
242
243#sha1.o: sha1.h sha1.cpp $(COMMON_API_PATH)/global.h
244#	 $(CXX) $(CXXFLAGS) sha1.cpp
245