Quebrando A Senha De Arquivos Rar Por Brute Force

Introdução

Em um post anterior do blog [1], eu mostrei como quebrar senhas de arquivos ZIP por força bruta (ataque de dicionário), utilizando somente o programa unzip. Hoje irei mostrar o mesmo procedimento, porém para arquivos RAR e utilizando o unrar.

O método

Como já abordei esse assunto em [1], neste post serei bem breve. Primeiramente, vamos observar a man page do comando unrar e verificar se há opções úteis para nosso objetivo:

$ unrar --help
UNRAR 4.20 beta 3 freeware      Copyright (c) 1993-2012 Alexander Roshal

Usage:     unrar <command> -<switch 1> -<switch N> <archive> <files...>
               <@listfiles...> <path_to_extract\>

<Commands>
  ...
  t             Test archive files
  ...

<Switches>
  ...
  id[c,d,p,q]   Disable messages
  ...
  p[password]   Set password
  ...

Temos a opção t para testar um arquivo, a opção p para passar a senha do rar e as flags cdpq que habilitam/desabilitam certas mensagens do programa unrar.

Vejamos alguns exemplos:

# Compactando arquivo qualquer
$ rar -p a arquivocomsenha.rar /etc/passwd
12345        # Senha: 12345

# Descompactando com senha inválida
$ unrar -idq -psenhainvalida t arquivocomsenha.rar
CRC failed in the encrypted file etc/passwd. Corrupt file or wrong password.

# Descompactando com senha correta
$ unrar -idq -p12345 t arquivocomsenha.rar
$

Os resultados nos mostram que: ao se utilizar uma senha incorreta, o unrar retorna “CRC failed in the…” em stderr. Por outro lado, ele retorna vazio quando a senha está correta.

Assim, temos nosso algoritmo:

1) Se há palavras no dicionário para ler:
   Leia uma palavra do dicionário de palavras para a variável senhateste.
2) Execute: unrar -idq -psenhateste t arquivocomsenha.rar.
3) Verifique se a saída é vazia.
   Se sim, a senha do arquivo é senhateste e finalize o processo.
4) Volte para o passo 1.

Isto é o suficiente para montarmos nosso shell script para quebrar a senha de um arquivo RAR por força bruta.

O script: quebrarar.sh

#!/bin/bash
# [quebrarar.sh]
# Quebra senha de arquivos rar pelo método
# da força bruta.
#
# [Autor]
# Marcos Paulo Ferreira (Daemonio)
# undefinido gmail com
# https://daemoniolabs.wordpress.com
#
# [Uso]
# $ ./quebrarar.sh arquivocomsenha.rar wordlist.txt
# ....
# ....
# Senha: "senha"
#
# Versão 1.0, by daemonio @ Sun Jul 29 19:57:33 BRT 2012
#

# Arquivo rar com senha
ARQUIVORAR=

# Dicionário de senhas
WORDLIST=

# Recebe cada senha do dicionário
senhateste=

# Função de ajuda.
function show_help {
echo 'quebrarar.sh - by daemonio'
echo '[uso] $ ./quebrarar.sh arquivocomsenha.rar wordlist.txt'
exit 1
}

# Função chamada quando se interrompe
# o script com um ctrl+c. Essa função mostra
# a senha usada no momento da interrupção.
function pegarctrlc {
echo "[+] Processo abortado. Senha atual: $senhateste"
exit 1
}

# Instala um signal handler pro ctrl+c
trap pegarctrlc SIGINT

# Obtém os parâmetros.
ARQUIVORAR="$1"
WORDLIST="$2"

# Flag. Tem valor 1 se a senha foi quebrada e
# 0 caso contrário.
SENHAQUEBRADA=0

# Testa os parâmetros.
[ -e "$ARQUIVORAR" ] && [ -e "$WORDLIST" ] || show_help

# Processo de quebragem.
echo '[+] Espere. Quebrando a senha...'
while read senhateste
do
    SAIDA=$(unrar -idq -p"$senhateste" t "$ARQUIVORAR" 2>&1)
    # Se a variável estiver vazia é porque a senha foi quebrada.
    [ -z "$SAIDA" ] && SENHAQUEBRADA=1 && break
done < "$WORDLIST"

# Informa se a senha foi quebrada ou não.
if [ "$SENHAQUEBRADA" = '1' ]
then
    echo '[+] Senha quebrada: '$senhateste
else
    echo '[+] Senha NAO quebrada. Tente outra lista de palavras.'
fi

#EOF

Salve o código como quebrarar.sh e dê permissão de execução:

$ chmod +x quebrarar.sh

Para executar o script, passe o arquivo rar como primeiro parâmetro e a lista de palavras como segundo:

$ ./quebrarar.sh arquivocomsenha.rar senhas.txt
[+] Espere. Quebrando a senha...
[+] Senha quebrada: 12345

