                             .- XHU Pack #1 -.
 
  . Introduction 
  . Description of Programs  
  . Closing
 
                             .- Introduction -. 
 
  XHU  stands for Xenocide's Hacking  Utilities written by me, Xenocide.
  They mainly deal with hacking, security, and cryptography. You may use
  the  programs anyway you like, but I would like to hear your comments.
  You  can  reach  me on Static  Line  (806.747.0802)  or by Internet at
  dan.keisling@windmill.com or at xenocide@big12.metrobbs.com
 
                                            - Xenocide
 
                       .- Description of Programs -. 
 
    The archive has these files packaged in them:
 
  . brute  
  . dzip  
  . fakelog  
  . isprime   
  . netware  
  . passwd  
  . permute  
  . primes  
  . winsscrk
 
  If you are missing any of these files, please contact me so that I can
  send you them.
 
brute:

  Brute  is a program to show the user why a brute-force attack is a bad
  idea  in  gaining a key. If you  do  not understand what a brute-force
  attack is, read the below explanation:
 
  For  this  explanation,  I  will be  using  the  example  of the PKZIP
  password,  since  everyone  is familiar  with  the program. Generally,
  there are three types of attacks used to gain a password (key) :
 
  .  Cryptanalysis  -  mathematical attack  used  to  calculate the key.
  Usually  the  fastest  and  best  option;  although  usually  the most
  difficult.
 
  . Dictionary Attack (see dzip) - using a set of words to guess the key
  (usually a password). Usually very slow, but easy to create.
 
  .  Brute-force  Attack  - trying every  possible  combination of a key
  until the key fits. Usually the slowest, but the only way to solve the
  equation.
 
  In simple terms, suppose K=key and our equation we have to solve is
 
  K=2*10                   (two times five = ?) 

  Note that this is an extremely bad example. This is just to give you a
  basic  example of finding a key. Encryption is much more stronger than
  this.
 
  We  could probably rule out the attack of a dictionary since we aren't
  dealing  with letters (see dzip). From a cryptanalysis stand point, we
  would  compute  2*5 to find the  key.  Although encryption usually has
  another  variable  stopping us from simple  computing  the left of the
  equal  sign,  this  example will suffice.  If  you use brute-force, we
  would  try every possible combination  of K. Since brute-force usually
  starts  at  the lowest possible value and  goes  up, we would start at
  K=0.  Since 0=2*5 isn't true, we would try  1. Then 2, 3, 4, etc until
  we  ended up at 10. Since 10 equal  2 times 5, the program would halt,
  giving us the solution to K.
 
  So  far, we have only been working  with numbers. Now we will be using
  letters,  in  order to conform to a  PKZIP  password. So, if our PKZIP
  password  is  "XHU",  how would be  go  about finding that using brute
  force?  Since brute force usually begins  at the lowest possible value
  and  works  its way up, we would begin  at the letter 'a.' For now, we
  will  say  that P is the PKZIP password  (in this case, XHU) and P' is
  the password being tried. So when we find that
 
  P'=P
 
  we  have  solved  the password. Our  first  try comes out false, since
  a=xhu  is false. We would then try the letter 'b' and then 'c' and all
  the  way to 'z'. Since none of these work, what now? We have to "loop"
  around  to  the characters "aa". Since  aa=xhu is false, we would then
  try  "ab" then "ac" all the way to "az". Once this is reached, we have
  to "loop" around to "ba." We will go all the way to "bz" then "ca" and
  to  "cz". All in all, we will finish the 2 character length with "zz".
  We  will  then loop around to "aaa" and  try  that. Then we will go to
  "aab"  and  so forth. Once "aaz" is  reached, we loop to "aba" and try
  "abb"  then  "abc" until we get to  "abz" which loops around to "aca".
  After  we reach "azz" we loop around to "baa". We only get to a fourth
  character  string  right  after "zzz" is  reached.  (seems like a long
  time).
 
  In  dealing  with  the  three  character  string,  we  will  reach the
  combination "xhu" sometime in the middle giving us:
 
  xhu=xhu
 
  in  which  case is true, halting the  program and returning P'. If you
  understand C, then we can think of:
 
  for  (p'=a;  p'<zzzz;  p'++)  
  {  
  if  (p'=p)  
  {  printf("We  found  the password"); 
  abort(); 
  } 
  else {} 
  }
 
  Remember,  though,  that  a  PC  is  extremely  fast  at  finding this
  password.  It  would generally take a matter  of a few seconds to find
  the  password  "xhu."  If  you think  you  now  can crack any PKZIPPED
  password, think about these points:
 
  . Passwords are generally more than 5 characters in length 
  . Passwords in  PKZIP  are  case-sensitive  ('a'  and  'A'  are 
    totally different passwords)  So far we have been only using lower
    case letters  
  . Secure passwords  contain  numbers, punctuation keys,  high ASCII,
    and spaces within them.
 
  All  of  these factors contribute into  increasing the time in finding
  the  password  immensely.  First, run brute  with  5 characters as the
  password.  If  you  think it didn't take  that  long to show them all,
  remember that it is just displaying them to the screen. When trying to
  find the password, it uses this sequence:
 
  a) Compute password 
  b) Try computed password with equation 
  c) Return results of try 
  d) If false, goto a; if true, goto e  
  e) Exit with success 
   
  More  or  less.  This can more than  triple  the  time to find it all.
  Granted,  finding the password "xhu" isn't  long at all, but take into
  the factors listed above. For passwords with uppercase, we now have to
  try  "aaA"  and  "gHA."  Basically,  every  combination  of  upper and
  lowercase  letters  in  the string. Since  we  are  introducing 26 new
  characters  (A  through Z) we also  have  to introduce all punctuation
  keys   (keys:  ~`!@#$%^&*()_+|\=-}]{[:;"'?/>.<,),   spaces  (just  one
  character - but it severely increases the time), numbers (0 through 9)
  and  all  high ASCII characters  (161 characters) all greatly increase
  the  time. Most security programs heavily encourage passwords that are
  more  than  10 characters in length  with spaces and alternative case.
  So,  you can say that in a length  of 10 characters, you will have the
  try of:
 
  kFi&; :l~ñ

  This  won't usually be a password, but  brute force has to check every
  possible solution to the key.
 
  If you are using a program that uses brute-force, it is always wise to
  have the option of specifying what characters to use. Suppose you know
  that  the  password is only in lower  case letters. Why would we waste
  all  the other time to factor in upper case, spaces, numbers, and high
  ASCII?  A  brute-force program should have  the option to specify only
  using lower case letters, or by only specifying numbers and upper case
  letters.
 
  If  you  STILL  don't really know  what  a  brute-force attack is, you
  should follow up to the newsgroup sci.crypt or by contacting me.
 
dzip:

  Dzip  stands  for  Dictionary Zip  which  cracks PKZIPPED passwords. A
  dictionary  file  (also called a wordlist)  is simply a text file that
  has  one  word  per  line. The  program  checks  that word against the
  password,  and  if it is false, it  tries the next one. The dictionary
  file  that  dzip  looks  for is  called  ZIP_DICT.TXT  in  the current
  directory. Here is an example of the program:
 
  Suppose our ZIP_DICT.TXT file looked like this:
  
  oranges
  bananas
  apples
  zowie

  And  the  ZIP  file with the  password  is called CRACKME.ZIP. We will
  assign  the  password "zowie" to CRACKME.ZIP.  Now,  dzip will more or
  less try the word "oranges" to the CRACKME.ZIP file. If PKZIP tells us
  that  "that  is not the right  password" dzip will then try "bananas".
  Since  "bananas" does not work, we will  try "apples." It is not until
  we  try  "zowie" that PKZIP says  the password is correct. The program
  now halts, giving us the password to CRACKME.ZIP.
 
  So  how do you make a ZIP_DICT.TXT  file? You certainly do not make up
  words yourself. Static Line has some available for download or you can
  ftp  them  from sable.ox.ac.uk in  the pub/wordlists directory. All of
  these  wordlists are setup with one  word per line and usually English
  only  (although  there  are different  languages  there). As you might
  notice,  using  a dictionary attack has  it's limitations. What if the
  password  was "sdf(unSdf"? Since most wordlists are usually only whole
  words, this limits us to only a brute-force attack (see brute). If you
  do not plan on making your own dictionary files, only use a dictionary
  attack  if  the password is a  whole word. Also remember that "Apples"
  and  "apples" are two separate passwords. Most dictionary files are in
  lower case.
 
  One  thing about dzip is that it is  very fast. I ran it through a one
  meg  dictionary file (that's a lot of words; it took over five minutes
  just  to  type  it to the screen)  and  it returned the password in 47
  seconds.  As with a brute-force attack, there is no way of knowing how
  long  it  will take to find the  key.  In brute-force, it happens only
  when the correct key is found. Since a dictionary attack starts at the
  top  and  goes down to the bottom of  the file, the time limit is only
  how  long it takes to get to the word in the file. If the password was
  somewhere  in the middle, it will be quicker than finding the password
  if it was located at the bottom of the file.
 
  The  password  I used for the ZIP file  was  at the end of the one meg
  ZIP_DICT.TXT  file.  This  theoretically means  that  it takes about 1
  minute  to try a meg of words. However, with the abundance of words in
  the  English language, a one meg  dictionary is pretty small. A common
  size is around 10 megs or more.
 
  If  you do not know how to  solve a password using cryptanalysis, it's
  always   better  to  at  least  try   a  dictionary  attack  before  a
  brute-force.  Since it only (theoretically) takes  10 minutes for a 10
  meg  dictionary, you might get lucky  and find the password - although
  very  unlikely.  I could simple make  my password 10 times more secure
  against a dictionary attack by using these passwords:
 
  "apples1"
  "Apples"
  "applesoranges"
  "apples "
  
  Remember  that  the  space in the last  example  does  mean that it is
  different from just "apples" with no space. A great more detail can be
  covered  using  a  dictionary attack, but  they  are  pretty simple to
  reason  out.  Using dzip against different  passwords  you made up and
  from the dictionary files you downloaded. One good example is to think
  of  an English whole word and use that for the ZIP password (using all
  lower case letters). Then run dzip against a 10 meg dictionary and see
  what happens.
 
  The only specifications for dzip is:
  
  ZIP_DICT.TXT must be in the current directory 
  The ZIP to be cracked must be in the current directory
  The  ZIP  file  must  have at least  3  files  encrypted with the same
  password
 
  Although  there has not been a real cryptanalysis attack on PKZIP (the
  only  one being is that you must know the plain-text of the file to be
  cracked),  there will be a day when a program will return the password
  in a matter of seconds. Until now, we are stuck with using brute-force
  and a dictionary attack.
 
fakelog:
 
  Fakelog  is a login trojan that is  designed to capture user names and
  passwords  on machines that use a "login" program. This is a demo copy
  simply because all logins are different on every machine. Fakelog will
  simulate  the real login on your machine and ask for the user name and
  password. Once a user has entered these items, they will be written to
  a  file and an error message will follow, then transferring control to
  real login for the user to enter his info again.
 
  The  file that the passwords are written  to is called PASSWD (you can
  change  it  if  you wish to something  less  obvious)  for you to view
  later.  If  I was to enter "Xenocide" as  my user name and "xhu" as my
  password, the PASSWD file would look like:
 
  . Xenocide/xhu
  
  Each  time a user logs in, it will be added to the end of the file. If
  it  cannot  find PASSWD in the  current directory, Fakelog will create
  it.
 
  Here is an example of Fakelog's run time:

  . Novell NetWare Login
  
  . Login: Xenocide
  . Password: XHU
  
  . Wrong password entered.
  
  The PASSWD file would then look like:
  
  . Xenocide/XHU
  
  The  only problems with Fakelog is that  if a user logs in many times,
  he will notice that he somehow mistypes his password the first time.
 
  In  order  for Fakelog to correctly work  and  fool a user, it must be
  made  to  look exactly like the real  logon. Because I don't know what
  your  logon looks like, you must contact  me so I can customize it for
  you. You must give me these details:
 
  . Welcome Screens (Any text shown before the login prompt)
  . The login prompt (ie: Login: or login: or username: etc)
  . The password prompt (ie: password: or Password: or pass> etc)
  . The error message (That you may get if you mistype your password)
    
isprime:
 
  Isprime  will  tell you if a number  you  specified is prime. If it is
  false,  it will return the reason why.  For example, if you entered 10
  as  the number, it would return false with the reason that 2*5=10. Due
  to  the  limits of a personal  computer,  large numbers aren't handled
  very well.
 
netware:
 
  Netware  will  encrypt  a  password  using  Novell  NetWare's Password
  Encryption.  It  uses a simple hashing of  the password into a 32 byte
  string and does some mixing and compression to it. Passwords can be up
  to  128  bytes and the hashing can be  up to 128 bits. For example, if
  you enter XHU for the password, it will return
 
  0E B2 B6 ED F3 8E A4 D9 B2 FF F8 23 07 8E B9 FD
 
passwd:
 
  Passwd  will  let you make a  UNIX-like passwd entry commonly found in
  /etc/passwd. It contains the same info (username, home directory, user
  number,  etc)  and prints it to the  file called PASSWD in the current
  directory.  This  can be used for  security  programs that can check a
  users  password  in a specific file. One  note is that passwd does not
  modify  the strings in any way,  such that at the Encryption Password:
  prompt,  you must enter the encrypted password. No encryption has been
  implemented  yet,  although I hope for  it to actually encrypt it with
  crypt(3) someday.
 
permute:
 
  Permute  will display all the permutations  of a string. If the string
  is 'ab' it will return:
 
  ab ba
 
primes:
 
  Primes  will  calculate  all the primes from  2  to 3067. It ends here
  because of the limitations of a personal computer.
 
winsscrk:
 
  Winsscrk will decrypt the Windows v3.11 Screen Saver Password normally
  stored in control.ini. It does not specifically look for control.ini -
  I have given you the choice of the file name. The only requirements is
  that  the encryption password must be  after a Password= prompt. (This
  is  what  control.ini looks like anyway).  It has around a 99% success
  rate,  because certain punctuation keys confuse the encryption. I have
  not tested Win '95's encryption (if it is different), but expect a Win
  '95 edition in the next pack.
 
                                .- Closing -. 
                                
  Please  note  that  these programs are just  simple  ones to give me a
  "test" for my knowledge. Although they may seem "useless" to you, they
  greatly  helped  me  in learning how  to  program,  and in some cases,
  information on basic (very basic) cryptography. Since these 9 programs
  took  me a while to make and get all the bugs out of, I cannot say how
  long,  if ever, an XHU Pack #2 will  come out. I might also extend the
  releases from other people who would like to distribute these kinds of
  programs.  If you would, contact me and we can arrange for it to be in
  a  pack. My only thoughts on new programs are duplicated past programs
  (such  as  dzip), which is still quite  a challenge, and to improve on
  them  as  much  as possible. If you  also  would like to see a program
  made, please contact me so we can figure out how and we can release it
  into a pack some day.
 
  My only thanks are to Breed_X, who helped me with the Fakelog program.
 
                                        - Xenocide
                                           
