Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
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.

FeedsKontaktDatenschutz© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
ShellcodeFluctuation — Eine fortschrittliche In-Memory-Evasion-Technik, die den Speicherschutz von Shellcode zwischen RW/NoAccess und RX umschaltet und anschließend dessen Inhalt ver- und entschlüsselt. | Kitploit
Tools/GitHubGitHub/mgeeky/shellcodefluctuation
Payload-GenerierungShellcodePost-ExploitationRed TeamingShellcode-GenerierungPayload-EntwicklungAdversarial-AngriffTop in Payload-Entwicklung Nr.16Top in Payload-Generierung Nr.16Top in Shellcode Nr.14
1.1k16347vor 4 JahrenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Top in Shellcode-Generierung Nr.16
GitHubmgeeky/shellcodefluctuation

ShellcodeFluctuation

Eine fortschrittliche In-Memory-Evasion-Technik, die den Speicherschutz von Shellcode zwischen RW/NoAccess und RX umschaltet und anschließend dessen Inhalt ver- und entschlüsselt.

Repository anzeigen
Teilen

Shellcode Fluctuation PoC

A PoC implementation for an another in-memory evasion technique that cyclically encrypts and decrypts shellcode's contents to then make it fluctuate between RW (or NoAccess) and RX memory protection. When our shellcode resides in RW or NoAccess memory pages, scanners such as Moneta or pe-sieve will be unable to track it down and dump it for further analysis.

Einführung

Nach der Veröffentlichung von ThreadStackSpoofer habe ich einige Fragen zu folgendem Punkt der README erhalten:

Ändere den Schutz der Speicherseiten deines Beacons auf RW (von RX/RWX) und verschlüssele deren Inhalte vor dem Schlafen (das könnte Scanner wie Moneta oder pe-sieve umgehen)

Zuvor war ich ziemlich sicher, dass die Community bereits weiß, wie sie ihre Payloads verschlüsseln/entschlüsseln und ihre Speicherschutzberechtigungen umstellen kann, um Speicherscanner zu umgehen, die nach anomalen ausführbaren Regionen suchen. Die Fragen haben das Gegenteil bewiesen, also habe ich beschlossen, diesen nicht bewaffneten PoC zu veröffentlichen, um eine weitere Evasion-Strategie zu dokumentieren und der Community eine Beispielimplementierung zur Arbeit anzubieten.

Dieser PoC ist eine Demonstration einer relativ einfachen Technik, die der Offensive-Community bereits bekannt ist (ich bringe hier also wirklich nichts Neues), in der Hoffnung, die Geheimnisse hinter der Magie zu enthüllen, die einige kommerzielle Frameworks zeigen, die ihre Evasion-Fähigkeiten gegen beide zuvor genannten Speicherscanner demonstrieren.

Hier ist ein Vergleich beim Fluktuieren zu RW (eine andere Option ist das Fluktuieren zu PAGE_NOACCESS - unten beschrieben):

  1. Beacon nicht verschlüsselt
  2. Beacon verschlüsselt (fluktuierend)

comparison

Diese Implementierung zusammen mit meinem ThreadStackSpoofer bringt der Offensive-Security-Community Beispielimplementierungen, um mit dem Angebot kommerzieller C2-Produkte gleichzuziehen, damit wir in unseren Red-Team-Tools nicht schlechter abschneiden. 💪


Wie funktioniert es?

Dieses Programm führt eine Selbstinjektion von Shellcode durch (grob über klassisches VirtualAlloc + memcpy + CreateThread). Wenn der Shellcode läuft (diese Implementierung zielt speziell auf Cobalt-Strike-Beacon-Implantate ab), wird eine Windows-Funktion gehookt, die den Moment abfängt, in dem Beacon einschläft: kernel32!Sleep. Immer wenn die gehookte MySleep-Funktion aufgerufen wird, lokalisiert sie die Grenzen ihrer Speicherzuordnung, stellt deren Schutz auf RW um und wendet xor32 auf alle dort gespeicherten Bytes an. Nachdem die erwartete Zeit abgewartet wurde, entschlüsseln wir, wenn der Shellcode zu unserem MySleep-Handler zurückkehrt, die Daten des Shellcodes und stellen den Schutz wieder auf RX.

