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