Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Decompiled with PyLingual (https://pylingual.io)
- # Internal filename: main_unified_separated.py
- # Bytecode version: 3.9.0beta5 (3425)
- # Source timestamp: 1970-01-01 00:00:00 UTC (0)
- """
- PASSWORD ATWAN FORTEX - الواجهة الموحدة (بدون مولد المفاتيح)
- أداة شاملة لإنشاء كلمات مرور قوية مع نظام الحماية
- """
- import tkinter as tk
- from tkinter import ttk, filedialog, messagebox, scrolledtext
- import string
- import random
- import secrets
- import hashlib
- import uuid
- import psutil
- import platform
- import os
- import json
- from datetime import datetime, timedelta
- import threading
- import time
- import re
- COLORS = {'primary': '#2E3440', 'secondary': '#3B4252', 'accent': '#5E81AC', 'success': '#A3BE8C', 'warning': '#EBCB8B', 'danger': '#BF616A', 'text': '#ECEFF4', 'text_dark': '#2E3440', 'bg_light': '#E5E9F0', 'bg_card': '#D8DEE9'}
- class AdvancedPasswordGenerator:
- """مولد كلمات المرور المتقدم"""
- def __init__(self):
- self.character_sets = {'uppercase': string.ascii_uppercase, 'lowercase': string.ascii_lowercase, 'numbers': string.digits, 'basic_symbols': '!@#$%^&*()', 'extended_symbols': '!@#$%^&*()_+-=[]{}|;:,.<>?', 'brackets': '()[]{}<>', 'math_symbols': '+-*/=', 'currency': '$€£¥₹', 'spaces': ' ', 'underscores': '_', 'hyphens': '-', 'dots': '.', 'quotes': '\'"', 'slashes': '/\\', 'custom': ''}
- def generate_password(self, length=25, selected_sets=None, pattern='random', exclude_chars='', include_chars='', min_each_type=1, avoid_ambiguous=False, pronounceable=False):
- """إنتاج كلمة مرور متقدمة"""
- if selected_sets is None:
- selected_sets = ['uppercase', 'lowercase', 'numbers', 'basic_symbols']
- charset = ''
- type_chars = {}
- for set_name in selected_sets:
- if set_name in self.character_sets and self.character_sets[set_name]:
- chars = self.character_sets[set_name]
- if exclude_chars:
- chars = ''.join((c for c in chars if c not in exclude_chars))
- charset += chars
- type_chars[set_name] = chars
- if include_chars:
- charset += include_chars
- type_chars['custom'] = include_chars
- if avoid_ambiguous:
- ambiguous = '0O1lI|'
- charset = ''.join((c for c in charset if c not in ambiguous))
- for key in type_chars:
- type_chars[key] = ''.join((c for c in type_chars[key] if c not in ambiguous))
- if not charset:
- return ''
- if pattern == 'alternating':
- return self._generate_alternating(length, type_chars)
- if pattern == 'grouped':
- return self._generate_grouped(length, type_chars)
- if pattern == 'start_letter':
- return self._generate_start_letter(length, type_chars)
- if pattern == 'end_number':
- return self._generate_end_number(length, type_chars)
- if pattern == 'no_consecutive':
- return self._generate_no_consecutive(length, charset)
- if pronounceable:
- return self._generate_pronounceable(length, type_chars)
- return self._generate_random(length, charset, type_chars, min_each_type)
- def _generate_random(self, length, charset, type_chars, min_each_type):
- """إنتاج كلمة مرور عشوائية"""
- password = []
- for char_type, chars in type_chars.items():
- if chars and min_each_type > 0:
- for _ in range(min(min_each_type, length // len(type_chars))):
- password.append(secrets.choice(chars))
- while len(password) < length:
- password.append(secrets.choice(charset))
- random.shuffle(password)
- return ''.join(password)
- def _generate_alternating(self, length, type_chars):
- """إنتاج كلمة مرور متناوبة"""
- password = []
- char_types = list(type_chars.keys())
- for i in range(length):
- char_type = char_types[i % len(char_types)]
- if type_chars[char_type]:
- password.append(secrets.choice(type_chars[char_type]))
- return ''.join(password)
- def _generate_grouped(self, length, type_chars):
- """إنتاج كلمة مرور مجمعة"""
- password = []
- group_size = length // len(type_chars)
- remainder = length % len(type_chars)
- for i, (char_type, chars) in enumerate(type_chars.items()):
- if chars:
- size = group_size + (1 if i < remainder else 0)
- for _ in range(size):
- password.append(secrets.choice(chars))
- return ''.join(password)
- def _generate_start_letter(self, length, type_chars):
- """إنتاج كلمة مرور تبدأ بحرف"""
- password = []
- letters = type_chars.get('uppercase', '') + type_chars.get('lowercase', '')
- if letters:
- password.append(secrets.choice(letters))
- all_chars = ''.join(type_chars.values())
- while len(password) < length:
- password.append(secrets.choice(all_chars))
- return ''.join(password)
- def _generate_end_number(self, length, type_chars):
- """إنتاج كلمة مرور تنتهي برقم"""
- password = []
- all_chars = ''.join(type_chars.values())
- while len(password) < length - 1:
- password.append(secrets.choice(all_chars))
- numbers = type_chars.get('numbers', '0123456789')
- if numbers:
- password.append(secrets.choice(numbers))
- else:
- password.append(secrets.choice(all_chars))
- return ''.join(password)
- def _generate_no_consecutive(self, length, charset):
- """إنتاج كلمة مرور بدون أحرف متتالية متشابهة"""
- password = []
- for _ in range(length):
- while True:
- char = secrets.choice(charset)
- if not password or char != password[-1]:
- password.append(char)
- break
- return ''.join(password)
- def _generate_pronounceable(self, length, type_chars):
- """إنتاج كلمة مرور قابلة للنطق"""
- vowels = 'aeiou'
- consonants = 'bcdfghjklmnpqrstvwxyz'
- password = []
- for i in range(length):
- if i % 2 == 0:
- password.append(secrets.choice(consonants))
- else:
- password.append(secrets.choice(vowels))
- return ''.join(password)
- class HWIDProtection:
- """نظام حماية HWID"""
- def __init__(self):
- self.hwid = self.get_hwid()
- def get_hwid(self):
- """الحصول على HWID فريد للجهاز"""
- try:
- mac = ':'.join(['{:02x}'.format(uuid.getnode() >> elements & 255) for elements in range(0, 12, 2)][::-1])
- system_info = platform.system() + platform.machine()
- cpu_info = str(psutil.cpu_count())
- combined = f'{mac}-{system_info}-{cpu_info}'
- hwid = hashlib.sha256(combined.encode()).hexdigest()[:16]
- return hwid.upper()
- except:
- return 'UNKNOWN-HWID'
- def verify_license(self, license_key):
- """التحقق من صحة المفتاح"""
- try:
- parts = license_key.split('-')
- if len(parts) != 4:
- return False
- encoded_hwid = parts[0] + parts[1]
- if encoded_hwid != self.hwid[:8]:
- return False
- check_sum = parts[2] + parts[3]
- expected = hashlib.md5((encoded_hwid + 'ATWAN').encode()).hexdigest()[:8].upper()
- return check_sum == expected
- except:
- return False
- class PasswordAtvanFortexSeparated:
- """التطبيق الموحد بدون مولد المفاتيح"""
- def __init__(self):
- self.root = tk.Tk()
- self.hwid_protection = HWIDProtection()
- self.password_generator = AdvancedPasswordGenerator()
- self.is_licensed = False
- self.setup_styles()
- self.setup_ui()
- self.check_license()
- def setup_styles(self):
- """إعداد الأنماط والألوان"""
- self.root.configure(bg=COLORS['bg_light'])
- style = ttk.Style()
- style.theme_use('clam')
- style.configure('Title.TLabel', background=COLORS['bg_light'], foreground=COLORS['primary'], font=('Arial', 16, 'bold'))
- style.configure('Accent.TButton', background=COLORS['accent'], foreground=COLORS['text'], font=('Arial', 10, 'bold'))
- style.configure('Success.TButton', background=COLORS['success'], foreground=COLORS['text_dark'], font=('Arial', 10, 'bold'))
- style.configure('Warning.TButton', background=COLORS['warning'], foreground=COLORS['text_dark'], font=('Arial', 10, 'bold'))
- style.configure('Danger.TButton', background=COLORS['danger'], foreground=COLORS['text'], font=('Arial', 10, 'bold'))
- def setup_ui(self):
- """إعداد واجهة المستخدم الموحدة"""
- self.root.title('PASSWORD ATWAN FORTEX - مولد كلمات المرور المتقدم')
- self.root.geometry('1000x1000')
- self.root.resizable(True, True)
- main_container = tk.Frame(self.root, bg=COLORS['bg_light'])
- main_container.pack(fill=tk.BOTH, expand=True, padx=20, pady=20)
- header_frame = tk.Frame(main_container, bg=COLORS['primary'], height=80)
- header_frame.pack(fill=tk.X, pady=(0, 20))
- header_frame.pack_propagate(False)
- title_label = tk.Label(header_frame, text='🔐 PASSWORD ATWAN FORTEX 🔐', bg=COLORS['primary'], fg=COLORS['text'], font=('Arial', 20, 'bold'))
- title_label.pack(expand=True)
- subtitle_label = tk.Label(header_frame, text='مولد كلمات المرور المتقدم مع نظام الحماية', bg=COLORS['primary'], fg=COLORS['warning'], font=('Arial', 12))
- subtitle_label.pack()
- notebook = ttk.Notebook(main_container)
- notebook.pack(fill=tk.BOTH, expand=True)
- password_frame = tk.Frame(notebook, bg=COLORS['bg_light'])
- notebook.add(password_frame, text='🔑 مولد كلمات المرور')
- self.setup_password_tab(password_frame)
- settings_frame = tk.Frame(notebook, bg=COLORS['bg_light'])
- notebook.add(settings_frame, text='⚙️ الإعدادات والحماية')
- self.setup_settings_tab(settings_frame)
- results_frame = tk.Frame(notebook, bg=COLORS['bg_light'])
- notebook.add(results_frame, text='📊 النتائج والإحصائيات')
- self.setup_results_tab(results_frame)
- self.setup_status_bar(main_container)
- def setup_password_tab(self, parent):
- """إعداد تبويب مولد كلمات المرور"""
- control_frame = tk.Frame(parent, bg=COLORS['bg_light'])
- control_frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=10)
- left_frame = tk.Frame(control_frame, bg=COLORS['bg_card'], relief=tk.RAISED, bd=2)
- left_frame.pack(side=tk.LEFT, fill=tk.BOTH, expand=True, padx=(0, 10))
- settings_header = tk.Label(left_frame, text='⚙️ إعدادات كلمة المرور', bg=COLORS['accent'], fg=COLORS['text'], font=('Arial', 14, 'bold'), pady=10)
- settings_header.pack(fill=tk.X)
- settings_content = tk.Frame(left_frame, bg=COLORS['bg_card'])
- settings_content.pack(fill=tk.BOTH, expand=True, padx=15, pady=15)
- length_frame = tk.LabelFrame(settings_content, text='📏 طول كلمة المرور', bg=COLORS['bg_card'], fg=COLORS['text_dark'], font=('Arial', 11, 'bold'))
- length_frame.pack(fill=tk.X, pady=(0, 15))
- length_control = tk.Frame(length_frame, bg=COLORS['bg_card'])
- length_control.pack(fill=tk.X, padx=10, pady=10)
- tk.Label(length_control, text='الطول:', bg=COLORS['bg_card'], fg=COLORS['text_dark'], font=('Arial', 10)).pack(side=tk.LEFT)
- self.length_var = tk.StringVar(value='25')
- length_spinbox = ttk.Spinbox(length_control, from_=4, to=1000, width=8, textvariable=self.length_var, font=('Arial', 10))
- length_spinbox.pack(side=tk.LEFT, padx=5)
- tk.Label(length_control, text='(حتى 1000 حرف)', bg=COLORS['bg_card'], fg=COLORS['accent'], font=('Arial', 9)).pack(side=tk.LEFT, padx=5)
- count_frame = tk.LabelFrame(settings_content, text='🔢 عدد كلمات المرور', bg=COLORS['bg_card'], fg=COLORS['text_dark'], font=('Arial', 11, 'bold'))
- count_frame.pack(fill=tk.X, pady=(0, 15))
- count_control = tk.Frame(count_frame, bg=COLORS['bg_card'])
- count_control.pack(fill=tk.X, padx=10, pady=10)
- tk.Label(count_control, text='العدد:', bg=COLORS['bg_card'], fg=COLORS['text_dark'], font=('Arial', 10)).pack(side=tk.LEFT)
- self.count_var = tk.StringVar(value='10')
- count_spinbox = ttk.Spinbox(count_control, from_=1, to=1000, width=8, textvariable=self.count_var, font=('Arial', 10))
- count_spinbox.pack(side=tk.LEFT, padx=5)
- chars_frame = tk.LabelFrame(settings_content, text='🔤 أنواع الأحرف', bg=COLORS['bg_card'], fg=COLORS['text_dark'], font=('Arial', 11, 'bold'))
- chars_frame.pack(fill=tk.X, pady=(0, 15))
- chars_content = tk.Frame(chars_frame, bg=COLORS['bg_card'])
- chars_content.pack(fill=tk.BOTH, expand=True, padx=10, pady=10)
- self.char_vars = {}
- char_options = [('uppercase', '🔠 أحرف كبيرة (A-Z)', COLORS['success']), ('lowercase', '🔡 أحرف صغيرة (a-z)', COLORS['success']), ('numbers', '🔢 أرقام (0-9)', COLORS['accent']), ('basic_symbols', '⚡ رموز أساسية (!@#$)', COLORS['warning']), ('extended_symbols', '🎯 رموز موسعة', COLORS['warning']), ('currency', '💰 رموز عملة ($€£)', COLORS['danger']), ('spaces', '⬜ مسافات', COLORS['secondary']), ('brackets', '📐 أقواس ()[]{}<>', COLORS['accent'])]
- for i, (key, text, color) in enumerate(char_options):
- default_value = key in ['uppercase', 'lowercase', 'numbers', 'basic_symbols']
- self.char_vars[key] = tk.BooleanVar(value=default_value)
- cb_frame = tk.Frame(chars_content, bg=color, relief=tk.RAISED, bd=1)
- cb_frame.grid(row=i // 2, column=i % 2, sticky=tk.W + tk.E, padx=2, pady=2)
- cb = tk.Checkbutton(cb_frame, text=text, variable=self.char_vars[key], bg=color, fg=COLORS['text'] if color != COLORS['warning'] else COLORS['text_dark'], font=('Arial', 9), selectcolor=color)
- cb.pack(padx=5, pady=3)
- chars_content.columnconfigure(0, weight=1)
- chars_content.columnconfigure(1, weight=1)
- pattern_frame = tk.LabelFrame(settings_content, text='🎨 نمط كلمة المرور', bg=COLORS['bg_card'], fg=COLORS['text_dark'], font=('Arial', 11, 'bold'))
- pattern_frame.pack(fill=tk.X, pady=(0, 15))
- pattern_content = tk.Frame(pattern_frame, bg=COLORS['bg_card'])
- pattern_content.pack(fill=tk.X, padx=10, pady=10)
- self.pattern_var = tk.StringVar(value='random')
- patterns = [('random', '🎲 عشوائي تماماً'), ('alternating', '🔄 تناوب بين الأنواع'), ('start_letter', '📝 البدء بحرف'), ('no_consecutive', '🚫 منع التكرار المتتالي')]
- for value, text in patterns:
- rb = tk.Radiobutton(pattern_content, text=text, variable=self.pattern_var, value=value, bg=COLORS['bg_card'], fg=COLORS['text_dark'], font=('Arial', 9), selectcolor=COLORS['accent'])
- rb.pack(anchor=tk.W, pady=1)
- buttons_frame = tk.Frame(settings_content, bg=COLORS['bg_card'])
- buttons_frame.pack(fill=tk.X, pady=15)
- self.generate_button = tk.Button(buttons_frame, text='🚀 إنتاج كلمات المرور', command=self.generate_passwords, bg=COLORS['success'], fg=COLORS['text_dark'], font=('Arial', 12, 'bold'), pady=8)
- self.generate_button.pack(fill=tk.X, pady=2)
- clear_button = tk.Button(buttons_frame, text='🗑️ مسح النتائج', command=self.clear_results, bg=COLORS['warning'], fg=COLORS['text_dark'], font=('Arial', 10), pady=5)
- clear_button.pack(fill=tk.X, pady=2)
- save_button = tk.Button(buttons_frame, text='💾 حفظ النتائج', command=self.save_results, bg=COLORS['accent'], fg=COLORS['text'], font=('Arial', 10), pady=5)
- save_button.pack(fill=tk.X, pady=2)
- right_frame = tk.Frame(control_frame, bg=COLORS['bg_card'], relief=tk.RAISED, bd=2)
- right_frame.pack(side=tk.RIGHT, fill=tk.BOTH, expand=True)
- preview_header = tk.Label(right_frame, text='👁️ معاينة سريعة', bg=COLORS['secondary'], fg=COLORS['text'], font=('Arial', 14, 'bold'), pady=10)
- preview_header.pack(fill=tk.X)
- preview_content = tk.Frame(right_frame, bg=COLORS['bg_card'])
- preview_content.pack(fill=tk.BOTH, expand=True, padx=15, pady=15)
- self.preview_text = scrolledtext.ScrolledText(preview_content, height=15, width=40, font=('Courier', 10), bg=COLORS['primary'], fg=COLORS['text'], insertbackground=COLORS['text'])
- self.preview_text.pack(fill=tk.BOTH, expand=True)
- preview_button = tk.Button(preview_content, text='🔍 معاينة سريعة', command=self.quick_preview, bg=COLORS['accent'], fg=COLORS['text'], font=('Arial', 10, 'bold'), pady=5)
- preview_button.pack(fill=tk.X, pady=(10, 0))
- def setup_settings_tab(self, parent):
- """إعداد تبويب الإعدادات والحماية"""
- main_frame = tk.Frame(parent, bg=COLORS['bg_light'])
- main_frame.pack(fill=tk.BOTH, expand=True, padx=20, pady=20)
- system_frame = tk.LabelFrame(main_frame, text='💻 معلومات النظام', bg=COLORS['bg_card'], fg=COLORS['text_dark'], font=('Arial', 12, 'bold'))
- system_frame.pack(fill=tk.X, pady=(0, 20))
- system_content = tk.Frame(system_frame, bg=COLORS['bg_card'])
- system_content.pack(fill=tk.X, padx=20, pady=15)
- hwid_display_frame = tk.Frame(system_content, bg=COLORS['primary'], relief=tk.RAISED, bd=2)
- hwid_display_frame.pack(fill=tk.X, pady=(0, 10))
- tk.Label(hwid_display_frame, text='🆔 HWID الحالي:', bg=COLORS['primary'], fg=COLORS['text'], font=('Arial', 11, 'bold')).pack(anchor=tk.W, padx=10, pady=(10, 5))
- hwid_text = tk.Label(hwid_display_frame, text=self.hwid_protection.hwid, bg=COLORS['primary'], fg=COLORS['warning'], font=('Courier', 12, 'bold'))
- hwid_text.pack(anchor=tk.W, padx=10, pady=(0, 10))
- hwid_buttons = tk.Frame(system_content, bg=COLORS['bg_card'])
- hwid_buttons.pack(fill=tk.X, pady=5)
- copy_hwid_button = tk.Button(hwid_buttons, text='📋 نسخ HWID', command=self.copy_hwid, bg=COLORS['accent'], fg=COLORS['text'], font=('Arial', 10, 'bold'))
- copy_hwid_button.pack(side=tk.LEFT, padx=(0, 10))
- note_frame = tk.Frame(system_content, bg=COLORS['warning'], relief=tk.RAISED, bd=2)
- note_frame.pack(fill=tk.X, pady=10)
- note_label = tk.Label(note_frame, text='💡 لإنتاج مفتاح التفعيل، استخدم مولد المفاتيح المنفصل (key_generator.py)', bg=COLORS['warning'], fg=COLORS['text_dark'], font=('Arial', 10, 'bold'), pady=10, wraplength=600)
- note_label.pack()
- license_frame = tk.LabelFrame(main_frame, text='🔐 حالة التفعيل', bg=COLORS['bg_card'], fg=COLORS['text_dark'], font=('Arial', 12, 'bold'))
- license_frame.pack(fill=tk.X, pady=(0, 20))
- license_content = tk.Frame(license_frame, bg=COLORS['bg_card'])
- license_content.pack(fill=tk.X, padx=20, pady=15)
- self.license_status_frame = tk.Frame(license_content, bg=COLORS['danger'], relief=tk.RAISED, bd=2)
- self.license_status_frame.pack(fill=tk.X, pady=(0, 15))
- self.license_status_label = tk.Label(self.license_status_frame, text='❌ نسخة تجريبية', bg=COLORS['danger'], fg=COLORS['text'], font=('Arial', 12, 'bold'), pady=10)
- self.license_status_label.pack()
- activation_frame = tk.Frame(license_content, bg=COLORS['bg_card'])
- activation_frame.pack(fill=tk.X, pady=(0, 10))
- tk.Label(activation_frame, text='أدخل مفتاح التفعيل:', bg=COLORS['bg_card'], fg=COLORS['text_dark'], font=('Arial', 11)).pack(anchor=tk.W, pady=(0, 5))
- self.license_key_var = tk.StringVar()
- license_entry = tk.Entry(activation_frame, textvariable=self.license_key_var, font=('Courier', 11), width=50, bg=COLORS['primary'], fg=COLORS['text'], insertbackground=COLORS['text'])
- license_entry.pack(fill=tk.X, pady=(0, 10))
- activate_button = tk.Button(activation_frame, text='✅ تفعيل البرنامج', command=self.activate_license, bg=COLORS['success'], fg=COLORS['text_dark'], font=('Arial', 11, 'bold'), pady=8)
- activate_button.pack(fill=tk.X)
- app_settings_frame = tk.LabelFrame(main_frame, text='⚙️ إعدادات التطبيق', bg=COLORS['bg_card'], fg=COLORS['text_dark'], font=('Arial', 12, 'bold'))
- app_settings_frame.pack(fill=tk.BOTH, expand=True)
- app_settings_content = tk.Frame(app_settings_frame, bg=COLORS['bg_card'])
- app_settings_content.pack(fill=tk.BOTH, expand=True, padx=20, pady=15)
- settings_buttons = tk.Frame(app_settings_content, bg=COLORS['bg_card'])
- settings_buttons.pack(fill=tk.X, pady=(0, 15))
- save_settings_button = tk.Button(settings_buttons, text='💾 حفظ الإعدادات', command=self.save_settings, bg=COLORS['accent'], fg=COLORS['text'], font=('Arial', 10, 'bold'))
- save_settings_button.pack(side=tk.LEFT, padx=(0, 10))
- load_settings_button = tk.Button(settings_buttons, text='📂 تحميل الإعدادات', command=self.load_settings, bg=COLORS['warning'], fg=COLORS['text_dark'], font=('Arial', 10, 'bold'))
- load_settings_button.pack(side=tk.LEFT)
- info_text = tk.Text(app_settings_content, height=6, width=70, font=('Arial', 10), bg=COLORS['primary'], fg=COLORS['text'], state=tk.DISABLED)
- info_text.pack(fill=tk.BOTH, expand=True)
- info_content = '\n💡 نصائح الاستخدام:\n• استخدم النسخة المُفعلة للحصول على خيارات غير محدودة\n• احفظ إعداداتك المفضلة لإعادة الاستخدام السريع\n• استخدم أنماط مختلفة لكلمات المرور حسب احتياجاتك\n• لإنتاج مفاتيح التفعيل، استخدم key_generator.py المنفصل\n '
- info_text.config(state=tk.NORMAL)
- info_text.insert(tk.END, info_content)
- info_text.config(state=tk.DISABLED)
- def setup_results_tab(self, parent):
- """إعداد تبويب النتائج والإحصائيات"""
- main_frame = tk.Frame(parent, bg=COLORS['bg_light'])
- main_frame.pack(fill=tk.BOTH, expand=True, padx=20, pady=20)
- progress_frame = tk.Frame(main_frame, bg=COLORS['bg_card'], relief=tk.RAISED, bd=2)
- progress_frame.pack(fill=tk.X, pady=(0, 20))
- progress_content = tk.Frame(progress_frame, bg=COLORS['bg_card'])
- progress_content.pack(fill=tk.X, padx=20, pady=15)
- tk.Label(progress_content, text='📊 تقدم العملية', bg=COLORS['bg_card'], fg=COLORS['text_dark'], font=('Arial', 12, 'bold')).pack(anchor=tk.W, pady=(0, 10))
- self.progress = ttk.Progressbar(progress_content, mode='determinate', length=400)
- self.progress.pack(fill=tk.X)
- results_frame = tk.LabelFrame(main_frame, text='🔑 كلمات المرور المُنتجة', bg=COLORS['bg_card'], fg=COLORS['text_dark'], font=('Arial', 12, 'bold'))
- results_frame.pack(fill=tk.BOTH, expand=True, pady=(0, 20))
- results_content = tk.Frame(results_frame, bg=COLORS['bg_card'])
- results_content.pack(fill=tk.BOTH, expand=True, padx=15, pady=15)
- self.results_text = scrolledtext.ScrolledText(results_content, height=20, width=80, font=('Courier', 10), bg=COLORS['primary'], fg=COLORS['text'], insertbackground=COLORS['text'])
- self.results_text.pack(fill=tk.BOTH, expand=True)
- stats_frame = tk.LabelFrame(main_frame, text='📈 الإحصائيات', bg=COLORS['bg_card'], fg=COLORS['text_dark'], font=('Arial', 12, 'bold'))
- stats_frame.pack(fill=tk.X)
- stats_content = tk.Frame(stats_frame, bg=COLORS['success'])
- stats_content.pack(fill=tk.X, padx=15, pady=15)
- self.stats_label = tk.Label(stats_content, text='لم يتم إنتاج كلمات مرور بعد', bg=COLORS['success'], fg=COLORS['text_dark'], font=('Arial', 11, 'bold'), pady=10)
- self.stats_label.pack()
- def setup_status_bar(self, parent):
- """إعداد شريط الحالة"""
- status_frame = tk.Frame(parent, bg=COLORS['secondary'], height=30)
- status_frame.pack(fill=tk.X, side=tk.BOTTOM)
- status_frame.pack_propagate(False)
- self.status_label = tk.Label(status_frame, text='🟢 جاهز للاستخدام', bg=COLORS['secondary'], fg=COLORS['text'], font=('Arial', 10))
- self.status_label.pack(side=tk.LEFT, padx=10, pady=5)
- version_label = tk.Label(status_frame, text='v2.1 - النسخة المنفصلة', bg=COLORS['secondary'], fg=COLORS['warning'], font=('Arial', 9))
- version_label.pack(side=tk.RIGHT, padx=10, pady=5)
- def quick_preview(self):
- """معاينة سريعة لكلمة مرور واحدة"""
- try:
- length = min(int(self.length_var.get()), 50 if not self.is_licensed else 1000)
- selected_sets = [key for key, var in self.char_vars.items() if var.get()]
- if not selected_sets:
- self.preview_text.delete(1.0, tk.END)
- self.preview_text.insert(tk.END, '❌ يجب اختيار نوع واحد على الأقل من الأحرف!')
- return
- password = self.password_generator.generate_password(length=length, selected_sets=selected_sets, pattern=self.pattern_var.get())
- self.preview_text.delete(1.0, tk.END)
- self.preview_text.insert(tk.END, '🔍 معاينة سريعة:\n')
- self.preview_text.insert(tk.END, f"{'========================================'}\n")
- self.preview_text.insert(tk.END, f'الطول: {len(password)} حرف\n')
- self.preview_text.insert(tk.END, f'النمط: {self.pattern_var.get()}\n')
- self.preview_text.insert(tk.END, f"{'========================================'}\n\n")
- self.preview_text.insert(tk.END, f'🔑 {password}\n\n')
- strength = self.analyze_password_strength(password)
- self.preview_text.insert(tk.END, f'💪 قوة كلمة المرور: {strength}\n')
- except Exception as e:
- self.preview_text.delete(1.0, tk.END)
- self.preview_text.insert(tk.END, f'❌ خطأ: {str(e)}')
- def generate_passwords(self):
- """إنتاج كلمات المرور"""
- if not self.is_licensed:
- max_count = 5
- max_length = 50
- else:
- max_count = int(self.count_var.get())
- max_length = int(self.length_var.get())
- try:
- length = min(int(self.length_var.get()), max_length)
- count = min(int(self.count_var.get()), max_count)
- if length < 1:
- messagebox.showerror('خطأ', 'طول كلمة المرور يجب أن يكون أكبر من 0!')
- return
- selected_sets = [key for key, var in self.char_vars.items() if var.get()]
- if not selected_sets:
- messagebox.showerror('خطأ', 'يجب اختيار نوع واحد على الأقل من الأحرف!')
- return
- self.generate_button.config(state=tk.DISABLED)
- self.status_label.config(text='🔄 جاري إنتاج كلمات المرور...')
- self.results_text.delete(1.0, tk.END)
- passwords = []
- for i in range(count):
- password = self.password_generator.generate_password(length=length, selected_sets=selected_sets, pattern=self.pattern_var.get())
- passwords.append(password)
- self.results_text.insert(tk.END, f'{i + 1:3d}. {password}\n')
- self.results_text.see(tk.END)
- self.progress['value'] = (i + 1) * 100 / count
- self.root.update()
- time.sleep(0.05)
- self.update_statistics(passwords)
- self.status_label.config(text='✅ تم إنتاج كلمات المرور بنجاح')
- if not self.is_licensed:
- messagebox.showinfo('نسخة تجريبية', f'النسخة التجريبية محدودة بـ {max_count} كلمات مرور وطول أقصى {max_length} حرف.\nللحصول على الإصدار الكامل، يرجى التفعيل.')
- except ValueError:
- messagebox.showerror('خطأ', 'يرجى إدخال قيم صحيحة!')
- except Exception as e:
- messagebox.showerror('خطأ', f'حدث خطأ: {str(e)}')
- finally:
- pass
- self.generate_button.config(state=tk.NORMAL)
- self.progress['value'] = 0
- self.generate_button.config(state=tk.NORMAL)
- self.progress['value'] = 0
- self.generate_button.config(state=tk.NORMAL)
- self.progress['value'] = 0
- def copy_hwid(self):
- """نسخ HWID الحالي"""
- try:
- self.root.clipboard_clear()
- self.root.clipboard_append(self.hwid_protection.hwid)
- self.status_label.config(text='📋 تم نسخ HWID إلى الحافظة')
- messagebox.showinfo('تم', 'تم نسخ HWID إلى الحافظة!')
- except Exception as e:
- messagebox.showerror('خطأ', f'فشل في نسخ HWID: {str(e)}')
- def activate_license(self):
- """تفعيل الترخيص"""
- license_key = self.license_key_var.get().strip()
- if not license_key:
- messagebox.showerror('خطأ', 'يرجى إدخال مفتاح التفعيل!')
- return
- if self.hwid_protection.verify_license(license_key):
- try:
- with open('license.dat', 'w') as f:
- f.write(license_key)
- self.is_licensed = True
- self.license_status_frame.config(bg=COLORS['success'])
- self.license_status_label.config(text='✅ مُفعل بنجاح', bg=COLORS['success'], fg=COLORS['text_dark'])
- self.status_label.config(text='✅ تم تفعيل البرنامج بنجاح')
- messagebox.showinfo('نجح التفعيل', '🎉 تم تفعيل البرنامج بنجاح!\nيمكنك الآن الاستفادة من جميع المميزات.')
- except Exception as e:
- messagebox.showerror('خطأ', f'فشل في حفظ الترخيص: {str(e)}')
- else:
- messagebox.showerror('خطأ', '❌ مفتاح التفعيل غير صحيح!')
- def check_license(self):
- """فحص حالة الترخيص"""
- try:
- if os.path.exists('license.dat'):
- with open('license.dat', 'r') as f:
- license_key = f.read().strip()
- if self.hwid_protection.verify_license(license_key):
- self.is_licensed = True
- self.license_status_frame.config(bg=COLORS['success'])
- self.license_status_label.config(text='✅ مُفعل', bg=COLORS['success'], fg=COLORS['text_dark'])
- return
- except:
- pass
- self.license_status_frame.config(bg=COLORS['danger'])
- self.license_status_label.config(text='❌ نسخة تجريبية', bg=COLORS['danger'], fg=COLORS['text'])
- def analyze_password_strength(self, password):
- """تحليل قوة كلمة المرور"""
- score = 0
- if len(password) >= 8:
- score += 1
- if len(password) >= 12:
- score += 1
- if len(password) >= 16:
- score += 1
- if any((c.isupper() for c in password)):
- score += 1
- if any((c.islower() for c in password)):
- score += 1
- if any((c.isdigit() for c in password)):
- score += 1
- if any((c in '!@#$%^&*()_+-=[]{}|;:,.<>?' for c in password)):
- score += 1
- if score <= 3:
- return 'ضعيفة 🔴'
- if score <= 5:
- return 'متوسطة 🟡'
- if score <= 6:
- return 'قوية 🟢'
- return 'قوية جداً 🟢🟢'
- def update_statistics(self, passwords):
- """تحديث الإحصائيات"""
- if not passwords:
- return
- total = len(passwords)
- avg_length = sum((len(p) for p in passwords)) / total
- strong_count = 0
- for password in passwords:
- strength = self.analyze_password_strength(password)
- if 'قوية' in strength:
- strong_count += 1
- stats_text = f'📊 العدد: {total} | 📏 متوسط الطول: {avg_length:.1f} | 💪 قوية: {strong_count}/{total} | 🎯 النجاح: {strong_count / total * 100:.1f}%'
- self.stats_label.config(text=stats_text)
- def clear_results(self):
- """مسح النتائج"""
- self.results_text.delete(1.0, tk.END)
- self.stats_label.config(text='لم يتم إنتاج كلمات مرور بعد')
- self.status_label.config(text='🗑️ تم مسح النتائج')
- def save_results(self):
- """حفظ النتائج"""
- content = self.results_text.get(1.0, tk.END).strip()
- if not content:
- messagebox.showwarning('تحذير', 'لا توجد نتائج لحفظها!')
- return
- filename = filedialog.asksaveasfilename(defaultextension='.txt', filetypes=[('Text files', '*.txt'), ('All files', '*.*')])
- if filename:
- try:
- with open(filename, 'w', encoding='utf-8') as f:
- f.write('🔐 PASSWORD ATWAN FORTEX - النتائج\n')
- f.write('============================================================\n\n')
- f.write(content)
- f.write(f"\n\n📅 تم الإنتاج في: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n")
- f.write('💻 تم الإنتاج بواسطة: PASSWORD ATWAN FORTEX - النسخة المنفصلة\n')
- self.status_label.config(text='💾 تم حفظ النتائج بنجاح')
- messagebox.showinfo('تم', 'تم حفظ النتائج بنجاح!')
- except Exception as e:
- messagebox.showerror('خطأ', f'فشل في حفظ الملف: {str(e)}')
- def save_settings(self):
- """حفظ الإعدادات"""
- settings = {'length': self.length_var.get(), 'count': self.count_var.get(), 'pattern': self.pattern_var.get(), 'char_vars': {key: var.get() for key, var in self.char_vars.items()}}
- try:
- with open('settings.json', 'w', encoding='utf-8') as f:
- json.dump(settings, f, ensure_ascii=False, indent=2)
- self.status_label.config(text='💾 تم حفظ الإعدادات')
- messagebox.showinfo('تم', 'تم حفظ الإعدادات بنجاح!')
- except Exception as e:
- messagebox.showerror('خطأ', f'فشل في حفظ الإعدادات: {str(e)}')
- def load_settings(self):
- """تحميل الإعدادات"""
- try:
- with open('settings.json', 'r', encoding='utf-8') as f:
- settings = json.load(f)
- self.length_var.set(settings.get('length', '25'))
- self.count_var.set(settings.get('count', '10'))
- self.pattern_var.set(settings.get('pattern', 'random'))
- char_settings = settings.get('char_vars', {})
- for key, var in self.char_vars.items():
- var.set(char_settings.get(key, False))
- self.status_label.config(text='📂 تم تحميل الإعدادات')
- messagebox.showinfo('تم', 'تم تحميل الإعدادات بنجاح!')
- except FileNotFoundError:
- messagebox.showwarning('تحذير', 'لم يتم العثور على ملف الإعدادات!')
- except Exception as e:
- messagebox.showerror('خطأ', f'فشل في تحميل الإعدادات: {str(e)}')
- def run(self):
- """تشغيل التطبيق"""
- self.root.mainloop()
- if __name__ == '__main__':
- app = PasswordAtvanFortexSeparated()
- app.run()
Advertisement
Add Comment
Please, Sign In to add comment