Author

Topic: Keyhunter.py поиск privatkey bitcion (до 2012) на отформатированных диск (Read 285 times)

jr. member
Activity: 183
Merit: 3
Как это чудо под win 10 64 запустить установил питон 2.7 ничего не работает.
newbie
Activity: 1
Merit: 0
Итак, по скольку пошаговых инструкций нет, напишу ка я её.
Всех результатов удалось добиться методом тыка, так как python и ubuntu я знаю оооочень поверхностно.
Не знаю в какой раздел определить эту тему, админы если что помогите.
За грамматику сорян, поехали:

Все началось когда я наткнулся на статью - https://xakep.ru/2013/12/20/61791/
Вроде все просто - скачал запустил по инструкции он тебе выдал ключи.
Но не тут то было.
Для начала нам понадобиться 64 битная Linux система, я выбрал Ubuntu.

-Устанавливаем систему на жесткий диск
-устанавливаем python27 (Гуглим как это сделать, буквально вводом одной команды)
- Устанавливаем iotop-0.6 (Эта утилита покажет нам какие процессы обращаются к жестким дискам)
- Скачиваем скрипт Keyhunter.py и Readme кнему

Все готово для начала.

Ищем старый диск на котором находился (может даже предположительно находился) холодный кошелек bitcoin. Подключаем его к комьютеру, занружаемся.

Открываем терминал и запускаем iotop.py
https://pp.userapi.com/c830108/v830108758/5943d/zcEIGvWzq88.jpg

После запуска скрипта мы увидим что он обращается к диску, значит все в порядке, он работает.
открываем еще один терминал и вводим команду:
df -h
Она выведет список всех жестких дисков на экран:
https://pp.userapi.com/c830108/v830108758/59446/kT9kBIBJToA.jpg

Выбираем диск. В моем случае это 40 гиговый диск в списке обозначеный как 38 гиговый и путь к нему в системе линукс выглядит след образом: /dev/sdb1 (запоминаем\копируем)

Итак пришло время запускать сам скрипт.
Распаковываем его в папку, заходим в нее и отрываем в ней терминал.
Для начала мы должны предоставить права для скрипта, вводим в терминале:
chmod +x keyhunter.py

Что дает ему неограниченные права на чтение, запись и т.д.
Запускаем сам скрипт. Если просто его запустить он запуститься на языке програмирования python34 (Или на любой последней версии) и не будет работать, поэтому нам нужно принудительно запустить его на python27, при этом предоставив права суперюзера:

sudo python ./keyhunter.py /dev/sdb1

поясню:
sudo (права суперюзера) python (запуск в python27) ./keyhunter.py(этот скрипт запустить) /dev/sdb1(этот диск сканировать)

На выходе мы получим зашифрованный в формате base58 ключ. Их список выдается прям в терминале где запущен скрипт. Но только ключ который начинается на 5K и есть privatekey.

https://pp.userapi.com/c830108/v830108758/5944e/_7lDGCeesys.jpg
А дальше.... дальше я еще не нашел ни одного ключа что бы перевести его в нужный формат.
Но уже есть случаи кто проделывал конвертацию ключа: https://bitcointalksearch.org/topic/how-can-i-convert-a-base58-private-key-into-wif-1600645

You can convert it by using casascius' bitcoin address utility (wiki, download link), follow these steps:
1. Open 'Address > Enter an address/key' and enter blockchain.info's WIF key.
2. Copy the hex private key of the address that was added (view its details by right clicking it).
3. Open 'Tools > Base58 calculator' and enter the copied hex.
4. Go to 'Mode > Use Checksum' and make sure that it's checked and copy the base58 result.
5. Same as step 1 but enter the result from 4 instead.
6. Now your real address should be added. Just view the details and copy the WIF private key and import it to electrum.

Might want to wait few hours before doing this to let other users view this post. I'm pretty sure it's safe but just in case.

Дополню инструкцию по мере новых "открытий")))

Всем спасибо за внимание, за темой буду следить и отвечать на вопросы.

Обнвление: оказывается работал с не оригинальным скриптом а с этим:

Code:
#!/usr/bin/python

import binascii
import os
import hashlib
import sys

# bytes to read at a time from file (10meg)
readlength=1*1024

