1
0
mirror of https://github.com/hashcat/hashcat.git synced 2024-12-01 20:38:14 +00:00

Add functionality in test.pl to allow empty hash returns. This is required to enable hash-mode depending password length checks. NTLM supports just 27 characters in optimized mode, but single mode would produce 32, resulting in a non found password

This commit is contained in:
jsteube 2018-12-21 09:48:51 +01:00
parent c5fb8ab2e8
commit 73af860f43
5 changed files with 26 additions and 22 deletions

View File

@ -8,7 +8,6 @@
#include "modules.h" #include "modules.h"
#include "bitops.h" #include "bitops.h"
#include "convert.h" #include "convert.h"
#include "interface.h"
#include "shared.h" #include "shared.h"
static const u32 MODULE_VERSION_CURRENT = 520; static const u32 MODULE_VERSION_CURRENT = 520;

View File

@ -371,6 +371,7 @@ default: $(HASHCAT_FRONTEND)
clean: clean:
$(RM) -f $(HASHCAT_FRONTEND) $(RM) -f $(HASHCAT_FRONTEND)
$(RM) -f $(HASHCAT_LIBRARY) $(RM) -f $(HASHCAT_LIBRARY)
$(RM) -f modules/*.dll
$(RM) -f modules/*.so $(RM) -f modules/*.so
$(RM) -f obj/*.o $(RM) -f obj/*.o
$(RM) -f *.bin *.exe $(RM) -f *.bin *.exe

View File

@ -28,6 +28,9 @@ my $module = sprintf ("m%05d.pm", $MODE);
eval { require $module; } or die "Could not load test module: $module\n$@"; eval { require $module; } or die "Could not load test module: $module\n$@";
exists &{module_generate_hash} or die "Module function 'module_generate_hash' not found\n";
exists &{module_verify_hash} or die "Module function 'module_verify_hash' not found\n";
if ($TYPE eq 'single') if ($TYPE eq 'single')
{ {
single (@ARGV); single (@ARGV);
@ -49,8 +52,6 @@ else
sub single sub single
{ {
exists &{module_generate_hash} or die "Module function not found\n";
my $len = shift; my $len = shift;
undef $len unless is_count ($len); undef $len unless is_count ($len);
@ -62,6 +63,7 @@ sub single
my $cur_len = $len // $i; my $cur_len = $len // $i;
my $word = random_numeric_string ($cur_len); my $word = random_numeric_string ($cur_len);
my $hash = module_generate_hash ($word); my $hash = module_generate_hash ($word);
next unless defined $hash; next unless defined $hash;
@ -72,15 +74,13 @@ sub single
sub passthrough sub passthrough
{ {
exists &{module_generate_hash} or die "Module function not found\n"; while (my $word = <>)
while (<>)
{ {
chomp $_; chomp $word;
next if length $_ > 256; my $hash = module_generate_hash ($word);
my $hash = module_generate_hash ($_); next unless defined $hash;
print "$hash\n"; print "$hash\n";
} }
@ -88,8 +88,6 @@ sub passthrough
sub verify sub verify
{ {
exists &{module_verify_hash} or die "Module function not found\n";
my $hashes_file = shift; my $hashes_file = shift;
my $cracks_file = shift; my $cracks_file = shift;
my $out_file = shift; my $out_file = shift;
@ -98,33 +96,35 @@ sub verify
my $hashlist; my $hashlist;
while (<IN>) while (my $line = <IN>)
{ {
s/[\n\r]*$//; $line =~ s/\n$//;
$line =~ s/\r$//;
push (@{$hashlist}, $_); push (@{$hashlist}, $line);
} }
close IN; close (IN);
open (IN, '<', $cracks_file) or die "$cracks_file: $!\n"; open (IN, '<', $cracks_file) or die "$cracks_file: $!\n";
open (OUT, '>', $out_file ) or die "$out_file: $!\n"; open (OUT, '>', $out_file ) or die "$out_file: $!\n";
while (<IN>) while (my $line = <IN>)
{ {
s/[\n\r]*$//; $line =~ s/\n$//;
$line =~ s/\r$//;
my $hash = module_verify_hash ($_); my $hash = module_verify_hash ($line);
next unless defined $hash; next unless defined $hash;
next unless is_in_array ($hash, $hashlist); next unless is_in_array ($hash, $hashlist);
print OUT "$_\n"; print OUT "$line\n";
} }
close IN; close (IN);
close OUT; close (OUT);
} }
sub is_in_array sub is_in_array

View File

@ -5,7 +5,7 @@
## License.....: MIT ## License.....: MIT
## ##
OPTS="--quiet --force --potfile-disable --runtime 400 --hwmon-disable" OPTS="--quiet --force --potfile-disable --runtime 400 --hwmon-disable -O"
TDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" TDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

View File

@ -15,6 +15,8 @@ sub module_generate_hash
{ {
my $word = shift; my $word = shift;
return if length $word > 27;
my $hash = md4_hex (encode ("UTF-16LE", $word)); my $hash = md4_hex (encode ("UTF-16LE", $word));
return $hash; return $hash;
@ -33,6 +35,8 @@ sub module_verify_hash
my $new_hash = module_generate_hash ($word); my $new_hash = module_generate_hash ($word);
return unless defined $new_hash;
return unless $new_hash eq $hash; return unless $new_hash eq $hash;
return $new_hash; return $new_hash;