Skip to content
KitploitKITPLOIT
ToolsBlog
Log in
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
Shoggoth — Polymorpher Verschlüsseler, der Shellcode, PE- und COFF-Dateien in verschleierte, positionsunabhängige Payloads mit RC4- und zufälliger Blockchiffre-Verschlüsselung sowie der Erzeugung von Müll-Instruktionen unter Verwendung der AsmJit-Bibliothek umwandelt. | Kitploit
Tools/GitHubGitHub/frkngksl/shoggoth
Exploit-FrameworksPayload-GenerierungShellcodeBinäranalyseRed Teaming
GitHubfrkngksl/shoggoth

Shoggoth

Polymorpher Verschlüsseler, der Shellcode, PE- und COFF-Dateien in verschleierte, positionsunabhängige Payloads mit RC4- und zufälliger Blockchiffre-Verschlüsselung sowie der Erzeugung von Müll-Instruktionen unter Verwendung der AsmJit-Bibliothek umwandelt.

Repository anzeigen
80510317vor 5 MonatenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Shoggoth

Vorgestellt auf

  • BlackHat Europe 2022 Arsenal - Aufzeichnung der Präsentation

Einleitung

Beschreibung

Shoggoth ist ein Open-Source-Projekt, das auf C++ und der asmjit-Bibliothek basiert und verwendet wird, um übergebene Shellcode-, PE- und COFF-Dateien polymorph zu verschlüsseln.

Shoggoth generiert eine Ausgabedatei, die die Nutzlast und den zugehörigen Loader in einer obfuskierten Form speichert. Da der Inhalt der Ausgabe positionsunabhängig ist, kann er direkt als Shellcode ausgeführt werden. Während der Ausführung entschlüsselt sich die Nutzlast selbst zur Laufzeit. Zusätzlich zur Verschlüsselungsroutine fügt Shoggoth zwischen den Routinen nutzlose Anweisungen (Garbage-Instructions) ein, die nichts bewirken.

Ich begann mit der Entwicklung dieses Projekts, um verschiedene Ansätze zur dynamischen Anweisungsgenerierung, Assembly-Praktiken und Signaturerkennung zu untersuchen. Ich plane, das Repository regelmäßig mit meinen neuen Erkenntnissen zu aktualisieren.

Funktionen

Die aktuellen Funktionen sind unten aufgeführt:

  • Funktioniert nur mit x64-Eingaben
  • Fähigkeit, den PIC COFF Loader mit COFF- oder BOF-Eingabedateien zu kombinieren
  • Fähigkeit, den PIC PE Loader mit PE-Eingabedateien zu kombinieren
  • Stromchiffre mit RC4-Algorithmus
  • Blockchiffre mit zufällig generierten Operationen
  • Generierung nutzloser Anweisungen

Ausführungsablauf

Der allgemeine Ausführungsablauf von Shoggoth für eine Eingabedatei ist im folgenden Bild dargestellt. Sie können diesen Ablauf mit den Standardkonfigurationen beobachten.

Grundsätzlich kombiniert Shoggoth zunächst den vorkompilierten Loader-Shellcode entsprechend des gewählten Modus (COFF- oder PE-Datei) mit der Eingabedatei. Anschließend fügt es mehrere selbst erstellte nutzlose Anweisungen zu dieser kombinierten Nutzlast hinzu. Der Stub, der den Loader, die nutzlosen Anweisungen und die Nutzlast enthält, wird zuerst mit RC4-Verschlüsselung und dann mit einer zufällig generierten Blockverschlüsselung verschlüsselt, indem die entsprechenden Entschlüsselungsroutinen kombiniert werden. Schließlich wird dem resultierenden Block eine nutzlose Anweisung hinzugefügt.

Maschinencode-Generierung

Während Shoggoth zufällig Anweisungen für nutzlose Stubs oder Verschlüsselungsroutinen generiert, verwendet es die AsmJit-Bibliothek.

AsmJit ist eine leichte Bibliothek zur Generierung von Maschinencode, geschrieben in C++. Sie kann Maschinencode für die Architekturen X86, X86_64 und AArch64 generieren und unterstützt Basisbefehle sowie alle aktuellen Erweiterungen. AsmJit ermöglicht die Angabe von Operationscodes, Registern, unmittelbaren Operanden, Aufrufmarken und das Einbetten beliebiger Werte an beliebigen Positionen im Code. Bei der Generierung von Assembly-Anweisungen mit AsmJit reicht es aus, die API-Funktion aufzurufen, die der gewünschten Assembly-Operation mit Operanden aus der Assembler-Klasse entspricht. Für jeden API-Aufruf speichert AsmJit Code- und Relokationsinformationen in seiner internen CodeHolder-Struktur. Nach dem Aufruf der API-Funktionen aller zu generierenden Assembly-Befehle kann die JitRuntime-Klasse verwendet werden, um den Code aus dem CodeHolder mit Ausführungsberechtigung in den Speicher zu kopieren und zu relozieren.

