|
|
Message-ID: <20141107115516.GA15906@openwall.com>
Date: Fri, 7 Nov 2014 14:55:16 +0300
From: Aleksey Cherepanov <lyosha@...nwall.com>
To: john-dev@...ts.openwall.com
Subject: Re: [RFC] Johnny further development proposal
On Wed, Oct 29, 2014 at 01:56:05PM +0300, Aleksey Cherepanov wrote:
> On Wed, Oct 08, 2014 at 09:58:27AM +0300, Shinnok wrote:
> > 2. Fix any outstanding bugs or crashes (crash on exit while john is running,
> > pause not working, etc..)
>
> I hope there are no outstanding bugs or crashes at the moment. I think
> the crash on exit was due to multithreading. I avoided threading in
> 2012. So I think Johnny does not crash anymore, right?
>
> The threading was intended to unfreeze ui when john produces a lot of
> output. But there was a problem: the main load is not from the output
> itself but it is from handling the output (including placing it into
> the table). I've added hash table and the other way to get output
> (using `john --show` and temporary file) so the handling is really
> fast. It could be improved further but one should move the whole
> handling into other thread, it looks unnecessary complex.
>
> `john --show` needs more explanations: it prints hashes in john's
> canonical form (as they are stored in .pot file) but we have
> original form in the table (these forms are not always equal). To
> solve this, we craft file with hashes that has original hash in 2
> fields: in hash position and in gecos position. `john --show` prints
> gecos unmodified so we get original hash and password.
>
> These are methods:
> void MainWindow::callJohnShow()
> void MainWindow::readJohnShow()
>
> Temporary file is populated in
> void MainWindow::showJohnStarted()
>
> Hm, what if we have two "original" forms of 1 hash?... I have to try.
It works fine.
Though I found some other problems:
I use
QString("%1:%2::%3\n").arg(user).arg(hash).arg(hash)
to construct lines of temporary file for `john --show` so if user or
has %1 inside then line is broken and johnny misses the result. %N and
.arg are not suitable for untrusted data and multiple substitutions.
Example from python repl:
>>> from PyQt4.QtCore import *
>>> QString("%1 %2").arg("%1").arg("asdf")
PyQt4.QtCore.QString(u'asdf %2')
Also I found that temporary files is not removed if program is closed
by ^C on terminal. I guess other signals are handled bad too.
Thanks!
--
Regards,
Aleksey Cherepanov
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.