From 30371bef109685004bd5e2d524e95f33dc3b50ea Mon Sep 17 00:00:00 2001 From: jsteube Date: Wed, 14 Sep 2016 17:40:39 +0200 Subject: [PATCH] Allow words of length > 32 in wordlists for -a 0 for slow hashes if no rules are in use or a : rule is in the rulefile --- OpenCL/amp_a0.cl | 22 ++++++++++++++++++++ src/hashcat.c | 53 ++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 64 insertions(+), 11 deletions(-) diff --git a/OpenCL/amp_a0.cl b/OpenCL/amp_a0.cl index 279c4e723..290f4833a 100644 --- a/OpenCL/amp_a0.cl +++ b/OpenCL/amp_a0.cl @@ -18,6 +18,28 @@ __kernel void amp (__global pw_t *pws, __global pw_t *pws_amp, __global kernel_r const u32 pw_len = pws[gid].pw_len; + if (rules_buf[0].cmds[0] == RULE_OP_MANGLE_NOOP && rules_buf[0].cmds[1] == 0) + { + pws_amp[gid].i[ 0] = pws[gid].i[ 0]; + pws_amp[gid].i[ 1] = pws[gid].i[ 1]; + pws_amp[gid].i[ 2] = pws[gid].i[ 2]; + pws_amp[gid].i[ 3] = pws[gid].i[ 3]; + pws_amp[gid].i[ 4] = pws[gid].i[ 4]; + pws_amp[gid].i[ 5] = pws[gid].i[ 5]; + pws_amp[gid].i[ 6] = pws[gid].i[ 6]; + pws_amp[gid].i[ 7] = pws[gid].i[ 7]; + pws_amp[gid].i[ 8] = pws[gid].i[ 8]; + pws_amp[gid].i[ 9] = pws[gid].i[ 9]; + pws_amp[gid].i[10] = pws[gid].i[10]; + pws_amp[gid].i[11] = pws[gid].i[11]; + pws_amp[gid].i[12] = pws[gid].i[12]; + pws_amp[gid].i[13] = pws[gid].i[13]; + pws_amp[gid].i[14] = pws[gid].i[14]; + pws_amp[gid].i[15] = pws[gid].i[15]; + + return; + } + u32 w0[4]; u32 w1[4]; diff --git a/src/hashcat.c b/src/hashcat.c index b3ea7dd23..f22cd43c6 100644 --- a/src/hashcat.c +++ b/src/hashcat.c @@ -3683,17 +3683,6 @@ int main (int argc, char **argv) uint pw_min = hashconfig_general_pw_min (hashconfig); uint pw_max = hashconfig_general_pw_max (hashconfig); - if (hashconfig->attack_exec == ATTACK_EXEC_INSIDE_KERNEL) - { - switch (attack_kern) - { - case ATTACK_KERN_STRAIGHT: if (pw_max > PW_DICTMAX) pw_max = PW_DICTMAX1; - break; - case ATTACK_KERN_COMBI: if (pw_max > PW_DICTMAX) pw_max = PW_DICTMAX1; - break; - } - } - /** * charsets : keep them together for more easy maintainnce */ @@ -4988,6 +4977,48 @@ int main (int argc, char **argv) return -1; } + /** + * If we have a NOOP rule then we can process words from wordlists > length 32 for slow hashes + */ + + int has_noop = 0; + + for (uint kernel_rules_pos = 0; kernel_rules_pos < kernel_rules_cnt; kernel_rules_pos++) + { + if (kernel_rules_buf[kernel_rules_pos].cmds[0] != RULE_OP_MANGLE_NOOP) continue; + if (kernel_rules_buf[kernel_rules_pos].cmds[1] != 0) continue; + + has_noop = 1; + } + + if (has_noop == 0) + { + switch (attack_kern) + { + case ATTACK_KERN_STRAIGHT: if (pw_max > PW_DICTMAX) pw_max = PW_DICTMAX1; + break; + case ATTACK_KERN_COMBI: if (pw_max > PW_DICTMAX) pw_max = PW_DICTMAX1; + break; + } + } + else + { + if (hashconfig->attack_exec == ATTACK_EXEC_INSIDE_KERNEL) + { + switch (attack_kern) + { + case ATTACK_KERN_STRAIGHT: if (pw_max > PW_DICTMAX) pw_max = PW_DICTMAX1; + break; + case ATTACK_KERN_COMBI: if (pw_max > PW_DICTMAX) pw_max = PW_DICTMAX1; + break; + } + } + else + { + // in this case we can process > 32 + } + } + /** * OpenCL platforms: detect */