
Existe um arquivo e você precisa extrair o conteúdo, mas a senha é esquecida. Você pode pesquisar no Google e confiar em programas diferentes ( um , dois , três ), mas
A única maneira de quebrar o arquivo RAR é a força bruta.
Dados iniciais
Arquivar, dicionário de senhas (e se você colocar% username% no arquivo, não se esqueça de adicionar os usados com frequência, apenas localmente! ).
Procedimento
De artigos anteriores:
– , 262144 SHA1, WinRAR ( AES) ( ). , CRC32, , . – , , . RAR — « ».
. WinRAR , .
Portanto, o algoritmo na primeira versão será simples: abra o arquivo com senhas e repita as senhas do arquivo morto até que ele quebre.
Não esqueça que usamos o Go .
Arquivo de senha
dictFile, err := os.Open(dictionary)
if err != nil {
log.Fatalln(err)
}
defer dictFile.Close()
Arquivar em si
zipr, err := zip.OpenReader(zipfile)
if err != nil {
log.Fatal(err)
}
E nosso super algoritmo
scanner := bufio.NewScanner(dictFile)
for scanner.Scan() {
pass := scanner.Text()
for _, z := range zipr.File {
z.SetPassword(pass)
_, err := z.Open()
if err == nil {
println("[+] Found password")
println("[+] Password = " + pass)
os.Exit(0)
}
}
E se a senha estiver no arquivo - voila!
Versão blackjack e multithreading
Existe uma versão ainda mais interessante - com multithreading e goroutines.
O repositório possui 63 utilitários mais sofisticados em vários tópicos. E se você tem idéias o que adicionar - escreva.
UPD
Subtração múltipla é a maneira mais confiável de evitar erros. Obrigado a todos que responderam.