Grundlagen von Reversing und Pwn
Einführung in Reverse Engineering und Binary Exploitation
Grundlagen von Reversing und Pwn ist eine kostenlose Cyber Security Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Cyber Security Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Cyber Security Academy-Kurs umfasst insgesamt 4 Lektionen.
Reverse Engineering und Pwn im Überblick
Zwei eng verwandte CTF-Kategorien beschäftigen sich mit kompilierten Programmen:
- Reverse Engineering (Rev) — Sie analysieren ein Binary, um zu verstehen, was es tut, häufig um eine Passwortprüfung oder verborgene Logik zu finden, die das Flag ausgibt.
- Pwn (Binary-Exploitation) — Sie finden eine Schwachstelle in der Speichersicherheit eines laufenden Binaries und nutzen sie aus, um die Ausführung zu übernehmen, oft mit dem Ziel, eine Shell auf einem entfernten Dienst zu starten, der das Flag enthält.
Bei Rev geht es ums Verstehen, bei Pwn ums Übernehmen. Für beides benötigen Sie einen sicheren Umgang mit Low-Level-Konzepten.
Erste Untersuchung eines Binaries
Öffnen Sie ein Binary niemals unvorbereitet in einem Disassembler. Untersuchen Sie es zunächst mit schnellen Befehlszeilen-Tools, um seinen Typ, seine Architektur und offensichtliche Zeichenketten zu ermitteln.
# Identify file type and architecture
file ./challenge
# Pull human-readable strings (flags are sometimes left in plaintext)
strings ./challenge
# Check which security mitigations are enabled
checksec --file=./challengeStatische und dynamische Analyse
Sie analysieren Binaries auf zwei sich ergänzende Arten:
- Statische Analyse — lesen Sie den Code, ohne ihn auszuführen, und verwenden Sie dazu einen Disassembler oder Decompiler wie Ghidra oder eine Disassembler-Ansicht. Sie sehen den vollständigen Kontrollfluss, müssen Laufzeitwerte jedoch erschließen.
- Dynamische Analyse — führen Sie das Programm unter einem Debugger wie GDB aus und beobachten Sie die tatsächlichen Werte in Registern und im Speicher. Sie sehen genau, was geschieht, aber nur entlang des ausgeführten Pfads.
Erfahrene Spieler wechseln zwischen beiden Methoden: Sie lesen statisch, um eine Theorie aufzustellen, und bestätigen sie dynamisch, indem sie die Ausführung schrittweise verfolgen.
Disassembly lesen
Für das Reverse Engineering lesen Sie Assembler. Sie müssen ihn nicht fließend schreiben können, aber Sie müssen bestimmte Muster erkennen:
- cmp / test gefolgt von einem Sprung (
je,jne) ist ein Vergleich mit Verzweigung – oft die Passwortprüfung. - call ruft eine Funktion auf; die Argumente wurden unmittelbar davor in Registern oder auf dem Stack abgelegt.
- mov verschiebt Daten zwischen Registern, Speicher und Konstanten.
Wenn Sie ein cmp gegen Ihre Eingabe finden, auf das eine Verzweigung zu einer Erfolgsmeldung folgt, haben Sie die Prüfung gefunden. Ermitteln Sie nun den erwarteten Wert oder umgehen Sie die Prüfung.
Decompiler beschleunigen Ihre Arbeit
Moderne Decompiler wandeln Assembler wieder in annäherndes C um, das sich wesentlich schneller lesen lässt als rohe Befehle. Eine dekompilierte Passwortprüfung könnte so aussehen:
// Decompiler output (approximate)
if (strcmp(user_input, "s3cr3t_p4ss") == 0) {
puts("Correct! Here is your flag:");
print_flag();
} else {
puts("Wrong.");
}Wie Speicherkorruption beginnt
Pwn-Challenges nutzen Programme aus, die Eingaben in einen Puffer fester Größe einlesen, ohne deren Länge zu prüfen. Der Stack speichert lokale Variablen und die gespeicherte Rücksprungadresse, die der CPU vorgibt, wohin sie beim Beenden einer Funktion springen soll.
Wenn eine Eingabe einen lokalen Puffer überlaufen lässt, kann sie diese gespeicherte Rücksprungadresse überschreiben. Wer die Rücksprungadresse kontrolliert, kontrolliert das nächste Ausführungsziel.
// Vulnerable: no bound on how much is read into buf
void vuln() {
char buf[64];
gets(buf); // reads until newline, ignores buf size
}Der klassische Stack-Buffer-Overflow
Der einfachste Pwn-Exploit besteht darin, die Rücksprungadresse zu überschreiben und zu einer Funktion zu springen, die das Programm niemals aufrufen sollte – etwa zu einem versteckten win(), das das Flag ausgibt.
Der Ablauf:
- Ermitteln Sie den genauen Offset vom Anfang des Puffers bis zur Rücksprungadresse. Ein Tool für zyklische Muster liefert ihn schnell.
- Ermitteln Sie die Adresse der Zielfunktion.
- Senden Sie zunächst Padding bis zum Offset und überschreiben Sie dann die Rücksprungadresse mit dem Ziel.
# Build the input with a Python exploit library
from pwn import *
p = process('./challenge')
offset = 72 # bytes to reach the return address
win_addr = 0x401176 # address of the win() function
p.sendline(b'A' * offset + p64(win_addr))
p.interactive()Moderne Schutzmechanismen
Echte Binaries aktivieren Schutzmechanismen, die naive Buffer-Overflows verhindern. Sie müssen diese mit checksec erkennen:
- Stack-Canaries — ein geheimer Wert wird vor der Rücksprungadresse platziert. Wenn er sich ändert, wird das Programm abgebrochen. Sie müssen ihn zuerst auslesen.
- NX (No-eXecute) — der Stack ist nicht ausführbar, daher können Sie dort abgelegten Shellcode nicht ausführen.
- ASLR / PIE — die Adressen werden bei jedem Lauf randomisiert, daher benötigen Sie vor dem Anvisieren eines Ziels zunächst ein Adressleck.
- RELRO — schützt die Global Offset Table vor Überschreibungen.
Jeder Schutzmechanismus führt Sie zu fortgeschritteneren Techniken.
Return-Oriented Programming (ROP)
Wenn NX Sie daran hindert, eigenen Code auszuführen, nutzt Return-Oriented Programming bereits im Binary vorhandenen Code wieder.
Sie verketten kurze Befehlssequenzen, sogenannte Gadgets, die jeweils mit ret enden, um Schritt für Schritt Aktionen auszuführen – beispielsweise ein Register zu laden und eine Bibliotheksfunktion aufzurufen, die eine Shell startet. Sie bauen die Kette auf dem Stack auf, sodass jedes ret zum nächsten Gadget springt.
ROP bildet die Brücke von anfängerfreundlichen Overflows zur Exploitation in der Praxis, bei der Angreifercode nur selten direkt ausführbar ist.
Format-String-Schwachstellen
Ein weiteres klassisches Pwn-Grundelement ist die Format-String-Schwachstelle, bei der Benutzereingaben direkt als Formatargument an eine Ausgabefunktion übergeben werden.
// Vulnerable: user controls the format string
printf(user_input); // dangerous
// Safe: user input is data, not format
printf("%s", user_input); // correctWarum auch Verteidiger das lernen
Sie lernen, Speicherfehler präzise auszunutzen, gerade damit Sie sie verhindern können. Die defensiven Erkenntnisse sind konkret:
- Verwenden Sie niemals unbeschränkte Eingabefunktionen wie
getsoderstrcpy, sondern Alternativen mit Längenprüfung. - Halten Sie Schutzmechanismen aktiviert: Canaries, NX, vollständiges ASLR/PIE und vollständiges RELRO.
- Bevorzugen Sie speichersichere Sprachen, sofern das Bedrohungsmodell dies zulässt.
- Behandeln Sie jeden benutzerkontrollierten Wert, der eine Format-String-Verarbeitung oder eine Pufferkopie erreicht, im Code-Review als ernsthaften Befund.
Schnelltest
Testen Sie Ihr Verständnis der Grundlagen von Reverse Engineering und Pwn.
Zusammenfassung
Sie verfügen nun über einen Überblick zu Reverse Engineering und Pwn:
- Führen Sie bei jedem Binary zunächst mit
file,stringsundcheckseceine Triage durch, bevor Sie es eingehend analysieren. - Kombinieren Sie statische Analysen mit Disassembler oder Decompiler und dynamische Analysen mit einem Debugger, um die Logik zu verstehen.
- Pwn beginnt mit dem Stack-Buffer-Overflow, der eine Rücksprungadresse überschreibt; Schutzmechanismen wie Canaries, NX, ASLR/PIE und RELRO erhöhen die Hürde.
- ROP umgeht NX, indem vorhandene Gadgets wiederverwendet werden; Format-String-Schwachstellen entstehen durch nicht vertrauenswürdige Formatargumente.
- Jede Technik vermittelt zugleich eine defensive Lektion für das Schreiben und Überprüfen sichereren Codes.
Als Nächstes stellen Sie ein Toolkit zusammen und lernen, Ihre Lösungen zu dokumentieren.
Lerne Cyber Security Academy mit einem KI-Tutor — kostenlos
Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.
- Kurse
- 76
- Lektionen
- 303
Häufig gestellte Fragen
Ist die Lektion „Grundlagen von Reversing und Pwn“ kostenlos?
Ja — der vollständige Text von „Grundlagen von Reversing und Pwn“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Cyber Security Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Cyber Security Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Grundlagen von Reversing und Pwn“?
Einführung in Reverse Engineering und Binary Exploitation Du übst Cyber Security Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Cyber Security Academy zu starten?
Keine Vorkenntnisse erforderlich. Cyber Security Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „Grundlagen von Reversing und Pwn“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Cyber Security Academy-Lektion Code schreiben und ausführen?
Ja. Jede Cyber Security Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- CTF-Kategorien und Denkweise
- Web- und Krypto-Challenges
- Grundlagen von Reversing und Pwn
- Tools und Write-ups