Grundlæggende reversing og pwn
Introduktion til reverse engineering og binær udnyttelse.
Grundlæggende reversing og pwn er en gratis Cyber Security Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Cyber Security Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Cyber Security Academy-kurset indeholder 4 lektioner i alt.
Baglænsanalyse og pwn på et øjeblik
To nært beslægtede CTF-kategorier handler om kompilerede programmer:
- Baglænsanalyse (rev) — du analyserer en binærfil for at forstå, hvad den gør, ofte for at genskabe en adgangskodekontrol eller skjult logik, der udskriver flaget.
- Pwn (binær udnyttelse) — du finder en hukommelsessikkerhedsfejl i en kørende binærfil og udnytter den til at kapre programafviklingen, ofte for at starte en kommandoskal på en ekstern tjeneste, der indeholder flaget.
Baglænsanalyse handler om at forstå; pwn handler om at bryde. Begge dele kræver, at du er fortrolig med koncepter på lavt niveau.
Første blik på en binærfil
Åbn aldrig en binærfil uden forudgående undersøgelse i en disassembler. Undersøg den først med hurtige kommandolinjeværktøjer for at finde dens type, arkitektur og eventuelle tydelige tekststrenge.
# 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=./challengeStatisk over for dynamisk analyse
Du analyserer binærfiler på to komplementære måder:
- Statisk analyse — læs koden uden at køre den ved hjælp af en disassembler eller dekompilator som Ghidra eller en visning af disassembleret kode. Du kan se hele kontrolflowet, men må selv udlede værdierne under kørsel.
- Dynamisk analyse — kør programmet under et fejlfindingsværktøj som GDB, og følg de faktiske værdier i registre og hukommelse. Du kan se præcis, hvad der sker, men kun langs den sti, du afvikler.
Erfarne spillere skifter mellem dem: læs statisk for at danne en teori, og bekræft den dynamisk ved at gå trinvist gennem programmet.
Læsning af assemblerkode
For at lave baglænsanalyse læser du assemblerkode. Du behøver ikke kunne skrive den flydende, men du skal kunne genkende mønstre:
- cmp / test efterfulgt af et spring (
je,jne) er en sammenligning og en forgrening — ofte adgangskodekontrollen. - call kalder en funktion; argumenterne blev placeret i registre eller på stakken lige inden.
- mov flytter data mellem registre, hukommelse og konstanter.
Når du finder en cmp mod din indtastning efterfulgt af en forgrening til en succesmeddelelse, har du fundet kontrollen. Nu skal du genskabe eller omgå den forventede værdi.
Dekom pilatorer gør dig hurtigere
Moderne dekompilatorer omdanner assemblerkode til en omtrentlig C-kode, som er langt hurtigere at læse end rå instruktioner. En dekompileret adgangskodekontrol kunne se sådan ud:
// Decompiler output (approximate)
if (strcmp(user_input, "s3cr3t_p4ss") == 0) {
puts("Correct! Here is your flag:");
print_flag();
} else {
puts("Wrong.");
}Sådan begynder hukommelseskorruption
Pwn-udfordringer udnytter programmer, der læser inddata ind i en buffer med fast størrelse uden at kontrollere længden. Stakken gemmer lokale variabler og den gemte returadresse, der fortæller CPU'en, hvor programafviklingen skal fortsætte, når en funktion afsluttes.
Hvis inddata løber over en lokal buffer, kan den overskrive den gemte returadresse. Den, der styrer returadressen, bestemmer, hvor programafviklingen går hen bagefter.
// Vulnerable: no bound on how much is read into buf
void vuln() {
char buf[64];
gets(buf); // reads until newline, ignores buf size
}Det klassiske bufferoverløb på stakken
Den enkleste pwn-teknik er at overskrive returadressen, så programmet springer til en funktion, det aldrig var meningen skulle kaldes — en skjult win(), der udskriver flaget.
Fremgangsmåden:
- Find den præcise afstand fra starten af bufferen til returadressen (et værktøj til cykliske mønstre finder den hurtigt).
- Find adressen på målfunktionen.
- Send fyldtegn frem til afstanden, og overskriv derefter returadressen med målet.
# 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 beskyttelsesforanstaltninger
Virkelige binærfiler aktiverer forsvar, der blokerer simple bufferoverløb. Du skal identificere dem med checksec:
- Stak-canaries — en hemmelig værdi, der placeres før returadressen; hvis den ændres, afbryder programmet. Du skal først afsløre den.
- NX (No-eXecute) — stakken kan ikke afvikle kode, så du kan ikke køre skal-kode, der er placeret der.
- ASLR / PIE — adresser randomiseres ved hver kørsel, så du har brug for en adresseafsløring, før du kan sigte.
- RELRO — beskytter den globale forskydningstabel mod overskrivning.
Hver beskyttelsesforanstaltning skubber dig mod mere avancerede teknikker.
Returorienteret programmering (ROP)
Når NX forhindrer dig i at køre din egen kode, genbruger returorienteret programmering kode, der allerede findes i binærfilen.
Du kæder korte instruktionssekvenser, der kaldes gadgetter, sammen. Hver sekvens slutter med ret og udfører en handling lidt efter lidt — f.eks. at indlæse et register og kalde en biblioteksfunktion for at starte en kommandoskal. Du opbygger kæden på stakken, så hvert ret springer til den næste gadget.
ROP er broen fra begynderbufferoverløb til udnyttelse i den virkelige verden, hvor angriberkode sjældent kan afvikles direkte.
Formatstrengsfejl
En anden klassisk pwn-grundprimitiv er en formatstrengssårbarhed, hvor brugerinddata sendes direkte som formatargument til en udskrivningsfunktion.
// Vulnerable: user controls the format string
printf(user_input); // dangerous
// Safe: user input is data, not format
printf("%s", user_input); // correctHvorfor forsvarere lærer dette
Du lærer at udnytte hukommelsesfejl præcist, så du kan forhindre dem. De defensive læringer er konkrete:
- Brug aldrig inddatafunktioner uden længdebegrænsning som
getsellerstrcpy; brug alternativer, der kontrollerer længden. - Hold beskyttelsesforanstaltningerne aktiveret: canaries, NX, fuld ASLR/PIE og fuld RELRO som standard.
- Foretræk hukommelsessikre sprog, når trusselsmodellen tillader det.
- Behandl enhver brugerstyret værdi, der når frem til en formatstreng eller en bufferkopiering, som en alvorlig sikkerhedsfejl ved kodegennemgang.
Hurtigt tjek
Afprøv din forståelse af grundlæggende baglænsanalyse og pwn.
Opsummering
Du har nu et overblik over baglænsanalyse og pwn:
- Foretag en indledende undersøgelse af alle binærfiler med
file,stringsogchecksec, før du går i dybden med analysen. - Kombinér statisk analyse (disassembler/dekompilator) og dynamisk analyse (fejlfindingsværktøj) for at forstå logikken.
- Pwn begynder med bufferoverløbet på stakken, der overskriver en returadresse; beskyttelsesforanstaltninger (canaries, NX, ASLR/PIE, RELRO) gør opgaven sværere.
- ROP omgår NX ved at genbruge eksisterende gadgetter; formatstrengsfejl opstår på grund af utroværdige formatargumenter.
- Alle teknikkerne rummer også en defensiv læring om at skrive og gennemgå mere sikker kode.
Dernæst opbygger du et værktøjssæt og lærer at skrive løsningsrapporter.
Lær Cyber Security Academy med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 76
- Lektioner
- 303
Ofte stillede spørgsmål
Er lektionen “Grundlæggende reversing og pwn” gratis?
Ja — alle 3 lektioner i læringssporet Cyber Security Academy, inklusive “Grundlæggende reversing og pwn”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Cyber Security Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Grundlæggende reversing og pwn”?
Introduktion til reverse engineering og binær udnyttelse. Du øver dig i Cyber Security Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Cyber Security Academy?
Der kræves ingen tidligere erfaring. Cyber Security Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.
Hvor lang tid tager lektionen “Grundlæggende reversing og pwn”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Cyber Security Academy-lektion?
Ja. Alle Cyber Security Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- CTF-kategorier og mindset
- Web- og crypto-udfordringer
- Grundlæggende reversing og pwn
- Værktøjer og writeups