Есть ли способ экспортировать закрытый ключ моего кошелька из приложения «Bitcoin Android» (com.bitcoinandroid)?

Некоторое время назад я установил приложение Bitcoin для Android и перевел на него 5 BTC. Перенесемся в настоящее, новый телефон, новое ПЗУ, и приложение, похоже, совершенно не желает обновлять свою цепочку блоков, а это означает, что у меня нет возможности переместить свои BTC в другое место.

Глядя на источник, он построен на ранней версии BitcoinJ, где файл кошелька, по сути, является сериализованным классом кошелька.

Взгляд на сам файл кошелька не слишком дружелюбен, хотя я уверен, что закрытый ключ находится где-то там в относительно простой форме.

Итак, это оставляет мне следующие возможности:

  • напишите небольшое Java-приложение, которое ссылается на ту же версию BitcoinJ, загрузите файл кошелька, получите закрытый ключ и распечатайте его.

  • напишите действительно тупой скрипт, который извлекает каждую последовательность 32 байтов из файла кошелька, обрабатывает его как закрытый ключ, сопоставляет его с открытым ключом, проверяет blockexplorer.com на предмет любой активности, связанной с ним. Или просто импортируйте каждую из этих последовательностей в биткойн-клиент и дайте ей пострадать.

Прежде чем я приступлю к поиску пяти биткойнов, есть ли уже что-то, что может анализировать файлы кошелька BitcoinJ и экспортировать из них ключи?

(1) обновление блокчейна не является обязательным условием для возможности отправки уже имеющихся монет, (2) немного неясно, что вы сделали: вы сделали резервную копию этого приложения и его данных и переустановили его на новый телефон?
Многие клиенты не будут отправлять транзакции, если клиент не знает, что у него есть необходимое количество монет; Подозреваю, что здесь именно так.
@Lohoris Я этого не понимал. И отправка монет, и обновление блокчейна терпят неудачу, и я нарисовал причинно-следственную связь там, где ее не было, и обе, скорее всего, терпят неудачу из-за третьего фактора.
Обратите внимание, что ссылка на это приложение (в вопросе выше) не работает. Если бы кто-то мог это исправить, было бы здорово.

Ответы (4)

Я написал подробный ответ на это некоторое время назад. По сути, вам нужно будет рутировать свой телефон и извлечь файл кошелька с помощью apd.

После того, как вы это сделаете, вы можете расшифровать его, заглянув в сериализованный кошелек с подключенным отладчиком Java в поисках ссылки на ECKey. Затем, когда у вас есть закрытый ключ, вы можете просто передать его MtGox, который сделает для вас декодирование, а затем вы сможете перевести биткойны куда угодно.

Кроме того, проект BitCoinJ содержит несколько полезных примеров инструментов в исходном дереве. Возможно, использование одного из них поможет вам с десериализацией.

ВНИМАНИЕ : рутирование телефона без использования эксплойтов стирает его память. Таким образом, если он не использует уже рутированный телефон или эксплуатируемую версию Android, он не может этого сделать.
@Lohoris Именно так. Тем не менее, ОП, похоже, указывает на то, что телефон является более старым ПЗУ, возможно, работающим под управлением 2.1, 2.2, которые можно использовать. В связанной статье действительно представлен проверенный подход к рутированию, который не стирал внутреннюю память.
Спасибо, это, наверное, самое близкое к готовому решению для восстановления. (Мои телефоны рутированы, поэтому получение/резервное копирование кошелька не является проблемой.)
DumpWallet сделал свое дело. Мне просто нужно было удалить «00» из моего поля priv: key, чтобы Mt.Gox понравился мой закрытый ключ. Спасибо еще раз!
@Metal Не беспокойтесь - рад, что помог
Вот инструмент, который выгружает формат protobuf, не прибегая к отладчику Java: github.com/lloeki/bitcoinj-wallet-dump

Я бы сначала попробовал вариант 1, если вы сможете найти нужную версию библиотеки. Я бы хотел попробовать сделать инструмент общего назначения для этого, но у меня нет телефона Android. Есть ли способ создать новый, пустой кошелек и разместить его копию где-нибудь в Интернете вместе с соответствующим биткойн-адресом или двумя?

Если вы пытаетесь использовать вариант 2, вы, вероятно, знаете по крайней мере один из адресов в кошельке, и поэтому вам не нужно нажимать blockexplorer для каждого предположения. Вы ожидаете, что закрытые ключи будут равномерно распределены по кошельку, поэтому, найдя несколько, вы сможете сделать более разумные предположения о том, где находятся остальные.

Да... вариант 1 наименее сумасшедший из 2. На данный момент я, вероятно, потратил больше времени, надеясь, что что-то уже существует, чем я потратил бы на это сам, так что, думаю, я просто перестану быть ленивым. :)

[Устаревший ответ, см. ниже]

В качестве обновления: текущие версии приложения Биткойн имеют функцию «Резервное копирование ключей». Это записывает резервную копию всех ключей в кошельке в файл с именем bitcoin-wallet-keys-YYYY-MM-DD(с использованием текущей даты) в памяти телефона, который затем можно скопировать или перенести куда угодно. Файл зашифрован паролем, который вы указываете; его можно расшифровать вручную с помощью OpenSSL, запустив

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

После расшифровки файл представляет собой просто список закрытых ключей, по одному на строку, в стандартном сжатом формате base 58 (начиная с K). Вы можете импортировать эти ключи в другой кошелек. В биткойн-qt вы должны использовать importprivkeyконсольную команду.

Дальнейшее обновление : начиная с биткойн-кошелька 3.53, описанная выше функция «Резервное копирование ключей», по-видимому, больше не существует.

Это отлично сработало для меня с некоторыми старыми кошельками Litecoin и Dogecoin, резервными копиями которых был Android. Резервная копия Биткойн, созданная примерно в то же время, расшифровывается (вывод начинается с заголовка 0x0A 0x16, за которым следует открытый текст org.bitcoin.production), но остальная часть является двоичной.
Кроме того, в Биткойн-кошельке 4.49 резервное копирование выполняется через Safetyпункт меню.
то, что теперь выводит openssl, находится в формате protobuff. См. bitcoin.stackexchange.com/questions/29518/…

Этот скрипт, кажется, работает

https://github.com/jleni/кошелек-расшифровать

Вам просто нужно создать резервную копию, и она вернет вам мнемонику, которую вы сможете использовать в электруме или наличных из электрума.