if len(sys.argv)!=2:
  print "./keyhunter.py "
  exit()

filename = sys.argv[1]

f = open(filename)
magic = '\x01\x01\x04\x20'
magiclen = len(magic)



##### start code from pywallet.py #############
__b58chars = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
__b58base = len(__b58chars)

def b58encode(v):
  """ encode v, which is a string of bytes, to base58.
  """

  long_value = 0L
  for (i, c) in enumerate(v[::-1]):
    long_value += (256**i) * ord(c)

  result = ''
  while long_value >= __b58base:
    div, mod = divmod(long_value, __b58base)
    result = __b58chars[mod] + result
    long_value = div
  result = __b58chars[long_value] + result

  # Bitcoin does a little leading-zero-compression:
  # leading 0-bytes in the input become leading-1s
  nPad = 0
  for c in v:
    if c == '\0': nPad += 1
    else: break

  return (__b58chars[0]*nPad) + result

def Hash(data):
  return hashlib.sha256(hashlib.sha256(data).digest()).digest()

def EncodeBase58Check(secret):
  hash = Hash(secret)
  return b58encode(secret + hash[0:4])

########## end code from pywallet.py ############



# read through target file
# one block at a time
while True:
  data = f.read(readlength)
  if not data:
    break

  # look in this block for keys
  x=0
  while True:
    # find the magic number
    pos=data.find(magic,x)
    #pos=data.find('\13\02\01\01\04\20',0)
    if pos==-1:
      break
    print EncodeBase58Check('\xA6'+data[pos+magiclen:pos+magiclen+32])
    x+=(pos+1)
  
  # are we at the end of the file?
  if len(data) < readlength:
    break

  # make sure we didn't miss any keys at the end of the block
  f.seek(f.tell()-(32+magiclen))

# code grabbed from pywallet.py#!/usr/bin/python

import binascii
import os
import hashlib
import sys

# bytes to read at a time from file (10meg)
readlength=1*1024

if len(sys.argv)!=2:
  print "./keyhunter.py "
  exit()

filename = sys.argv[1]

f = open(filename)
magic = '\x01\x01\x04\x20'
magiclen = len(magic)



##### start code from pywallet.py #############
__b58chars = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
__b58base = len(__b58chars)

def b58encode(v):
  """ encode v, which is a string of bytes, to base58.
  """

  long_value = 0L
  for (i, c) in enumerate(v[::-1]):
    long_value += (256**i) * ord(c)

  result = ''
  while long_value >= __b58base:
    div, mod = divmod(long_value, __b58base)
    result = __b58chars[mod] + result
    long_value = div
  result = __b58chars[long_value] + result

  # Bitcoin does a little leading-zero-compression:
  # leading 0-bytes in the input become leading-1s
  nPad = 0
  for c in v:
    if c == '\0': nPad += 1
    else: break

  return (__b58chars[0]*nPad) + result

def Hash(data):
  return hashlib.sha256(hashlib.sha256(data).digest()).digest()

def EncodeBase58Check(secret):
  hash = Hash(secret)
  return b58encode(secret + hash[0:4])

########## end code from pywallet.py ############



# read through target file
# one block at a time
while True:
  data = f.read(readlength)
  if not data:
    break

  # look in this block for keys
  x=0
  while True:
    # find the magic number
    pos=data.find(magic,x)
    #pos=data.find('\13\02\01\01\04\20',0)
    if pos==-1:
      break
    print EncodeBase58Check('\xA6'+data[pos+magiclen:pos+magiclen+32])
    x+=(pos+1)
  
  # are we at the end of the file?
  if len(data) < readlength:
    break

  # make sure we didn't miss any keys at the end of the block
  f.seek(f.tell()-(32+magiclen))

# code grabbed from pywallet.py

Оригинальный же код в конце сканирования не выведет ничего, при нахождении ключа сохранит его в файл в папке со скриптом.

Если кому помог:
BTC:
146FVjidd7cjnKjmSk3ApNtse3iWrnxDZN
ETH
0x39a8565abf89422e608473baf379179efe6e0063
ZEC
t1PKYoXZ1RtQH7U2KCY9UDFK4w2jkqmDx59
Jump to: