Una ¿pequeña? Ayuda con diccionario python.

Unforgiven

Bueno no se muy bien como plantear esta pregunta asique voy a contar toda la historia lo más breve posible.
Mi tío no se acuerda de la clave mnemotecnia (passphrase) de su brainwallet de bitcoin.
La hizo hace muchos años en bitadress y no sabe ni lo que tiene dentro (si es que aún lo tiene). Me ha pedido ayuda a mi ya que ha intentado mil combinaciones (más) a mano y no lo logra; es decir, el sabe más o menos que pueden ser 3 o 4 palabras, pero hay miles de combinaciones porque pueden tener espacios, signos de puntuación, o incluso lenguaje 1337.

Aquí es donde entro yo, que no tengo ni **** idea de programación ni nada parecido.
Bueno, aquí la cuestión, he conseguido un programa (no se si se llama así) en python 2.7 que puede hacer esta labor y he conseguido hacerlo correr lo cual para mis conocimientos es un logro enorme. Pero el problema es que el diccionario que es un dictionary.Txt con encriptado utf8 solo introduce las claves que le pongas, es decir si escribo 4 claves 'a' 'b' 'c' y 'd' solo prueba esas 4 claves.

Lo que intento averiguar es si se puede hacer de tal manera que el diccionario pruebe 'a' + 'b', 'a' + 'c' y que introduzca también variantes como espacios o signos de puntuación o lenguaje 1337. Ya que sino tendría que añadir a mano las 30k posibles variaciones (a ojo).

Eso es todo (creo) perdón por el tocho, y por abusar de vuestros conocimientos, de verdad que lo he intentado buscar y me he quedado atascado aquí. De hecho no se si es fácil, difícil o simplemente imposible hacerlo y más con mis nulos conocimientos. Sin más, muchas gracias, seguiré buscando mientras espero vuestras respuestas.

Unforgiven

Bueno a la espera de que alguien ilumine mi camino he encontrado esto> http://es.planetcalc.com/3757 es una calculadora de palabras que me vendr'ia perfecto si no fuera porque se guardan las palabras con espacio entre ellas, sino fuera asi podria utilizarlo introduciendo a mano las muchas variantes, algun consejo?

1 comentario moderado
Mkay

mkay

1 respuesta
JuAn4k4

¿De cuantos bitcoins estamos hablando? A mi si me das 10 te lo hago yo mismo.

1 respuesta
Unforgiven

Bueno primero muchas gracias a todos. Ayer estuve indagando con lo que me dijo #3 en Google. Gracias #4 porque es justo lo que necesito, aunque tengo una duda de noob, esto supongo que tendré que agregarlo al. PY que 'abre' el programa?

#5 pues la verdad que no lo sabe ni él porque fue hace mucho tiempo y además es posible que alguien en estos años haya adivinado por fuerza bruta la clave del brainwallet pues no son muy seguras.

Unforgiven

arreglado (tirando de picaresca española) el tema del diccionario ahora se me plantea otro.
la aplicación busca en blockchain.info y tiene un tiempo de espera de 10 segundos entre comprobaciones lo cual se me hace un poco largo debido a la gran cantidad de posibilidades debidas al retraso de quien creó la cartera.
la misma aplicación tiene la opción de hacerlo con insight.bitpay.com que no tiene ese problema pero al correrlo me dice que le es imposible recibir el balance de la dirección (unable to retrieve adress balance). dejo aqui el código por si algún buen samaritano me echa una mano.

class Insight(BaseBlockExplorer):
STRING_TYPE = "insight"

def __init__(self):
    BaseBlockExplorer.__init__(self)
    self._base_url = "https://insight.bitpay.com"
    self._base_url_received = "{}/api/addr".format(self._base_url)
    self._base_url_balance = "{}/api/addr".format(self._base_url)
    self._received_suffix = "/totalReceived"
    self._balance_suffix = "/balance"

def open_session(self):
    return BaseBlockExplorer.open_session(self)

def close_session(self):
    return BaseBlockExplorer.close_session(self)

def get_balance(self, public_address):
    try:
        balance = BaseBlockExplorer.get_balance(self, public_address)
        btc_balance = self.satoshi_to_btc(balance)
    except Exception as e:
        raise
    return btc_balance

def get_received(self, public_address):
    try:
        received = BaseBlockExplorer.get_received(self, public_address)
        btc_received = self.satoshi_to_btc(received)
    except Exception as e:
        raise
    return btc_received
Unforgiven

Bueno acaba de dar la historia un giro radical. Ésta brainwallet se creó (creo) con bitadress.org (digo creo porque creo que es la única que estaba operativa en 2011). la cuestión es que tanto esa web como el script que estoy utilizando en python usan a día de hoy sha256, sin embargo allá por 2011 utilizaba sha1 con lo cual ya podía estar poniendo bien la contraseña que jamás iba a aparecer la misma dirección. Así que, y ahora sí que necesito devuestra ayuda ¿cómo puedo arreglar ésto?

Usuarios habituales

  • Unforgiven
  • JuAn4k4
  • Mkay
  • amfro