1 /*
2 * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
3 * Use is subject to license terms.
4 */
5
6 /*
7 * This program is copyright Alec Muffett 1993. The author disclaims all
8 * responsibility or liability with respect to it's usage or its effect
9 * upon hardware or computer systems, and maintains copyright as set out
10 * in the "LICENCE" document which accompanies distributions of Crack v4.0
11 * and upwards.
12 */
13
14 #include "packer.h"
15
16
17 static char *r_destructors[] = {
18 ":", /* noop - must do this to test raw word. */
19 "[", /* trimming leading/trailing junk */
20 "]",
21 "[[",
22 "]]",
23 "[[[",
24 "]]]",
25
26 "/?p@?p", /* purging out punctuation/symbols/junk */
27 "/?s@?s",
28 "/?X@?X",
29 /* attempt reverse engineering of password strings */
30 "/$s$s",
31 "/$s$s/0s0o",
32 "/$s$s/0s0o/2s2a",
33 "/$s$s/0s0o/2s2a/3s3e",
34 "/$s$s/0s0o/2s2a/3s3e/5s5s",
35 "/$s$s/0s0o/2s2a/3s3e/5s5s/1s1i",
36 "/$s$s/0s0o/2s2a/3s3e/5s5s/1s1l",
37 "/$s$s/0s0o/2s2a/3s3e/5s5s/1s1i/4s4a",
38 "/$s$s/0s0o/2s2a/3s3e/5s5s/1s1i/4s4h",
39 "/$s$s/0s0o/2s2a/3s3e/5s5s/1s1l/4s4a",
40 "/$s$s/0s0o/2s2a/3s3e/5s5s/1s1l/4s4h",
41 "/$s$s/0s0o/2s2a/3s3e/5s5s/4s4a",
42 "/$s$s/0s0o/2s2a/3s3e/5s5s/4s4h",
43 "/$s$s/0s0o/2s2a/3s3e/5s5s/4s4a",
44 "/$s$s/0s0o/2s2a/3s3e/5s5s/4s4h",
45 "/$s$s/0s0o/2s2a/3s3e/1s1i",
46 "/$s$s/0s0o/2s2a/3s3e/1s1l",
47 "/$s$s/0s0o/2s2a/3s3e/1s1i/4s4a",
48 "/$s$s/0s0o/2s2a/3s3e/1s1i/4s4h",
49 "/$s$s/0s0o/2s2a/3s3e/1s1l/4s4a",
50 "/$s$s/0s0o/2s2a/3s3e/1s1l/4s4h",
51 "/$s$s/0s0o/2s2a/3s3e/4s4a",
52 "/$s$s/0s0o/2s2a/3s3e/4s4h",
53 "/$s$s/0s0o/2s2a/3s3e/4s4a",
54 "/$s$s/0s0o/2s2a/3s3e/4s4h",
55 "/$s$s/0s0o/2s2a/5s5s",
56 "/$s$s/0s0o/2s2a/5s5s/1s1i",
57 "/$s$s/0s0o/2s2a/5s5s/1s1l",
58 "/$s$s/0s0o/2s2a/5s5s/1s1i/4s4a",
59 "/$s$s/0s0o/2s2a/5s5s/1s1i/4s4h",
60 "/$s$s/0s0o/2s2a/5s5s/1s1l/4s4a",
61 "/$s$s/0s0o/2s2a/5s5s/1s1l/4s4h",
62 "/$s$s/0s0o/2s2a/5s5s/4s4a",
63 "/$s$s/0s0o/2s2a/5s5s/4s4h",
64 "/$s$s/0s0o/2s2a/5s5s/4s4a",
65 "/$s$s/0s0o/2s2a/5s5s/4s4h",
66 "/$s$s/0s0o/2s2a/1s1i",
67 "/$s$s/0s0o/2s2a/1s1l",
68 "/$s$s/0s0o/2s2a/1s1i/4s4a",
69 "/$s$s/0s0o/2s2a/1s1i/4s4h",
70 "/$s$s/0s0o/2s2a/1s1l/4s4a",
71 "/$s$s/0s0o/2s2a/1s1l/4s4h",
72 "/$s$s/0s0o/2s2a/4s4a",
73 "/$s$s/0s0o/2s2a/4s4h",
74 "/$s$s/0s0o/2s2a/4s4a",
75 "/$s$s/0s0o/2s2a/4s4h",
76 "/$s$s/0s0o/3s3e",
77 "/$s$s/0s0o/3s3e/5s5s",
78 "/$s$s/0s0o/3s3e/5s5s/1s1i",
79 "/$s$s/0s0o/3s3e/5s5s/1s1l",
80 "/$s$s/0s0o/3s3e/5s5s/1s1i/4s4a",
81 "/$s$s/0s0o/3s3e/5s5s/1s1i/4s4h",
82 "/$s$s/0s0o/3s3e/5s5s/1s1l/4s4a",
83 "/$s$s/0s0o/3s3e/5s5s/1s1l/4s4h",
84 "/$s$s/0s0o/3s3e/5s5s/4s4a",
85 "/$s$s/0s0o/3s3e/5s5s/4s4h",
86 "/$s$s/0s0o/3s3e/5s5s/4s4a",
87 "/$s$s/0s0o/3s3e/5s5s/4s4h",
88 "/$s$s/0s0o/3s3e/1s1i",
89 "/$s$s/0s0o/3s3e/1s1l",
90 "/$s$s/0s0o/3s3e/1s1i/4s4a",
91 "/$s$s/0s0o/3s3e/1s1i/4s4h",
92 "/$s$s/0s0o/3s3e/1s1l/4s4a",
93 "/$s$s/0s0o/3s3e/1s1l/4s4h",
94 "/$s$s/0s0o/3s3e/4s4a",
95 "/$s$s/0s0o/3s3e/4s4h",
96 "/$s$s/0s0o/3s3e/4s4a",
97 "/$s$s/0s0o/3s3e/4s4h",
98 "/$s$s/0s0o/5s5s",
99 "/$s$s/0s0o/5s5s/1s1i",
100 "/$s$s/0s0o/5s5s/1s1l",
101 "/$s$s/0s0o/5s5s/1s1i/4s4a",
102 "/$s$s/0s0o/5s5s/1s1i/4s4h",
103 "/$s$s/0s0o/5s5s/1s1l/4s4a",
104 "/$s$s/0s0o/5s5s/1s1l/4s4h",
105 "/$s$s/0s0o/5s5s/4s4a",
106 "/$s$s/0s0o/5s5s/4s4h",
107 "/$s$s/0s0o/5s5s/4s4a",
108 "/$s$s/0s0o/5s5s/4s4h",
109 "/$s$s/0s0o/1s1i",
110 "/$s$s/0s0o/1s1l",
111 "/$s$s/0s0o/1s1i/4s4a",
112 "/$s$s/0s0o/1s1i/4s4h",
113 "/$s$s/0s0o/1s1l/4s4a",
114 "/$s$s/0s0o/1s1l/4s4h",
115 "/$s$s/0s0o/4s4a",
116 "/$s$s/0s0o/4s4h",
117 "/$s$s/0s0o/4s4a",
118 "/$s$s/0s0o/4s4h",
119 "/$s$s/2s2a",
120 "/$s$s/2s2a/3s3e",
121 "/$s$s/2s2a/3s3e/5s5s",
122 "/$s$s/2s2a/3s3e/5s5s/1s1i",
123 "/$s$s/2s2a/3s3e/5s5s/1s1l",
124 "/$s$s/2s2a/3s3e/5s5s/1s1i/4s4a",
125 "/$s$s/2s2a/3s3e/5s5s/1s1i/4s4h",
126 "/$s$s/2s2a/3s3e/5s5s/1s1l/4s4a",
127 "/$s$s/2s2a/3s3e/5s5s/1s1l/4s4h",
128 "/$s$s/2s2a/3s3e/5s5s/4s4a",
129 "/$s$s/2s2a/3s3e/5s5s/4s4h",
130 "/$s$s/2s2a/3s3e/5s5s/4s4a",
131 "/$s$s/2s2a/3s3e/5s5s/4s4h",
132 "/$s$s/2s2a/3s3e/1s1i",
133 "/$s$s/2s2a/3s3e/1s1l",
134 "/$s$s/2s2a/3s3e/1s1i/4s4a",
135 "/$s$s/2s2a/3s3e/1s1i/4s4h",
136 "/$s$s/2s2a/3s3e/1s1l/4s4a",
137 "/$s$s/2s2a/3s3e/1s1l/4s4h",
138 "/$s$s/2s2a/3s3e/4s4a",
139 "/$s$s/2s2a/3s3e/4s4h",
140 "/$s$s/2s2a/3s3e/4s4a",
141 "/$s$s/2s2a/3s3e/4s4h",
142 "/$s$s/2s2a/5s5s",
143 "/$s$s/2s2a/5s5s/1s1i",
144 "/$s$s/2s2a/5s5s/1s1l",
145 "/$s$s/2s2a/5s5s/1s1i/4s4a",
146 "/$s$s/2s2a/5s5s/1s1i/4s4h",
147 "/$s$s/2s2a/5s5s/1s1l/4s4a",
148 "/$s$s/2s2a/5s5s/1s1l/4s4h",
149 "/$s$s/2s2a/5s5s/4s4a",
150 "/$s$s/2s2a/5s5s/4s4h",
151 "/$s$s/2s2a/5s5s/4s4a",
152 "/$s$s/2s2a/5s5s/4s4h",
153 "/$s$s/2s2a/1s1i",
154 "/$s$s/2s2a/1s1l",
155 "/$s$s/2s2a/1s1i/4s4a",
156 "/$s$s/2s2a/1s1i/4s4h",
157 "/$s$s/2s2a/1s1l/4s4a",
158 "/$s$s/2s2a/1s1l/4s4h",
159 "/$s$s/2s2a/4s4a",
160 "/$s$s/2s2a/4s4h",
161 "/$s$s/2s2a/4s4a",
162 "/$s$s/2s2a/4s4h",
163 "/$s$s/3s3e",
164 "/$s$s/3s3e/5s5s",
165 "/$s$s/3s3e/5s5s/1s1i",
166 "/$s$s/3s3e/5s5s/1s1l",
167 "/$s$s/3s3e/5s5s/1s1i/4s4a",
168 "/$s$s/3s3e/5s5s/1s1i/4s4h",
169 "/$s$s/3s3e/5s5s/1s1l/4s4a",
170 "/$s$s/3s3e/5s5s/1s1l/4s4h",
171 "/$s$s/3s3e/5s5s/4s4a",
172 "/$s$s/3s3e/5s5s/4s4h",
173 "/$s$s/3s3e/5s5s/4s4a",
174 "/$s$s/3s3e/5s5s/4s4h",
175 "/$s$s/3s3e/1s1i",
176 "/$s$s/3s3e/1s1l",
177 "/$s$s/3s3e/1s1i/4s4a",
178 "/$s$s/3s3e/1s1i/4s4h",
179 "/$s$s/3s3e/1s1l/4s4a",
180 "/$s$s/3s3e/1s1l/4s4h",
181 "/$s$s/3s3e/4s4a",
182 "/$s$s/3s3e/4s4h",
183 "/$s$s/3s3e/4s4a",
184 "/$s$s/3s3e/4s4h",
185 "/$s$s/5s5s",
186 "/$s$s/5s5s/1s1i",
187 "/$s$s/5s5s/1s1l",
188 "/$s$s/5s5s/1s1i/4s4a",
189 "/$s$s/5s5s/1s1i/4s4h",
190 "/$s$s/5s5s/1s1l/4s4a",
191 "/$s$s/5s5s/1s1l/4s4h",
192 "/$s$s/5s5s/4s4a",
193 "/$s$s/5s5s/4s4h",
194 "/$s$s/5s5s/4s4a",
195 "/$s$s/5s5s/4s4h",
196 "/$s$s/1s1i",
197 "/$s$s/1s1l",
198 "/$s$s/1s1i/4s4a",
199 "/$s$s/1s1i/4s4h",
200 "/$s$s/1s1l/4s4a",
201 "/$s$s/1s1l/4s4h",
202 "/$s$s/4s4a",
203 "/$s$s/4s4h",
204 "/$s$s/4s4a",
205 "/$s$s/4s4h",
206 "/0s0o",
207 "/0s0o/2s2a",
208 "/0s0o/2s2a/3s3e",
209 "/0s0o/2s2a/3s3e/5s5s",
210 "/0s0o/2s2a/3s3e/5s5s/1s1i",
211 "/0s0o/2s2a/3s3e/5s5s/1s1l",
212 "/0s0o/2s2a/3s3e/5s5s/1s1i/4s4a",
213 "/0s0o/2s2a/3s3e/5s5s/1s1i/4s4h",
214 "/0s0o/2s2a/3s3e/5s5s/1s1l/4s4a",
215 "/0s0o/2s2a/3s3e/5s5s/1s1l/4s4h",
216 "/0s0o/2s2a/3s3e/5s5s/4s4a",
217 "/0s0o/2s2a/3s3e/5s5s/4s4h",
218 "/0s0o/2s2a/3s3e/5s5s/4s4a",
219 "/0s0o/2s2a/3s3e/5s5s/4s4h",
220 "/0s0o/2s2a/3s3e/1s1i",
221 "/0s0o/2s2a/3s3e/1s1l",
222 "/0s0o/2s2a/3s3e/1s1i/4s4a",
223 "/0s0o/2s2a/3s3e/1s1i/4s4h",
224 "/0s0o/2s2a/3s3e/1s1l/4s4a",
225 "/0s0o/2s2a/3s3e/1s1l/4s4h",
226 "/0s0o/2s2a/3s3e/4s4a",
227 "/0s0o/2s2a/3s3e/4s4h",
228 "/0s0o/2s2a/3s3e/4s4a",
229 "/0s0o/2s2a/3s3e/4s4h",
230 "/0s0o/2s2a/5s5s",
231 "/0s0o/2s2a/5s5s/1s1i",
232 "/0s0o/2s2a/5s5s/1s1l",
233 "/0s0o/2s2a/5s5s/1s1i/4s4a",
234 "/0s0o/2s2a/5s5s/1s1i/4s4h",
235 "/0s0o/2s2a/5s5s/1s1l/4s4a",
236 "/0s0o/2s2a/5s5s/1s1l/4s4h",
237 "/0s0o/2s2a/5s5s/4s4a",
238 "/0s0o/2s2a/5s5s/4s4h",
239 "/0s0o/2s2a/5s5s/4s4a",
240 "/0s0o/2s2a/5s5s/4s4h",
241 "/0s0o/2s2a/1s1i",
242 "/0s0o/2s2a/1s1l",
243 "/0s0o/2s2a/1s1i/4s4a",
244 "/0s0o/2s2a/1s1i/4s4h",
245 "/0s0o/2s2a/1s1l/4s4a",
246 "/0s0o/2s2a/1s1l/4s4h",
247 "/0s0o/2s2a/4s4a",
248 "/0s0o/2s2a/4s4h",
249 "/0s0o/2s2a/4s4a",
250 "/0s0o/2s2a/4s4h",
251 "/0s0o/3s3e",
252 "/0s0o/3s3e/5s5s",
253 "/0s0o/3s3e/5s5s/1s1i",
254 "/0s0o/3s3e/5s5s/1s1l",
255 "/0s0o/3s3e/5s5s/1s1i/4s4a",
256 "/0s0o/3s3e/5s5s/1s1i/4s4h",
257 "/0s0o/3s3e/5s5s/1s1l/4s4a",
258 "/0s0o/3s3e/5s5s/1s1l/4s4h",
259 "/0s0o/3s3e/5s5s/4s4a",
260 "/0s0o/3s3e/5s5s/4s4h",
261 "/0s0o/3s3e/5s5s/4s4a",
262 "/0s0o/3s3e/5s5s/4s4h",
263 "/0s0o/3s3e/1s1i",
264 "/0s0o/3s3e/1s1l",
265 "/0s0o/3s3e/1s1i/4s4a",
266 "/0s0o/3s3e/1s1i/4s4h",
267 "/0s0o/3s3e/1s1l/4s4a",
268 "/0s0o/3s3e/1s1l/4s4h",
269 "/0s0o/3s3e/4s4a",
270 "/0s0o/3s3e/4s4h",
271 "/0s0o/3s3e/4s4a",
272 "/0s0o/3s3e/4s4h",
273 "/0s0o/5s5s",
274 "/0s0o/5s5s/1s1i",
275 "/0s0o/5s5s/1s1l",
276 "/0s0o/5s5s/1s1i/4s4a",
277 "/0s0o/5s5s/1s1i/4s4h",
278 "/0s0o/5s5s/1s1l/4s4a",
279 "/0s0o/5s5s/1s1l/4s4h",
280 "/0s0o/5s5s/4s4a",
281 "/0s0o/5s5s/4s4h",
282 "/0s0o/5s5s/4s4a",
283 "/0s0o/5s5s/4s4h",
284 "/0s0o/1s1i",
285 "/0s0o/1s1l",
286 "/0s0o/1s1i/4s4a",
287 "/0s0o/1s1i/4s4h",
288 "/0s0o/1s1l/4s4a",
289 "/0s0o/1s1l/4s4h",
290 "/0s0o/4s4a",
291 "/0s0o/4s4h",
292 "/0s0o/4s4a",
293 "/0s0o/4s4h",
294 "/2s2a",
295 "/2s2a/3s3e",
296 "/2s2a/3s3e/5s5s",
297 "/2s2a/3s3e/5s5s/1s1i",
298 "/2s2a/3s3e/5s5s/1s1l",
299 "/2s2a/3s3e/5s5s/1s1i/4s4a",
300 "/2s2a/3s3e/5s5s/1s1i/4s4h",
301 "/2s2a/3s3e/5s5s/1s1l/4s4a",
302 "/2s2a/3s3e/5s5s/1s1l/4s4h",
303 "/2s2a/3s3e/5s5s/4s4a",
304 "/2s2a/3s3e/5s5s/4s4h",
305 "/2s2a/3s3e/5s5s/4s4a",
306 "/2s2a/3s3e/5s5s/4s4h",
307 "/2s2a/3s3e/1s1i",
308 "/2s2a/3s3e/1s1l",
309 "/2s2a/3s3e/1s1i/4s4a",
310 "/2s2a/3s3e/1s1i/4s4h",
311 "/2s2a/3s3e/1s1l/4s4a",
312 "/2s2a/3s3e/1s1l/4s4h",
313 "/2s2a/3s3e/4s4a",
314 "/2s2a/3s3e/4s4h",
315 "/2s2a/3s3e/4s4a",
316 "/2s2a/3s3e/4s4h",
317 "/2s2a/5s5s",
318 "/2s2a/5s5s/1s1i",
319 "/2s2a/5s5s/1s1l",
320 "/2s2a/5s5s/1s1i/4s4a",
321 "/2s2a/5s5s/1s1i/4s4h",
322 "/2s2a/5s5s/1s1l/4s4a",
323 "/2s2a/5s5s/1s1l/4s4h",
324 "/2s2a/5s5s/4s4a",
325 "/2s2a/5s5s/4s4h",
326 "/2s2a/5s5s/4s4a",
327 "/2s2a/5s5s/4s4h",
328 "/2s2a/1s1i",
329 "/2s2a/1s1l",
330 "/2s2a/1s1i/4s4a",
331 "/2s2a/1s1i/4s4h",
332 "/2s2a/1s1l/4s4a",
333 "/2s2a/1s1l/4s4h",
334 "/2s2a/4s4a",
335 "/2s2a/4s4h",
336 "/2s2a/4s4a",
337 "/2s2a/4s4h",
338 "/3s3e",
339 "/3s3e/5s5s",
340 "/3s3e/5s5s/1s1i",
341 "/3s3e/5s5s/1s1l",
342 "/3s3e/5s5s/1s1i/4s4a",
343 "/3s3e/5s5s/1s1i/4s4h",
344 "/3s3e/5s5s/1s1l/4s4a",
345 "/3s3e/5s5s/1s1l/4s4h",
346 "/3s3e/5s5s/4s4a",
347 "/3s3e/5s5s/4s4h",
348 "/3s3e/5s5s/4s4a",
349 "/3s3e/5s5s/4s4h",
350 "/3s3e/1s1i",
351 "/3s3e/1s1l",
352 "/3s3e/1s1i/4s4a",
353 "/3s3e/1s1i/4s4h",
354 "/3s3e/1s1l/4s4a",
355 "/3s3e/1s1l/4s4h",
356 "/3s3e/4s4a",
357 "/3s3e/4s4h",
358 "/3s3e/4s4a",
359 "/3s3e/4s4h",
360 "/5s5s",
361 "/5s5s/1s1i",
362 "/5s5s/1s1l",
363 "/5s5s/1s1i/4s4a",
364 "/5s5s/1s1i/4s4h",
365 "/5s5s/1s1l/4s4a",
366 "/5s5s/1s1l/4s4h",
367 "/5s5s/4s4a",
368 "/5s5s/4s4h",
369 "/5s5s/4s4a",
370 "/5s5s/4s4h",
371 "/1s1i",
372 "/1s1l",
373 "/1s1i/4s4a",
374 "/1s1i/4s4h",
375 "/1s1l/4s4a",
376 "/1s1l/4s4h",
377 "/4s4a",
378 "/4s4h",
379 "/4s4a",
380 "/4s4h",
381 /* done */
382 (char *)0
383 };
384
385
386 int
FascistLook(PWDICT * pwp,char * instring)387 FascistLook(PWDICT *pwp, char *instring)
388 {
389 int i;
390 char *password;
391 uint32_t notfound;
392 char rpassword[PATH_MAX];
393
394 notfound = PW_WORDS(pwp);
395
396 (void) strlcpy(rpassword, instring, TRUNCSTRINGSIZE);
397 password = rpassword;
398
399 (void) strcpy(password, Lowercase(password));
400 (void) Trim(password);
401
402 /*
403 * it should be safe to use Mangle with its reliance on PATH_SIZE
404 * since password cannot be longer than TRUNCSTRINGSIZE;
405 * nonetheless this is not an elegant solution
406 */
407
408 for (i = 0; r_destructors[i]; i++) {
409 char *a;
410
411 if (!(a = Mangle(password, r_destructors[i]))) {
412 continue;
413 }
414
415 if (FindPW(pwp, a) != notfound) {
416 return (DICTIONARY_WORD);
417 }
418 }
419
420 (void) strlcpy(password, Reverse(password), PATH_MAX);
421
422 for (i = 0; r_destructors[i]; i++) {
423 char *a;
424
425 if (!(a = Mangle(password, r_destructors[i]))) {
426 continue;
427 }
428 if (FindPW(pwp, a) != notfound) {
429 return (REVERSE_DICTIONARY_WORD);
430 }
431 }
432
433 return (0);
434 }
435
436 int
DictCheck(char * password,char * path)437 DictCheck(char *password, char *path)
438 {
439 PWDICT *pwp;
440 int r;
441
442 if ((pwp = PWOpen(path, "rF")) == NULL)
443 return (DATABASE_OPEN_FAIL);
444
445 r = FascistLook(pwp, password);
446 (void) PWClose(pwp);
447 return (r);
448 }
449