Gibt es eine bekannte Möglichkeit, meinen privaten Brieftaschenschlüssel aus der „Bitcoin Android“-App (com.bitcoinandroid) zu exportieren?

Vor einiger Zeit habe ich die Bitcoin-Android-App installiert und 5 BTC darauf bewegt. Schneller Vorlauf bis jetzt, neues Telefon, neues ROM, und die App scheint überhaupt nicht bereit zu sein, ihre Blockchain zu aktualisieren, was bedeutet, dass ich keine Möglichkeit habe, meine BTCs woanders hin zu verschieben.

Wenn man sich die Quelle ansieht, basiert sie auf einer frühen Version von BitcoinJ, bei der die Wallet-Datei im Wesentlichen eine serialisierte Wallet-Klasse ist.

Ein Blick in die Wallet-Datei selbst ist nicht allzu freundlich, obwohl ich sicher bin, dass der private Schlüssel irgendwo in einer relativ einfachen Form darin ist.

Damit bleiben mir folgende Möglichkeiten:

  • Schreiben Sie eine kleine Java-App, die mit derselben Version von BitcoinJ verknüpft ist, laden Sie die Wallet-Datei, holen Sie sich den privaten Schlüssel und drucken Sie ihn aus.

  • Schreiben Sie ein wirklich dummes Skript, das jede 32-Byte-Sequenz aus der Wallet-Datei extrahiert, behandeln Sie es als privaten Schlüssel, ordnen Sie es einem öffentlichen Schlüssel zu, überprüfen Sie blockexplorer.com auf alle damit verbundenen Aktivitäten. Oder importieren Sie einfach jede dieser Sequenzen in einen Bitcoin-Client und lassen Sie es leiden.

Bevor ich mich auf die Suche nach fünf Bitcoins mache, gibt es da draußen bereits etwas, das BitcoinJ-Wallet-Dateien parsen und Schlüssel daraus exportieren kann?

(1) Das Aktualisieren der Blockchain ist keine Voraussetzung, um die bereits vorhandenen Münzen wegschicken zu können, (2) es ist etwas unklar, was Sie getan haben: Sie haben diese Anwendung und ihre Daten gesichert und auf dem neuen Telefon neu installiert?
Viele Kunden senden keine Transaktionen, es sei denn, der Kunde weiß, dass er über die erforderliche Menge an Coins verfügt; Ich vermute, dass dies hier der Fall ist.
@Lohoris Das war mir nicht klar. Sowohl das Senden von Münzen als auch die Aktualisierung der Blockchain schlagen fehl, und ich habe eine Kausalitätsverbindung gezogen, wo keine existierte, beide schlagen wahrscheinlich stattdessen aufgrund eines dritten Faktors fehl.
Beachten Sie, dass der Link zu dieser App (in der obigen Frage) defekt ist. Wenn das jemand reparieren könnte, wäre das super.

Antworten (4)

Ich habe vor einiger Zeit eine ausführliche Antwort darauf geschrieben. Im Wesentlichen müssen Sie Ihr Telefon rooten und die Wallet-Datei mit apd extrahieren.

Nachdem Sie das erhalten haben, können Sie es entschlüsseln, indem Sie in der serialisierten Brieftasche mit einem angehängten Java-Debugger nach einer ECKey-Referenz suchen. Sobald Sie den privaten Schlüssel haben, können Sie ihn einfach an MtGox übergeben, das die Entschlüsselung für Sie durchführt, und dann können Sie die Bitcoins übertragen, wo immer Sie möchten.

Außerdem enthält das BitCoinJ-Projekt mehrere nützliche Beispielwerkzeuge im Quellbaum. Vielleicht hilft Ihnen die Verwendung eines davon bei der Deserialisierung.

