|
|
Message-ID: <8F156B13FF6944658191371F8E0535EB@ath64dual>
Date: Fri, 28 Aug 2009 22:51:09 -0500
From: "JimF" <jfoug@....net>
To: <john-users@...ts.openwall.com>
Subject: Re: Thoughts and questions on creation of a 'generic' MD5 hash set format (to handle 'all' of them)
I have an 'early' implementation of this 'format'. The signature of the
format will be:
md5_gen(#)hhhhhhhhhh[$salt]
I will be 'reserving' md5_gen(0) to md5_gen(99) as 'official' john
built-in's. Then numbers from 100 and above are 'free' to be used as this
get implemented to do 'parsing' of new formats.
Right now, I have some a few working 'built-ins'. I have gotten these
working (so far)
-----------------------------------
md_gen(0) raw-md5.
-----------------------------------
Example file:
:md5_gen(0)064073c4d0e99bab8859e2fcc8be8cc2
:md5_gen(0)c71f4d38b705ace587af6e832382b5c2
:md5_gen(0)ee02441dfa07fec75e96042d1a479d4c
Hashing to 000666 000667 000668 respectively
-----------------------------------
md_gen(1) vBulletin md5(md5($p).$s) (fixed 3 byte salt)
-----------------------------------
Example file:
:md_gen(1)4fa66f89927a8bba0d4b3f477ab4aa4d$(l1
:md_gen(1)5312a79a95622b7b325e88673a7271d7$:8,
:md_gen(1)1e0376e1a76aeffa81f1d7aa3e964fbf$:(!
:md_gen(1)bb1bc4530600b2402e9f954adf9ca637$>d~
Hashing to aaron123 welcome99 1tiger and vegetto respectively
NOTE the ':' within the salts on the 2nd and 3rd lines. Even though I
'show' a colon as the leading character of this file type, I have had to
write code to force a different character to be used to separate fields (I
simply do not show that in this example).
-----------------------------------
md_gen(2) joomla md5($p.$s)
-----------------------------------
Example file:
:md5_gen(2)c8f61cb8a3648319f12cf4dbf8e0a165$03xLGL6ps1HTtwde
:md5_gen(2)fc2536dea62d94979e1191ef065b08ab$041JUW9P1bWFWLsM
:md5_gen(2)771bbb21360e48ef6a463467dcabc608$049uv7gKFZxdioNDS66DpmF3I3vYRcph
:md5_gen(2)4b3dd8d77fe88e999ce5ffd76d175e61$07MYjRsnk1jAzqwy
:md5_gen(2)81e89a1e0a3412f88f3ee61a175a8fdc$1PgdI3G2Aph3xh5N52zTRdN3dgm0fwcl
The last one hases to villalba1
the program will 'auto' detect a md5_gen(#) signature, without having to be
'told'. It will take the first one that it finds in the file, and once it
finds one, it will only accept more lines of that time. I think there will
have to be a command line option added, to force john to use a specific
'generic' hash.
This code is still simply prototype code. But I do hope to get something
working to where I can release at a patch level shortly. I will fill in
about a dozen or so 'common' format. I have the code split out into 4 files
right now (one is empty, the parser, as it is still more in 'concept'
stage). The files are:
md5_gen_fmt.c This is the main 'format' file. It also contains the
'working primative' functions, and contains a few additional 'setup'
functions. There is also some configuation data that is setup, once we know
which version of format we want.
md5_gen.h This file lists the functions used between the processes. It has
the declaration of the working primative' functions, and data structures
used to pass information back and forth.
md5_gen_preloads.c This file contains one function:
md5_gen_RESERVED_PRELOAD_SETUP and lots of arrays of data. The function
validates that the requested md5_gen(#) function is coded for, and calls
some helper functions in md5_gen_fmt.c to set it up to properly process this
format. One of the items, is the 'array' of function pointers to the
primatives. So for md5_gen(0) (the raw-md5), the function pointer array is
simply:
MD5_GEN_primative_funcp _Funcs_0[] =
{
MD5GenBaseFunc__clean_input,
MD5GenBaseFunc__append_keys,
MD5GenBaseFunc__crypt,
NULL
};
which is pretty easy to see, simply resets the environment, loads the keys,
and calls crypt. Same as in the 'raw-md5' code.
Finally, md5_gen_parser.c. This one 'will' be the parser. I think we will
have to allow the user to edit john.ini, to add entries to 'describe' the
format. Then the parser will read these ini entries, and call into
md5_gen_fmt.c to setup the environment approprately. It will then PARSE the
format (which will be provided as a string from the .ini file). Thus, if
the format was md5(md5($s.md5($s.$p))) the parser would have to load these
functions:
MD5_GEN_primative_funcp Func_ptrs[] =
{
MD5GenBaseFunc__clean_input,
MD5GenBaseFunc__append_salts,
MD5GenBaseFunc__append_keys,
MD5GenBaseFunc__crypt,
MD5GenBaseFunc__clean_input,
MD5GenBaseFunc__append_salts,
MD5GenBaseFunc__output_2_input_base16, // note, this should probaly be
'renamed', as it 'appends' data.
MD5GenBaseFunc__crypt,
MD5GenBaseFunc__clean_input,
MD5GenBaseFunc__output_2_input_base16,
MD5GenBaseFunc__crypt,
NULL
};
I am pretty sure that a very trivial recusive parser can be fabricated to
convert these simple expressions (if in proper format), into well behaved
code.
Jim.
--
To unsubscribe, e-mail john-users-unsubscribe@...ts.openwall.com and reply
to the automated confirmation request that will be sent to you.
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.