Während ich nach einer Bibliothek zur Codegenerierung suchte, stieß ich auf AsmJit und sah, dass es von vielen populären Projekten weit verbreitet eingesetzt wird. Aus diesem Grund entschied ich mich, es für meine Zwecke zu verwenden. Ich weiß nicht, ob Shoggoth das erste Projekt ist, das es im Red-Team-Kontext einsetzt, aber ich glaube, dass es als Referenz für zukünftige Implementierungen dienen kann.

COFF- und PE-Loader

Shoggoth kann verwendet werden, um übergebene PE- und COFF-Dateien zu verschlüsseln, sodass beide dank vorkompilierter positionsunabhängiger Loader als Shellcode ausgeführt werden können. Ich habe einfach die C to Shellcode-Methode verwendet, um die PIC-Version bekannter PE- und COFF-Loader zu erhalten, die ich für meine alten Projekte modifiziert habe. Für die Kompilierung habe ich das Makefile aus dem HandleKatz-Projekt verwendet, einem LSASS-Dumper in PIC-Form.

Grundsätzlich habe ich, um mit der C-to-Shellcode-Technik Shellcode zu erhalten, alle globalen Variablen im Loader-Quellcode entfernt, alle Zeichenfolgen auf dem Stack gespeichert und die Adressen der Windows-API-Funktionen durch Laden und Parsen der erforderlichen DLLs zur Laufzeit aufgelöst. Anschließend habe ich den Einsprungpunkt mit einem Linker-Script bestimmt und den Code mit MinGW unter Verwendung verschiedener Kompilierungsflags kompiliert. Ich extrahierte den .text-Abschnitt der generierten ausführbaren Datei und erhielt den Loader-Shellcode. Da die nach obiger Bearbeitung erhaltene ausführbare Datei außer dem .text-Abschnitt keine weiteren Abschnitte enthält, kann der Code in diesem Abschnitt als positionsunabhängig verwendet werden.

Der Quellcode dieser Loader kann in den Verzeichnissen COFFLoader und PELoader eingesehen und bearbeitet werden. Kompilierte Versionen dieser Quellcodes finden Sie im Verzeichnis stub. Wenn Sie diese Loader bearbeiten oder ändern möchten, müssen Sie derzeit die Signaturen einhalten und die vorkompilierten Binärdateien aus dem stub-Verzeichnis ersetzen.

Um Argumente an ein BOF zu übergeben, verwenden Sie die Option '--coff-arg'. Shoggoth erwartet eine vorformatierte Hex-Zeichenfolge mit den gepackten Argumenten, die mit dem Skript beacon_generate.py von TrustedSec erstellt werden kann. Eine Kopie dieses Skripts wurde als COFFArgGenerator/beacon_generate.py beigefügt. (Vielen Dank an @Octoberfest7)

RC4-Chiffre

Shoggoth verwendet zunächst einen der Stromchiffren, den RC4-Algorithmus, um die erhaltene Nutzlast zu verschlüsseln. Nachdem der hier verwendete Schlüssel zufällig generiert wurde, verschlüsselt es die Nutzlast mit diesem Schlüssel. Der Entschlüsselungs-Stub, der die Nutzlast zur Laufzeit entschlüsselt, wird dynamisch mit AsmJit erstellt und assembliert. Die im Stub verwendeten Register werden für jedes Sample zufällig ausgewählt.

Für die Implementierung des in Shoggoth verwendeten RC4-Algorithmus habe ich mich auf Nayukis Code bezogen.

Zufällige Blockchiffre

Nach der ersten Verschlüsselung verwendet Shoggoth die zweite Verschlüsselung, eine zufällig generierte Blockchiffre. Mit der zweiten Verschlüsselung werden sowohl der RC4-Entschlüsseler als auch optional der Stub verschlüsselt, der die mit RC4 verschlüsselte Nutzlast, nutzlose Anweisungen und Loader enthält. Es teilt den zu verschlüsselnden Block in 8-Byte-Blöcke auf und verwendet für jeden Block zufällig generierte Anweisungen. Zu diesen Anweisungen gehören ADD, SUB, XOR, NOT, NEG, INC, DEC, ROL und ROR. Die Operanden für diese Anweisungen werden ebenfalls zufällig ausgewählt.

Generierung nutzloser Anweisungen

Tool herunterladen