¿Hay alguna forma conocida de exportar la clave privada de mi billetera desde la aplicación "Bitcoin Android" (com.bitcoinandroid)?

Hace un tiempo, instalé la aplicación Bitcoin para Android y moví 5 BTC en ella. Avance rápido hasta ahora, nuevo teléfono, nueva ROM y la aplicación parece no estar dispuesta a actualizar su cadena de bloques, lo que significa que no tengo forma de mover mis BTC a otro lugar.

Mirando la fuente, se basa en una versión anterior de BitcoinJ, donde el archivo de la billetera es esencialmente una clase de billetera serializada.

Una mirada al archivo de la billetera en sí no es demasiado amigable, aunque estoy seguro de que la clave privada está en algún lugar allí en una forma relativamente sencilla.

Entonces, eso me deja con las siguientes posibilidades:

  • escriba una pequeña aplicación Java que se vincule con la misma versión de BitcoinJ, cargue el archivo Wallet, tome la clave privada e imprímala.

  • escriba un script realmente tonto que extraiga cada secuencia de 32 bytes del archivo de la billetera, trátelo como una clave privada, asígnelo a una clave pública, consulte blockexplorer.com para ver si hay alguna actividad asociada con él. O simplemente importe cada una de esas secuencias a un cliente bitcoin y déjelo sufrir.

Antes de embarcarme en Quest For Five Bitcoins, ¿ya existe algo que pueda analizar los archivos de la billetera BitcoinJ y exportar claves desde ellos?

(1) actualizar la cadena de bloques no es un requisito previo para poder enviar las monedas que ya están allí, (2) no está claro lo que hizo: hizo una copia de seguridad de esa aplicación y sus datos, y la reinstaló en el nuevo teléfono?
Muchos clientes no enviarán transacciones a menos que el cliente sepa que tiene la cantidad requerida de monedas; Sospecho que ese es el caso aquí.
@Lohoris No me di cuenta de eso. Tanto el envío de monedas como la actualización de blockchain están fallando, y dibujé un vínculo de causalidad donde no existía ninguno, probablemente ambos fallaron debido a un tercer factor.
Tenga en cuenta que el enlace a esta aplicación (en la pregunta anterior) está roto. Si alguien pudiera arreglarlo, sería genial.

Respuestas (4)

Escribí una respuesta detallada a esto hace algún tiempo. Esencialmente, deberá rootear su teléfono y extraer el archivo de la billetera con apd.

Una vez que tenga eso, puede decodificarlo mirando dentro de la billetera serializada con un depurador Java adjunto en busca de una referencia ECKey. Luego, una vez que tenga la clave privada, simplemente puede entregársela a MtGox, quien hará la decodificación por usted y luego podrá transferir los bitcoins donde desee.

Además, el proyecto BitCoinJ contiene varias herramientas de ejemplo útiles en el árbol de fuentes. Quizás usar uno de esos lo ayudará con la deserialización.

ADVERTENCIA : rootear el teléfono sin usar exploits borra su memoria. Entonces, a menos que esté ejecutando un teléfono ya rooteado o una versión de Android explotable, no puede hacer eso.
@Lohoris Así es. Sin embargo, el OP parece indicar que el teléfono es una ROM más antigua, posiblemente con 2.1, 2.2 que son explotables. El artículo vinculado proporciona un enfoque de enraizamiento probado que no borró la memoria interna.
Gracias, esto es probablemente lo más cerca que estamos de una solución de recuperación lista para usar. (Mis teléfonos están rooteados, por lo que obtener/hacer una copia de seguridad de la billetera no es un problema).
DumpWallet hizo el truco. Solo tuve que eliminar "00" de mi priv: campo de clave para que a Mt.Gox le gustara mi clave privada. ¡Gracias de nuevo!
@Metal No te preocupes, me alegro de haber ayudado
Aquí hay una herramienta que descarga el formato protobuf sin recurrir a un depurador de Java: github.com/lloeki/bitcoinj-wallet-dump

Primero probaría la opción 1, si puede encontrar la versión correcta de la biblioteca. Estaría dispuesto a intentar crear una herramienta de propósito general para hacerlo, pero no tengo un teléfono con Android. ¿Hay alguna manera de crear una billetera nueva y vacía y poner una copia en línea en algún lugar junto con una o dos direcciones de bitcoin correspondientes?

Si está intentando la opción 2, probablemente conozca al menos una de las direcciones en la billetera, por lo que no necesitaría presionar blockexplorer para cada suposición. Es de esperar que las claves privadas se distribuyan uniformemente a través de la billetera, por lo que una vez que haya encontrado algunas, puede hacer conjeturas más inteligentes sobre dónde están el resto.

Sí... la opción 1 es la menos loca de las 2. En este punto, probablemente pasé más tiempo esperando que algo ya existiera del que hubiera pasado haciéndolo yo mismo, así que supongo que dejaré de ser flojo. :)

[Respuesta obsoleta, ver más abajo]

Como actualización: las versiones actuales de la aplicación Bitcoin tienen una función de "Copia de seguridad de las claves". Esto escribe una copia de seguridad de todas las claves en la billetera en un archivo llamado bitcoin-wallet-keys-YYYY-MM-DD(usando la fecha actual) en el almacenamiento del teléfono, que luego puedes copiar o transferir donde quieras. El archivo está encriptado con una contraseña que usted proporciona; se puede descifrar manualmente usando OpenSSL, ejecutando

openssl enc -d -aes-256-cbc -a -in bitcoin-wallet-keys-YYYY-MM-DD

Después del descifrado, el archivo es solo una lista de claves privadas, una por línea, en el formato comprimido base 58 estándar (que comienza con K). Puede importar esas claves a otra billetera. En bitcoin-qt, usaría el importprivkeycomando de la consola.

Actualización adicional : a partir de Bitcoin Wallet 3.53, la función "Back Up Keys" descrita anteriormente aparentemente ya no existe.

Esto funcionó muy bien para mí con algunas billeteras antiguas de Litecoin y Dogecoin respaldadas desde Android. La copia de seguridad de Bitcoin creada casi al mismo tiempo se descifra (la salida comienza con un encabezado 0x0A 0x16 seguido de un texto sin formato org.bitcoin.production), pero el resto es binario.
Además, en Bitcoin Wallet 4.49, la copia de seguridad se realiza a través de Safetyla entrada del menú.
lo que abre SSL ahora está en formato protobuff. Ver bitcoin.stackexchange.com/questions/29518/…

Este script parece hacer el trabajo

https://github.com/jleni/wallet-decrypt

Solo necesita crear una copia de seguridad y le devolverá un mnemotécnico que puede usar en electrum o electrum cash.