Fluktuation zu PAGE_READWRITE funktioniert wie folgt

  1. Lies den Inhalt des Shellcodes aus der Datei.
  2. Hooke kernel32!Sleep, sodass er auf unseren Callback zeigt.
  3. Injiziere und starte den Shellcode über VirtualAlloc + memcpy + CreateThread. Im Gegensatz zu dem, was wir in ThreadStackSpoofer hatten, hooken wir hier nichts in ntdll, um unseren Shellcode zu starten, sondern springen stattdessen von unserer eigenen Funktion aus zu ihm. Dies versucht, einfache IOCs im Speicher zu vermeiden, die auf modifizierten ntdll-Speicher hinweisen.
  4. Sobald Beacon versucht zu schlafen, wird unser MySleep-Callback aufgerufen.
  5. Die Speicherzuordnung von Beacon wird verschlüsselt und der Schutz auf RW umgestellt.
  6. Wir entfernen dann den Hook der ursprünglichen kernel32!Sleep-Funktion, um einfache IOCs im Speicher zu vermeiden, die darauf hindeuten, dass Sleep getrampolint (in-line gehooked) wurde.
  7. Ein Aufruf der ursprünglichen ::Sleep-Funktion erfolgt, um Beacon schlafen zu lassen, während auf weitere Kommunikation gewartet wird.
  8. Nachdem der Schlaf beendet ist, entschlüsseln wir die Daten unseres Shellcodes, stellen die Speicherschutzberechtigungen wieder auf RX und hooken kernel32!Sleep erneut, um die Abfangung nachfolgender Schlafphasen sicherzustellen.

Fluktuation zu PAGE_NOACCESS funktioniert wie folgt

  1. Lies den Inhalt des Shellcodes aus der Datei.
  2. Hooke kernel32!Sleep, sodass er auf unseren Callback zeigt.
  3. Injiziere und starte den Shellcode über VirtualAlloc + memcpy + CreateThread ...
  4. Initialisiere einen Vectored Exception Handler (VEH), um unseren eigenen Handler einzurichten, der Access Violation-Ausnahmen abfängt.
  5. Sobald Beacon versucht zu schlafen, wird unser MySleep-Callback aufgerufen.
  6. Die Speicherzuordnung von Beacon wird verschlüsselt und der Schutz auf PAGE_NOACCESS umgestellt.
  7. Wir entfernen dann den Hook der ursprünglichen kernel32!Sleep-Funktion, um einfache IOCs im Speicher zu vermeiden, die darauf hindeuten, dass Sleep getrampolint (in-line gehooked) wurde.
  8. Ein Aufruf der ursprünglichen ::Sleep-Funktion erfolgt, um Beacon schlafen zu lassen, während auf weitere Kommunikation gewartet wird.
  9. Nachdem der Schlaf beendet ist, hooken wir kernel32!Sleep erneut, um die Abfangung nachfolgender Schlafphasen sicherzustellen.
  10. Der Shellcode versucht dann, seine Ausführung fortzusetzen, was zu einer Access Violation führt, da seine Seiten als NoAccess markiert sind.
  11. Unser VEH-Handler fängt die Ausnahme ab, entschlüsselt und stellt die Speicherschutzberechtigungen wieder auf RX um, und der Shellcode wird fortgesetzt.

Es ist keine neue Technik

Die Technik ist nicht brandneu und nichts, was ich mir selbst ausgedacht habe. Sie ist lediglich eine Implementierung, die das Konzept und seine praktische Nutzung zeigt, damit unsere Offensive-Security-Community mit dem Angebot kommerzieller C2-Frameworks aufholen kann.

Eigentlich wurde ich vor ein paar Jahren durch die Arbeit von Josh Lospinoso in seinem erstaunlichen Gargoyle mit der Idee vertraut gemacht, den Speicherschutz von Shellcode umzustellen.

Hier gibt es weitere Hintergrundinformationen:

  • gargoyle, eine Technik zur Umgehung von Speicherscannern
  • Umgehung von Speicherscannern mit Cobalt Strike und Gargoyle

Gargoyle führt das Konzept von selbstbewusstem und selbstfluktuierendem Shellcode noch weiter, indem es eine ROP-Sequenz nutzt, die VirtualProtect aufruft. Die Technik ist jedoch beeindruckend, aber ebenso schwer mit Cobalt Strikes Beacon einzusetzen, ohne dessen Thread zu beenden und Beacon während des Betriebs im Speicher immer wieder neu zu initialisieren.

Das ist alles andere als perfekt, aber da wir bereits von den Grundlagen unseres eigenen Selbstinjektions-Loader-Prozesses aus operieren, können wir mit der Umgebung, in der der Shellcode arbeitet, machen, was wir wollen, und ihn verbergen, wie wir möchten. Diese Technik (und die vorherige, ThreadStackSpoofer) zeigt Vorteile, wenn wir unsere Shellcodes auf diese Weise ausführen.

Die Implementierung der Fluktuation zu PAGE_NOACCESS ist inspiriert von der Arbeit von ORCA666, die in seinem https://github.com/ORCA666/0x41-Injektor vorgestellt wurde. Er zeigte, dass:

Tool herunterladen