Como fazer brute force em um endereço de Bitcoin

How to perform bitcoin seed brute force.

Você está participando de uma caçada ao tesouro no qual uma vez por dia uma palavra de uma seed de Bitcoin é revelada. Com acesso a essa seed você poderá mover o saldo em bitcoin presente no endereço. 

Para exemplo suponha que o endereço bc1qc6p8xd60laywglel9rl5a4jxaqtq0z2uqmrzsd possui uma bela quantia em bitcoin e você deseja descobrir a seed desse endereço para sacar tudo.

Suponha também que você conhece 11 das 12 palavras da seed e apenas depois de receber dicas você sabe ordem exata de apenas 9 delas:

flag  army  oppose  enroll  ______  output  enjoy  chimney  wink  design  blast  path

Na seed acima as palavras chimney e wink você não sabe a posição correta delas e está faltando uma palavra! Então utilizando o script seedrecover.py você pode tentar realizar uma ataque de força bruta nessa seed. 

O script pode ser encontrado em: https://github.com/3rdIteration/btcrecover , é recomendado ter python 3.10 instalado portanto após configurar seu ambiente baixe o repositório e pelo terminal (ou prompt de comando) navegue até a pasta btcrecover-1.11.0

Para instalar os requerimentos da ferramenta use o comando: pip install -r requirements-full.txt

Atenção, este tutorial é para você aprender a realizar um ataque de força bruta em qualquer endereço de Bitcoin. Portanto será ensinado utilizar apenas um comando da ferramenta, existem formas mais eficientes e seguras de utilizar a ferramenta para os casos de tentativa de recuperação de palavras da seed perdidas… leia sua documentação para mais informações.

O comando abaixo auxilia na execução de força bruta em qualquer seed de Bitcoin:

[python seedrecover.py –no-dupchecks –mnemonic-length 12 –language EN –dsw –wallet-type bip39 –addrs bc1qc6p8xd60laywglel9rl5a4jxaqtq0z2uqmrzsd –addr-limit 1 –passphrase-list tokens_passphrase.txt –tokenlist tokens_seed.txt –no-eta]

Não entrarei em detalhes sobre os argumentos utilizados, leia o help da ferramenta para mais informações pois aqui será ensinado apenas o básico para quebrar uma seed de 12 palavras. Mas é importante saber que definindo o argumento –addr-limit 1 significa que a ferramenta vai buscar apenas o primeiro endereço do caminho de derivação, caso você não tem certeza que seja o primeiro endereço coloque um valor maior como 10 ou mais, mas  isso impactará drasticamente no tempo. No comando acima substitua o endereço bc1q… pelo o endereço que deseja descobrir a seed.

Esse cenário apresentado o procedimento será rápido já que conhecemos uma boa quantidade de palavras e suas posições. Portanto em alguns cenários o processo será muito demorado e o uso de GPU é ideal para acelerar. Caso deseja suporte  a GPU leia a documentação da ferramenta.

Para fins didáticos vamos direto ao ponto. Então suponha também que a seed possui uma passphrase! Assim antes de rodar o código acima no terminal, crie no mesmo diretório do script um arquivo com nome tokens_passphrase que deve conter as possíveis senhas uma por linha utilizada na seed, exemplo:

A imagem acima contém 5 possíveis senhas (passphrase), mas você pode utilizar aqueles famosos arquivos wordlist de senhas vazadas que você encontra pela internet.

Já o arquivo tokens_seed.txt deve conter as palavras da seed que você conhece e possíveis palavras que podem pertencer a seed (você pode copiar o conteúdo completo do arquivo BIP39, mas para acelerar o tutorial colocamos apenas + 4 possíveis palavras que podem estar na seed). Como você já conhece as posições de algumas palavras basta formatar a posição com caracteres especiais.

^palavra     significa que é a primeira palavra da seed.

^2^palavra    significa que é a segunda palavra da seed.

palavra$    significa que é a última palavra da seed.

+ palavra    significa que a palavra está na seed mas você não sabe posição.

palavra    significa que você quer testar essa palavra na seed.

Atenção: como sabemos que determinada palavra está presente na seed você deve fixar ela com símbolo “+ ” (sem aspas) mesmo sabendo a posição exata, isso elimina que outras palavras sejam testadas na mesma posição. Se você tiver dúvida entre algumas palavras em determinada posição você pode utilizar algo como (não esqueça dos espaços):+ ^7^palavra1 ^7^palavra2 ^7^palavra3

Com tudo configurado execute o script passando os argumentos mencionado acima. A imagem abaixo ilustra o resultado da execução da ferramenta:

Seed para o endereço encontrada: 

flag army oppose enroll bamboo output enjoy wink chimney design blast path

Passphrase encontrada: nakamoto

Acessando o site https://iancoleman.io/bip39/ e informando essa seed, em “Derived Addresses” você encontrará o mesmo endereço que utilizamos como argumento na seed para BIP84.

*Atenção não utilize a seed utilizada nesse tutorial com finalidade de exemplo e não envie moeda para seus endereços pois agora ela é pública e deve ser descartada. Caso deseja doar um valor visite https://www.limontec.com/p/doacoes.html




Source link