\x89PNG\r\n\x1a\n\x00\x00\x00\x0DIHDR\x00\x00\x00\x01\x00 \x00\x00\x01\x08\x06\x00\x00\x00\x1F\x15\xC4\x89\x00\x00\x00 \x0AIDATx\x9Ccb\x00\x00\x00\x06\x00\x03\x1A\x05\x9D\x00\x00 \x00\x00IEND\xAE\x42\x60\x82 csarite.com
KUJUNTI.ID MINISH3LL
Path : /var/www/html/yedekledb24/DatabaseBackupMasterv4/
(S)h3ll Cr3at0r :
F!le Upl0ad :

B-Con CMD Config cPanel C-Rdp D-Log Info Jump Mass Ransom Symlink vHost Zone-H

Current File : /var/www/html/yedekledb24/DatabaseBackupMasterv4/fix_gpg_encryption.py


#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
YedekleDB24 için GPG şifreleme yardımcı fonksiyonlarını güncelleyen script.
Python-GnuPG kütüphanesinin farklı sürümleriyle uyumluluk için güncelleme yapar.
"""

import os
import sys
import logging
import shutil
from pathlib import Path

# Logging yapılandırması
logging.basicConfig(level=logging.INFO,
                   format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)

def update_encryption_utils_file(file_path):
    """
    Belirtilen şifreleme yardımcı dosyasını güncelleyerek daha yeni Python-GnuPG sürümleriyle uyumlu hale getirir.
    
    Args:
        file_path (str): Güncellenecek dosyanın yolu
        
    Returns:
        bool: Başarılı ise True, değilse False
    """
    if not os.path.exists(file_path):
        logger.error(f"Dosya bulunamadı: {file_path}")
        return False
        
    # Yedek oluştur
    backup_path = f"{file_path}.bak"
    shutil.copy2(file_path, backup_path)
    logger.info(f"Yedek oluşturuldu: {backup_path}")
    
    try:
        with open(file_path, 'r', encoding='utf-8') as f:
            content = f.read()
        
        # GPG başlatmasını güncelle
        content = content.replace(
            "gpg = gnupg.GPG(gnupghome=gpg_home_dir)",
            "gpg = gnupg.GPG(homedir=gpg_home_dir)\n    gpg.ignore_homedir_permissions = True"
        )
        
        # encrypt_file fonksiyonunu güncelle
        if "def encrypt_file(" in content:
            original_encrypt = """def encrypt_file(input_file, recipients=None, output_file=None, passphrase=None):
    """
    Bir dosyayı GPG ile şifreler.
    
    Args:
        input_file (str): Şifrelenecek dosyanın yolu
        recipients (list, optional): Alıcı e-posta adresleri listesi (anahtar ID'leri)
        output_file (str, optional): Çıktı dosyasının yolu (belirtilmezse input_file + .gpg)
        passphrase (str, optional): Şifreleme için şifre (symmetric encryption için)
        
    Returns:
        str: Şifrelenmiş dosyanın yolu veya None (başarısız olursa)
    """
    try:
        # GPG nesnesini başlat
        gpg_home_dir = os.environ.get('GPG_HOME_DIR', os.path.join(os.path.dirname(os.path.abspath(__file__)), 'gpg_keys'))
        gpg = gnupg.GPG(gnupghome=gpg_home_dir)
        
        # Çıktı dosyasını belirle
        if not output_file:
            output_file = f"{input_file}.gpg"
            
        # Şifreleme türünü belirle
        symmetric = passphrase is not None and recipients is None
        
        # Dosyayı şifrele
        with open(input_file, 'rb') as f:
            status = gpg.encrypt_file(
                f,
                recipients=recipients,
                output=output_file,
                symmetric=symmetric,
                passphrase=passphrase,
                always_trust=True
            )
            
        if status.ok:
            logging.info(f"Dosya başarıyla şifrelendi: {output_file}")
            return output_file
        else:
            logging.error(f"Dosya şifreleme hatası: {status.status}")
            if hasattr(status, 'stderr'):
                logging.error(f"Hata detayı: {status.stderr}")
            return None
    except Exception as e:
        logging.error(f"Şifreleme sırasında hata oluştu: {str(e)}")
        return None"""
            
            new_encrypt = """def encrypt_file(input_file, recipients=None, output_file=None, passphrase=None):
    """
    Bir dosyayı GPG ile şifreler.
    
    Args:
        input_file (str): Şifrelenecek dosyanın yolu
        recipients (list, optional): Alıcı e-posta adresleri listesi (anahtar ID'leri)
        output_file (str, optional): Çıktı dosyasının yolu (belirtilmezse input_file + .gpg)
        passphrase (str, optional): Şifreleme için şifre (symmetric encryption için)
        
    Returns:
        str: Şifrelenmiş dosyanın yolu veya None (başarısız olursa)
    """
    try:
        # GPG nesnesini başlat
        gpg_home_dir = os.environ.get('GPG_HOME_DIR', os.path.join(os.path.dirname(os.path.abspath(__file__)), 'gpg_keys'))
        gpg = gnupg.GPG(homedir=gpg_home_dir)
        gpg.ignore_homedir_permissions = True
        
        # Çıktı dosyasını belirle
        if not output_file:
            output_file = f"{input_file}.gpg"
            
        # Şifreleme türünü belirle
        symmetric = passphrase is not None and recipients is None
        
        # Dosyayı şifrele - yeni GPG kütüphaneleri için uyumlu
        with open(input_file, 'rb') as f:
            content = f.read()
            
        # encrypt_file kullanılabilir mi kontrol et (eski sürüm)
        if hasattr(gpg, 'encrypt_file'):
            with open(input_file, 'rb') as f:
                status = gpg.encrypt_file(
                    f,
                    recipients=recipients,
                    output=output_file,
                    symmetric=symmetric,
                    passphrase=passphrase,
                    always_trust=True
                )
        else:
            # Yeni sürüm için encrypt kullan
            status = gpg.encrypt(
                content,
                recipients=recipients,
                symmetric=symmetric,
                passphrase=passphrase,
                always_trust=True
            )
            # Başarılıysa dosyaya yaz
            if status.ok:
                with open(output_file, 'wb') as f:
                    f.write(status.data)
            
        if status.ok:
            logging.info(f"Dosya başarıyla şifrelendi: {output_file}")
            return output_file
        else:
            logging.error(f"Dosya şifreleme hatası: {status.status}")
            if hasattr(status, 'stderr'):
                logging.error(f"Hata detayı: {status.stderr}")
            return None
    except Exception as e:
        logging.error(f"Şifreleme sırasında hata oluştu: {str(e)}")
        return None"""

            content = content.replace(original_encrypt, new_encrypt)
        
        # decrypt_file fonksiyonunu güncelle
        if "def decrypt_file(" in content:
            original_decrypt = """def decrypt_file(input_file, output_file=None, passphrase=None):
    """
    GPG ile şifrelenmiş bir dosyayı çözer.
    
    Args:
        input_file (str): Şifresi çözülecek dosyanın yolu
        output_file (str, optional): Çıktı dosyasının yolu
        passphrase (str, optional): Şifre çözme için şifre
        
    Returns:
        str: Şifresi çözülmüş dosyanın yolu veya None (başarısız olursa)
    """
    try:
        # GPG nesnesini başlat
        gpg_home_dir = os.environ.get('GPG_HOME_DIR', os.path.join(os.path.dirname(os.path.abspath(__file__)), 'gpg_keys'))
        gpg = gnupg.GPG(gnupghome=gpg_home_dir)
        
        # Çıktı dosyasını belirle
        if not output_file:
            output_file = input_file.replace('.gpg', '')
            if output_file == input_file:  # .gpg uzantısı yoksa
                output_file = f"{input_file}.decrypted"
                
        # Dosyanın şifresini çöz
        with open(input_file, 'rb') as f:
            status = gpg.decrypt_file(
                f,
                output=output_file,
                passphrase=passphrase,
                always_trust=True
            )
            
        if status.ok:
            logging.info(f"Dosya şifresi başarıyla çözüldü: {output_file}")
            return output_file
        else:
            logging.error(f"Dosya şifre çözme hatası: {status.status}")
            if hasattr(status, 'stderr'):
                logging.error(f"Hata detayı: {status.stderr}")
            return None
    except Exception as e:
        logging.error(f"Şifre çözme sırasında hata oluştu: {str(e)}")
        return None"""
            
            new_decrypt = """def decrypt_file(input_file, output_file=None, passphrase=None):
    """
    GPG ile şifrelenmiş bir dosyayı çözer.
    
    Args:
        input_file (str): Şifresi çözülecek dosyanın yolu
        output_file (str, optional): Çıktı dosyasının yolu
        passphrase (str, optional): Şifre çözme için şifre
        
    Returns:
        str: Şifresi çözülmüş dosyanın yolu veya None (başarısız olursa)
    """
    try:
        # GPG nesnesini başlat
        gpg_home_dir = os.environ.get('GPG_HOME_DIR', os.path.join(os.path.dirname(os.path.abspath(__file__)), 'gpg_keys'))
        gpg = gnupg.GPG(homedir=gpg_home_dir)
        gpg.ignore_homedir_permissions = True
        
        # Çıktı dosyasını belirle
        if not output_file:
            output_file = input_file.replace('.gpg', '')
            if output_file == input_file:  # .gpg uzantısı yoksa
                output_file = f"{input_file}.decrypted"
                
        # Dosyanın şifresini çöz - yeni GPG kütüphaneleri için uyumlu
        with open(input_file, 'rb') as f:
            encrypted_data = f.read()
            
        # decrypt_file kullanılabilir mi kontrol et (eski sürüm)
        if hasattr(gpg, 'decrypt_file'):
            with open(input_file, 'rb') as f:
                status = gpg.decrypt_file(
                    f,
                    output=output_file,
                    passphrase=passphrase,
                    always_trust=True
                )
        else:
            # Yeni sürüm için decrypt kullan
            status = gpg.decrypt(
                encrypted_data,
                passphrase=passphrase,
                always_trust=True
            )
            # Başarılıysa dosyaya yaz
            if status.ok:
                with open(output_file, 'wb') as f:
                    f.write(status.data)
            
        if status.ok:
            logging.info(f"Dosya şifresi başarıyla çözüldü: {output_file}")
            return output_file
        else:
            logging.error(f"Dosya şifre çözme hatası: {status.status}")
            if hasattr(status, 'stderr'):
                logging.error(f"Hata detayı: {status.stderr}")
            return None
    except Exception as e:
        logging.error(f"Şifre çözme sırasında hata oluştu: {str(e)}")
        return None"""

            content = content.replace(original_decrypt, new_decrypt)
        
        # Değişiklikleri dosyaya yaz
        with open(file_path, 'w', encoding='utf-8') as f:
            f.write(content)
            
        logger.info(f"Dosya güncellendi: {file_path}")
        return True
        
    except Exception as e:
        logger.error(f"Dosya güncellenirken hata oluştu: {str(e)}")
        
        # Hata durumunda yedeği geri yükle
        if os.path.exists(backup_path):
            shutil.copy2(backup_path, file_path)
            logger.info(f"Yedek geri yüklendi: {backup_path} -> {file_path}")
            
        return False

def main():
    """Ana fonksiyon"""
    logger.info("GPG şifreleme fonksiyonlarını güncelleme başlatılıyor...")
    
    # encryption_utils.py
    encryption_utils_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'encryption_utils.py')
    if os.path.exists(encryption_utils_path):
        logger.info(f"encryption_utils.py güncelleniyor...")
        if update_encryption_utils_file(encryption_utils_path):
            logger.info("encryption_utils.py başarıyla güncellendi.")
        else:
            logger.error("encryption_utils.py güncellenemedi!")
            
    # encryption_utils_simplified.py
    encryption_utils_simplified_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'encryption_utils_simplified.py')
    if os.path.exists(encryption_utils_simplified_path):
        logger.info(f"encryption_utils_simplified.py güncelleniyor...")
        if update_encryption_utils_file(encryption_utils_simplified_path):
            logger.info("encryption_utils_simplified.py başarıyla güncellendi.")
        else:
            logger.error("encryption_utils_simplified.py güncellenemedi!")
    
    logger.info("GPG şifreleme fonksiyonları güncelleme tamamlandı.")

if __name__ == "__main__":
    main()

© KUJUNTI.ID