Podemos aumentar a eficiência desse script utilizando o xargs para executá-lo em várias threads. O conceito por trás do xargs pode ser visto em [2] e também em [1].

A seguir o código para a versão paralelizável desse script:

#!/bin/bash
# [xquebrarar.sh]
# Quebra senha de arquivos rar pelo método
# da força bruta.
#
# [Autor]
# Marcos Paulo Ferreira (Daemonio)
# undefinido gmail com
# https://daemoniolabs.wordpress.com
#
# [Uso]
# $ ./xquebrarar.sh arquivocomsenha.rar senha1, senha2, ..., senhaN
# ....
# ....
# Senha: "senha"
#
# Versão 1.0, by daemonio @ Sun Jul 29 20:30:49 BRT 2012
#

# Função de ajuda.
function show_help {
echo 'xquebrarar.sh - by daemonio'
echo '[uso] $ ./quebrarar.sh arquivocomsenha.rar senha1, senha2, ..., senhaN'
exit 1
}

# Obtém os parâmetros.
ARQUIVORAR="$1"

# Flag. Tem valor 1 se a senha foi quebrada e
# 0 caso contrário.
SENHAQUEBRADA=0

# Testa os parâmetros.
[ -e "$ARQUIVORAR" ] || show_help

# Desloca os parâmetros.
shift

# Lê as senhas da linha de comando.
for senhateste in $*
do
    SAIDA=$(unrar -idq -p"$senhateste" t "$ARQUIVORAR" 2>&1)
    # Se a variável estiver vazia é porque a senha foi quebrada.
    [ -z "$SAIDA" ] && SENHAQUEBRADA=1 && break
done

# Informa se a senha foi quebrada ou não.
if [ "$SENHAQUEBRADA" = '1' ]
then
    echo '[+] Senha quebrada: '$senhateste
    # Executando esse script no xargs precisamos matar
    # o próprio xargs (processo pai) para finalizar as
    # outras threads.
    kill $PPID
fi

#EOF

Salve o código como xquebrarar.sh e dê permissão de execução:

$ chmod +x xquebrarar.sh

Em seguida execute-o pelo xargs: (obs: 10 threads)

$ xargs -a senhas.txt -n 20 -P 10 ./xquebrarar.sh arquivocomsenha.rar
[+] Senha quebrada: 12345
Terminated

A versão paralelizável é mais rápida do que a sequencial, e isso já era de se esperar. Os tempos de execução para duas versões são semelhantes àqueles vistos em [1]. Para o ataque ser eficiente é necessário ter uma boa lista de senhas.

Referências

[1] Quebrando a Senha de Arquivos ZIP Por Brute Force by Daemonio (Acessado em: Julho/2012)
https://daemoniolabs.wordpress.com/2012/05/27/quebrando-a-senha-de-arquivos-zip-por-brute-force/

[2] Paralelismo com o xargs by Daemonio (Acessado em: Julho/2012)
https://daemoniolabs.wordpress.com/2012/04/07/paralelismo-com-o-xargs/

4 pensamentos sobre “Quebrando A Senha De Arquivos Rar Por Brute Force

    • Olá Vinicius,

      tenho pouca experiência em fazer vídeos mas posso tentar depois.

      Porém, basicamente, a ideia do método é: dado um arquivo rar com senha, como se comporta o programa unrar caso ele receba uma senha válida? e uma inválida? Vemos que quando passamos uma senha inválida ele retorna “CRC failed in the encrypted”, e com isso, já obtemos um teste para saber se a senha passada é válida ou não.

      Baseando nisso, o script lê várias opções de senha de um arquivo texto e testa uma por uma usando o programa unrar. Caso o unrar não retorne “CRC failed in the encrypted”, então a senha do arquivo foi encontrada.

      Se você tem um arquivo encriptado e queira descobrir a senha, você precisará do shell script (não precisa entender como ele funciona, basta executá-lo) e de um dicionário de senhas (você encontra isso facilmente na inernet). Feito isso, basta digitar no terminal do Linux:

      $ ./quebrarar.sh arquivocomsenha.rar senhas.txt

      onde quebrar.sh é o script, o arquivocomsenha.rar é seu arquivo encriptado e senhas.txt é seu dicionário de senhas. O processo de quebra pode demorar um pouco, dependendo do dicionário de dados. Existem programas mais rápidos para isso, se a necessidade for tanta, então aconselho baixá-los.

      Abraços

    • Ola Antonio,

      crie um arquivo de teste (com senha conhecida), gere uma wordlist contendo a senha do arquivo e depois teste o script. Se você tentou quebrar a senha de um arquivo e não conseguiu é porque a wordlist não continha a senha.

      Abraços

Deixe um comentário