Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250610013519.GA319@openwall.com>
Date: Tue, 10 Jun 2025 03:35:19 +0200
From: Solar Designer <solar@...nwall.com>
To: john-users@...ts.openwall.com
Subject: Re: Problem running john with --rules=oi

On Sat, Jun 07, 2025 at 01:41:37PM -0700, jeff wrote:
> Hearing nothing, I decided to try a newer john.

I'm sorry no one replied, but trying a newer version was a good idea for
other reasons anyway.

> john.exe --fork=34 --format=NT --verbosity=2 --no-log 
> --wordlist=\pw-crack\dictionaries\rockyou2021.dic --rules=oi 
> \pw-crack\pwn_ntlm_75.7m.rawest

I don't recall if we ever mentioned this before, but I guess that if you
add --keep-guessing you'll be able to use --fork=128 or whatever you
said your actual CPU count was.  The reason you had to use lower process
counts is probably primarily that their total memory usage would grow as
they remove the hashes they cracked from memory, which causes
copy-on-write, or in other words unsharing of previously shared memory.
When you let them keep the cracked hashes in memory (and maybe crack
them again), you avoid this unsharing.  (At least this is what happens
on Linux.  I'm not sure about Cygwin's fork() emulation on Windows.)

--keep-guessing may not have been a good idea for you early on when
cracks were extremely frequent, so .pot file would end up with too many
duplicates.  But now that successful cracks are relatively rare, it may
work better (and you can remove the duplicates later with "unique").

> After a few days, I got one more hash, and then the memory usage dropped 
> by 50%.

This suggests that some of the child processes terminated, which may be
because they actually completed their portions of work, or for some
other reasons.  You may try omitting --no-log and see what's in the log
files for those processes.

Indeed, given that you show progress at 0.26% it's not expected any
would complete their portions so soon.  With skipping a lot of rules or
candidates (see below), it is possible that the split in candidates
generated would be very uneven, however this would only result in very
different termination times when targeting a slow hash (or many salts),
not in your case when NT hashes are roughly as quick to compute as words
are to skip.

So it does look like in your case something went wrong.

> I tried to see the status of john running by pressing space and I got no 
> response from the prompt where I started it.

This may sometimes be because the rules the main process was going
through at that time end up rejecting all input words.  We have many
"reject this word if/unless" conditions within the "oi" rules -
specifically, for would-be overstrikes/inserts beyond the input word
length.  Say, a rule trying to change a character at position 14 yet
having to skip millions of shorter input words may appear as
stuck/unresponsive until it's done with that.  This is indeed
unfortunate from user experience perspective.

Or it could be for some other reason...  The above is just the common,
known-shortcoming not-a-code-bug reason.

Note that the "oi" ruleset starts by targeting lower character positions
and progresses towards higher ones.  This means that it will encounter
those large blocks to skip later on.

OTOH, it looks like the wordlist rockyou2021.dic does have some long
lines in it, and in fact you show some on the status line.  So such
complete unresponsiveness is unexpected for it, and you're probably
hitting some other issue.

Potentially something related to the ultimate crash on --restore:

> >33 4468g 2:07:01:07 0.26% (ETA: 2027-10-30 03:52) 0.02256g/s 2319Kp/s 
> >2319Kc/s 173585GC/s ultimatehunterjumpemr
> >      0 [main] john-avx2-omp 2045 
> >fhandler_dev_zero::fixup_mmap_after_fork: requested 0x6FFF77FE0000 != 
> >0x0 mem alloc base 0x0, state 0x10000, size 17547038097408, Win32 
> >error 1455

Somehow this lists a size of 17 TB, but this could be just address space
rather than memory, so isn't necessarily a problem.

> >    304 [main] john-avx2-omp 2045 
> >K:\pw-crack\john_bleeding_alt\run\john-avx2-omp.exe: *** fatal error 
> >in forked process - recreate_mmaps_after_fork_failed
> >      0 [main] john 2012 dofork: child -1 - forked process 39004 died 
> >unexpectedly, retry 0, exit code 0x100, errno 11
> >1: fork: Resource temporarily unavailable

This suggests a bug in Cygwin's fork() emulation, or maybe the system
running out of memory.  It's surprising it would already at load time
if it didn't for 2 days of running with the same process count before.

A guess is it has something leftover from the previous failed run still
in memory maybe?  Can you try this --restore thing after a reboot, or at
least carefully check that you have the usual amount of free memory and
nothing still running in Task Manager?

I also recommend --keep-guessing and moving to Linux.  Doing this on
Windows is a stretch (but maybe is part of the fun/challenge for you?)

Alexander

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.