|
Message-ID: <CABtNtWFMWhB2ZmrkxMuPvwDGvNoSmwgA05KQYDEO2rCSpTx4yw@mail.gmail.com> Date: Mon, 17 Aug 2015 18:10:52 +0800 From: Kai Zhao <loverszhao@...il.com> To: john-dev@...ts.openwall.com Subject: Re: testing every index (Re: more robustness) Hi Alexander, On Sun, Aug 16, 2015 at 10:16 PM, Solar Designer <solar@...nwall.com> wrote: > Kai, > > On Sun, Aug 16, 2015 at 09:04:26AM +0800, Kai Zhao wrote: >> On Sun, Aug 16, 2015 at 12:33 AM, Solar Designer <solar@...nwall.com> wrote: >> > Have you since implemented testing of every index (in the range of 0 to >> > max_keys_per_crypt) when running with --test-full? Where is it in code? >> > >> > I recall us finding one bug in this way, but I don't see it in code. >> >> Yes, we did. The code is in formats.c:: 1196~1211 >> First, set (max - 1) keys by longcand, then set the last keys which is the >> right key. > > That's not what I had meant. It's not testing every index - it's > testing the last index only, and only with a correct password in it. > > Looks like nothing has been done on the original task, and you have yet > to take care of it. > > We need to test that in every index a correct password is detected as > such, and an incorrect password is detected as such as well. To speed > this up and to mimic actual cracking, you should set and test passwords > in all indices at once. In order to test every index in both ways, you > will need to invoke crypt_all() at least twice. If you do it exactly > twice, then you need to invert the selection of which indices hold > correct vs. incorrect passwords between the two crypt_all() calls. > > Will you implement this soon, please? > I tried to implement this in the following patch: https://github.com/loverszhaokai/JohnTheRipper/commit/794f5ffa998b122e9457c566ee8860d456fe01af There is check_all_even_index() and check_all_odd_index(). I set the correct password to all the even index in check_all_even_index(). for (i = 0; i < max; i++) { if (i % 2 == 0) key = plaintext; else key = longcand(format, i, ml); fmt_set_key(key, i); } And then check all the even index by cmp_one() in check_all_index() for (i = 0; i < max; i++) if ((is_even && i % 2 == 0) || (!is_even && i % 2 == 1)) { if (!format->methods.cmp_one(binary, i)) { snprintf(err_buf, sizeof(err_buf), "cmp_one(%d) failed", i); return err_buf; } } Does this what you mean by testing every index ? Thanks, Kai
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.