sexta-feira, 25 de julho de 2014

Quebrando Hash mais rapido

É uma dica simples, que facilita no processo de quebra de hash , a primeira coisa a se fazer é transformar os bytes hexadecimais em bytes ascii decimais novamente, isso porque quando geramos hash de alguma string normalmente os bytes ascii do hash passam por um processo de codificação hexadecimal, isso para tornar legível para nos, exemplo:


sem o hexdigest (codificação hexadecimal do hash) o hash fica praticamente ilegível, e seu tamanho é de somente 16 bytes a.k.a 128 bits, com o hexdigest esse tamanho dobra , e isso significa perda de tempo, além de aumentar o tempo para verificar se é o mesmo hash , ainda tem o processo de codificação para hexadecimal.

Obtendo bytes de um hash (hexdigest):

  • Cada par de bytes é igual a um byte ascii

Hash -> a4fec756f8b408ee13309128960f9be8

a4 -> 164
fe -> 254
c7 -> 199
56 -> 86
f8 -> 248
b4 -> 180
08 -> 8
ee -> 238
13 -> 19
30 -> 48
91 -> 145
28 -> 40
96 -> 150
0f -> 15
9b -> 155
e8 -> 232
Em perl:
foreach(grep { /\S/ } split /(..)/, $ARGV[0]){
 print hex;
 print ',';
}

print "\n";

Podemos usar esse método para quebrar diversos tipos de hash , md5,mysql,sha1,sha256 e por ai vai.

Programa pra brute-force em hash MD5 sem usar hexdigest:
#!/usr/bin/perl
# [hc0der.blogspot.com]
use Time::HiRes qw/time/;
use Digest::MD5 qw/md5/;

my $start_t = time();

sub gen_hash {
 my $h;
 foreach(grep { /\S/ } split /(..)/, shift){
  $h .= chr hex;
 }
 return $h;
}

my $hash = gen_hash($ARGV[1]);

open(W,'<'.$ARGV[0]) || die($!);
while(<W>){
 chomp;
 if($hash eq md5($_)){
  print "\n\n\tHash Cracked: ".$_."\n\n";
  last;
 }
}

my $end = time() - $start_t;

print "$end Seconds ...\n";
Modo de uso: ./md5.pl [wordlist] [hash-md5]
Lembrando que mostrar progresso é igual a perder muita velocidade.

Utilizei esse mesmo metodo para descriptografar hash no tutorial de como quebrar hash de mysql


Nenhum comentário:

Postar um comentário