home *** CD-ROM | disk | FTP | other *** search
/ PC World 2001 May / PCWorld_2001-05_cd.bin / Software / TemaCD / yaac / yaac10a.arj..arj / YAAC.TXT < prev   
Text File  |  2001-02-16  |  36KB  |  938 lines

  1.                            Y A A C
  2.                   (Yet Another ARJ Cracker)
  3.                            v. 1.0a
  4.  
  5.         (c) Copyright PSW-soft 1994-2001 by P. Semjanov
  6.  
  7. THIS PROGRAM VERSION  IS DISTRIBUTED "AS  IS". YOU MAY  USE IT
  8. AT YOUR OWN RISK. ALL THE CLAIMS TO PROGRAM OPERATION WILL  BE
  9. REJECTED.  THE  AUTHOR  DOES  NOT  ALSO GUARANTEE THIS PROGRAM
  10. FUTURE MAINTENANCE AND UPDATE.
  11.  
  12. This is FREEWARE program, so it can be distributed under the
  13. following conditions: program code is kept unchanged and the
  14. program is distributed in the form of distributive archive.
  15. Any commercial use of this program is prohibited!
  16.  
  17. 1. PURPOSES AND CHARACTERISTICS
  18.  
  19. The  YAAC  program  is  designed  to  determine  a "forgotten"
  20. password for  ARJ-archives. This  program operates  adequately
  21. with   ARJ-archives   versions   2.30-2.75   and   also   with
  22. ARJ32-archives versions 3.0-3.08 (but  also is to be  adequate
  23. to the later ARJ versions provided that file format will still
  24. be the same). From 2.55 version and on, the author of ARJ  has
  25. added a new encryption procedure (according to GOST standard),
  26. but this program does not support it (see section 6).
  27.  
  28. To proceed  with YAAC  program you  need a  computer with  the
  29. 80386 compatible processor or later. It is recommended to  use
  30. as powerful processor as  possible (the code is  optimized for
  31. Pentium II).
  32.  
  33. YAAC is the  tool for professionals,  no GUI or  great service
  34. is  provided.  But  it  tries  to  maximize your abilities for
  35. passwords definition  and to  minimize search  time. YAAC uses
  36. Password  Cracking  Library  (PCL),   a  very  powerful   tool
  37. allowing you to define rules to generate passwords.  The  YAAC
  38. program  DOES  NOT  use  exhaustive  search; in particular, it
  39. determines the first and  the third character of  the password
  40. reliably.   Furthermore,  most  of  passwords  to  be searched
  41. through  is  discarded  beforehand,  provided the beginning of
  42. these passwords does not met some heuristics.  So it is  quite
  43.  difficult to estimate the rate of this program.  The rate  of
  44. password search is approximately 1000000 passwords per  second
  45. on Pentium II/333. What actually happens is that you will  get
  46. your  password  much  faster.  In  principle,  YAAC  can crack
  47. potentially 12-14-character password, which is beyond the  po-
  48. wer of any other program.   The rate for dictionary attack  is
  49. approximately 300000 passwords per second.
  50.  
  51. 2. REQUIREMENTS FOR INPUT ARCHIVE
  52.  
  53. To ensure  the program  to process  an ARJ-archive  under test
  54. successfully, the following requirements are to be met:
  55.  
  56. -    All the files were encrypted with the same password;
  57. -    A new encryption procedure (-hg) was not used;
  58. -    -jh, -m0, -m4 options were not used in archiving.
  59.  
  60. The program will perform at its best if
  61. -    there are a  lot of files  in the archive.  On no account
  62. some (large) files should  be removed from the  archive before
  63. the program runs;
  64. -   there are some small (100-500 byte) files in the  archive.
  65. YAAC  supports  some  types  of  self-extracting archives (see
  66. section 5.8).
  67.  
  68. If you  have one  plaintext file  at least  in addition to the
  69. encrypted  archive,  an  effective  plaintext  attack  can  be
  70. performed.  For  this  purpose  you  can  use  known-plaintext
  71. crackers (look at http://www.password-crackers.com)
  72.  
  73. 3. WORKING WITH THE PROGRAM.
  74.  
  75. The program  has two  modes of  operation: automatic  mode and
  76. advanced user mode.
  77.  
  78. To  run  the  program  in  either  YOU  ARE TO CREATE PASSWORD
  79. DEFINITION FILE firstly (see section 4).
  80.  
  81. You  may  run  the  program  under MS-DOS, any Windows, Linux.
  82. You need  any DPMI-host  to run  the program  under MS-DOS. If
  83. you have  no DPMI-host,  you may  use FREEWARE  CWSDPMI (it is
  84. not    included    in    this    package),    get    it     at
  85. ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2misc/csdpmi5b.zip.
  86.  
  87. 3.1. Automatic mode (most convenient).
  88.  
  89. To run the program in this mode you are to use the command
  90.  
  91. YAAC [options] archive [.ARJ]
  92.  
  93. If the  password is  3 characters  length at  most, then it is
  94. printed immediately.
  95.  
  96. Otherwise the  program produces  all possible  combinations of
  97. two first characters of the password ("The password may  begin
  98. with:") and the  third character ("The  3rd char is:").  These
  99. suggestions are based on all the possible characters from  the
  100. set '?' (see section 4.2.1).
  101.  
  102. Then the  program produces  the recommended  set of characters
  103. ("Recommended set of chars:"). Relying on these data, you  may
  104. guess the characters that comprise your password.
  105.  
  106. The following advices may be given here:
  107.  
  108. - in  most cases  passwords are  limited by  lower-case  Latin
  109. letters ($a);
  110. - the program determines the first and the third characters of
  111. the  password  most  exactly, so  it  is these characters that
  112. allow you to determine the character set to be used;
  113. -  when  the  whole  set  of  characters  is  used the time of
  114. password search is several orders longer than that for the set
  115. $a.
  116.  
  117. The password determined is printed in such a form:
  118.  
  119. truepass CRC OK
  120.  
  121. All the other program messages both with "CRC ERROR" label and
  122. without it are not passwords.
  123.  
  124. The options in this mode are:
  125.      -lXX  -  to  set  password  length  to  XX at least (XX =
  126. 0..255, XX =  1 by default).  This parameter affects  password
  127. length only when  '*' is used  in its definition  (see section
  128. 4.2.1);
  129.      -gXX - to set password length to XX at most (XX = 0..255,
  130. XX = 8 by default);
  131.  
  132.      -n - as usual, the  program truncates a set of  two first
  133. characters $s(2) up to those, which fall within a  recommended
  134. set. This option lifts this restriction.
  135.  
  136.      -pXXXX  -  to  set  the  name of password definition file
  137. ("PASSWORD.DEF" by  default). Long  file names  are valid  for
  138. Windows 95/98 only (not MS DOS or Windows NT);
  139.  
  140.     -b - to perform benchmarking;
  141.  
  142.      -v - debug mode (see section 5.1). It may be used to show
  143. character  sets  in  use.  This  option generates also all the
  144. passwords according to with their definition; it does not test
  145. but prints them, so you can check their validity.
  146. ATTENTION: when this mode is  used for the passwords with  '*'
  147. regular  character,  the  program  does  not  print  all   the
  148. passwords,  because some  of them  are  discarded  beforehand.
  149. Actually tested passwords are marked as "slow test".
  150.  
  151. 3.2. Advanced user mode
  152.  
  153. The necessity  of considering  this mode  stems from  the fact
  154. that the author  failed to design  such a function,  which can
  155. exactly determine  two first  characters of  the password. But
  156. this can be done manually according to the following scheme:
  157.  
  158. 1) Choose  several small  files from  your archive  (let it be
  159. called YOUR.ARJ);
  160.  
  161. 2)    Run the program
  162.  
  163. YAAC -c YOUR.ARJ
  164.  
  165. in  order  to  determine  the  original length and compression
  166. ratio of these files and the version of ARJ used;
  167.  
  168. Carry out  the following  operations for  each of  these files
  169. (for example, for the file SAMPLE.EXE of the length 10000  and
  170. of the compression ratio = 0.6):
  171.  
  172. 3)  Find   files  with   the  same   extension  (*.EXE)    and
  173. approximately of  the same  length +-50%  (7500-15000) on your
  174. hard disk;
  175.  
  176. 4) Compress these files with the same version of ARJ  archiver
  177. to the other archive OTHER.ARJ;
  178.  
  179. 5)    Run the program
  180.  
  181. YAAC -c OTHER.ARJ,
  182.  
  183. and choose out  of these files  those ones, which  compression
  184. ratio differs by  2-3% (0.57-0.63) at  most from the  original
  185. one;
  186.  
  187. 6) Find maximum and minimum values from the column Block ratio
  188. (let it be 0.66 and 0.75) for these files;
  189.  
  190. 7)    Add a line
  191.  
  192. SAMPLE.EXE 0.66 0.75
  193.  
  194. into the file YAAC.SIZ;
  195. After you have finished with all the files
  196.  
  197. 8)    Run the program
  198.  
  199. YAAC -f YOUR.ARJ
  200.  
  201. Some remarks:
  202. - If you have failed to find any file with such an  extension,
  203. try to find  files of the  similar length (+-10%),  and choose
  204. those giving the same compression;
  205.  
  206. - If you have found only  1-2 suitable files, then you are  to
  207. subtract 0.05 from the minimum value of the Block ratio and to
  208. add 0.05 to the maximum one;
  209.  
  210. - The Block ratio values may exceed 1.0, but not 1.2, and  are
  211. unlikely  to  be  exceeded  by  0.3.  Regular  values  are  in
  212. 0.75..0.95;
  213.  
  214. - You may also try to archive the files found with ARJ options
  215. -jm, -m2, -m3.
  216.  
  217. Any option of automatic mode  can be used in conjunction  with
  218. -f option in this mode.
  219.  
  220. 4. THE USE OF PASSWORD DEFINITION FILE IN CHOOSING OF MODE  OF
  221. OPERATION AND PASSWORD SET
  222.  
  223. Password   definition   file   is   the   main  control  file.
  224. Its translation  and processing  are   the main  task of   PCL
  225. library.  Its format  doesn't depend on application,  to which
  226. PCL is linked,  so this  library can be used for any  password
  227. searching program.
  228.  
  229. 4.1. Password definition file format
  230.  
  231. Password definition file is an ordinary text file and consists
  232. of  two   parts:  firstly,   dictionary  and   character   set
  233. definition, and secondly, passwords definition; the  parts are
  234. separated by a line of two '##' symbols:
  235.  
  236. [ <dictionary and character set definition> ]
  237. ##
  238. <passwords definition>
  239.  
  240. The  first  part  may  be  omitted,  in  that  case   password
  241. definition file is to begin with '##' symbols.
  242.  
  243. Anywhere  else  the  symbol  '#'  is  considered  as a comment
  244. beginning.
  245.  
  246. Space characters and tabs  are ignored in password  definition
  247. file and may separate any components.
  248.  
  249. For  convenience,  let  password  definition  mechanism be our
  250. first concern and character set definition be the second  one,
  251. contrary to their position in password  definition file.
  252.  
  253. 4.2. Password  definition
  254.  
  255. This is the main part of the file. IT NECESSARILY PRESENTS  IN
  256. ANY  PASSWORD  DEFINITION  FILE  (PASSWORD.DEF) AFTER THE LINE
  257. '##' and presets password generation rules to be checked later
  258. on. It consists  of text lines,  each giving its  own password
  259. set and  mode of  operation, i.  e. an  algorithm of  password
  260. search.  Each  line  is  in  its  own  right  and is processed
  261. separately,  so  the  total  number  of  passwords  checked is
  262. computed.
  263.  
  264. Character sets and dictionary words form password  definition.
  265. They  preset  one  or  more  characters,  which  will hold the
  266. appropriate position in a password.
  267.  
  268. 4.2.1. Character sets
  269.  
  270. Character  set  (charset)  is  a  set of characters, which can
  271. occupy current position  in a password  (but, of course,  only
  272. one of them holds it). These characters may be following:
  273.  
  274. 1) Ordinary characters (a, b, etc.). It means that it is  this
  275. character that occupies given position in a password;
  276.  
  277. 2) Shielded characters. Special  characters, if ever occur  in
  278. the password,  are to  be shielded.  The meaning  is identical
  279. with mentioned above. Among these are:
  280.  
  281.      \$, \., \*, \?, \=        '$', '.', '*', '?', '='
  282.      \], \[, \{, \}, \(, \)    corresponding brackets;
  283.      \ (space character)       space character
  284.     \XX, where X is a hexadecimal digit
  285.                                any hex-code character
  286.      \0                        no character. It is usually
  287. used in conjunction with "real" character (see examples below).
  288.  
  289. Generally, any  character can  be shielded  except hexadecimal
  290. digits.
  291.  
  292. 3) Macros of character set. It means that current position  in
  293. the password can  be occupied by  any character from  the set.
  294. These sets are specified in the first part of password defini-
  295. tion file (see section 4.3.2) and are denoted as:
  296.  
  297.      $a  -  lower-case  Latin  letters  (26  letters,   unless
  298.             otherwise specified);
  299.  
  300.      $A  -  upper-case  Latin  letters  (26  letters,   unless
  301.             otherwise specified);
  302.  
  303.      $!  -  special   characters   (32    characters,   unless
  304.             otherwise specified);
  305.  
  306.      $1  -  digits (10 digits, unless otherwise specified);
  307.  
  308.      $i  -  lower-case   letters of   national alphabet    (33
  309.             letters for Russian alphabet);
  310.  
  311.      $I  -  upper-case  letters   of  national  alphabet   (33
  312.             letters for Russian alphabet);
  313.  
  314.      $o  -  other user-specified characters;
  315.  
  316.      ?   -  any character (i. e. all the characters,  included
  317.             into the macros mentioned above).
  318.  
  319. NOTE: macros $v and $p (see section 4.3.4) cannot be used  for
  320. password definition.
  321.  
  322. 4) Any combinations of  the characters mentioned above.  It is
  323. written  in  square  brackets.  The  meaning is identical with
  324. mentioned above. For example:
  325.  
  326.     [$a $A]                    any Latin letter;
  327.     [abc]                a, or b, or c;
  328.     [$1 abcdef]            hexadecimal digit;
  329.     [s \0]                s or nothing;
  330.     [$a $A $1 $! $i $I $o]            this is equivalent to ?.
  331.  
  332. 5)  Regular  duplication  character  '*'.  It  means  that the
  333. preceding character set  is to be  duplicated 0 or  more times
  334. in  corresponding  (next)  positions  of  the  password.   For
  335. example:
  336.  
  337.      $a *     -  a password of arbitrary length, consisting
  338.                     of lower-case Latin letters;
  339.      [ab] *   -  space character, a, b, aa, ab, ba, bb,
  340.                  aaa, ...
  341.      [$a $A] [$a $A $1] *   -  "identifier", i. e. a sequence
  342.                  of letters and digits with a letter at first
  343.                  position.
  344.  
  345. Note that password of zero length is physically meaningful and
  346. is not always the same as no password at all.
  347.  
  348. The length   of duplication    is computed   automatically  by
  349. options,   on   the   basis   of   given  maximum  and minimum
  350. password  length.  Note,   that  these   parameters  influence
  351. only  password  length,  generated   with  the  use   of   '*'
  352. character,  and  are   not  taken  into  account for password,
  353. consisting  of  words  or   static  characters  only.  It   is
  354. recommended to use  '*' as wide  as possible. This  is because
  355. it allows to perform the  most  powerful search. Although  the
  356. constructions '? *'  and '? ? *'  seem  to be alike   from the
  357. logic standpoint,   the first   one will   be searched through
  358. faster.
  359.  
  360. Current   restriction:  '*'   can  be   the  last    character
  361. in the line only.
  362.  
  363. 4.2.2. Dictionary words and their modifiers
  364.  
  365. The  words  present  several  consecutive  characters  of  the
  366. password as  opposed to  character set.  Two dictionaries  are
  367. supported in PCL library: main (with ordinary words, as usual)
  368. and  user  (where  special  information  can  be  stored,  for
  369. example, names,  dates, etc.),  though there  is no difference
  370. between them.
  371.  
  372. Dictionary is a text  file, consisting of words,  separated by
  373. the  end-of-line  characters.  Both  DOS-format  (CR/LF)   and
  374. UNIX-format  (LF)  files  may  be  used.  It  is desirable (to
  375. increase search rate, among other factors) to use words of the
  376. same (lower) case in dictionaries.
  377.  
  378. Thus, there are two macros:
  379.  
  380.     $w    a word from the main dictionary;
  381.     $u    a word from the user dictionary.
  382.  
  383. It is known that altered words are often used as passwords. So
  384. to determine such passwords a  whole set of word modifiers  is
  385. put into use. Among these are:
  386.  
  387.     .u (upper)        to upper-case;
  388.     .l (lower)        to lower-case;
  389.     .t (truncate)        to truncate up to the given length;
  390.     .c (convert)        to convert the word;
  391.     .j (joke)        to upper-case some letters;
  392.     .r (reverse)        to reverse the word;
  393.     .s (shrink)        to shrink the word;
  394.      .d (duplicate)           to duplicate the word.
  395.  
  396. Modifiers may have parameters, written in round brackets.  For
  397. modifiers, intended for use with single letters, the number of
  398. the letter can be considered as a parameter; no parameters  or
  399. null  parameter  means  "the  whole  word".  Letters  can   be
  400. numerated both from the beginning of the word and from the end.
  401. The end of the word is denoted with the character '-'.
  402.  
  403. There are only three such modifiers for today: .u, .l, .t. So,
  404. use
  405.  
  406.      .u  or .u(0)     to upper-case the whole word (PASSWORD);
  407.      .u(1), .u(2)     to upper-case only the first (the second)
  408.                       letter (Password, pAssword);
  409.      .u(-), .u(-1)    to upper-case the last (the next to last)
  410.                       letter (passworD, passwoRd);
  411.      .t(-1)           to truncate the last letter in the word
  412.                       (passwor).
  413.  
  414. The  other  modifiers  operate  with  the whole words only and
  415. their parameters give the  way of modification. The  following
  416. modifier parameters are specified for today:
  417.  
  418.      .j(0) or .j      to upper-case odd letters (PaSsWoRd);
  419.      .j(1)            to upper-case even letters (pAsSwOrD):
  420.      .j(2)            to upper-case vowels (pAsswOrd);
  421.      .j(3)            to upper-case consonants (PaSSWoRD);
  422.      .r(0) or .r      to reverse the word (drowssap);
  423.      .s(0) or .s      to reduce the word by discarding vowels
  424.                       unless the first one is a vowel
  425.                       (password -> psswrd, offset -> offst);
  426.      .d(0) or .d      to duplicate the word (passwordpassword);
  427.      .d(1)            to add reversed word (passworddrowssap);
  428.      .c(<number>)     to convert all the letters in the word
  429.                       according to the appropriate conversion
  430.                       string (see section 4.3.3).
  431.  
  432. All the  modifiers operate   adequately with  both Latin   and
  433. national  letters,  provided  that   the  rules  of   national
  434. character sets definition are observed.  Clearly there can  be
  435. more than one modifier  (the number  of  consecutive modifiers
  436. is   limited by  63, which  is unlikely  to be  exceeded). For
  437. example: (let $w mean a password):
  438.  
  439.     $w.u(1).u(-)        PassworD
  440.     $w.s.t(4)        pssw
  441.     $w.t(4).s        pss
  442.  
  443. Special character sets are  also considered as words,  because
  444. they can be  of arbitrary length.  They are denoted  as $s(1),
  445. $s(2),  ...  and  depend  on  peculiarities of the task. Three
  446. special sets are specified for this program:
  447.  
  448.     $s(1)        the first letter of the password
  449.     $s(2)        two first letters
  450.     $s(3)        the third letter.
  451.  
  452. You are to bear in mind that special character sets are  worth
  453. using only in a certain  position, namely $s(1) and $s(2)  are
  454. to  be  the  first  (they  are  of  1 and 2 characters length,
  455. respectively), and $s(3)  is to occupy  the third position  in
  456. the password (its length is 1), so the following examples  are
  457. meaningful:
  458.  
  459.     $s(2) $s(3)
  460.     $s(2) ?
  461.     $s(1) ? $s(3)
  462.     $s(1) ??
  463.     ?? $s(3).
  464.  
  465. All the other, even though they can generate passwords, cannot
  466. be considered valid.
  467.  
  468.  
  469. 4.2.3. Permutation brackets
  470.  
  471. The problem is  widely met, when  you remember your  password,
  472. but it is not do for some reason. Probably, you have  mistaken
  473. while typing it. This program has its own algorithm to restore
  474. such passwords. The following typing mistakes are  considered:
  475. two neighboring  letters are  swapped (psasword),  a letter is
  476. omitted (pasword), an unneeded letter is inserted  (passweord)
  477. or  one  letter  is  replaced  with  another  (passwird). Such
  478. password changes will be referred to as permutations.
  479.  
  480. To indicate the beginning and  the end of that portion  of the
  481. password where permutations could appear, permutation brackets
  482. '{' and '}'  are used. The  bracket '}' can  be followed by  a
  483. number of permutations  (1 by default),  separated by a  point
  484. (or in round brackets). The physical meaning of the number  of
  485. permutations  is  the  number  of  simultaneous  mistakes. For
  486. example:
  487.  
  488.      {abc}  -  182  (different)  passwords  will  be obtained,
  489. including:
  490.  
  491.      bac, acb           2 swaps;
  492.      bc, ac, bc         3 omissions;
  493.      aabc, babc ...     4 * 26 - 3 insertions;
  494.      bbc, cbc ...       3 * 25 replacements;
  495.      abc                the desired word;
  496.  
  497.      {password}.2 or {password}(2) - the following words  will
  498. be generated: psswrod, passwdro, paasswor, etc.;
  499.  
  500.      {$w} - all  the words, containing  one mistake, from  the
  501. main  dictionary.
  502.  
  503. Notes:
  504. 1) It  is obvious  that some  passwords will  be obtained more
  505. than once, so  the larger is  the number of  permutations, the
  506. larger is the  number of replicas.  Efforts were made  in this
  507. program to reduce replicas, but they are purely empirical  and
  508. were made for  two permutations at  most. In other  words, for
  509. the  large  numbers  there  is  no certainty that a particular
  510. password  cannot  be  discarded  erroneously.  Fanatics of the
  511. theory  of  combinations  can  compute  the  exact  number for
  512. {password}.3, for  example, then  I'll be  able to  compare it
  513. with that one obtained by the program.
  514.  
  515. 2) For insertion  and replacement you  are to know  the set of
  516. characters to be inserted or  replaced. In the event this  set
  517. is not specified explicitly (see section 4.3.4), this  program
  518. forms  it  automatically  for  character  sets, in relation to
  519. standard set these characters  are from (i. e.  for {password}
  520. $a will be inserted, for {Password} [$a $A] will be inserted).
  521. The similar operation  with words is  performed, based on  the
  522. first word from the dictionary with modifiers being taken into
  523. account. In the event this set is specified explicitly, it  is
  524. just the set to be used.
  525.  
  526. 3)  Current  restriction  is  that  the  character  '{'   must
  527. necessarily   be   the     first    in   the     line.    Such
  528. expressions   as  good_{password} remain to be  supported, but
  529. {good}_password is quite possible.
  530.  
  531. 4.3. Dictionaries and character sets definitions
  532.  
  533. All  the  definitions  are  set  in  the beginning of password
  534. definition file up to the characters '##'.
  535.  
  536. 4.3.1. Dictionaries definition
  537.  
  538. The main and user dictionaries in use (see section 4.2.2)  are
  539. initially defined as  usual. It is  necessary only if  you are
  540. going  to  use  words  from  the  dictionaries  when  defining
  541. passwords, i. e. $w or $u.
  542.  
  543. The dictionaries are given as follows:
  544.  
  545. $w = "main.dic"                    # main dictionary
  546. $u = "c:\\dict\\user.dic"          # user dictionary
  547.  
  548. File  name  is  to  be  quoted,  the path characters are to be
  549. shielded. Long file names are adequate for Windows 95/98  only
  550. (not for MSDOS or Windows NT).
  551.  
  552. 4.3.2. Definition of the character sets in use
  553.  
  554. Then character  sets in  use are  defined, as  usual. They are
  555. classified  in  two   groups:  predefined  and   user-defined.
  556. Predefined sets include:
  557.  
  558.     $a    lower-cased Latin letters, 26 letters in all;
  559.     $A    upper-cased Latin letters, 26 letters in all;
  560.      $!       special characters {}:"<>?[];\',./~!@#$%^&*()_+`-=\|,
  561.               32 characters in all;
  562.     $1    digits, 10 digits in all.
  563.  
  564. User-defined sets include
  565.  
  566.     $i    lower-cased letters of national alphabet;
  567.     $I    upper-cased letters of national alphabet;
  568.      $o       additional character set (for example, any
  569.               non-typable characters).
  570.  
  571. Character sets are defined as follows:
  572.  
  573.     $<charset> = [ <single characters or character sets> ]
  574.  
  575. To  put  this  another  way,  character  set  is  written   as
  576. combination of characters (see section 4.2.1), for example:
  577.  
  578.     $i = [ !"#$%&'()*+,-./`abcdefghijklmnoq]
  579.     $o = [$! $1 \FF]
  580.  
  581. NOTES:
  582. 1) Any  character sets  are allowed  to be  defined, including
  583. pre-defined.  For  example,    you  may  include    additional
  584. characters, such as space character or \FF into the set $!
  585.  
  586. 2) When the sets $i and $I are being defined, the function  of
  587. switching between lower/upper  case is defined  automatically.
  588. So it is important to have letters being ordered uniformly  in
  589. these sets.
  590.  
  591. The full character  set '?', consisting  of [$a $A  $1 $!$i $I
  592. $o] (just such an order is of importance in the next section),
  593. is never formed until all the characters are defined.
  594.  
  595. 4.3.3. Definition of conversion modifiers
  596.  
  597. Then  conversion  modifiers  .c  may  be  defined (see section
  598. 4.2.2) in relation to the certain character set ?. It is
  599. performed with the line of the form
  600.  
  601.      ?.c(<a number>) = "<conversion string>"
  602.  
  603. Any  character  from  the   whole  set  is  converted into  an
  604. appropriate  character,   occupying  the   same  position   in
  605. transformation string. For example, let
  606.  
  607.     ?      = [1234567890], then
  608.     ?.c(0) = "!@#$%^&*()"
  609.  
  610. gives transformation  identical to  that for  Shift keystroke.
  611. The characters '\' and ' " ' are to be shielded in  conversion
  612. string. The numbers of modifiers may vary from 0 to 255.
  613.  
  614. 4.3.4.Special character sets definition
  615.  
  616. Among special character sets are:
  617.  
  618.      $v  - a set of vowels (in all alphabets being used). It is
  619.            needed only when .s and .j modifiers are used.
  620.      $p - a set for insertion and replacement for  permutation
  621.           brackets. It is needed only if automatic  generation
  622.           of this set does not  suit you for some reason  (see
  623.           section 4.2.3).
  624.  
  625. These sets are defined in a similar way to the other character
  626. sets.
  627.  
  628. 4.4. USEFUL EXAMPLES OF PASSWORD DEFINITION
  629.  
  630. 0) The most  typical password definition,  similar to that  of
  631. preceding program versions,  is "$s(2) $s(3)  $a *". It  means
  632. that the first three characters, obtained by the program,  are
  633. to be used and lower-cased Latin letters are to be added next.
  634.  
  635. The second password character is determined rather inaccurately, so the
  636. following definition is recommended also:
  637.  
  638.     "$s(1) $a $s(3) $a *"   (don't use quotes!)
  639.  
  640. If you are searching  through some other character  set, don't
  641. forget to set it to  the second position of the  password. For
  642. example:
  643.  
  644.     "$s(1) [$! $1] $s(3) [$! $1] *"   (don't use quotes!)
  645.  
  646. 1) Let me cite ZEXPL2L program specification:
  647. "Let  you  have  an  archive  with  the  password looking like
  648. "Heaven!!!", but you have forgotten, how many !s were there in
  649. the end and  what kind of  letters lower- or  upper-cased were
  650. used: "HeAvEn!!!", "Heaven!" or "HeAven!!!!". But  fortunately
  651. you remember your password to  be 10 characters at most  and 7
  652. characters at  least." This  password will  be written  in PCL
  653. language as follows:
  654.  
  655.      "He [aA] v [eE] n ! *" (don't use quotes!)
  656. and options -l7 -g10.
  657.  
  658. Suppose that among other things you have mistaken while typing
  659. the main part of the  password. So the following one  is worth
  660. attention:
  661.  
  662.      "{He [aA] v [eE] n} ! *" (don't use quotes!)
  663. and options -l7 -g10.
  664.  
  665. 2) One more citation from the same specification: "Let you
  666. have  two   variants  of   the  password   string:   "myprog",
  667. "MyProg", "my_prog" and "My_Prog".
  668.  
  669. It will be written as:
  670.  
  671.     "[mM] y [_ \0] [pP] rog" (don't use quotes!)
  672.  
  673. 3)  It  is  often  recommended  to  use  two meaningful words,
  674. separated   by   certain   character,   as   a  password.  The
  675. description is as following:
  676.  
  677.     "$w [$1 $!] $w" or
  678.     "$w.u(1) [$1 $!] $w.u(1)" (don't use quotes!)
  679.  
  680. It should be mentioned that  both $w are distinct here  (these
  681. are  distinct  words),  so  a  total  of  20000 * 42 * 20000 =
  682. 1.68E10 passwords (if there  are 20000 dictionary words)  will
  683. be generated , i. e. it takes, on the average, less than a day
  684. to crack passwords, considered to be extremely hard for  crac-
  685. king. Thus,  just two  successive words  are cracked  42 times
  686. faster.
  687.  
  688. 4)  Password  consists  of  exactly  six letters from national
  689. alphabet:
  690.  
  691.     "$i $i $i $i $i $i"    (don't use quotes!)
  692.  
  693. But "$i *" and -16 -g6 options are far more efficient.
  694.  
  695. 6) You remember your password to be  "MyVeryLongGoodPassword",
  696. but it is  not do for  some reason. Try  to use the  following
  697. ones:
  698.  
  699.     "{MyVeryLongGoodPassword}"    2382 passwords in 1 second
  700.     "{MyVeryLongGoodPassword}.2"    2836413 passwords in 1 minute
  701.     "{MyVeryLongGoodPassword}.3"    ??? passwords in 2-3 days
  702.  
  703. 7) You know you password to be a meaningful word with a  digit
  704. inserted elsewhere. The definition file is:
  705.  
  706. $p = [$1]    # the insertion set is defined as a set of digits
  707. ##
  708. {$w}
  709.  
  710. 8) Syllable attack. You are to set up a dictionary of possible
  711. syllables of your language and then to search through all  the
  712. meaningful words by proceeding as follows:
  713.  
  714.     $u        # monosyllabic words
  715.     $u$u        # disyllabic words
  716.     $u$u$u        # etc.
  717.     $u$u$u$u
  718. ...
  719.  
  720. 9) In order to run your program in parallel on two  computers,
  721. give them the following definition files:
  722.  
  723.     "[abcdefghijklm] $a *"    for the first one,
  724.     "[nopqrstuvwxyz] $a *"    for the second one.
  725.  
  726. Proceed similarly with n computers.
  727.  
  728. 5. Frequently Asked Questions (FAQ)
  729.  
  730. 1. A message "No  matching passwords" is displayed.  Following
  731. are possible reasons and how to clear them away:
  732.  
  733. 1) If there are many files in your archive then the error  may
  734. be caused by automatic mode imperfection. Start with  removing
  735. all large files (exceeding 1015K) from your archive.
  736.  
  737. 2) If this  effort is of  no avail, then  you are to  run YAAC
  738. program with -v option and to analyze output information. Such
  739. information includes file name, followed by four digits and  a
  740. set of the first  two possible password characters,  which has
  741. become appropriate after this file is processed, for each file
  742. from the password. So, if this information is somewhat like:
  743.  
  744. FILE1.EXT 1881 940 2050 1504
  745. po = 422
  746. pp = 421
  747. pr = 427
  748. ps = 426
  749. pt = 425
  750. pu = 424
  751. pv = 431
  752. pw = 430
  753. px = 429
  754. py = 428
  755. pz = 435
  756. FILE2.EXT 959 479 1045 764
  757. FILE3.EXT 1317 658 1435 1052
  758.  
  759. so, it is evident that the set of the first two characters for
  760. FILE2.EXT became empty and this  file IS NEEDED TO BE  REMOVED
  761. from the archive. It may  similarly occur that a set  of first
  762. two characters becomes stable  for a while and  then decreases
  763. drastically; when such is the case you should better to remove
  764. this file too. If this effort is of no avail, remove the first
  765. half of files from the archive.
  766.  
  767. 3) Non-standard characters were used in the password.  Include
  768. all possible characters into the $o set.
  769.  
  770. 4) Do away with automatic mode of operation.
  771.  
  772. 2. How to break and then to continue the search.
  773.  
  774. The program may be broken painlessly once the message "Testing
  775. XX-chars passwords..." is displayed,  and then the search  may
  776. be continued with - lXX option (both XX are equal).
  777.  
  778. 3. How to resume search from the password XXX?
  779.  
  780. In no way as yet. I hope, it will be done in the PCL 3.0.
  781.  
  782. 4. The program has been searching for 10 days, but my password
  783. is not yet at hand.
  784.  
  785. Alas! It can't be helped. May be your password is too long, or
  786. the search set  is wrong,   or the first  two characters   are
  787. determined incorrectly. See section 5.1.
  788.  
  789. 5. There are  files with different  passwords in the  archive.
  790. What am I to do?
  791.  
  792. You  will  have  to  search  files  with  the  same  passwords
  793. manually. It seems likely that  you are to leave the  smallest
  794. file in  the archive,  find its  password and  check the  rest
  795. files for being suitable  for this password. After  all remove
  796. all these files and repeat the procedure once again.
  797.  
  798. 6. My password is "abc", but your program cannot find it.
  799.  
  800. If the password consists of less than four characters, it  may
  801. be determined as "doubled"  password (two times longer).  This
  802. is not an error but a small inherited defect.
  803.  
  804. 6a. My password is "A$rrr", but your program does not find it,
  805. though the  set   of the  first   two characters  is  produced
  806. correctly.
  807.  
  808. Try -n option. Without  this option the program  truncates the
  809. set of two  first possible characters  up to recommended  set,
  810. which does  not need  to include  the second  character '$' of
  811. your password.
  812.  
  813. 6b. I have  tested your program.  To my mind,  your program is
  814. nothing  but  utter  error,  it  cannot  even find "aaa2"-like
  815. password.
  816.  
  817. RTFM. Distributive file password.def searches through only lo-
  818. wer-cased Latin  letters. Change  your password  definition to
  819. "$s(2) $s(3) [$a $1] *" and all will be OK.
  820.  
  821. 7. I have one plaintext file. Will it be useful to me?
  822.  
  823. Surely.   Use  plain-text  crackers  at   http://www.password-
  824. crackers.com
  825.  
  826. 8. Your  program does  not want  to recognize  self-extracting
  827. archive.
  828.  
  829. You  are  to  find  the  beginning  of  archived  data  (60 EA
  830. signature) and to  remove all the  code from the  beginning up
  831. to this position, thus you get an ordinary ARJ-archive.
  832.  
  833. 9. Is there any option to save program operation log?
  834.  
  835. Probably, you have never dealt with UNIX. Use
  836.  
  837. yaac [parameters] > log_file.
  838.  
  839. If you don't like this, you may use "tee" utility.
  840.  
  841. 10. Your program operates in Windows NT two times slower  than
  842. in MS-DOS.
  843.  
  844. Allow this program the 100% CPU  time. All you have to do   is
  845. to click  mouse button  at the  free space  in the taskbar and
  846. then click at your program window.
  847.  
  848. 11. Your   distribution kit   is packed   with a   password in
  849. itself!!! I do not find it funny!
  850.  
  851. You are reading this file, so you have solved this problem.
  852.  
  853. 6. Conclusions and perspectives
  854.  
  855. 1) It is  likely that it  is possible to  design more or  less
  856. adequate function for block ratio determination and thereby to
  857. do away with inconvenient nonautomatic mode of operation.
  858.  
  859. 2) It seems to me, it  is possible to extend the algorithm  in
  860. use in order to make it search through 7-9 character passwords
  861. only and then to  search through nothing but  those passwords,
  862. the first 7-9 characters of which meet certain criterion. This
  863. will allow to  increase the effective  length of the  password
  864. being searched up to 13-15 characters.
  865.  
  866. 3) The password is cracked very easy if there are files   with
  867. the compression ratio equal to 1 (-m0) in the archive.
  868.  
  869. Archive encryption  with GOST  (-hg option)  was included into
  870. ARJ 2.55 version. Supporting  this kind of encryption  by this
  871. program, if at all, will decrease its rate by 1-2 orders.
  872.  
  873. 7. On PCL library
  874.  
  875. PCL library is  distributed by the  author as FREEWARE  in the
  876. form of source text as well as .LIB (for Borland, Watcom C) or
  877. .a (for DJGPP)  files. The reference  to PCL as  an obligatory
  878. requirement for your programs. Now it is under development, so
  879. I'll be very glad to any comments on defect and errors in  the
  880. program, especially to those guiding the way for  improvements
  881. and supplements.
  882.  
  883. 8. How to contact the author
  884.  
  885. Only by e-mail.
  886. FIDO:    2:5030/145.17
  887. e-mail:    psw@ssl.stu.neva.ru
  888. WWW:    http://www.ssl.stu.neva.ru/psw/
  889.  
  890. Program support URL is:
  891.      http://www.password-crackers.com/crack/yaac.html
  892.  
  893. A lot of free, benchmarked password crackers you'll find at
  894.  
  895. http://www.password-crackers.com
  896.  
  897. YAAC is a  FREE program, so  all the claims  will be rejected.
  898. Anyway,  I'll  be  very  grateful  for  pointing  out manifest
  899. errors, such as:
  900.  
  901. - the program hangs up while searching (the lack of  displayed
  902. messages is not an evidence of hangup);
  903.  
  904. -  the   program  cannot   find  such-and-such   password   in
  905. such-and-such  archive,  although  the  set  of  characters in
  906. search is specified correctly  and the first three  characters
  907. produced are right;
  908.  
  909. - the  third character  of the  password is  determined incor-
  910. rectly;
  911. - in non-automatic mode  the program cannot find  password for
  912. the scheme outlined above.
  913.  
  914. I'll  be  also  glad   to  any  constructive  suggestions   on
  915. improvements of program operation.
  916.  
  917. The  discussion  of  program  algorithm  and  souse  codes  is
  918. possible  if  you  are   just   interested  in  this   program
  919. development.
  920.  
  921. 9. Acknowledgments
  922.  
  923. I am grateful to
  924. Anatoly Skoblov for the  program BRKARJ, which impelled  me to
  925. write this program;
  926.  
  927. Mikael Malakhov  for the  program ARJ_PSW,  which source codes
  928. were used;
  929.  
  930. Vyacheslav  Semenov  for  his  invaluable  help  in heuristics
  931. improving;
  932.  
  933. all those who were assisting, advising and testing YAAC.
  934.  
  935. Good luck!
  936.  
  937. Pavel Semjanov, St.-Petersburg
  938.