home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / misc / volume28 / crack / part02 < prev    next >
Internet Message Format  |  1992-03-19  |  58KB

  1. From: aem@aber.ac.uk (Alec David Muffett)
  2. Newsgroups: comp.sources.misc
  3. Subject: v28i111: crack - The Unix Password Cracker, version 4.1, Part02/05
  4. Message-ID: <1992Mar18.143818.23827@aber.ac.uk>
  5. Date: 18 Mar 92 14:38:18 GMT
  6. Approved: aem@aber.ac.uk
  7. X-Md4-Signature: 354b15df96661b02fa2b9193f3eed296
  8.  
  9. Submitted-by: aem@aber.ac.uk (Alec David Muffett)
  10. Posting-number: Volume 28, Issue 111
  11. Archive-name: crack/part02
  12. Environment: UNIX
  13. Supersedes: crack: Volume 25, Issue 5-9
  14.  
  15. #! /bin/sh
  16. # it by saving it into a file and typing "sh file".  To overwrite existing
  17. # files, type "sh file -c".  You can also feed this as standard input via
  18. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  19. # will see the following message at the end:
  20. #        "End of archive 2 (of 5)."
  21. # Contents:  APPENDIX Crack DictSrc/bad_pws.dat LICENCE
  22. #   Scripts/Crack.network Scripts/dicts.rules Sources/crack-sort.c
  23. # Wrapped by aem@aberfa on Wed Mar 18 14:08:31 1992
  24. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  25. if test -f 'APPENDIX' -a "${1}" != "-c" ; then 
  26.   echo shar: Will not clobber existing file \"'APPENDIX'\"
  27. else
  28. echo shar: Extracting \"'APPENDIX'\" \(13955 characters\)
  29. sed "s/^X//" >'APPENDIX' <<'END_OF_FILE'
  30. XI'd like to thank Chris Samuel and Peter Grandi for all their help in
  31. Xbeta-testing early versions of Crack, and in Peter's case especially,
  32. Xfor dropping me into the deep end of troff. Die, you bastard.  As for
  33. XChris's major contribution, see "Scripts/plaster". 8->
  34. X
  35. XFor the v3.? versions of Crack, I'd like to thank Chris Myers, Randal
  36. XSchwartz, Chris Lewis, and M.Maclaren. Also Brian Tompsett, for
  37. Xpointing me at the now infamous v3.2 bug, and for suggestions, patches,
  38. Xand enormous amounts of debugging information. To him should go the
  39. Xprize for "Most Vociferous Beta Tester Ever".
  40. X
  41. XFor Crack v4.1, the greatest help has come from the members of the crack
  42. Xbeta team, the most vociferous of whom are:
  43. X
  44. Xbrown@gov.llnl.ocelot, cavanaug@edu.uiuc.cogsci.lees,
  45. Xcsx040@uk.ac.coventry.cch, dor@acl.lanl.gov, dowling@gov.ncifcrf,
  46. Xglad@daimi.aau.dk, kint@engr.washington.edu, korz@edu.columbia.cs.bach,
  47. Xmorgan@edu.uky.engr, mycroft@edu.mit.ai.gnu, nelsonm@edu.orst.cs.storm,
  48. Xnestey@edu.colorado.denver.copper, nigelm@uk.ac.york.ohm,
  49. Xpcl@uk.ac.oxford.convex, phil@com.sequent, phill@com.sequent,
  50. Xpkh@uk.ac.nott.cs, sck@com.ibm.watson, shabby@edu.purdue.cc.mentor
  51. X
  52. X- especially Fred "Mr Statistics" Korz, Paul Leyland, and shabby@purdue
  53. Xfor all the debugging info.  Also a bit thanks to Michael Glad for being
  54. Xso helpful while we were writing a decent software interface between
  55. XCrack and UFC.
  56. X
  57. XI also wish to acknowledge the help of Kent Landfield (moderator of
  58. Xcomp.sources.misc) and Dan "COPS" Farmer, both of them for goading me
  59. Xinto releasing a version of Crack with fcrypt() installed. Without
  60. Xthem, I probably would have been too timid...
  61. X
  62. XFinally, my gratitude goes to my girlfriend Gilly, for her support
  63. Xduring the bad times.  You are the everything.
  64. X
  65. X--
  66. XINET: aem@aber.ac.uk       JANET: aem@uk.ac.aber      BITNET: aem%aber@ukacrl
  67. XUUCP: ...!mcsun!ukc!aber!aem          ARPA: aem%uk.ac.aber@nsfnet-relay.ac.uk
  68. XAlec Muffett, Somewhere in the UK, Probably lying under a tree drinking cider
  69. X
  70. X**********************************************************************
  71. X
  72. XSeveral people have asked me why I don't write Crack so that it
  73. Xdistributes dictionaries over the network and hacks the same password
  74. Xfile on each machine, as opposed to spreading users over the network and
  75. Xusing the same dictionaries.
  76. X
  77. XThere are several reasons for this, which I will outline.
  78. X
  79. XThe reasoning that spreading the dictionaries over the network is faster
  80. Xis correct in the case of cracking the passwords of ONE user - it is
  81. Xmost efficient to run different dictionaries on him on several machines,
  82. Xand you will break his password eventually.
  83. X
  84. XScaling this by a factor of 'n' users causes problems.  Firstly, if a
  85. Xmachine guesses one persons password, it must inform all others on the
  86. Xnetwork not to waste time cracking him, but to get on with the other
  87. Xusers.  This is difficult and nasty.
  88. X
  89. XSecondly, it is not what Crack was designed to do.  The name "Crack" is
  90. Xactually a misnomer - Crack really ought to be called "Passwdcheck" or
  91. Xsomething similar, but such names lack sex appeal.
  92. X
  93. XCrack is not a program designed to break the password of every user in
  94. Xthe file.  Rather, it is designed to find weak passwords in the file, by
  95. Xattacking those sorts of bad passwords which are most likely to be used,
  96. Xin the order in which they would most easily be found (ie: are most
  97. Xlikely to be used by a moronic user).
  98. X
  99. XCrack is not designed to break user passwords; it is designed to break
  100. Xpassword files.  This is a subtle but important distinction.
  101. X
  102. XIf you want to break into a safe, you do not take a hammer at every bit
  103. Xof it in turn; instead, first you try some simple combinations, then you
  104. Xtry blowing the hinges off, then you get out an acetylene torch and go
  105. Xfor the bolt.  If that doesnt work, THEN you start on the walls.  You go
  106. Xfor the bits which are most likely to be weak first.
  107. X
  108. XConsider a password file with 'n' users in it.  Say that your ordinary,
  109. Xserial password cracker (eg: the one supplied with COPS) has a
  110. Xdictionary of 1000 words, and tries each word 6 ways (upper/lower/mixed
  111. Xcase, permuted with forwards/backwards)
  112. X
  113. XAlso consider that out of that 1000 users, only one (the last one) has a
  114. Xguessable password - "fred".
  115. X
  116. XAlso say that it takes time 'T' seconds to encrypt a word.
  117. X
  118. XIf you use the "try each user in turn" method, like the COPS password
  119. Xcracker, you will have to wait for a time:-
  120. X
  121. X    999 users * 1000 words * 6 ways * T = 5,994,000 T seconds
  122. X
  123. Xbefore you get to that last user.  Spreading this load around on a
  124. Xnetwork only alleviates the number of words to be searched (divides them
  125. Xby the number of machines you are working on).
  126. X
  127. XThus, if you use 10 machines, the machine which will guess "fred" will
  128. Xget to that last user in:-
  129. X
  130. X    999 * (1000 / 10) * 6 ways = 599,400 T seconds.
  131. X
  132. XAlternatively you can try it the Crack way - "fred" is a word which
  133. Xappears in a forwards dictionary.  You will only wait:-
  134. X
  135. X    999 users * 1000 words * 1st way * T = 999,000 T seconds
  136. X
  137. Xto get to that user.  Now split the users across 10 machines (for
  138. Xsimplicity, as outlined above):-
  139. X
  140. X    (999 / 10) users * 1000 words * 1st way = 99,900 T seconds
  141. X
  142. XTo get to his password, in ONLY 17% of the time taken by networking
  143. Xusing the serial cracking method.  This is only a boundary case, but I
  144. Xhope I have illustrated the concept.
  145. X
  146. X**********************************************************************
  147. X
  148. XCrack has several other optimisations because of its structured password
  149. Xguesses.  The figures below are entirely empirical, but I reckon that
  150. Xthey're as good as any:
  151. X
  152. XThe first pass that Crack makes is over the user data user information
  153. Xgleaned from the users' password field.  In my test file, this gets
  154. Xabout 4% of the passwords (out of a total of 15% guessed).  This pass
  155. Xalso completes very quickly, working as it does from a very small
  156. Xamount of data, but one which is very frequently used for passwords.
  157. X
  158. XThe first sweep of the second pass, consisting of lowercase dictionary
  159. Xwords, gets about another 5% of the passwords. The length of the first
  160. Xsweep depends on how much CPU and how many dictionaries I supply, but
  161. Xusing the Ultrix /usr/dict/words and my bad_pws.dat, over 4 CPUs, it
  162. Xdoesn't take much more that a few hours.
  163. X
  164. XFor the further sweeps, the percentages cracked per sweep tail off, 2%,
  165. X1%, 0.5%...  But they are the people with fairly exotic passwords, and
  166. Xit's only common sense that that they will take some time to crack.
  167. X
  168. X**********************************************************************
  169. X
  170. XThere is another major optimisation that I haven't mentioned.
  171. X
  172. XBecause of the way the UNIX crypt() algorithm works, each encryption is
  173. X"salted" with a two letter sequence which is stored as the first two
  174. Xcharacters of the encrypted password.  This salting means that the word
  175. X"fred" can be encrypted and appear in a password file in (literally)
  176. Xthousands of different ways - so long as each encryption has a
  177. Xdifferent salt.
  178. X
  179. XHence, it makes sense to do things in this manner:
  180. X
  181. X1) sort and group the input data by encryption salt.
  182. X2) for each different groups' encryption salt
  183. X    * get a dictionary word
  184. X    * encrypt it using that salt (This is the time consuming bit)
  185. X    * compare the encryption with each member of the group with that salt
  186. X    * if it matches, you have guessed that users password.
  187. X
  188. XThis knocks (empirical guesswork time again) up to one third of the
  189. Xdictionary encryptions off - thus saving you 0.3 of the time all the
  190. Xdictionary sweeps would ordinarily take.
  191. X
  192. XCrack gives this statistic when it says
  193. X
  194. X    pwc: Loaded 'n' password entries into 'm' salted lines. (x%)
  195. X
  196. Xwhere 'x' is the percentage of the total passwords loaded which have
  197. Xdifferent salts.
  198. X
  199. X**********************************************************************
  200. X
  201. XSome people have asked me how to generate safe passwords.  This, has
  202. Xbecome a religious issue, and there are now several vociferous
  203. X"password geeks" on USENET, who will say "my method is the best", in
  204. Xthe same way that some mathematicians will try to compare so-called
  205. X"random number generating algorithms".
  206. X
  207. XSuch statements are pointless.  I'm sorry for adding to the confusion,
  208. Xbut I must say that I think they are wrong.
  209. X
  210. XOkay, so I am a security fatalist and a security philosopher, but I am
  211. Xnot going to give and hard and fast answers; rather, I'd like to make
  212. Xsome points and recommendations to the people out there.  Security isn't
  213. Xa tangible thing, it is applied psychology.
  214. X
  215. XThe whole point of a password is to prevent people accessing your
  216. Xsystem, getting into it from outside.  Once someone is inside your
  217. Xsystem, assuming that they have the relevant knowledge of your O/S, it
  218. Xis safest to assume that anyone can get to be 'superuser'.  Your only
  219. Xsecurity once someone is on your system is called "security by
  220. Xobscurity".  If your user has sufficient knowledge, you've "had it".
  221. X
  222. XThe question isn't "How secure can my system be made?".
  223. X
  224. XThe question really should be, "How much do I care, how much can I trust?".
  225. X
  226. XA system can be perfectly secure without any passwords at all, so long
  227. Xas it is in an environment of people who recognise its purpose and
  228. Xdepend on it.  I say this after having had acounts on several 'public'
  229. Xmachines, which could have been taken to bits by any competent Unix
  230. Xperson, but were largely safe - because when someone worked out who did
  231. Xanything nasty, the culprit was ostracised from the community.  There
  232. X_is_ a caveat to this, however.
  233. X
  234. XThe problem is the sort of people who go around the world 'collecting'
  235. Xcomputer accounts and breaking machines, those who have either a
  236. Xchildish mentality or an ulterior motive.
  237. X
  238. XThe former are like the little boys who go around breaking windows and
  239. Xvandalising things 'for kicks'.  They are the ones who see every
  240. Xpassword file as a "NO ENTRY" sign, and therefore, driven by what they
  241. Xthink is anarchy and fun, they break in and smash the place up.  Tell
  242. Xthem that they are behaving like children, and they will behave moreso.
  243. X
  244. XThe latter are driven by personal motives or money.  Their reasons are
  245. Xtoo complex for me to analyse here.
  246. X
  247. XThe 'babyish' hackers need a lesson (which I hope that eventually they
  248. Xlearn) that true anarchy is for the general good, and is best achieved
  249. Xby fiat amongst the community.  USENET is a good example - there is a
  250. Xlot of petty bickering and arguing, but an incredible amount of good
  251. Xcomes out of it.  It is anarchy that the greek philosophers would have
  252. Xapproved of.
  253. X
  254. XWhat I am trying to say is that, when I say that if someone gets into
  255. Xyour system, you've "had it", you should consider whether there is
  256. Xanything to have "had" in the first place.  There is no point in getting
  257. Xyourself paranoid over security - if you do, you'll lose out.  Don't be
  258. Xtoo paranoid.  Be SENSIBLE instead, and secure your system according to
  259. Xit's needs, and not according to some 'holy bible' of absolute security.
  260. X
  261. XIf someone gets into your system, you find out how they did it, patch
  262. Xthe hole, check for back doors, brush yourself off, and start again.
  263. XIt's not the end of the world.
  264. X
  265. XWhat this statement doesn't address (yet) is the needs of system
  266. Xmanagers who have a REAL need for security - be it corporate data or
  267. Xresearch work - on their system.  As I have said before, most O/S's have
  268. Xgaping holes in them that cannot be entirely filled, and so the crackers
  269. Xmust be stopped on the doorstep.  At the password login.
  270. X
  271. XPeople who say that they have a way of generating safe passwords are
  272. Xmisinformed, IMHO.  Saying that the password "wyufwqpl" is secure is as
  273. Xmeaningful as saying that the number "4" is random.  Password security,
  274. Xlike any other form of computer security, is not absolute, but should
  275. Xbe taken in context.
  276. X
  277. XYou can't say that a certain method will provide secure, random
  278. Xpasswords, because, in defining an algorithm to create these passwords,
  279. Xyou will use only a subset of all the possible passwords that could ever
  280. Xexist.  You have shrunk the 'search space' for the passwords.
  281. X
  282. XSomeone merely has to write a password cracker which will search this
  283. Xsmall subset of passwords, in order to break your system.  Passwords
  284. Xgenerated by any algorithm, human or computer based, are merly
  285. Xpseudo-secure, in the same way that numbers can be pseudo-random.  For
  286. Xillustration of this aspect of password security, read the document
  287. X"Password Security, A Case History" by Morris and Thompson.
  288. X
  289. XThere is an incredibly large set of possible passwords in the world, and
  290. Xthe best approach toward choosing a password is not to try to find a way
  291. Xto generate 'secure' passwords - there are no such things - but rather
  292. Xyou should learn to choose passwords which are not easily searched for.
  293. XPasswords which are out of the 'search space' of most password crackers
  294. Xlike 'Crack'.
  295. X
  296. XRead the Crack documentation.  See what sort of things other programs
  297. Xlike Crack would search for.  Think of some yourself.  I am not going to
  298. Xspecifically mention methods, you should really work something out for
  299. Xyourself.
  300. X
  301. XAt the bottom line, the password "fred" is just as secure (random) as
  302. Xthe password "blurflpox"; the only problem is that "fred" is in a more
  303. Xeasily searched part of the "password space".
  304. X
  305. XBoth of these passwords are more easily found than "Dxk&2+15^N" however.
  306. XNow you must ask yourself if you can cope with remembering "Dxk&2+15^N".
  307. X
  308. X**********************************************************************
  309. X
  310. XSome time ago, I was listening to the REM album 'Green' on the way back
  311. Xfrom the Cropredy folk festival, whilst thinking over things to do to
  312. XCrack, and I was struck (not for the first time) by the words of the
  313. Xfirst verse to 'World Leader Pretend':-
  314. X
  315. X    I sit at my table, and wage war upon myself.
  316. X    It seems like it's all, it's all for nothing.
  317. X    I know the barricades, and I know the mortar in the wall
  318. X    I recognise the weapons, I use them well.
  319. X
  320. X    This is my mistake, let me make it good,
  321. X    I raised the wall, and I will be the one to knock it down...
  322. X
  323. X- writing password cracking programs gets to you after a bit.
  324. END_OF_FILE
  325. if test 13955 -ne `wc -c <'APPENDIX'`; then
  326.     echo shar: \"'APPENDIX'\" unpacked with wrong size!
  327. fi
  328. # end of 'APPENDIX'
  329. fi
  330. if test -f 'Crack' -a "${1}" != "-c" ; then 
  331.   echo shar: Will not clobber existing file \"'Crack'\"
  332. else
  333. echo shar: Extracting \"'Crack'\" \(6738 characters\)
  334. sed "s/^X//" >'Crack' <<'END_OF_FILE'
  335. X#!/bin/sh
  336. X
  337. X###
  338. X# This program is copyright Alec Muffett 1991, and is provided as part of
  339. X# the Crack v4.1 Password Cracking package.  The author disclaims all
  340. X# responsibility or liability with respect to it's usage or its effect
  341. X# upon hardware or computer systems, and maintains copyright as set out in
  342. X# the "LICENCE" document which accompanies distributions of Crack v4.0 and
  343. X# upwards. So there...
  344. X###
  345. X
  346. X###
  347. X# CRACK_HOME: You must put DOUBLE QUOTES around this and have /bin/csh if
  348. X# you work relative to ~username - this is the Crack installation directory.
  349. X# (currently developing on "dougal")
  350. X###
  351. X
  352. XCRACK_HOME="~aem/dougal/crack41f"
  353. X
  354. X###
  355. X# CRACK_OUT: This is the directory into which all the password guesser
  356. X# output files are to be stored. This affects only the "out*" files, and
  357. X# not "D*" or "P*", due to restraints on the support scripts.
  358. X###
  359. X
  360. XCRACK_OUT="$CRACK_HOME"
  361. X
  362. X###
  363. X# Umask for security's sake - stops files being world readable (if you
  364. X# don't have it in your .login)
  365. X###
  366. X
  367. Xumask 077
  368. X
  369. X###
  370. X# DEFAULT_BIN : For non-network cracks, you can leave this as 'generic'.
  371. X# Setting this to `arch` is non-portable.
  372. X###
  373. X
  374. XDEFAULT_BIN="generic"
  375. X
  376. X###
  377. X# List of standard dictionaries that you should have to provide words;
  378. X#
  379. X###
  380. X
  381. XSTDDICT="/usr/dict/words"
  382. X
  383. X###
  384. X# Compress: name of a compression prog (compress & pack supported) to be
  385. X# applied to the bigdict to save filespace
  386. X###
  387. X
  388. Xcompress="/usr/ucb/compress"
  389. X
  390. X###
  391. X############### FROM HERE ON IN IT'S ALL MY FAULT ###############
  392. X###
  393. X
  394. Xversion="4.1f RELEASE"            # version number
  395. Xpwl=""                    # user specified
  396. Xdomail=""                # user specified
  397. Xfgnd=""                    # user specified
  398. Xremote=""                # program specified
  399. Xnice=""                    # user specified
  400. Xrcvr=""                    # user specified
  401. Xinputfile="/tmp/pw.$$"            # program specified, also in pwc.c
  402. Xverbose=""                # user specified
  403. Xcf_file="Scripts/network.conf"        # program specified
  404. Xbigdict="Dicts/bigdict"            # program specified
  405. Xlockdict="Dicts/.lockfile"        # program specified
  406. X
  407. XCRACK_HOME_UNRES="$CRACK_HOME"
  408. X
  409. Xif [ -f "/bin/csh" ]            # -x bombs on Ultrix
  410. Xthen
  411. X    CRACK_OUT=` /bin/csh -fc "echo $CRACK_OUT" `
  412. X    CRACK_HOME=` /bin/csh -fc "echo $CRACK_HOME" `
  413. Xfi
  414. X
  415. Xif [ ! -d "$CRACK_OUT" ]
  416. Xthen
  417. X    echo "Warning: CRACK_OUT directory reset to directory '.'"
  418. X    CRACK_OUT="."
  419. Xfi
  420. X
  421. Xexport CRACK_HOME
  422. Xexport CRACK_OUT
  423. Xexport DEFAULT_BIN
  424. Xexport CRACK_HOME_UNRES
  425. X
  426. X###
  427. X# Check existance of a home directory
  428. X###
  429. X
  430. Xif [ "$CRACK_HOME" != "" -a -d "$CRACK_HOME" ]
  431. Xthen
  432. X    cd $CRACK_HOME || exit 1
  433. Xelse
  434. X    echo "Fatal error: the directory $CRACK_HOME does not exist."
  435. X    echo ""
  436. X    echo "Please set the value of CRACK_HOME in the 'Crack' script to the name of
  437. X    echo "the installation directory."
  438. X    echo ""
  439. X    echo "The current working directory is" `pwd`"
  440. X    exit 1
  441. Xfi
  442. X
  443. X###
  444. X# Announce ourselves.
  445. X###
  446. X
  447. Xecho "Crack $version, The Password Cracker (c) Alec D.E. Muffett, 1992"
  448. Xecho "Invoked as: $0 $*"
  449. X
  450. Xif [ $# = 0 ]
  451. Xthen
  452. X    echo "Usage:    $0 [options] [bindir] passwdfile [...]"
  453. X    echo "Or:       $0 -network [options] passwdfile [...]"
  454. X    echo "Options:-"
  455. X    echo "    -v              - to produce verbose output"
  456. X    echo "    -nnicevalue     - to run niced to 'nicevalue'"
  457. X    echo "    -rpointfile     - to recover a crashed-out job"
  458. X    echo "    -Rpointfile     - to recover (with verify) a crashed-out job"
  459. X    echo "    -f        - to run in foreground (output to stdout)"
  460. X    echo "    -m        - to mail the user a warning message if cracked"
  461. X    exit 1
  462. Xfi
  463. X
  464. X###
  465. X# Make the dictionaries. God this is SOOOOO much simpler...
  466. X###
  467. X
  468. Xif [ ! -f $lockdict ]
  469. Xthen
  470. X    echo "Making dictionary $bigdict - This may take some time..."
  471. X    (
  472. X        for dictfile in $STDDICT DictSrc/*
  473. X        do
  474. X            case $dictfile in
  475. X                *.Z)
  476. X                    zcat $dictfile
  477. X                    ;;
  478. X                *.z)
  479. X                    pcat $dictfile
  480. X                    ;;
  481. X                *)
  482. X                    cat $dictfile
  483. X                    ;;
  484. X            esac
  485. X        done
  486. X    ) |
  487. X    grep -v '^#' |
  488. X    sort |
  489. X    uniq > $bigdict
  490. X
  491. X# I do not do "tr A-Z a-z" here because of words like LaTeX and
  492. X# BiCapitalisation, which are potential passwords, but the structure of
  493. X# which would be irrecoverably destroyed by lowercaseing.
  494. X
  495. X    echo touch $lockdict        # for future refs.
  496. X    touch $lockdict
  497. X
  498. X    if [ "x$compress" != "x" -a -f "$compress" ]
  499. X    then
  500. X        echo $compress $bigdict
  501. X        # if this fails, tweak the $compress definition above...
  502. X        $compress $bigdict || exit 1
  503. X    fi
  504. Xelse
  505. X    echo Dictionary Dicts/* intact
  506. Xfi
  507. X
  508. X###
  509. X# Check your invocation...
  510. X###
  511. X
  512. Xif [ "x$1" = "x-network" ]
  513. Xthen
  514. X    shift
  515. X    Scripts/Crack.network $*
  516. X    exit 0
  517. Xfi
  518. X
  519. Xwhile :
  520. Xdo
  521. X    case $1 in
  522. X        -network)
  523. X            echo "Error: -network (if specified) must be first argument"
  524. X            exit 1
  525. X            ;;
  526. X        -X*)
  527. X            remote=$1
  528. X            shift
  529. X            ;;
  530. X        -m*)
  531. X            domail=$1
  532. X            shift
  533. X            ;;
  534. X        -l*)
  535. X            pwl=$1
  536. X            shift
  537. X            ;;
  538. X        -f*)
  539. X            fgnd=$1
  540. X            shift
  541. X            ;;
  542. X        -n*)
  543. X            nice=$1
  544. X            shift
  545. X            ;;
  546. X        -r*)
  547. X            rcvr=$1
  548. X            shift
  549. X            ;;
  550. X        -v*)
  551. X            verbose=$1
  552. X            shift
  553. X            ;;
  554. X        -*)
  555. X            echo "Error: unknown argument $1"
  556. X            shift
  557. X            ;;
  558. X        *)
  559. X            break
  560. X            ;;
  561. X    esac
  562. Xdone
  563. X
  564. X###
  565. X# Test first non-switch argument for existance, hence where to put binaries
  566. X###
  567. X
  568. Xif [ -f "$1" ]
  569. Xthen
  570. X    CRACK_ARCH="$CRACK_HOME/$DEFAULT_BIN"
  571. Xelse
  572. X    CRACK_ARCH="$CRACK_HOME/$1"
  573. X    shift
  574. Xfi
  575. X
  576. Xexport CRACK_ARCH
  577. X
  578. Xecho "Binary directory: $CRACK_ARCH"
  579. X
  580. X###
  581. X# Make the password cracker
  582. X###
  583. X
  584. XScripts/do_pwc $CRACK_ARCH || exit 1
  585. X
  586. X###
  587. X# Process input to the program
  588. X###
  589. X
  590. Xecho "Sorting data for Crack."
  591. X
  592. Xif [ "x$remote" != "x" ]
  593. Xthen
  594. X    cat > $inputfile
  595. Xelse
  596. X    out_init=$CRACK_OUT/out.$$
  597. X
  598. X    Scripts/do_join $out_init $* > $inputfile || exit 1
  599. X
  600. X    if [ "x$domail" != "x" ]
  601. X    then
  602. X        MISCREANTS=`awk '/Guessed/{print $6}' < $out_init`
  603. X        echo Sending Warning Mail to $MISCREANTS
  604. X        Scripts/nastygram $MISCREANTS
  605. X    fi
  606. X
  607. X    if [ "x$fgnd" != "x" ]
  608. X    then
  609. X        cat $out_init || exit 1
  610. X        rm -f $out_init
  611. X    fi
  612. Xfi
  613. X
  614. X###
  615. X# Check the runtime scratch file directory for pwc
  616. X###
  617. X
  618. Xif [ ! -d Runtime ]
  619. Xthen
  620. X    echo "Creating Runtime Directory."
  621. X    mkdir Runtime || exit 1
  622. Xfi
  623. X
  624. X###
  625. X# Kick it off into the background ?
  626. X###
  627. X# This is the message which has drawn the most complaints...  However, I
  628. X# have no way of knowing the name in advance, and I can't have crack-pwc
  629. X# print it on stdout due to hanging file descriptors which bollox a
  630. X# network crack.  Hence I HAVE to be vague...
  631. X###
  632. X
  633. Xflags="$remote $fgnd $XXdomail $pwl $nice $rcvr $verbose -i $inputfile"
  634. X
  635. Xecho "Flags:" $flags Dicts/*
  636. X
  637. Xif [ "x$fgnd" != "x" ]
  638. Xthen
  639. X    echo "Running program in foreground"
  640. X    $CRACK_ARCH/crack-pwc $flags Dicts/* < /dev/null 2>&1
  641. Xelse
  642. X    echo "Running program in background"
  643. X    # Apollos/Suns need first 7 descriptors closed to bg properly
  644. X    # from ksh - hence overkill - AEM
  645. X    nohup $CRACK_ARCH/crack-pwc $flags Dicts/* </dev/null >/dev/null \
  646. X        2>&1 3>&1 4>&1 5>&1 6>&1 7>&1 8>&1 9>&1 &
  647. X    echo "Output will be written to a file in directory $CRACK_OUT"
  648. X    echo "named 'out<something>'"
  649. Xfi
  650. X
  651. Xsleep 1
  652. X
  653. Xtest -f nohup.out && rm nohup.out
  654. X
  655. X###
  656. X# There are horrible timeraces involved in removing $tmpfile, so I dont.
  657. X# Crack-pwc does. Still. Hohum.
  658. X###
  659. X
  660. Xexit 0
  661. END_OF_FILE
  662. if test 6738 -ne `wc -c <'Crack'`; then
  663.     echo shar: \"'Crack'\" unpacked with wrong size!
  664. fi
  665. chmod +x 'Crack'
  666. # end of 'Crack'
  667. fi
  668. if test -f 'DictSrc/bad_pws.dat' -a "${1}" != "-c" ; then 
  669.   echo shar: Will not clobber existing file \"'DictSrc/bad_pws.dat'\"
  670. else
  671. echo shar: Extracting \"'DictSrc/bad_pws.dat'\" \(6524 characters\)
  672. sed "s/^X//" >'DictSrc/bad_pws.dat' <<'END_OF_FILE'
  673. X0
  674. X1
  675. X123456
  676. X12345678
  677. X2
  678. X3
  679. X4
  680. X5
  681. X6
  682. X7
  683. X8
  684. X9
  685. XA
  686. Xa
  687. Xaaa
  688. Xabc
  689. Xabcd
  690. Xabcde
  691. Xabcdef
  692. Xabcdefg
  693. Xabcdefgh
  694. Xacademia
  695. Xacademic
  696. Xaccess
  697. Xada
  698. Xadmin
  699. XAdrian
  700. XAdrianna
  701. Xaerobics
  702. Xairplane
  703. XAlasdair
  704. Xalbany
  705. Xalbatross
  706. XAlbert
  707. XAlex
  708. XAlexander
  709. Xalf
  710. Xalgebra
  711. Xalias
  712. Xaliases
  713. XAlice
  714. XAlicia
  715. XAlisa
  716. XAlison
  717. XAlistair
  718. XAlister
  719. XAllison
  720. Xalpha
  721. Xalphabet
  722. Xama
  723. Xamadeus
  724. XAmanda
  725. XAmber
  726. Xamorphous
  727. XAmy
  728. Xanalog
  729. Xanchor
  730. XAndrea
  731. Xandromache
  732. XAnduin
  733. Xandy
  734. XAngela
  735. XAngie
  736. Xanimal
  737. Xanimals
  738. XAnita
  739. XAnn
  740. XAnna
  741. XAnne
  742. XAnnette
  743. Xanswer
  744. Xanthropogenic
  745. Xanvils
  746. Xanything
  747. XApril
  748. Xaria
  749. Xariadne
  750. XArlene
  751. Xarrow
  752. XArthur
  753. Xasd
  754. Xasdfgh
  755. Xasm
  756. Xasshole
  757. XAthena
  758. Xatmosphere
  759. Xaztecs
  760. Xazure
  761. XB
  762. Xb
  763. Xbacchus
  764. Xbadass
  765. XBailey
  766. Xbanana
  767. Xbananas
  768. Xbandit
  769. Xbanks
  770. XBarbara
  771. Xbarber
  772. Xbaritone
  773. XBart
  774. XBartman
  775. Xbasic
  776. Xbass
  777. Xbassoon
  778. Xbatch
  779. Xbatman
  780. XBBROYGBVGW
  781. Xbeach
  782. Xbeater
  783. Xbeauty
  784. Xbeaver
  785. XBecky
  786. Xbeethoven
  787. Xbeetledrive
  788. Xbeloved
  789. Xbenz
  790. Xbeowulf
  791. Xberkeley
  792. Xberlin
  793. Xberliner
  794. XBeryl
  795. Xbeta
  796. XBeth
  797. XBetsie
  798. XBetty
  799. XBeverly
  800. Xbicameral
  801. XBishop
  802. Xbitch
  803. Xbizzy
  804. XBob
  805. XBongpoo
  806. Xbradley
  807. XBrandi
  808. XBrandy
  809. XBrenda
  810. Xbrian
  811. XBridget
  812. Xbroadway
  813. Xbsd
  814. Xbuggerall
  815. Xbumbling
  816. Xburgess
  817. Xbuzby
  818. XC
  819. Xc
  820. Xcad
  821. XCalvin
  822. XCamille
  823. Xcampanile
  824. XCandi
  825. XCandy
  826. Xcantor
  827. Xcardinal
  828. XCaren
  829. XCarla
  830. XCarmen
  831. Xcarmen
  832. XCarol
  833. XCarole
  834. XCarolina
  835. Xcarolina
  836. XCaroline
  837. XCarrie
  838. Xcarson
  839. Xcascades
  840. Xcastle
  841. Xcat
  842. XCatherine
  843. XCathy
  844. Xcayuga
  845. XCecily
  846. Xceltics
  847. Xcerulean
  848. Xchange
  849. XCharity
  850. XCharles
  851. Xcharles
  852. Xcharming
  853. Xcharon
  854. Xchat
  855. Xcheesecake
  856. Xchem
  857. Xchemistry
  858. Xchess
  859. Xchester
  860. Xchocolate
  861. XChristina
  862. XChristine
  863. XChristy
  864. Xcigar
  865. XCindy
  866. Xcinelli
  867. Xclass
  868. Xclassic
  869. XClaudia
  870. Xcluster
  871. Xclusters
  872. Xcode
  873. Xcoffee
  874. Xcoke
  875. XCollins
  876. Xcollins
  877. Xcommrades
  878. Xcomputer
  879. Xcomrade
  880. Xcomrades
  881. Xcondo
  882. Xcondom
  883. Xconnect
  884. XConnie
  885. Xconsole
  886. Xcookie
  887. Xcookie
  888. Xcooper
  889. XCornelius
  890. Xcornelius
  891. Xcouscous
  892. Xcreate
  893. Xcreation
  894. Xcreator
  895. Xcreosote
  896. Xcretin
  897. Xcriminal
  898. XCristina
  899. XCrystal
  900. Xcshrc
  901. XCynthia
  902. XD
  903. Xd
  904. Xdaemon
  905. XDaisy
  906. XDana
  907. Xdancer
  908. XDaniel
  909. Xdaniel
  910. XDanielle
  911. Xdanny
  912. Xdapper
  913. Xdata
  914. Xdave
  915. XDawn
  916. XDeb
  917. XDebbie
  918. XDeborah
  919. Xdecember
  920. Xdefault
  921. Xdefoe
  922. Xdeluge
  923. XDenise
  924. XDesiree
  925. Xdesperate
  926. Xdevelop
  927. Xdevice
  928. Xdial
  929. XDiana
  930. XDiane
  931. Xdiet
  932. Xdieter
  933. Xdigital
  934. Xdisc
  935. Xdiscbox
  936. Xdiscovery
  937. Xdisk
  938. Xdisney
  939. Xdog
  940. XDoobrie
  941. Xdos
  942. Xdrought
  943. XDulce
  944. XDuncan
  945. XE
  946. Xe
  947. Xeager
  948. Xearth
  949. Xeasier
  950. Xeasy
  951. Xeatme
  952. Xedges
  953. Xedinburgh
  954. Xedwin
  955. XEdwina
  956. Xegghead
  957. Xeiderdown
  958. XEileen
  959. XEinstein
  960. XElaine
  961. XElanor
  962. Xelephant
  963. XElizabeth
  964. XEllen
  965. Xemail
  966. Xemerald
  967. XEmily
  968. XEmmanuel
  969. Xenemy
  970. Xengine
  971. Xengineer
  972. Xenterprise
  973. Xenzyme
  974. XErica
  975. XErika
  976. XErin
  977. Xersatz
  978. Xestablish
  979. Xestate
  980. Xeternity
  981. Xeuclid
  982. Xeugene
  983. XEvelyn
  984. Xextension
  985. XF
  986. Xf
  987. Xfairway
  988. XFelicia
  989. Xfender
  990. Xfermat
  991. Xferrari
  992. Xfidelity
  993. Xfield
  994. Xfile
  995. Xfinite
  996. Xfishers
  997. Xflakes
  998. Xfloat
  999. Xflower
  1000. Xflowers
  1001. Xfoolproof
  1002. Xfootball
  1003. Xforesight
  1004. Xformat
  1005. Xforsythe
  1006. Xfourier
  1007. Xfred
  1008. Xfriend
  1009. Xfrighten
  1010. Xfun
  1011. Xfunction
  1012. Xfungible
  1013. XG
  1014. Xg
  1015. XGabriel
  1016. Xgabriel
  1017. Xgames
  1018. Xgardner
  1019. Xgarfield
  1020. Xgatt
  1021. Xgauss
  1022. XGeorge
  1023. Xgeorge
  1024. XGertrude
  1025. Xgertrude
  1026. Xgibson
  1027. XGilly
  1028. XGina
  1029. XGinger
  1030. Xglacier
  1031. Xgnu
  1032. Xgolf
  1033. Xgolfer
  1034. Xgorgeous
  1035. Xgorges
  1036. Xgosling
  1037. Xgouge
  1038. Xgraham
  1039. Xgrahm
  1040. Xgrass
  1041. Xgroup
  1042. Xgryphon
  1043. Xgucci
  1044. Xguess
  1045. Xguest
  1046. Xguitar
  1047. Xgumption
  1048. Xguntis
  1049. Xgweledigaeth
  1050. XH
  1051. Xh
  1052. Xhack
  1053. Xhacker
  1054. Xhal
  1055. Xhamlet
  1056. Xhandily
  1057. Xhappening
  1058. Xharmony
  1059. Xharold
  1060. XHarvey
  1061. Xhawaii
  1062. XHeather
  1063. Xhebrides
  1064. XHeidi
  1065. Xheinlein
  1066. Xhello
  1067. Xhelp
  1068. Xherbert
  1069. XHiawatha
  1070. Xhibernia
  1071. Xhidden
  1072. XHobbes
  1073. Xhobbit
  1074. XHolly
  1075. Xhomework
  1076. Xhoney
  1077. Xhorse
  1078. Xhorus
  1079. Xhutchins
  1080. Xhydrogen
  1081. XI
  1082. Xibm
  1083. Xiluvben
  1084. Ximbroglio
  1085. Ximperial
  1086. Xinclude
  1087. Xingres
  1088. Xingress
  1089. XIngrid
  1090. Xinna
  1091. Xinnocuous
  1092. Xinternet
  1093. XIrene
  1094. Xirishman
  1095. Xisis
  1096. Xizzy
  1097. XJ
  1098. Xj
  1099. XJackie
  1100. XJane
  1101. XJanet
  1102. XJanice
  1103. XJanie
  1104. Xjapan
  1105. XJasmin
  1106. XJean
  1107. XJeanne
  1108. XJen
  1109. XJenni
  1110. XJennifer
  1111. XJenny
  1112. XJessica
  1113. Xjester
  1114. XJill
  1115. Xjixian
  1116. XJoanne
  1117. XJody
  1118. XJohnny
  1119. Xjohnny
  1120. XJoseph
  1121. XJoshua
  1122. XJoy
  1123. XJoyce
  1124. XJudith
  1125. XJudy
  1126. Xjuggle
  1127. XJulia
  1128. XJulie
  1129. XJune
  1130. Xjupiter
  1131. XK
  1132. Xk
  1133. Xkalajira
  1134. XKaren
  1135. XKarie
  1136. XKarina
  1137. XKate
  1138. XKathleen
  1139. XKathrine
  1140. XKathy
  1141. XKatina
  1142. XKatrina
  1143. XKelly
  1144. XKeri
  1145. Xkermit
  1146. Xkernel
  1147. XKerri
  1148. XKerrie
  1149. XKerry
  1150. Xkey
  1151. XKim
  1152. XKimberly
  1153. Xkipper
  1154. Xkirkland
  1155. XKitten
  1156. Xknight
  1157. XKrista
  1158. XKristen
  1159. XKristi
  1160. XKristie
  1161. XKristin
  1162. XKristine
  1163. XKristy
  1164. XL
  1165. Xl
  1166. Xladle
  1167. Xlager
  1168. Xlambda
  1169. Xlamination
  1170. XLana
  1171. XLara
  1172. Xlarkin
  1173. Xlarry
  1174. XLaura
  1175. Xlazarus
  1176. XLeah
  1177. Xlebesgue
  1178. Xlee
  1179. Xleland
  1180. Xleroy
  1181. XLeslie
  1182. Xlewis
  1183. Xlibrary
  1184. Xlight
  1185. XLinda
  1186. XLisa
  1187. Xlisp
  1188. XLiz
  1189. Xllareggub
  1190. Xlock
  1191. Xlockout
  1192. XLois
  1193. XLori
  1194. XLorin
  1195. XLorraine
  1196. XLouis
  1197. XLouise
  1198. Xlove
  1199. XLucy
  1200. XLynn
  1201. XLynne
  1202. XM
  1203. Xm
  1204. Xmac
  1205. Xmacintosh
  1206. Xmack
  1207. Xmaggot
  1208. Xmagic
  1209. Xmail
  1210. Xmaint
  1211. XMalcolm
  1212. Xmalcom
  1213. Xmanager
  1214. XMara
  1215. XMarci
  1216. XMarcy
  1217. XMaria
  1218. XMarietta
  1219. Xmark
  1220. Xmarkus
  1221. XMarni
  1222. Xmars
  1223. Xmarty
  1224. Xmarvin
  1225. XMary
  1226. Xmaster
  1227. Xmath
  1228. XMaurice
  1229. Xmaurice
  1230. XMeagan
  1231. XMegan
  1232. XMelissa
  1233. Xmellon
  1234. Xmemory
  1235. Xmercury
  1236. Xmerlin
  1237. Xmets
  1238. Xmgr
  1239. XMichael
  1240. Xmichael
  1241. XMichele
  1242. XMichelle
  1243. XMickey
  1244. Xmike
  1245. Xminimum
  1246. Xminsky
  1247. Xmit
  1248. Xmodem
  1249. Xmogul
  1250. Xmoguls
  1251. XMonica
  1252. Xmoose
  1253. Xmorley
  1254. XMortis
  1255. Xmortis
  1256. Xmouse
  1257. Xmozart
  1258. Xmuser
  1259. Xmutant
  1260. XMVEMJSUNP
  1261. XN
  1262. Xn
  1263. Xnagel
  1264. XNancy
  1265. Xnapoleon
  1266. Xnasa
  1267. Xnepenthe
  1268. Xneptune
  1269. Xness
  1270. Xnet
  1271. Xnetwork
  1272. Xnew
  1273. Xnews
  1274. Xnewton
  1275. Xnext
  1276. XNicole
  1277. XNita
  1278. Xnobody
  1279. XNoreen
  1280. Xnoxious
  1281. Xnuclear
  1282. Xnutrition
  1283. Xnyquist
  1284. XO
  1285. Xo
  1286. Xoceanography
  1287. Xocelot
  1288. Xoerhrdle
  1289. Xoffice
  1290. Xolivetti
  1291. XOlivia
  1292. Xolivia
  1293. Xopen
  1294. Xoperator
  1295. Xoracle
  1296. Xorca
  1297. Xorchid
  1298. Xorwell
  1299. Xosiris
  1300. Xoutlaw
  1301. Xoxford
  1302. XP
  1303. Xp
  1304. Xpacific
  1305. Xpad
  1306. Xpainless
  1307. Xpakistan
  1308. XPam
  1309. XPamela
  1310. Xpaper
  1311. Xpapers
  1312. Xpass
  1313. Xpassword
  1314. XPat
  1315. XPatricia
  1316. XPatty
  1317. XPaula
  1318. Xpencil
  1319. XPenelope
  1320. Xpenguin
  1321. Xpenis
  1322. Xpeoria
  1323. Xpercolate
  1324. Xpersimmon
  1325. Xpersona
  1326. Xpete
  1327. Xpeter
  1328. Xphilip
  1329. Xphoenix
  1330. Xphone
  1331. XPierre
  1332. Xpierre
  1333. Xpizza
  1334. Xplane
  1335. Xplayboy
  1336. Xplover
  1337. Xpluto
  1338. Xplymouth
  1339. XPolly
  1340. Xpolynomial
  1341. Xpondering
  1342. Xpork
  1343. Xporsche
  1344. Xposter
  1345. Xpower
  1346. Xpraise
  1347. Xprecious
  1348. Xprelude
  1349. Xpresto
  1350. Xprince
  1351. Xprinceton
  1352. Xpriv
  1353. Xprivate
  1354. Xprivs
  1355. Xprofessor
  1356. Xprofile
  1357. Xprogram
  1358. Xprotect
  1359. Xprotozoa
  1360. Xpub
  1361. Xpublic
  1362. Xpumpkin
  1363. Xpuneet
  1364. Xpuppet
  1365. XQ
  1366. Xq
  1367. Xqwerty
  1368. Xqwertyui
  1369. XR
  1370. Xr
  1371. Xrabbit
  1372. XRachel
  1373. XRachelle
  1374. Xrachmaninoff
  1375. Xrainbow
  1376. Xraindrop
  1377. Xraleigh
  1378. Xrandom
  1379. Xrascal
  1380. Xreagan
  1381. Xreally
  1382. XRebecca
  1383. Xregional
  1384. Xremote
  1385. XRenee
  1386. Xrick
  1387. Xripple
  1388. Xrisc
  1389. Xrje
  1390. XRobin
  1391. Xrobot
  1392. Xrobotics
  1393. XRobyn
  1394. XRochelle
  1395. Xrochester
  1396. Xrodent
  1397. Xrolex
  1398. Xromano
  1399. XRonald
  1400. Xronald
  1401. XRonnie
  1402. Xroot
  1403. XRose
  1404. Xrosebud
  1405. XRosemary
  1406. Xroses
  1407. Xruben
  1408. Xrules
  1409. Xruth
  1410. XS
  1411. Xs
  1412. Xsal
  1413. XSamantha
  1414. XSandra
  1415. XSandy
  1416. XSara
  1417. XSarah
  1418. Xsaturn
  1419. Xsaxon
  1420. Xscamper
  1421. Xscheme
  1422. Xschool
  1423. Xscott
  1424. Xscotty
  1425. Xsecret
  1426. Xsecurity
  1427. Xsensor
  1428. Xserenity
  1429. Xservice
  1430. Xsesame
  1431. Xsex
  1432. XShannon
  1433. Xsharc
  1434. Xshark
  1435. Xsharks
  1436. XSharon
  1437. Xsharon
  1438. Xsheffield
  1439. Xsheldon
  1440. Xshell
  1441. XSherri
  1442. XShirley
  1443. Xshit
  1444. Xshitforbrains
  1445. Xshiva
  1446. Xshivers
  1447. Xshuttle
  1448. Xsignature
  1449. Xsilverlake
  1450. Xsimon
  1451. Xsimple
  1452. Xsimpsons
  1453. Xsinger
  1454. Xsingle
  1455. Xsirte
  1456. Xsmile
  1457. Xsmiles
  1458. Xsmooch
  1459. Xsmother
  1460. XSnarfel
  1461. Xsnatch
  1462. Xsnoopy
  1463. Xsoap
  1464. Xsocrates
  1465. Xsomebody
  1466. XSondra
  1467. XSonia
  1468. XSonya
  1469. Xsossina
  1470. Xsparrows
  1471. Xspit
  1472. Xsplatter
  1473. Xsplodge
  1474. Xspring
  1475. Xspringer
  1476. Xsquires
  1477. XStacey
  1478. XStaci
  1479. XStacie
  1480. XStacy
  1481. XSteph
  1482. XStephanie
  1483. Xstrangle
  1484. Xstratford
  1485. Xstudent
  1486. Xstuttgart
  1487. Xsubway
  1488. Xsuccess
  1489. Xsucker
  1490. Xsummer
  1491. Xsun
  1492. Xsuper
  1493. Xsuperstage
  1494. Xsuperuser
  1495. Xsupport
  1496. Xsupported
  1497. Xsurfer
  1498. XSusan
  1499. XSusanne
  1500. XSusie
  1501. XSuzanne
  1502. XSuzie
  1503. Xswearer
  1504. XSybil
  1505. Xsymmetry
  1506. Xsys
  1507. Xsysadmin
  1508. Xsystem
  1509. XT
  1510. Xt
  1511. XTamara
  1512. XTami
  1513. XTamie
  1514. XTammy
  1515. Xtangerine
  1516. Xtape
  1517. XTara
  1518. Xtarget
  1519. Xtarragon
  1520. Xtaylor
  1521. Xteabag
  1522. Xtech
  1523. Xtelephone
  1524. Xtemptation
  1525. Xtennis
  1526. Xterminal
  1527. Xtest
  1528. Xthailand
  1529. Xthanatos
  1530. XTheresa
  1531. XTiffany
  1532. Xtiger
  1533. XTina
  1534. Xtoggle
  1535. Xtomato
  1536. Xtopography
  1537. Xtortoise
  1538. Xtoxic
  1539. Xtoyota
  1540. XTraci
  1541. XTracie
  1542. XTracy
  1543. Xtrails
  1544. Xtransfer
  1545. XTrisha
  1546. Xtrivial
  1547. Xtrombone
  1548. Xtty
  1549. Xtubas
  1550. Xtuttle
  1551. XU
  1552. Xu
  1553. Xumesh
  1554. Xunhappy
  1555. Xunicorn
  1556. Xunix
  1557. Xunknown
  1558. Xuranus
  1559. Xurchin
  1560. XUrsula
  1561. Xutil
  1562. Xutility
  1563. Xuucp
  1564. XV
  1565. Xv
  1566. XValerie
  1567. Xvasant
  1568. Xvenus
  1569. XVeronica
  1570. Xvertigo
  1571. XVicky
  1572. Xvillage
  1573. Xvirgin
  1574. XVirginia
  1575. Xvisitor
  1576. Xvortex
  1577. XW
  1578. Xw
  1579. Xwargames
  1580. XWarren
  1581. Xwarren
  1582. Xwater
  1583. Xweenie
  1584. XWendi
  1585. XWendy
  1586. Xwhatever
  1587. Xwhatnot
  1588. Xwhiting
  1589. XWhitney
  1590. Xwhitney
  1591. Xwholesale
  1592. Xwill
  1593. XWilliam
  1594. Xwilliam
  1595. Xwilliamsburg
  1596. XWillie
  1597. Xwillie
  1598. XWilma
  1599. Xwinston
  1600. Xwisconsin
  1601. Xwizard
  1602. Xwizzy
  1603. XWOBAFGKMRNS
  1604. Xwombat
  1605. Xwoodwind
  1606. Xword
  1607. Xwork
  1608. Xwormwood
  1609. Xwyoming
  1610. XX
  1611. Xx
  1612. Xxerox
  1613. Xxfer
  1614. Xxmodem
  1615. Xxyz
  1616. XY
  1617. Xy
  1618. Xyaco
  1619. Xyang
  1620. Xyellowstone
  1621. XYolanda
  1622. Xyosemite
  1623. XZ
  1624. Xz
  1625. Xzap
  1626. Xzerox
  1627. Xzimmerman
  1628. Xzmodem
  1629. Xzxcvbn
  1630. END_OF_FILE
  1631. if test 6524 -ne `wc -c <'DictSrc/bad_pws.dat'`; then
  1632.     echo shar: \"'DictSrc/bad_pws.dat'\" unpacked with wrong size!
  1633. fi
  1634. # end of 'DictSrc/bad_pws.dat'
  1635. fi
  1636. if test -f 'LICENCE' -a "${1}" != "-c" ; then 
  1637.   echo shar: Will not clobber existing file \"'LICENCE'\"
  1638. else
  1639. echo shar: Extracting \"'LICENCE'\" \(4775 characters\)
  1640. sed "s/^X//" >'LICENCE' <<'END_OF_FILE'
  1641. X(*
  1642. XThis document is freely plagiarised from the 'Artistic Licence',
  1643. Xdistributed as part of the Perl v4.0 kit by Larry Wall, which is
  1644. Xavailable from most major archive sites
  1645. X*)
  1646. X
  1647. XThis documents purpose is to state the conditions under which this
  1648. XPackage (See definition below) viz: The "Crack" Password Cracker, which
  1649. Xis copyright Alec David Edward Muffett, may be copied, such that the
  1650. XCopyright Holder maintains some semblance of artistic control over the
  1651. Xdevelopment of the package, while giving the users of the package the
  1652. Xright to use and distribute the Package in a more-or-less customary
  1653. Xfashion, plus the right to make reasonable modifications. 
  1654. X
  1655. XSo there.
  1656. X
  1657. X***************************************************************************
  1658. X
  1659. XDefinitions:
  1660. X
  1661. X"Package" refers to the collection of files distributed by the Copyright
  1662. XHolder, and derivatives of that collection of files created through
  1663. Xtextual modification, or segments thereof.
  1664. X
  1665. X"Standard Version" refers to such a Package if it has not been modified,
  1666. Xor has been modified in accordance with the wishes of the Copyright
  1667. XHolder.
  1668. X
  1669. X"Copyright Holder" is whoever is named in the copyright or copyrights
  1670. Xfor the package.
  1671. X
  1672. X"You" is you, if you're thinking about copying or distributing this
  1673. XPackage.
  1674. X
  1675. X"Reasonable copying fee" is whatever you can justify on the basis of
  1676. Xmedia cost, duplication charges, time of people involved, and so on.
  1677. X(You will not be required to justify it to the Copyright Holder, but
  1678. Xonly to the computing community at large as a market that must bear the
  1679. Xfee.)
  1680. X
  1681. X
  1682. X
  1683. X"Freely Available" means that no fee is charged for the item itself,
  1684. Xthough there may be fees involved in handling the item.  It also means
  1685. Xthat recipients of the item may redistribute it under the same
  1686. Xconditions they received it.
  1687. X
  1688. X1.  You may make and give away verbatim copies of the source form of the
  1689. XStandard Version of this Package without restriction, provided that you
  1690. Xduplicate all of the original copyright notices and associated
  1691. Xdisclaimers.
  1692. X
  1693. X2.  You may apply bug fixes, portability fixes and other modifications
  1694. Xderived from the Public Domain or from the Copyright Holder.  A Package
  1695. Xmodified in such a way shall still be considered the Standard Version.
  1696. X
  1697. X3.  You may otherwise modify your copy of this Package in any way,
  1698. Xprovided that you insert a prominent notice in each changed file stating
  1699. Xhow and when AND WHY you changed that file, and provided that you do at
  1700. Xleast ONE of the following:
  1701. X
  1702. Xa) place your modifications in the Public Domain or otherwise make them
  1703. XFreely Available, such as by posting said modifications to Usenet or an
  1704. Xequivalent medium, or placing the modifications on a major archive site
  1705. Xsuch as uunet.uu.net, or by allowing the Copyright Holder to include
  1706. Xyour modifications in the Standard Version of the Package.
  1707. X
  1708. Xb) use the modified Package only within your corporation or
  1709. Xorganization.
  1710. X
  1711. Xc) rename any non-standard executables so the names do not conflict with
  1712. Xstandard executables, which must also be provided, and provide separate
  1713. Xdocumentation for each non-standard executable that clearly documents
  1714. Xhow it differs from the Standard Version.
  1715. X
  1716. Xd) make other distribution arrangements with the Copyright Holder.
  1717. X
  1718. X4.  You may distribute the programs of this Package in object code or
  1719. Xexecutable form, provided that you do at least ONE of the following:
  1720. X
  1721. Xa) distribute a Standard Version of the executables and library files,
  1722. Xtogether with instructions (in the manual page or equivalent) on where
  1723. Xto get the Standard Version.
  1724. X
  1725. Xb) accompany the distribution with the machine-readable source of the
  1726. XPackage with your modifications.
  1727. X
  1728. Xc) accompany any non-standard executables with their corresponding
  1729. XStandard Version executables, giving the non-standard executables
  1730. Xnon-standard names, and clearly documenting the differences in manual
  1731. Xpages (or equivalent), together with instructions on where to get the
  1732. XStandard Version.
  1733. X
  1734. Xd) make other distribution arrangements with the Copyright Holder.
  1735. X
  1736. X5.  You may charge a reasonable copying fee for any distribution of this
  1737. XPackage.  You may charge any fee you choose for support of this Package. 
  1738. XYOU MAY NOT CHARGE A FEE FOR THIS PACKAGE ITSELF.  However, you may
  1739. Xdistribute this Package in aggregate with other (possibly commercial)
  1740. Xprograms as part of a larger (possibly commercial) software distribution
  1741. Xprovided that YOU DO NOT ADVERTISE this package as a product of your
  1742. Xown. 
  1743. X
  1744. X6.  The name of the Copyright Holder may not be used to endorse or
  1745. Xpromote products derived from this software without specific prior
  1746. Xwritten permission.
  1747. X
  1748. X7.  THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
  1749. XWARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  1750. XMERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  1751. X
  1752. X                The End
  1753. END_OF_FILE
  1754. if test 4775 -ne `wc -c <'LICENCE'`; then
  1755.     echo shar: \"'LICENCE'\" unpacked with wrong size!
  1756. fi
  1757. # end of 'LICENCE'
  1758. fi
  1759. if test -f 'Scripts/Crack.network' -a "${1}" != "-c" ; then 
  1760.   echo shar: Will not clobber existing file \"'Scripts/Crack.network'\"
  1761. else
  1762. echo shar: Extracting \"'Scripts/Crack.network'\" \(3786 characters\)
  1763. sed "s/^X//" >'Scripts/Crack.network' <<'END_OF_FILE'
  1764. X#!/bin/sh
  1765. X
  1766. X###
  1767. X# This program is copyright Alec Muffett 1991, and is provided as part of
  1768. X# the Crack v4.0 Password Cracking package.  The author disclaims all
  1769. X# responsibility or liability with respect to it's usage or its effect
  1770. X# upon hardware or computer systems, and maintains copyright as set out in
  1771. X# the "LICENCE" document which accompanies distributions of Crack v4.0 and
  1772. X# upwards. So there...
  1773. X###
  1774. X# This program reads the network.conf and breaks up the sorted password
  1775. X# file and runs RCrack to kick Crack up on all the machines and feeds 
  1776. X# the file to it.
  1777. X###
  1778. X# Okay, if you don't like this bit of code, YOU think of a totally
  1779. X# portable way to do this - in shell scripts without using PERL - Alec.
  1780. X###
  1781. X
  1782. Xcf=Scripts/network.conf
  1783. Xtf=/tmp/mcp.$$
  1784. X
  1785. X###
  1786. X# Check that the config file is in place
  1787. X###
  1788. X
  1789. Xif [ ! -f $cf -o ! -s $cf ]
  1790. Xthen
  1791. X    echo "Crack.network: empty or missing config file: $cf"
  1792. X    exit 1
  1793. Xfi
  1794. X
  1795. X###
  1796. X# Parse arguments
  1797. X###
  1798. X
  1799. Xargs=""
  1800. Xfiles=""
  1801. Xdomail=""
  1802. X
  1803. Xfor i in $*
  1804. Xdo
  1805. X    if [ -f "$i" ]
  1806. X    then
  1807. X        files="$files $i"
  1808. X    else
  1809. X        case $i in
  1810. X            -f*)
  1811. X                echo "Crack: -f option on COMMAND LINE incompatible with networking - Ignored"
  1812. X                ;;
  1813. X            -m*)
  1814. X                domail="$i"
  1815. X                args="$args $i"
  1816. X                ;;
  1817. X            *)
  1818. X                args="$args $i"
  1819. X                ;;
  1820. X        esac
  1821. X    fi
  1822. Xdone
  1823. X
  1824. X###
  1825. X# Get on with your proper job
  1826. X###
  1827. X
  1828. Xecho "Merging input data."
  1829. X
  1830. Xif [ "$CRACK_OUT" != "" ]
  1831. Xthen
  1832. X    warn=$CRACK_OUT/out.$$
  1833. Xelse
  1834. X    warn=out.$$
  1835. Xfi
  1836. X
  1837. XScripts/do_join $warn $files > $tf
  1838. X
  1839. Xif [ "x$domail" != "x" ]
  1840. Xthen
  1841. X    MISCREANTS=`awk '/Guessed/{print $6}' < $warn`
  1842. X    echo Sending Warning Mail to $MISCREANTS
  1843. X    Scripts/nastygram $MISCREANTS
  1844. Xfi
  1845. X
  1846. X###
  1847. X# Statistics gathering
  1848. X###
  1849. X
  1850. Xlines=`wc -l < $tf`
  1851. Xsaltlines=`Scripts/saltcount < $tf`
  1852. X
  1853. X# Must not quote $lines/$saltlines here for comparison to work
  1854. Xif [ $lines = 0 -o $saltlines = 0 ]
  1855. Xthen
  1856. X    echo "Crack: no uncracked input to distribute."
  1857. X    exit 1
  1858. Xfi
  1859. X
  1860. Xecho "Starting analysis for Network-Crack."
  1861. X
  1862. Xcat $cf |
  1863. Xgrep -v '^#' |
  1864. Xgrep -v '^$' |
  1865. Xsort -t: +2 -n |
  1866. Xawk -F: '
  1867. XBEGIN {
  1868. X    hostcount = 0;
  1869. X    totalweight = 0;
  1870. X    linecount = '"$lines"';
  1871. X    saltlinecount = '"$saltlines"';
  1872. X    iargs = "'"$args"'";
  1873. X    file = "'"$tf"'";
  1874. X}
  1875. X
  1876. X/^[a-zA-Z0-9]/ {
  1877. X    hostname[hostcount] = $1;
  1878. X    bintype[hostcount] = $2;
  1879. X    relpow[hostcount] = $3;
  1880. X    powtot += $3;
  1881. X
  1882. X    if (index($6, "-f") == 0)
  1883. X    {
  1884. X        asynch[hostcount] = "";
  1885. X    } else
  1886. X    {
  1887. X        asynch[hostcount] = "-asynch";
  1888. X    }
  1889. X
  1890. X    crackf[hostcount] = $6 " " iargs;  # useropts go second get priority
  1891. X
  1892. X    if ($4 == "")
  1893. X    {
  1894. X        rshuser[hostcount] = "";
  1895. X    } else
  1896. X    {
  1897. X        rshuser[hostcount] = "-l " $4;
  1898. X        crackf[hostcount] = crackf[hostcount] " -U" $4;
  1899. X    }
  1900. X
  1901. X    if ($5 == "")
  1902. X    {
  1903. X        crackp[hostcount] = "$CRACK_HOME_UNRES/Crack";
  1904. X    } else
  1905. X    {
  1906. X        crackp[hostcount] = $5;
  1907. X    }
  1908. X
  1909. X    crackf[hostcount] = iargs " " $6;
  1910. X    hostcount++;
  1911. X}
  1912. X
  1913. XEND {
  1914. X    done = 1;
  1915. X    slice = 0.0;
  1916. X    remainder = 0.0;
  1917. X    todo = saltlinecount;
  1918. X    print "echo Users:", linecount;
  1919. X    print "echo Salts:", saltlinecount;
  1920. X    print "echo Remote Hosts:", hostcount;
  1921. X    print "echo Total power:", powtot;
  1922. X
  1923. X    for (i = 0; i < hostcount; i++)
  1924. X    {
  1925. X        if (i < hostcount - 1)
  1926. X        {
  1927. X# This balancing algorithm by: george@au.edu.monash.cc.moa (George Scott)
  1928. X# its wonderful - AEM
  1929. X            slice = relpow[i] / powtot;        # fraction
  1930. X            slice *= todo;                # percentage
  1931. X            slice = int(slice);            # round down
  1932. X            todo -= slice;                # remainder
  1933. X            powtot -= relpow[i];
  1934. X        } else
  1935. X        {
  1936. X            slice = todo;    # fastest machine gets the rest.
  1937. X            todo = 0;
  1938. X        }
  1939. X        if (slice > 0)
  1940. X        {
  1941. X            print "echo Calling", hostname[i], "for", slice, "different salts";
  1942. X
  1943. X            line = sprintf( \
  1944. X       "Scripts/RCrack %s %d %d %s %s \"%s\" %s %s %s < %s", \
  1945. X                asynch[i], \
  1946. X                done, \
  1947. X                done + slice - 1, \
  1948. X                hostname[i], \
  1949. X                rshuser[i], \
  1950. X                crackp[i], \
  1951. X                "-XRuntime/RD'"$$"'." i, \
  1952. X                crackf[i], \
  1953. X                bintype[i], \
  1954. X                file);
  1955. X#            print "echo", line;
  1956. X            print line;
  1957. X        }
  1958. X        done += slice;
  1959. X    }
  1960. X}' | sh        # I'll bet you didn't expect this...
  1961. X
  1962. Xrm $tf
  1963. Xexit 0
  1964. END_OF_FILE
  1965. if test 3786 -ne `wc -c <'Scripts/Crack.network'`; then
  1966.     echo shar: \"'Scripts/Crack.network'\" unpacked with wrong size!
  1967. fi
  1968. chmod +x 'Scripts/Crack.network'
  1969. # end of 'Scripts/Crack.network'
  1970. fi
  1971. if test -f 'Scripts/dicts.rules' -a "${1}" != "-c" ; then 
  1972.   echo shar: Will not clobber existing file \"'Scripts/dicts.rules'\"
  1973. else
  1974. echo shar: Extracting \"'Scripts/dicts.rules'\" \(10425 characters\)
  1975. sed "s/^X//" >'Scripts/dicts.rules' <<'END_OF_FILE'
  1976. X###
  1977. X# Description file for Crack dictionary processor. ADE Muffett, Mar 1992
  1978. X###
  1979. X# Ordinary Commands:
  1980. X# :    = no-op - do nothing to the input word
  1981. X# <n    = reject word UNLESS it is < n characters long, where n = 0-9a-z
  1982. X# >n    = reject word UNLESS it is > n characters long, where n = 0-9a-z
  1983. X# ^x    = prepend character 'x' to word
  1984. X# $y    = append character 'y' to word
  1985. X# l    = force word to be lowercase
  1986. X# u    = force word to be uppercase
  1987. X# c    = force word to be capitalised
  1988. X# r    = reverse word: "Fred" -> "derF"
  1989. X# d    = duplicate word: "Fred" -> "FredFred"
  1990. X# f    = reflect word: "Fred" -> "FredderF"
  1991. X# p    = make best attempt to pluralise a lowercase word
  1992. X# onx    = overstrike character in position 'n' (start at 0) with character 'x'
  1993. X#      nb: little overflow checking is done, so use '<' and '>' carefully
  1994. X# inx    = insert character 'x' in position 'n' (start at 0) and shift the rest
  1995. X#      of the input string right.
  1996. X#      eg: i3* on "wibble" yields "wib*ble"; i0* on "wibble" yields "*wibble"
  1997. X#      nb: if n > strlen(input), character 'x' will be appended
  1998. X# xnm    = extract substring from position n (start at 0) for up to m characters
  1999. X#      eg: using x27 on "autobogotification" yields "tobogot"
  2000. X#      eg: using x3a on "autobogotification" yields "obogotific" (10 chars)
  2001. X#      nb: little overflow checking is done, so use '<' and '>' carefully
  2002. X###
  2003. X# Commands which may utilise character classes:    (note special use of '?')
  2004. X# sxy    = replace (swap) all 'x' in the word with 'y'
  2005. X# s?cy    = replace all characters of class 'c' in the word with y
  2006. X# @x    = purge all 'x' from the word
  2007. X# @?c    = purge all characters of class 'c' from the word
  2008. X# !y    = reject word if it contains character 'y'
  2009. X# !?c    = reject word if it contains a character in class 'c'
  2010. X# /x    = reject word unless it contains character 'x'
  2011. X# /?c    = reject word unless it contains a character in class 'c'
  2012. X# =nx    = reject word unless char at position 'n' is equal to x
  2013. X# =n?c    = reject word unless char at position 'n' is in class 'c'
  2014. X#      nb: the word always starts at position 0
  2015. X###
  2016. X# Character classes for use in above:
  2017. X# ??    matches "?"
  2018. X# ?v    matches vowels aeiou
  2019. X# ?c    matches consonants bcdfghjklmnpqrstvwxyz
  2020. X# ?w    matches whitespace (space, tab)
  2021. X# ?p    matches punctuation .,:;'"?!`
  2022. X# ?s    matches symbols $%^&*()-_+=|\[]{}#@/~
  2023. X# ?l    matches lowercase letters
  2024. X# ?u    matches uppercase letters
  2025. X# ?d    matches any digit
  2026. X# ?a    matches any letter of the alphabet
  2027. X# ?x    matches any letter of the alphabet, or any digit (ie: is alphanumeric)
  2028. X# The complement of a class may be matched by the uppercase of it's letter
  2029. X# ie: where ?d == DIGITS, ?D == NON-DIGITS, and so on.
  2030. X###
  2031. X# Many people haven't realised that the above is a complete language; ie:
  2032. X# if you want to create a dictionary of short words with "123" appended,
  2033. X# use "<6l$1$2$3".
  2034. X###
  2035. X# A FINAL NOTE: remember that very few users are aware that passwords
  2036. X# stop at 8 chars long; so, while it IS worthwhile to check for words
  2037. X# being 8 or more chars long before appending a character, it is NOT
  2038. X# worthwhile to do the same when prepending characters. Hence:-
  2039. X#
  2040. X#        "williamsburgh"  -> "williams" }\
  2041. X#        "williamsburgh1" -> "williams" }/~~~Will be uniqued.
  2042. X#        "1williamsburgh" -> "1william"
  2043. X#
  2044. X###
  2045. X# So, here we go; try to order these in the order most likely to be a
  2046. X# password. First we try to make selections from the pure alphabetic
  2047. X# words in the dicts, then we get onto the weird stuff.
  2048. X######################################################################
  2049. X
  2050. X# Force every pure alphabetic word lowercase and try it
  2051. X# NOT-CONTAIN ANY NON-ALPHA, LOWERCASE
  2052. X!?Al
  2053. X
  2054. X# Pluralise every significant one of the above
  2055. X# MORE-THAN 2, NOT-CONTAIN ANY NON-ALPHA, LOWERCASE, PLURALISE
  2056. X>2!?Alp
  2057. X
  2058. X# Try variations of anything that is not pure alnum
  2059. X# CONTAIN ANY NON-ALNUM
  2060. X/?X
  2061. X# CONTAIN ANY NON-ALNUM, CONTAIN ANY UPPER, LOWERCASE
  2062. X/?X/?ul
  2063. X
  2064. X# Any alphaword >2 & <8 chars long, append a digit or simple punctuation
  2065. X# since few ppl add non alpha chars to a already non-alpha word
  2066. X# MORE-THAN 2, LESS-THAN 8, NOT ANY NON-ALPHA, LOWERCASE, APPEND <whatever>
  2067. X>2<8!?Al$0
  2068. X>2<8!?Al$1
  2069. X>2<8!?Al$2
  2070. X>2<8!?Al$3
  2071. X>2<8!?Al$4
  2072. X>2<8!?Al$5
  2073. X>2<8!?Al$6
  2074. X>2<8!?Al$7
  2075. X>2<8!?Al$8
  2076. X>2<8!?Al$9
  2077. X>2<8!?Al$!
  2078. X>2<8!?Al$.
  2079. X>2<8!?Al$?
  2080. X>2<8!?Al$ :
  2081. X# trailing colon (no-op) on last line delimits space character.
  2082. X
  2083. X# Lowercase every pure alphabetic word and reverse it
  2084. X# MORE-THAN 2, NOT-CONTAIN ANY NON-ALPHA, LOWERCASE, REVERSE
  2085. X>2!?Alr
  2086. X
  2087. X# Capitalise every pure alnum word (ie: not anything which is not alnum)
  2088. X# MORE-THAN 2, NOT-CONTAIN ANY NON-ALNUM, CAPITALISE
  2089. X>2!?Xc
  2090. X
  2091. X# Anything uppercase
  2092. X# MORE-THAN 2, NOT-CONTAIN ANY NON-ALNUM, UPPERCASE
  2093. X>2!?Xu
  2094. X
  2095. X# Pure alphabetic words with vowels removed which are still fairly long
  2096. X# NOT-CONTAIN ANY NON-ALPHA, CONTAIN ANY VOWEL, PURGE ANY VOWEL, MORE-THAN 3
  2097. X!?A/?v@?v>3
  2098. X
  2099. X# Look, I'm getting really bored of this monotone uppercase typing, so
  2100. X# if it's OK with you, I'll drop the commentaries on each rule. You
  2101. X# should have got the idea by now...
  2102. X
  2103. X# Longish pure words lowercased and reflected
  2104. X>2!?Alf
  2105. X
  2106. X# Words containing whitespace, which is then squeezed out
  2107. X/?w@?w>3
  2108. X
  2109. X# In a similar vein, words with punctuation, squeezed out
  2110. X/?p@?p>3
  2111. X
  2112. X# Reasonably short words, duplicated. eg: "fredfred"
  2113. X>1<7!?Ald
  2114. X
  2115. X###
  2116. X# >From: mycroft@edu.mit.ai.gnu
  2117. X# >In addition to the standard dicts.rules, I use the following set.  You
  2118. X# >can guess what it does.
  2119. X# I've tidied this up a bit (I hope) - alec
  2120. X###
  2121. X>2/asa2l
  2122. X>2/asa4l
  2123. X>2/ese3l
  2124. X>2/hsh4l
  2125. X>2/isi1l
  2126. X>2/lsl1l
  2127. X>2/oso0l
  2128. X>2/sss$l
  2129. X>2/asa2/hsh4l
  2130. X>2/asa2/sss$l
  2131. X>2/asa4/hsh4l
  2132. X>2/ese3/asa2l
  2133. X>2/ese3/asa4l
  2134. X>2/ese3/hsh4l
  2135. X>2/ese3/sss$l
  2136. X>2/isi1/asa2l
  2137. X>2/isi1/asa4l
  2138. X>2/isi1/ese3l
  2139. X>2/isi1/hsh4l
  2140. X>2/isi1/sss$l
  2141. X>2/lsl1/asa2l
  2142. X>2/lsl1/asa4l
  2143. X>2/lsl1/ese3l
  2144. X>2/lsl1/hsh4l
  2145. X>2/lsl1/isi1l
  2146. X>2/lsl1/oso0l
  2147. X>2/lsl1/sss$l
  2148. X>2/oso0/asa2l
  2149. X>2/oso0/asa4l
  2150. X>2/oso0/ese3l
  2151. X>2/oso0/hsh4l
  2152. X>2/oso0/isi1l
  2153. X>2/oso0/sss$l
  2154. X>2/sss$/asa4l
  2155. X>2/sss$/hsh4l
  2156. X>2/asa2/sss$/hsh4l
  2157. X>2/ese3/asa2/hsh4l
  2158. X>2/ese3/asa2/sss$l
  2159. X>2/ese3/asa4/hsh4l
  2160. X>2/ese3/sss$/asa4l
  2161. X>2/ese3/sss$/hsh4l
  2162. X>2/isi1/asa2/hsh4l
  2163. X>2/isi1/asa2/sss$l
  2164. X>2/isi1/asa4/hsh4l
  2165. X>2/isi1/ese3/asa2l
  2166. X>2/isi1/ese3/asa4l
  2167. X>2/isi1/ese3/hsh4l
  2168. X>2/isi1/ese3/sss$l
  2169. X>2/isi1/sss$/asa4l
  2170. X>2/isi1/sss$/hsh4l
  2171. X>2/lsl1/asa2/hsh4l
  2172. X>2/lsl1/asa2/sss$l
  2173. X>2/lsl1/asa4/hsh4l
  2174. X>2/lsl1/ese3/asa2l
  2175. X>2/lsl1/ese3/asa4l
  2176. X>2/lsl1/ese3/hsh4l
  2177. X>2/lsl1/ese3/sss$l
  2178. X>2/lsl1/isi1/asa2l
  2179. X>2/lsl1/isi1/asa4l
  2180. X>2/lsl1/isi1/ese3l
  2181. X>2/lsl1/isi1/hsh4l
  2182. X>2/lsl1/isi1/sss$l
  2183. X>2/lsl1/oso0/asa2l
  2184. X>2/lsl1/oso0/asa4l
  2185. X>2/lsl1/oso0/ese3l
  2186. X>2/lsl1/oso0/hsh4l
  2187. X>2/lsl1/oso0/isi1l
  2188. X>2/lsl1/oso0/sss$l
  2189. X>2/lsl1/sss$/asa4l
  2190. X>2/lsl1/sss$/hsh4l
  2191. X>2/oso0/asa2/hsh4l
  2192. X>2/oso0/asa2/sss$l
  2193. X>2/oso0/asa4/hsh4l
  2194. X>2/oso0/ese3/asa2l
  2195. X>2/oso0/ese3/asa4l
  2196. X>2/oso0/ese3/hsh4l
  2197. X>2/oso0/ese3/sss$l
  2198. X>2/oso0/isi1/asa2l
  2199. X>2/oso0/isi1/asa4l
  2200. X>2/oso0/isi1/ese3l
  2201. X>2/oso0/isi1/hsh4l
  2202. X>2/oso0/isi1/sss$l
  2203. X>2/oso0/sss$/asa4l
  2204. X>2/oso0/sss$/hsh4l
  2205. X>2/sss$/asa4/hsh4l
  2206. X>2/ese3/asa2/sss$/hsh4l
  2207. X>2/ese3/sss$/asa4/hsh4l
  2208. X>2/isi1/asa2/sss$/hsh4l
  2209. X>2/isi1/ese3/asa2/hsh4l
  2210. X>2/isi1/ese3/asa2/sss$l
  2211. X>2/isi1/ese3/asa4/hsh4l
  2212. X>2/isi1/ese3/sss$/asa4l
  2213. X>2/isi1/ese3/sss$/hsh4l
  2214. X>2/isi1/sss$/asa4/hsh4l
  2215. X>2/lsl1/asa2/sss$/hsh4l
  2216. X>2/lsl1/ese3/asa2/hsh4l
  2217. X>2/lsl1/ese3/asa2/sss$l
  2218. X>2/lsl1/ese3/asa4/hsh4l
  2219. X>2/lsl1/ese3/sss$/asa4l
  2220. X>2/lsl1/ese3/sss$/hsh4l
  2221. X>2/lsl1/isi1/asa2/hsh4l
  2222. X>2/lsl1/isi1/asa2/sss$l
  2223. X>2/lsl1/isi1/asa4/hsh4l
  2224. X>2/lsl1/isi1/ese3/asa2l
  2225. X>2/lsl1/isi1/ese3/asa4l
  2226. X>2/lsl1/isi1/ese3/hsh4l
  2227. X>2/lsl1/isi1/ese3/sss$l
  2228. X>2/lsl1/isi1/sss$/asa4l
  2229. X>2/lsl1/isi1/sss$/hsh4l
  2230. X>2/lsl1/oso0/asa2/hsh4l
  2231. X>2/lsl1/oso0/asa2/sss$l
  2232. X>2/lsl1/oso0/asa4/hsh4l
  2233. X>2/lsl1/oso0/ese3/asa2l
  2234. X>2/lsl1/oso0/ese3/asa4l
  2235. X>2/lsl1/oso0/ese3/hsh4l
  2236. X>2/lsl1/oso0/ese3/sss$l
  2237. X>2/lsl1/oso0/isi1/asa2l
  2238. X>2/lsl1/oso0/isi1/asa4l
  2239. X>2/lsl1/oso0/isi1/ese3l
  2240. X>2/lsl1/oso0/isi1/hsh4l
  2241. X>2/lsl1/oso0/isi1/sss$l
  2242. X>2/lsl1/oso0/sss$/asa4l
  2243. X>2/lsl1/oso0/sss$/hsh4l
  2244. X>2/lsl1/sss$/asa4/hsh4l
  2245. X>2/oso0/asa2/sss$/hsh4l
  2246. X>2/oso0/ese3/asa2/hsh4l
  2247. X>2/oso0/ese3/asa2/sss$l
  2248. X>2/oso0/ese3/asa4/hsh4l
  2249. X>2/oso0/ese3/sss$/asa4l
  2250. X>2/oso0/ese3/sss$/hsh4l
  2251. X>2/oso0/isi1/asa2/hsh4l
  2252. X>2/oso0/isi1/asa2/sss$l
  2253. X>2/oso0/isi1/asa4/hsh4l
  2254. X>2/oso0/isi1/ese3/asa2l
  2255. X>2/oso0/isi1/ese3/asa4l
  2256. X>2/oso0/isi1/ese3/hsh4l
  2257. X>2/oso0/isi1/ese3/sss$l
  2258. X>2/oso0/isi1/sss$/asa4l
  2259. X>2/oso0/isi1/sss$/hsh4l
  2260. X>2/oso0/sss$/asa4/hsh4l
  2261. X>2/isi1/ese3/asa2/sss$/hsh4l
  2262. X>2/isi1/ese3/sss$/asa4/hsh4l
  2263. X>2/lsl1/ese3/asa2/sss$/hsh4l
  2264. X>2/lsl1/ese3/sss$/asa4/hsh4l
  2265. X>2/lsl1/isi1/asa2/sss$/hsh4l
  2266. X>2/lsl1/isi1/ese3/asa2/hsh4l
  2267. X>2/lsl1/isi1/ese3/asa2/sss$l
  2268. X>2/lsl1/isi1/ese3/asa4/hsh4l
  2269. X>2/lsl1/isi1/ese3/sss$/asa4l
  2270. X>2/lsl1/isi1/ese3/sss$/hsh4l
  2271. X>2/lsl1/isi1/sss$/asa4/hsh4l
  2272. X>2/lsl1/oso0/asa2/sss$/hsh4l
  2273. X>2/lsl1/oso0/ese3/asa2/hsh4l
  2274. X>2/lsl1/oso0/ese3/asa2/sss$l
  2275. X>2/lsl1/oso0/ese3/asa4/hsh4l
  2276. X>2/lsl1/oso0/ese3/sss$/asa4l
  2277. X>2/lsl1/oso0/ese3/sss$/hsh4l
  2278. X>2/lsl1/oso0/isi1/asa2/hsh4l
  2279. X>2/lsl1/oso0/isi1/asa2/sss$l
  2280. X>2/lsl1/oso0/isi1/asa4/hsh4l
  2281. X>2/lsl1/oso0/isi1/ese3/asa2l
  2282. X>2/lsl1/oso0/isi1/ese3/asa4l
  2283. X>2/lsl1/oso0/isi1/ese3/hsh4l
  2284. X>2/lsl1/oso0/isi1/ese3/sss$l
  2285. X>2/lsl1/oso0/isi1/sss$/asa4l
  2286. X>2/lsl1/oso0/isi1/sss$/hsh4l
  2287. X>2/lsl1/oso0/sss$/asa4/hsh4l
  2288. X>2/oso0/ese3/asa2/sss$/hsh4l
  2289. X>2/oso0/ese3/sss$/asa4/hsh4l
  2290. X>2/oso0/isi1/asa2/sss$/hsh4l
  2291. X>2/oso0/isi1/ese3/asa2/hsh4l
  2292. X>2/oso0/isi1/ese3/asa2/sss$l
  2293. X>2/oso0/isi1/ese3/asa4/hsh4l
  2294. X>2/oso0/isi1/ese3/sss$/asa4l
  2295. X>2/oso0/isi1/ese3/sss$/hsh4l
  2296. X>2/oso0/isi1/sss$/asa4/hsh4l
  2297. X>2/lsl1/isi1/ese3/asa2/sss$/hsh4l
  2298. X>2/lsl1/isi1/ese3/sss$/asa4/hsh4l
  2299. X>2/lsl1/oso0/ese3/asa2/sss$/hsh4l
  2300. X>2/lsl1/oso0/ese3/sss$/asa4/hsh4l
  2301. X>2/lsl1/oso0/isi1/asa2/sss$/hsh4l
  2302. X>2/lsl1/oso0/isi1/ese3/asa2/hsh4l
  2303. X>2/lsl1/oso0/isi1/ese3/asa2/sss$l
  2304. X>2/lsl1/oso0/isi1/ese3/asa4/hsh4l
  2305. X>2/lsl1/oso0/isi1/ese3/sss$/asa4l
  2306. X>2/lsl1/oso0/isi1/ese3/sss$/hsh4l
  2307. X>2/lsl1/oso0/isi1/sss$/asa4/hsh4l
  2308. X>2/oso0/isi1/ese3/asa2/sss$/hsh4l
  2309. X>2/oso0/isi1/ese3/sss$/asa4/hsh4l
  2310. X>2/lsl1/oso0/isi1/ese3/asa2/sss$/hsh4l
  2311. X>2/lsl1/oso0/isi1/ese3/sss$/asa4/hsh4l
  2312. X# Bleagh! pant, pant - alec
  2313. X
  2314. X# Oddly enough, people prefixing passwords with numbers is quite a lot
  2315. X# rarer than suffixing numbers.  Hence, we are further down the file
  2316. X# before trying this. Oh well, let's nail the buggers anyway...
  2317. X>2<8l^ :
  2318. X>2l^0
  2319. X>2l^1
  2320. X>2l^2
  2321. X>2l^3
  2322. X>2l^4
  2323. X>2l^5
  2324. X>2l^6
  2325. X>2l^7
  2326. X>2l^8
  2327. X>2l^9
  2328. X
  2329. X# Capitalise and then reverse every word (eg: "derF")
  2330. X>2!?Xcr
  2331. X
  2332. X# Reverse and then capitalise every alphabetic word (eg: "Derf")
  2333. X>2rc
  2334. X
  2335. X# Pure words capitalised with various ejaculatory punctuation added
  2336. X# eg: "Cats!" for Andrew Floyd-Drebber fans...
  2337. X>2<8!?Ac$!
  2338. X>2<8!?Ac$.
  2339. X>2<8!?Ac$?
  2340. X
  2341. X# Uppercase words with various things appended or swapped out
  2342. X>2<8u$!
  2343. X>2<8u$.
  2344. X>2<8u$?
  2345. X>2/OsO0u
  2346. X
  2347. X# Really weird uppercase variations
  2348. X>2ud
  2349. X>2uf
  2350. X>2ur
  2351. X
  2352. X# Yes, I know all this looks like line noise, but I haven't put regexp in yet.
  2353. END_OF_FILE
  2354. if test 10425 -ne `wc -c <'Scripts/dicts.rules'`; then
  2355.     echo shar: \"'Scripts/dicts.rules'\" unpacked with wrong size!
  2356. fi
  2357. # end of 'Scripts/dicts.rules'
  2358. fi
  2359. if test -f 'Sources/crack-sort.c' -a "${1}" != "-c" ; then 
  2360.   echo shar: Will not clobber existing file \"'Sources/crack-sort.c'\"
  2361. else
  2362. echo shar: Extracting \"'Sources/crack-sort.c'\" \(5383 characters\)
  2363. sed "s/^X//" >'Sources/crack-sort.c' <<'END_OF_FILE'
  2364. X#include "crack.h"
  2365. X#define Compare(a,b)     (strcmp(a,b))
  2366. X
  2367. X/*
  2368. X * Sort a list of struct DICT by using an iterative bottom-up merge sort.
  2369. X * This particular piece of code took me ages to do (well, 2 days + 3 weeks
  2370. X * research) and provides a FAST way of sorting a linked list without the
  2371. X * overhead of increasing memory usage via malloc() or brk(). Why ? Because I
  2372. X * have to assume that there is no more memory, thats why. It's all Brian
  2373. X * Thompsett's fault! Really! Filling the swapspace on a SparcStation2 and
  2374. X * expecting Crack to survive! Argh! 8-)
  2375. X */
  2376. X
  2377. X/* Since this code is so nice, I'll comment it fairly thoroughly */
  2378. X
  2379. Xstruct DICT *
  2380. XSortDict (chain3, listlength)
  2381. X    register struct DICT *chain3;
  2382. X    long int listlength;
  2383. X{
  2384. X    /* misc counters */
  2385. X    register int i;
  2386. X    long int discarded;
  2387. X
  2388. X    /* 2^n for n = 0..x */
  2389. X    long int n;
  2390. X
  2391. X    /* head of the first extracted subchain */
  2392. X    register struct DICT *chain1;
  2393. X
  2394. X    /* head of second subchain */
  2395. X    register struct DICT *chain2;
  2396. X
  2397. X    /* useful temp pointer */
  2398. X    register struct DICT *scratch;
  2399. X
  2400. X    /* PTR TO ELEMENT containing TAIL of unsorted list pre-merging */
  2401. X    struct DICT *lead_in;
  2402. X
  2403. X    /* PTR TO HEAD of unsorted list after extracting chains */
  2404. X    struct DICT *lead_out;
  2405. X
  2406. X    /* dummy structures used as fenceposts */
  2407. X    struct DICT dummy1;
  2408. X    struct DICT dummy2;
  2409. X
  2410. X    /* Put the incoming list into 'dummy1' posthole */
  2411. X    dummy1.next = chain3;
  2412. X
  2413. X    /* For values of n = 2^(0..30) limited by listlength */
  2414. X    for (n = 1L; n < listlength; n *= 2)
  2415. X    {
  2416. X    /* Store place to get/put head of list in 'lead_in' */
  2417. X    lead_in = &dummy1;
  2418. X
  2419. X    /* Set chain1 to the head of unsorted list */
  2420. X    for (chain1 = lead_in -> next; chain1; chain1 = lead_in -> next)
  2421. X    {
  2422. X        /* Break connection head and chain1 */
  2423. X        lead_in -> next = (struct DICT *) 0;
  2424. X
  2425. X        /* Extract up to length 'n', park on last element before chain2 */
  2426. X        for (i = n - 1, scratch = chain1;
  2427. X         i && scratch -> next;
  2428. X         scratch = scratch -> next)
  2429. X        {
  2430. X        i--;
  2431. X        };
  2432. X
  2433. X        /* If chain1 is undersized/exact, there is no chain2 */
  2434. X        if (i || !scratch -> next)
  2435. X        {
  2436. X        /* put chain1 back where you got it and break */
  2437. X        lead_in -> next = chain1;
  2438. X        break;
  2439. X        }
  2440. X        /* Get pointer to head of chain2 */
  2441. X        chain2 = scratch -> next;
  2442. X
  2443. X        /* Break connection between chain1 & chain2 */
  2444. X        scratch -> next = (struct DICT *) 0;
  2445. X
  2446. X        /* Extract up to length 'n', park on last element of chain2 */
  2447. X        for (i = n - 1, scratch = chain2;
  2448. X         i && scratch -> next;
  2449. X         scratch = scratch -> next)
  2450. X        {
  2451. X        i--;
  2452. X        };
  2453. X
  2454. X        /* Even if it's NULL, store rest of list in 'lead_out' */
  2455. X        lead_out = scratch -> next;
  2456. X
  2457. X        /* Break connection between chain2 & tail of unsorted list */
  2458. X        scratch -> next = (struct DICT *) 0;
  2459. X
  2460. X        /* Now, mergesort chain1 & chain2 to chain3 */
  2461. X
  2462. X        /* Set up dummy list fencepost */
  2463. X        chain3 = &dummy2;
  2464. X        chain3 -> next = (struct DICT *) 0;
  2465. X
  2466. X        /* While there is something in each list */
  2467. X        while (chain1 && chain2)
  2468. X        {
  2469. X        /* Compare them */
  2470. X        i = Compare (chain1 -> word, chain2 -> word);
  2471. X
  2472. X        if (i < 0)
  2473. X        {
  2474. X            /* a < b */
  2475. X            chain3 -> next = chain1;
  2476. X            chain3 = chain1;
  2477. X            chain1 = chain1 -> next;
  2478. X        } else if (i > 0)
  2479. X        {
  2480. X            /* a > b */
  2481. X            chain3 -> next = chain2;
  2482. X            chain3 = chain2;
  2483. X            chain2 = chain2 -> next;
  2484. X        } else
  2485. X        {
  2486. X            /*
  2487. X             * a == b. Link them both in. Don't try to get rid of the
  2488. X             * multiple copies here, because if you free up any
  2489. X             * elements at this point the listsize changes and the
  2490. X             * algorithm runs amok.
  2491. X             */
  2492. X            chain3 -> next = chain1;
  2493. X            chain3 = chain1;
  2494. X            chain1 = chain1 -> next;
  2495. X            chain3 -> next = chain2;
  2496. X            chain3 = chain2;
  2497. X            chain2 = chain2 -> next;
  2498. X        }
  2499. X        }
  2500. X
  2501. X        /*
  2502. X         * Whatever is left is sorted and therefore linkable straight
  2503. X         * onto the end of the current list.
  2504. X         */
  2505. X
  2506. X        if (chain1)
  2507. X        {
  2508. X        chain3 -> next = chain1;
  2509. X        } else
  2510. X        {
  2511. X        chain3 -> next = chain2;
  2512. X        }
  2513. X
  2514. X        /* Skip to the end of the sorted list */
  2515. X        while (chain3 -> next)
  2516. X        {
  2517. X        chain3 = chain3 -> next;
  2518. X        }
  2519. X
  2520. X        /* Append this lot to where you got chain1 from ('lead_in') */
  2521. X        lead_in -> next = dummy2.next;
  2522. X
  2523. X        /* Append rest of unsorted list to chain3 */
  2524. X        chain3 -> next = lead_out;
  2525. X
  2526. X        /* Set 'lead_in' for next time to last element of 'chain3' */
  2527. X        lead_in = chain3;
  2528. X    }
  2529. X    }
  2530. X
  2531. X    /* Now, Uniq the list */
  2532. X    discarded = 0;
  2533. X
  2534. X    /* Chain1 to the head of the list, Chain2 to the next */
  2535. X    chain1 = dummy1.next;
  2536. X    chain2 = chain1 -> next;
  2537. X
  2538. X    /* While not at end of list */
  2539. X    while (chain2)
  2540. X    {
  2541. X    /* Whilst (chain1) == (chain2) */
  2542. X    while (!Compare (chain1 -> word, chain2 -> word))
  2543. X    {
  2544. X        /* Bump the discard count */
  2545. X        discarded++;
  2546. X
  2547. X        /* Store the next element */
  2548. X        scratch = chain2 -> next;
  2549. X
  2550. X        /* Get some memory back */
  2551. X        free (chain2);    /* ...<snigger>... */
  2552. X
  2553. X        /* Assign the skip, break if you run off the end of list */
  2554. X        if (!(chain2 = scratch))
  2555. X        {
  2556. X        break;
  2557. X        }
  2558. X    }
  2559. X
  2560. X    /* Set comparison ptr to new element or terminate */
  2561. X    chain1 -> next = chain2;
  2562. X
  2563. X    /* If not terminated */
  2564. X    if (chain2)
  2565. X    {
  2566. X        /* set the compared pointer to its successor */
  2567. X        chain1 = chain2;
  2568. X        chain2 = chain2 -> next;
  2569. X    }
  2570. X    }
  2571. X
  2572. X    Log ("Sort discarded %ld words; FINAL DICTIONARY SIZE: %ld\n",
  2573. X     discarded,
  2574. X     listlength - discarded);
  2575. X
  2576. X    return (dummy1.next);
  2577. X}
  2578. END_OF_FILE
  2579. if test 5383 -ne `wc -c <'Sources/crack-sort.c'`; then
  2580.     echo shar: \"'Sources/crack-sort.c'\" unpacked with wrong size!
  2581. fi
  2582. # end of 'Sources/crack-sort.c'
  2583. fi
  2584. echo shar: End of archive 2 \(of 5\).
  2585. cp /dev/null ark2isdone
  2586. MISSING=""
  2587. for I in 1 2 3 4 5 ; do
  2588.     if test ! -f ark${I}isdone ; then
  2589.     MISSING="${MISSING} ${I}"
  2590.     fi
  2591. done
  2592. if test "${MISSING}" = "" ; then
  2593.     echo You have unpacked all 5 archives.
  2594.     rm -f ark[1-9]isdone
  2595. else
  2596.     echo You still need to unpack the following archives:
  2597.     echo "        " ${MISSING}
  2598. fi
  2599. ##  End of shell archive.
  2600. exit 0
  2601. exit 0 # Just in case...
  2602.