WARNUNG : Das Rooten des Telefons ohne Verwendung von Exploits löscht seinen Speicher. Solange er also kein bereits gerootetes Telefon oder eine ausnutzbare Android-Version betreibt, kann er das nicht tun.
@Lohoris Ganz so. Das OP scheint jedoch darauf hinzuweisen, dass das Telefon ein älteres ROM ist, auf dem möglicherweise 2.1, 2.2 ausgeführt wird, die ausnutzbar sind. Der verlinkte Artikel bietet einen getesteten Rooting-Ansatz, der den internen Speicher nicht löscht.
Danke, das ist wahrscheinlich das, was einer vorgefertigten Wiederherstellungslösung am nächsten kommt. (Meine Telefone sind gerootet, daher ist das Abrufen / Sichern der Brieftasche kein Problem.)
DumpWallet hat es geschafft. Ich musste nur "00" aus meinem priv: Schlüsselfeld entfernen, damit Mt.Gox meinen privaten Schlüssel mag. Danke noch einmal!
@Metal Keine Sorge - froh, geholfen zu haben
Hier ist ein Tool, das das Protobuf-Format ausgibt, ohne auf einen Java-Debugger zurückzugreifen: github.com/lloeki/bitcoinj-wallet-dump

Ich würde zuerst Option 1 ausprobieren, wenn Sie die richtige Version der Bibliothek finden können. Ich wäre bereit, ein Allzweck-Tool dafür zu entwickeln, habe aber kein Android-Telefon. Gibt es eine Möglichkeit, eine neue, leere Brieftasche zu erstellen und eine Kopie zusammen mit einer oder zwei entsprechenden Bitcoin-Adressen irgendwo online zu stellen?

Wenn Sie Option 2 versuchen, kennen Sie wahrscheinlich mindestens eine der Adressen in der Brieftasche und müssten daher nicht für jede Vermutung den Blockexplorer drücken. Sie würden erwarten, dass die privaten Schlüssel gleichmäßig über die Brieftasche verteilt sind. Wenn Sie also einige gefunden haben, können Sie klügere Vermutungen darüber anstellen, wo sich der Rest befindet.

Ja ... Option 1 ist die am wenigsten verrückte der 2. An diesem Punkt habe ich wahrscheinlich mehr Zeit damit verbracht zu hoffen, dass etwas bereits existiert, als ich es selbst getan hätte, also werde ich wohl aufhören, faul zu sein. :)

[Veraltete Antwort, siehe unten]

Als Update: aktuelle Versionen der Bitcoin-App haben eine „Back up Keys“-Funktion. Dadurch wird eine Sicherungskopie aller Schlüssel in der Brieftasche in eine Datei mit dem Namen bitcoin-wallet-keys-YYYY-MM-DD(mit dem aktuellen Datum) im Speicher des Telefons geschrieben, die Sie dann kopieren oder übertragen können, wohin Sie möchten. Die Datei wird mit einem von Ihnen angegebenen Passwort verschlüsselt; Es kann manuell mit OpenSSL entschlüsselt werden, indem es ausgeführt wird

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

Nach der Entschlüsselung ist die Datei nur eine Liste privater Schlüssel, einer pro Zeile, im komprimierten Standardformat Base 58 (beginnend mit K). Sie können diese Schlüssel in eine andere Brieftasche importieren. In bitcoin-qt würden Sie den importprivkeyKonsolenbefehl verwenden.

Weiteres Update : Ab Bitcoin Wallet 3.53 existiert das oben beschriebene Feature „Back Up Keys“ offenbar nicht mehr.

Das hat bei einigen alten Litecoin- und Dogecoin-Geldbörsen, die von Android gesichert wurden, hervorragend funktioniert. Das ungefähr zur gleichen Zeit erstellte Bitcoin-Backup entschlüsselt (die Ausgabe beginnt mit einem 0x0A 0x16-Header, gefolgt von einem Klartext org.bitcoin.production), aber der Rest ist binär.
Auch in Bitcoin Wallet 4.49 erfolgt die Sicherung über Safetyeinen Menüeintrag.
Was openssl jetzt ausgibt, ist im Protobuff-Format. Siehe bitcoin.stackexchange.com/questions/29518/…

Dieses Skript scheint die Arbeit zu erledigen

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

Sie müssen nur ein Backup erstellen und es gibt Ihnen eine Eselsbrücke zurück, die Sie in Elektrum oder Elektrum-Cash verwenden können.