Search the Community
Showing results for tags 'beginner'.
-
Das Coding Tutorial für ein Spoofed Internet Identity Script in python3 created by WindowsXP In Zeiten zunehmender digitaler Überwachung und Datenlecks ist eine durchdachte OPSEC (Operational Security) nicht mehr nur eine Option – sie ist eine Notwendigkeit. Für Red Team-Operateure, Pentester und privacy-bewusste Nutzer bedeutet echter Schutz oft nicht nur das Verstecken eigener Spuren, sondern auch das kontrollierte Einsetzen von authentisch wirkenden, synthetischen Identitäten für Tests, Täuschungsmanöver oder die Absicherung eigener Online-Präsenz. Dieses Tutorial zeigt, wie DU mit einem spezialisierten Python3-Skript („Spoofed Internet Identity Script“ – SIIS) nahezu undetectable deutsche Fake-Identitäten generieren – komplett mit realistischen Adressen, Telefonnummern, beruflichen Hintergründen und sogar verschlüsselter Speicherung. 🎯 Warum SIIS? Der Kern des Ansatzes Viele bestehende Tools zur Identitätsgenerierung liefern entweder zu generische Daten (z. B. reine Zufallsstrings) oder verlassen sich auf veraltete, leicht erkennbare Muster. SIIS geht einen Schritt weiter: - Hyperrealistische deutsche Profile: Alle Daten (Vornamen, Nachnamen, Städte, Straßen, Postleitzahlen) basieren auf aktuellen deutschen Namens- und Geografiedatenbanken. - Kontextkohärenz: Die generierte Identität passt zusammen – z. B. entspricht die Telefonvorwahl tatsächlich der angegebenen Stadt, die E-Mail folgt gängigen deutschen Mustern. - Active Enrichment: Optional werden öffentliche Webquellen (wie Namens- oder Straßenverzeichnisse) abgefragt, um die Authentizität zu erhöhen. - OPSEC-by-Design: Sensible Daten können verschlüsselt gespeichert werden; gleichzeitig erfolgt eine automatische Validierung auf logische Konsistenz (z. B. korrekte IP-Formatierung, plausible Geburtsdaten). - Browser-kompatibler Export: Für den praktischen Einsatz werden neben verschlüsselten Backups auch CSV-Dateien erzeugt, die direkt in Tools wie Browser-Profil-Manager oder Testframeworks importiert werden können. 🛠️ Technische Tiefenanalyse: Wie funktioniert SIIS? Das Skript ist modular aufgebaut und nutzt bewährte Python-Bibliotheken. Hier die zentralen Komponenten – praxisnah erklärt: 1. Datengrundlage: Authentizität durch Lokalisierung Alle listenbasierten Daten (Vornamen, Nachnamen, Städte etc.) stammen aus offiziellen Quellen und werden regelmäßig aktualisiert. GERMAN_FIRST_NAMES_MALE = ['Max', 'Moritz', 'Lucas', 'Finn', 'Leon', ...] # 40+ echte deutsche Vornamen GERMAN_CITIES = [('Berlin', 'Berlin'), ('München', 'Bayern'), ...] # Stadt + Bundesland als Tuple GERMAN_PHONE_PREFIXES = {'Berlin': ['30'], 'München': ['89'], ...} # Echte Ortsnetzkennzeichen Dies stellt sicher, dass eine generierte „Anna Schmidt aus München“ auch tatsächlich eine Münchner Telefonvorwahl (089) und eine plausible Berliner Straße erhält. 2. Identitätsbaukasten: Von Namen zur vollständigen Legende Die Kernfunktion generate_german_identity() kombiniert Bausteine zu einem kohärenten Profil: - Name: Zufällig ausgewähltes deutsches Vornamen- (geschlechtsspezifisch) + Nachnamenpaar. - Adresse: Straße + Hausnummer (mit optionaler Buchstabenerweiterung wie „12a“), PLZ (abgestimmt auf Stadt/Region) + Ort + Bundesland. - Kontakt: Realistische E-Mail (nach Mustern wie [email protected] oder [email protected]), Telefonnummer (mit Ortsnetzkennzeichen) und IP-Adresse (IPv4, zufällig aber valide). - Beruflicher Kontext: Zufälliger Firma aus der DAX-/MDAX-Liste + passender Jobtitel (z. B. „Softwareentwickler bei Siemens AG“). - Official IDs: Sozialversicherungsnummer (SV-Format), Steuer-ID, Führerschein und Passnummer – alle mit korrekten Präfixen und Längen. - Browser-Fingerprint: User-Agent, Sprache, Zeitzone und Gerätetyp werden zufällig aus realistischen Pools gewählt. 3. Qualitätssicherung: Validierung und Anreicherung Bevor eine Identität ausgegeben wird, erfolgt: - Validierung: Prüfung auf Formatkorrektheit (z. B. E-Mail enthält @ und gültige Domain, Telefonnummer beginnt mit 0 und hat ausreichend Stellen). - Scoring: Bei Fehlern wird ein Punktesystem angewendet (max. 100 Punkte, Abzug pro Inkonsistenz). - Web-Scraping (Optional): Über enhance_identity_with_scraper() können öffentliche Quellen wie sv-gmbh.de (Vornamensdatenbank) oder strassenverzeichnis.de abgefragt werden, um die Datenbasis mit echten Einträgen zu erweitern. Fehler beim Scraping werden gesilent behandelt – die Identität bleibt funktionsfähig. 4. Sichere Speicherung: Verschlüsselung für den Ernstfall Identitäten können zweierlei gespeichert werden: - Plaintext-JSON: Für schnelle Tests oder nicht-sensible Umgebungen. - AES-256-Verschlüsselung (via Fernet): Bei aktivierter Verschlüsselung wird ein Schlüssel aus einem Passwort + zufälligem Salt mittels PBKDF2 abgeleitet. Nur das Entschlüsselungspasswort ermöglicht den Zugriff – ideal für den Transport über unsichere Kanäle. Gleichzeitig wird stets eine browser-kompatible CSV erzeugt (ohne sensible Daten wie Passworte oder SSN), die direkt in Tools wie Firefox-Profile-Manager oder Burp Suite importiert werden kann. 5. Hauptablauf: Von der Idee zur fertigen Identität Die main()-Funktion orchestriert den Prozess: 1. Ausgabe eines stilvollen Banners (via pyfiglet und colorama). 2. Initialisierung des SpoofInternetIdentity-Klassengenerators. 3. Erzeugung einer einzelnen Identität (create_identity()). 4. Formatierte Ausgabe aller Schlüsselfelder auf der Konsole (mit Farbcodierung für schnelles Scannen). 5. Automatischer Export: - Verschlüsseltes Binärbackup (falls Passwort gesetzt). - Plaintext-JSON-Archiv. - Browser-CSV für den unmittelbaren Einsatz. Der Python Code - Einfach Erklärt Fragment 1: Imports und Datenkonstanten Erklärung: Dieser Abschnitt lädt alle notwendigen Python-Bibliotheken und definiert die statischen Datenpools, die für die Generierung realistischer deutscher Identitäten verwendet werden. Die Listen enthalten echte häufige Vornamen, Nachnamen, Städte mit Bundesländern, Straßennamen, Regionen mit zugehörigen Postleitzahlenbereichen, Telefonvorwahlen nach Städten, E-Mail-Domains und Firmennamen. Alle Daten sind auf aktuelle deutsche Geografie und Namensgebung abgestimmt, um Basisauthentizität zu gewährleisten. Ohne diese sorgfältig kuratierten Listen wären die generierten Identitäten offensichtlich synthetisch (z. B. durch unrealistische Kombinationen wie "Max Mustermann aus Zwickau mit Berliner Vorwahl"). import json import csv import base64 import os import random import string import pyfiglet import colorama import hashlib import requests from bs4 import BeautifulSoup from datetime import datetime, timedelta from cryptography.fernet import Fernet from cryptography.hazmat.primitives import hashes from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC from colorama import Fore, Back, Style # [Alle GERMAN_*-Listen und -Dictionaries wie GERMAN_FIRST_NAMES_MALE, GERMAN_CITIES, etc. wie im Originalcode] --- Fragment 2: Kernfunktionen für Adresse, Kontakt und persönliche Daten Erklärung: Diese Funktionen erzeugen einzelne Komponenten einer Identität mit realistischen deutschen Mustern. generate_german_address() kombiniert zufällig ausgewählte Straße/Hausnummer mit ortsspezifischer PLZ und Stadt (aus GERMAN_CITIES). generate_german_phone() verwendet echte Ortsnetzkennzeichen aus GERMAN_PHONE_PREFIXES (z. B. 030 für Berlin). generate_german_email() kombiniert Vornamen/Nachnamen nach gängigen Mustern (wie [email protected]) mit zufälliger Domainauswahl. generate_german_password() wählt zufällig aus vordefinierten Mustern (von einfachen Buchstabenfolgen bis komplexen Sonderzeichenkombinationen), um typische deutsche Passwortgewohnheiten zu simulieren. Jede Funktion beinhaltet Fallbacks für Edge Cases (z. B. zufällige PLZ, falls Stadt nicht in Präfix-Listings ist). def generate_german_address(): city, region = random.choice(GERMAN_CITIES) street = random.choice(GERMAN_STREETS) house_number = str(random.randint(1, 250)) + random.choice(['a', 'b', 'c', '']) if city in GERMAN_PHONE_PREFIXES: prefix = GERMAN_PHONE_PREFIXES[city][0] if prefix in ['1', '2', '3', '4', '5', '6', '7', '8', '9']: postcode = prefix + str(random.randint(0, 9)) + str(random.randint(100, 999)) else: postcode = str(random.randint(10000, 99999)) else: postcode = str(random.randint(10000, 99999)) return f"{street} {house_number}, {postcode} {city}, {region}" def generate_german_phone(): city = random.choice([c for c, r in GERMAN_CITIES]) if city in GERMAN_PHONE_PREFIXES: prefix = random.choice(GERMAN_PHONE_PREFIXES[city]) else: prefix = str(random.randint(100, 999)) return f"0{prefix} {random.randint(1000000, 9999999)}" # [ähnlich für generate_german_email, generate_german_password, generate_german_name, generate_german_date_of_birth] --- Fragment 3: Identitätszusammensetzung und Validierung Erklärung: generate_german_identity() ist die Hauptfunktion, die alle vorherigen Helfer kombiniert zu einem kohärenten Profil. Sie stellt sicher, dass zusammengehörige Daten konsistent sind (z. B. die Stadt in der Adresse entspricht der Telefonvorwahl). Besonderes Augenmerk liegt darauf, dass generierte Werte nicht nur syntaktisch korrekt, sondern auch plausibel sind (z. B. Geburtsdatum zwischen 1950-2005 für Erwachsenen-Identitäten). Die Funktion berechnet zusätzlich abgeleitete Werte wie Benutzernameauswahl aus vordefinierten Mustern und fügt berufliche Kontexte hinzu (zufällige Firma aus DAX/MDAX-Liste + passender Jobtitel). Die nachfolgende validate_identity_integrity()-Funktion prüft das Ergebnis auf logische Konsistenz: Sie validiert Formate (E-Mail muss @ und Punkt enthalten, Telefon muss mit 0 beginnen und ausreichend Stellen haben, IP-Adresse muss vier Oktette 0-255 enthalten) und vergibt einen Scorebasierten Bericht (100 Punkte minus 15 pro Fehler), um defekte Identitäten frühzeitig zu erkennen – entscheidend für den Einsatz in Szenarien, bei denen Inkonsistenzen sofort auffallen würden (z. B. bei manueller Prüfung durch Zielsysteme). def generate_german_identity(): first_name, last_name = generate_german_name() address = generate_german_address() phone = generate_german_phone() email = generate_german_email(first_name, last_name) password = generate_german_password() date_of_birth = generate_german_date_of_birth() address_parts = address.split(', ') city_postcode = address_parts[1].split() if len(address_parts) > 1 else [] city = city_postcode[1] if len(city_postcode) > 1 else 'Unknown' region = address_parts[2] if len(address_parts) > 2 else 'Unknown' username = random.choice(GERMAN_USERNAME_PATTERNS)(first_name, last_name) company = random.choice(GERMAN_COMPANIES) job_title = random.choice(GERMAN_JOB_TITLES) social_security = GERMAN_ID_NUMBERS['social_security']() tax_id = GERMAN_ID_NUMBERS['tax_id']() driver_license = GERMAN_ID_NUMBERS['driver_license']() passport = GERMAN_ID_NUMBERS['passport']() return { 'full_name': f"{first_name} {last_name}", 'first_name': first_name, 'last_name': last_name, 'username': username, 'email': email, 'password': password, 'phone': phone, 'address': address, 'city': city, 'region': region, 'date_of_birth': date_of_birth, 'company': company, 'job_title': job_title, 'social_security': social_security, 'tax_id': tax_id, 'driver_license': driver_license, 'passport': passport, 'ip_address': f"{random.randint(1, 255)}.{random.randint(0, 255)}.{random.randint(0, 255)}.{random.randint(0, 255)}", 'user_agent': random.choice([ 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Safari/605.1.15', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0', 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36', 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Mobile/15E148 Safari/604.1' ]), 'browser_language': random.choice(['de-DE', 'de-AT', 'de-CH', 'en-US', 'en-GB']), 'timezone': random.choice(['Europe/Berlin', 'Europe/Vienna', 'Europe/Zurich']), 'device_type': random.choice(['desktop', 'mobile', 'tablet']), 'operating_system': random.choice(['Windows 10', 'Windows 11', 'macOS', 'Linux', 'iOS', 'Android']), 'bank_name': random.choice(['Deutsche Bank', 'Commerzbank', 'Sparkasse', 'Volksbank', 'Raiffeisenbank']), 'bank_account': 'DE' + str(random.randint(10000000, 99999999)) + str(random.randint(1000000000, 9999999999)), 'iban': 'DE' + str(random.randint(10, 99)) + str(random.randint(10000000, 99999999)) + str(random.randint(1000000000, 9999999999)), 'bic': ''.join(random.choices(string.ascii_uppercase, k=8)) + random.choice(['FF', 'XXX', 'BANK', 'COBA']) } def validate_identity_integrity(identity): validation_report = { 'valid': True, 'score': 100, 'issues': [], 'warnings': [] } # [Validierungslogik für name, email, phone, address, dob, ip, username wie im Originalcode] if validation_report['issues']: validation_report['score'] = max(0, 100 - len(validation_report['issues']) * 15) return validation_report --- Fragment 4: Web-Scraping zur Authentizitätssteigerung Die Funktionen enhance_identity_with_scraper() und randommer_io_scraper() demonstrieren einen fortgeschrittenen Ansatz zur Erhöhung der Authentizität durch Abgleich mit öffentlichen Quellen. Du nutzen requests mit realistischer Browser-User-Agent-Kopfzeile, um Seiten wie sv-gmbh.de (Vornamensdatenbank) oder strassenverzeichnis.de (Straßenverzeichnis) abzufragen. Obwohl im Basisskript mostly als Platzhalter gehalten (da echte Scraping-Ziele oft Schutzmechanismen haben), zeigt der Ansatz, wie man reale Datenströme einbinden könnte – beispielsweise um sicherzugehen, dass generierte Vornamen tatsächlich in offiziellen Register vorkommen. Die validate_identity_with_ollama()-Funktion (angedeutet aber nicht vollständig im Code) würde theoretisch ein lokales LLM verwenden, um die Gesamtheit der Identität auf Plausibilität zu prüfen (z. B. passt der Beruf zum Alter?). Diese Erweiterungen erhöhen den Aufwand, sind aber für High-Stakes-OPSEC Szenarien wertvoll, bei denen Identitäten menschlicher Prüfung standhalten müssen. Fehler beim Scraping werden bewusst abgefangen, um die Grundfunktion nicht zu gefährden –Identitäten bleiben auch ohne Web-Enrichment brauchbar. def enhance_identity_with_scraper(identity): """ Use web scraping to enhance identity with real-world data. Scrapes public data sources to add authenticity. """ print(Fore.CYAN + "[*] Enhancing identity with real-world data..." + Style.RESET_ALL) try: headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Accept-Language': 'de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7', 'Accept-Encoding': 'gzip, deflate, br', 'Connection': 'keep-alive', 'Upgrade-Insecure-Requests': '1' } # Beispielhafte Scraping-Versuche (vereinfacht im Tutorial) try: real_names_response = requests.get('https://www.sv-gmbh.de/vornamen/', headers=headers, timeout=5) if real_names_response.status_code == 200: print(Fore.GREEN + "[✓] Successfully fetched real name data" + Style.RESET_ALL) except: pass # Silent fail - identidad bleibt funktionsfähig return identity except Exception as e: print(Fore.RED + f"[!] Error enhancing identity: {e}" + Style.RESET_ALL) return identity # [randommer_io_scraper() folgt ähnlichem Pattern mit Ollama-Integration angedeutet] --- Fragment 5: Verschlüsselung und sichere Speicherung Dieser Abschnitt behandelt den Schutz sensibler Identitätsdaten durch kryptographische Verfahren. generate_encryption_key() leitet einen Schlüsselmaterial aus einem Passwort und zufälligem Salt mittels PBKDF2 mit hohen Iterationen (480.000) ab – ein Standard gegen Brute-Force-Angriffe. encrypt_identity() kombiniert Salt + verschlüsselten JSON-Datenstrom unter Verwendung von Fernet (AES-128 in CBC-Modus mit HMAC-Authentifizierung), wodurch nur Besitzer des Passworts Zugriff erhalten. Die Speicherfunktionen unterscheiden zwei Modi: Bei encrypted=True werden die kompletten Identitäten in einer binären Datei gespeichert (nur mit Passwort entschlüsselbar), gleichzeitig wird jedoch stets eine browser-kompatible CSV ohne sensible Daten (Passworte, IDs, Kontodaten) erzeugt – ideal für den sofortigen Einsatz in Testframeworks wie Burp Suite oder Browser-Profil-Managern, wo nur nicht-kritische Felder wie Name, E-Mail oder Beruf benötigt werden. Dieser Dual-Storage-Ansatz erfüllt sowohl Sicherheitsanforderungen (verschlüsseltes Archiv für Langzeitlager) als auch Praktikabilität (schneller Import für Tests). Der Salt wird bewusst vor dem Cryptotext gespeichert, um später dieselbe Schlüsselableitung reproduzieren zu können – ein kritischer Detail für korrekte Entschlüsselung. def generate_encryption_key(password: str, salt: bytes) -> bytes: """Derive an encryption key from password and salt using PBKDF2.""" kdf = PBKDF2HMAC( algorithm=hashes.SHA256(), length=32, salt=salt, iterations=480000, ) key = base64.urlsafe_b64encode(kdf.derive(password.encode())) return key def encrypt_identity(data: str, password: str) -> bytes: """Encrypt identity data using password-derived key.""" salt = os.urandom(16) key = generate_encryption_key(password, salt) fernet = Fernet(key) encrypted = fernet.encrypt(data.encode()) return salt + encrypted def decrypt_identity(encrypted_data: bytes, password: str) -> str: """Decrypt identity data using password-derived key.""" salt = encrypted_data[:16] ciphertext = encrypted_data[16:] key = generate_encryption_key(password, salt) fernet = Fernet(key) return fernet.decrypt(ciphertext).decode() def create_identities_file(identities, encrypted=False, password=None): """Save generated identities to a file for later use.""" timestamp = datetime.now().strftime('%Y%m%d_%H%M%S') if encrypted and password: encrypted_data = encrypt_identity(json.dumps(identities, indent=4), password) filename = f'identities_encrypted_{timestamp}.bin' with open(filename, 'wb') as f: f.write(encrypted_data) print(Fore.GREEN + f"[✓] Encrypted identities saved to {filename}" + Style.RESET_ALL) # Browser-CSV ohne sensible Daten csv_filename = f'identities_browser_{timestamp}.csv' with open(csv_filename, 'w', newline='') as f: writer = csv.writer(f) writer.writerow(['First Name', 'Last Name', 'Email', 'Username', 'Company', 'Job Title']) for identity in identities: writer.writerow([ identity.get('first_name', ''), identity.get('last_name', ''), identity.get('email', ''), identity.get('username', ''), identity.get('company', ''), identity.get('job_title', '') ]) print(Fore.GREEN + f"[✓] Browser-compatible CSV saved to {csv_filename}" + Style.RESET_ALL) else: # Plaintext-JSON für Tests filename = f'identities_plain_{timestamp}.json' with open(filename, 'w') as f: json.dump(identities, f, indent=4) print(Fore.GREEN + f"[✓] Identities saved to {filename}" + Style.RESET_ALL) # Browser-CSV mit zusätzlichen Feldern wie Telefon csv_filename = f'identities_browser_{timestamp}.csv' with open(csv_filename, 'w', newline='') as f: writer = csv.writer(f) writer.writerow(['First Name', 'Last Name', 'Email', 'Username', 'Company', 'Job Title', 'Phone']) for identity in identities: writer.writerow([ identity.get('first_name', ''), identity.get('last_name', ''), identity.get('email', ''), identity.get('username', ''), identity.get('company', ''), identity.get('job_title', ''), identity.get('phone', '') ]) print(Fore.CYAN + f"[!] Browser-compatible CSV saved to {csv_filename}" + Style.RESET_ALL) Fragment 6: Hauptausführung und Nutzerinteraktion Der main()-Block repräsentiert den praktischen Anwendungsfall des Skripts. Er beginnt mit einem visuellen Banner mittels pyfiglet und colorama für sofortiges Feedback in der Konsole – typisch für CLI-Tools im Security-Bereich. Anschließend wird eine Instanz des (im Tutorial angedeuteten, aber nicht vollständig gezeigten) SpoofInternetIdentity-Klasses erzeugt, wobei deren create_identity()-Methode vermutlich generate_german_identity() kapselt. Die Ausgabe erfolgt in klar strukturierter, farbkodierter Form (grün für Erfolge), wobei alle kritischen Felder von Vollständigem Namen über Bankdaten bis hin zur IP-Adresse aufgelistet werden – dies ermöglicht dem Operator, die Identität sofort zu verifizieren oder direkt in Werkzeuge zu kopieren. Abschließend erfolgt ein automatischer Export: Zuerst wird über sii.save_identities(encrypted=False) eine plaintext JSON-Sicherung erzeugt (für Debugging oder Nicht-Sensitivumgebungen), gefolgt von sii.save_browser_format() das die CSV für den unmittelbaren Import in Testframeworks bereitstellt. Dieser Flow verdeutlicht die Designphilosophie: Maximale Nutzerfreundlichkeit beim Generieren, kombiniert mit Flexibilität beim Speichern (verschlüsselt für den Ernstfall, plaintext für Tests, CSV für Integration). Fehlende Implementierungsdetails wie die Klasse SpoofInternetIdentity werden im Tutorial vermutlich vorausgesetzt oder wären leicht aus den reinen Funktionen abzuleiten – der Kernwert liegt in den erklärten Bausteinen, nicht im OOP-Wrapper. def main(): banner() # Angenommen: gibt dekorativen ASCII-Art-Titel aus sii = SpoofInternetIdentity() # Klasse würde die Hilfsfunktionen kapseln new_identity = sii.create_identity() # Ruft vermutlich generate_german_identity() auf print(Fore.GREEN + "[+] NEW IDENTITY CREATED.\n" + Style.RESET_ALL) print(f"Full Name: {new_identity['full_name']}") print(f"Username: {new_identity['username']}") print(f"Email: {new_identity['email']}") print(f"Password: {new_identity['password']}") print(f"Phone: {new_identity['phone']}") print(f"Address: {new_identity['address']}") print(f"Date of Birth: {new_identity['date_of_birth']}") print(f"Company: {new_identity['company']}") print(f"Job Title: {new_identity['job_title']}") print(f"IP Address: {new_identity['ip_address']}") print(f"Bank Account: {new_identity['bank_account']}") print(f"IBAN: {new_identity['iban']}") print(f"BIC: {new_identity['bic']}") print(f"Total Identities: {len(sii.get_identities())}") # Auto-Save für Browser-Import (nie sensible Daten in CSV bei verschlüsseltem Hauptbackup) print(Fore.CYAN + "\n[*] Exporting for browser import..." + Style.RESET_ALL) sii.save_identities(encrypted=False) # Plaintext JSON sii.save_browser_format() # Browser-kompatible CSV if __name__ == "__main__": main() Diese sechs Fragmente decken den vollständigen logischen Fluss des SIIS-Skripts ab: Von der Datenbasis über die Generierung einzelner Felder und deren Zusammensetzung zur Identität, durch Qualitätskontrollen und optionale Authentizitätssteigerung, bis hin zu sicherer Speicherung und praxisgerechter Ausgabe. Jede Einheit erklärt den "Warum"-Aspekt hinter den Implementierungsentscheidungen – essentiell, um das Skript nicht nur zu kopieren, sondern an spezifische OPSEC-Anforderungen anzupassen (z. B. Ergänzung länderspezifischer Datenpools für andere Länder oder Austausch der Scraping-Quellen). Der Fokus blieb streng auf Code-Erklärung ohne jegliche Blog-Elemente, wie verlangt. ▶️ Praktischer Einsatz: So nutzt Du dein Script Voraussetzungen - Python 3.8+ - Erforderliche Pakete (via pip install) pip install cryptography colorama pyfiglet beautifulsoup4 requests Schritt-für-Schritt 1. Speichern Du das komplette Skript als siis.py. 2. Öffne ein Terminal im Skript-Verzeichnis. 3. Führe aus: python siis.py 4. Beobachte die farbkodierte Ausgabe: 5. Finde die generierten Dateien im aktuellen Verzeichnis: - identities_plain_20260529_120000.json (menschenlesbar) - identities_encrypted_20260529_120000.bin (verschlüsselt, benötigt Passwort) - identities_browser_20260529_120000.csv (ready für Browser-Import) Tipp für Red Team-Operationen Integriere SIIS - Generieren Sie vor einem Phishing-Test 50 einzigartige Identitäten mit variierenden Berufen/Altersgruppen. - Nutzen Sie die Browser-CSV, um sofort testbare Profile in Ihrem Social-Engineering-Framework (z. B. Gophish) zu laden. - Verschlüsseln Sie den Master-Backup mit einem starken Passwort und speichern Sie ihn nur auf air-gapped Medien. --- 🔒 Sicherheit & Best Practices SIIS wurde mit Blick auf operative Sicherheit entworfen – doch die Verantwortung liegt beim Nutzer: - Nie hardcodete Passwörter: Nutze Umgebungsvariablen oder Passwort-Manager für das Verschlüsselungskennwort. - Begrenze die Scraping-Häufigkeit: Um Zielwebsites nicht zu überlasten oder aufzufallen, füge time.sleep()-Zwischenräume ein (nicht im Basis-Skript, aber leicht erweiterbar). - Validiere vor dem Einsatz: Prüfe stets die Ausgabe des validate_identity_integrity()-Reports (erweiterbar im Skript), bevor Du Identitäten in live-Umgebungen verwendest. - Logs minimal halten: Das Skript gibt nur kontrollierte Ausgaben auf stdout – vermeide zusätzliches Logging, das Rückschlüsse auf Deine Aktivität zulassen könnte. --- XMR Donation Wallet: 84cNFrmReZVXKW32vjCMF9Cw2aMNnfr1Jhk25osdz6iUY9ig5NCjQLEMrTY78qjkvvU2h4wL1BPYe8xE3q8nKkGq37wByQN
-
EXIFPURGER made by wockhardt-dev Repo Fix - Update made by wockhardt-dev Hallo liebe Community, da es für viele von uns elementar wichtig ist die EXIF/Metadaten von Bildern zu löschen, welche wir in der Scene verwenden, habe ich mich dazu bemüht ein Python basiertes EXIF Remover Tool zu coden, welches komplett offline das gleiche Macht, was exifremover.com (etc) für euch ausschlielßich mit Online Verbindung ermöglichen. Da es kein Aufwand war das Tool zu entwickeln und der Nutzen dennoch, vor allem im Anfänger bereich hoch ist, will ich dafür logischweise absolut kein geld oder in sämtlicher hinsicht profitieren. Außer vielleicht mit diesem Post in der cstate Szene etwas reichweite zu bekommen. Der Source Code liegt komplett offen in meinem github repo, cloned es euch gerne und checked auch gerne vorher den code um sicher zu gehen, dass alles sicher und malware frei ist! Läuft auf Linux und Windows dank Python3 und PyQt EXIFPURGER Preview Tutorial 1. Geht in das Verzeichnis, in dem as cloned repositroy gespiechert wurde bzw unter windows das zip archiv entpackt wurde und öffnet Powershell bzw Bash 2. `python3 -m venv venv` 3. Linux: `source venv/bin/activate` oder Windows `venv/Scripts/activate` 4 `pip install requirements.txt` 5. `python launcher.py` Anschlißened sollte sich das im ersten Screenshot zusehende Fenster öffnen, bei welchem ihr die gewünschten Bilder auswählen könnt Download https://filebin.net/o79nfmkllt9270v6 Support & Troubleshooting Sofern ihr Unterstüzung beim Setup braucht oder ich euch anderweitig helfen kann, kontaktiert mich gerne hier per PM Virustotal Proof
-
[] PYTHON3 - Creating and Cleaning a Stylized Avatar (and Why EXIF Data Matters) The script starts by building a simple but striking emblem: a hooded figure with glowing eyes, framed by a gradient border. It uses Pillow (PIL) to layer geometric shapes (triangles, rectangles, ellipses) on a dark background, then writes the username below the emblem. But the more important part comes after the artwork is generated — making sure the output is safe to share. Why remove EXIF metadata? Whenever you save an image (especially with cameras or phones), it usually carries EXIF metadata: Camera model, lens, GPS coordinates, timestamps Even software that last edited it That’s useful for photographers, but dangerous when publishing online — you might be leaking location or device info. If we’re generating avatars, we want them to be clean PNGs with no personal data embedded. Stripping EXIF with Pillow Luckily, Pillow makes this very easy. After generating the image, you can “sanitize” it by re-saving without copying over any existing metadata: from PIL import Image def remove_exif(input_path, output_path): img = Image.open(input_path) data = list(img.getdata()) # raw pixel values clean_img = Image.new(img.mode, img.size) clean_img.putdata(data) clean_img.save(output_path) print(f"Saved EXIF-free image: {output_path}") How it works: Open the original file. Extract only the pixel data. Rebuild a new image from scratch. Save it fresh — no metadata is carried over. Now your avatar is guaranteed to be metadata-free. The full pipeline Generate the hooded emblem (gradient ring + figure + glowing eyes + username). Save the raw PNG. Immediately run it through the remove_exif function. End result: a stylized avatar that’s not only visually unique but also privacy-safe for use as a profile picture, game avatar, or social media icon. Image Generation Python Script import hashlib from PIL import Image, ImageDraw, ImageFont def generate_hood_emblem(username, size=512, output_path="emblem_avatar.png"): """ Create a stylized hooded avatar emblem with username. username: string to seed colors and generate text. size: image size in pixels. output_path: filename for output image. """ # Create a base image img = Image.new("RGBA", (size, size), (30, 30, 40, 255)) draw = ImageDraw.Draw(img) # Generate a gradient circle border border_thickness = size // 20 inner_radius = size // 2 - border_thickness center = size // 2 # Color gradient (blue to magenta) def lerp(c1, c2, t): return tuple(int(c1[i] + (c2[i] - c1[i]) * t) for i in range(3)) color_start, color_end = (0, 180, 255), (180, 0, 255) for i in range(border_thickness): t = i / (border_thickness - 1) if border_thickness > 1 else 0 color = lerp(color_start, color_end, t) draw.ellipse( [center - inner_radius - i, center - inner_radius - i, center + inner_radius + i, center + inner_radius + i], outline=color + (255,) ) # Draw a hooded cloak: simple triangle shapes hood_color = (10, 10, 15, 255) draw.polygon([ (center * 0.6, center * 0.5), (center * 1.4, center * 0.5), (center, center * 1.3) ], fill=hood_color) draw.rectangle([ (center * 0.7, center * 1.3), (center * 1.3, center * 1.6) ], fill=hood_color) # Add glowing "eyes" eye_color = (255, 30, 50, 255) eye_w, eye_h = size // 20, size // 40 eye_y = center * 0.8 eye_x_offset = size // 12 draw.ellipse( [(center - eye_x_offset - eye_w, eye_y - eye_h), (center - eye_x_offset + eye_w, eye_y + eye_h)], fill=eye_color ) draw.ellipse( [(center + eye_x_offset - eye_w, eye_y - eye_h), (center + eye_x_offset + eye_w, eye_y + eye_h)], fill=eye_color ) # Render username text below emblem try: font = ImageFont.truetype("arial.ttf", size // 8) except IOError: font = ImageFont.load_default() text = username # ✅ Works with new Pillow bbox = draw.textbbox((0, 0), text, font=font) text_width = bbox[2] - bbox[0] text_height = bbox[3] - bbox[1] text_position = ((size - text_width) / 2, size * 0.82 + eye_h) draw.text(text_position, text, font=font, fill=(180, 180, 220, 255)) # ✅ Save the image img.save(output_path) print(f"Emblem avatar saved to {output_path}") if __name__ == "__main__": generate_hood_emblem("z3r0_dark_30", size=512, output_path="zd30.png") Have Fun! Your Dark Coder, 0DARK30