Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Fri, 17 Dec 2010 11:05:12 +0100
From: bartavelle <bartavelle@...il.com>
To: john-users@...ts.openwall.com
Subject: Re: several problems with JtR + jumbo 9 and/or omp-des-7

On 12/17/2010 06:52 AM, Solar Designer wrote:
> I can't reproduce this.  It works fine for me, cracking all 3107 hashes
> in my test file.  That's with a pure wordlist, no rules, though.  Maybe
> there's a bug in the wordlist buffering introduced in the jumbo patches?
> A bug that is easily seen only in conjunction with rules and with a tiny
> wordlist?  This code looked unreliable to me...

It seems to me the cmp_all logic is wrong. Output seems to be setup like
this, according to x86-64.S :

	movdqa a,  (128*base)+output8x(%rip);			\
	movdqa a3,  (128*base)+16+output8x(%rip);		\
	movdqa b, (128*base)+32+output8x(%rip);			\
	movdqa b3, (128*base)+32+16+output8x(%rip);		\
	movdqa c, (128*base)+64+output8x(%rip);			\
	movdqa c3, (128*base)+64+16+output8x(%rip);		\
	movdqa d, (128*base)+96+output8x(%rip);			\
	movdqa d3, (128*base)+96+16+output8x(%rip);

A00A01A02A03A04A05A06A07B00B01B02B03B04B05B06B07C00C01C02C03C04C05C06C07D00D01D02D03D04D05D06D07
A10A11A12A13A14A15A16A17B10B11B12B13B14B15B16B17C10C11C12C13C14C15C16C17D10D11D12D13D14D15D16D17
A20A21A22A23A24A25A26A27B20B21B22B23B24B25B26B27C20C21C22C23C24C25C26C27D20D21D22D23D24D25D26D27
A30A31A32A33A34A35A36A37B30B31B32B33B34B35B36B37C30C31C32C33C34C35C36C37D30D31D32D33D34D35D36D37

The comparison code was :

for(;i<(NT_NUM_KEYS/2);i+=4)
if(b==output8x[i] || b==output8x[i+1] || b==output8x[i+2] ||
b==output8x[i+3] || b==output8x[i+4] || b==output8x[i+5] ||
b==output8x[i+6] || b==output8x[i+7])
                        return 1;

It looks like it compares the A's B's C's and D's of the first row,
while it should compare the B's of all four rows. I don't know how that
could work for you.

This seems to work for me :

for(;i<(NT_NUM_KEYS/8);i++)
		if(b==output8x[i*32+8] || b==output8x[i*32+9] || b==output8x[i*32+10]
|| b==output8x[i*32+11] || b==output8x[i*32+12] || b==output8x[i*32+13]
|| b==output8x[i*32+14] || b==output8x[i*32+15])

I probably just produced the wrong fix, as you say it works well for
you, while it should not work at all based on my understanding of the
current code.

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.