Analyse av kontrollflytgrafer
Forstå og tolk kontrollflytgrafer (CFG-er) for å visualisere programmets kjøringsbaner og logikk.
Analyse av kontrollflytgrafer er en gratis leksjon i Grunnleggende om reverse engineering og binæranalyse på CoddyKit. Dette er leksjon 3 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Grunnleggende om reverse engineering og binæranalyse, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Grunnleggende om reverse engineering og binæranalyse inneholder totalt 4 leksjoner.
Introduksjon til kontrollflytg grafer
Velkommen! I denne leksjonen skal De se nærmere på kontrollflytgrafer (CFG-er). En CFG fungerer som et veikart for programmet og viser visuelt alle mulige kjøringsbaner.
Dette er et viktig verktøy innen reverse engineering fordi det hjelper Dem med å forstå programmets logikk uten faktisk å kjøre det.
Byggeklossene: basisblokker
Selve grunnlaget i en CFG er basisblokker. Tenk på en basisblokk som en rett linje med instruksjoner.
- Den er en kodesekvens med bare ett inngangspunkt (den første instruksjonen).
- Den har bare ett utgangspunkt (den siste instruksjonen).
- Det finnes ingen hopp eller hoppmål underveis.
For eksempel kan A = 10; B = A + 5; C = B * 2; utgjøre én enkelt basisblokk.
Kanter viser veien
Kanters i en CFG kobler sammen basisblokker og viser hvordan kjøringen kan gå fra én blokk til en annen. De representerer hopp, kall eller fall-through.
- Ubetingede kanter: Følges alltid, for eksempel et direkte hopp til neste blokk.
- Betingede kanter: Følges bare hvis en bestemt betingelse er oppfylt, og fører til ulike baner (for eksempel en
IF-setning).
Flyten i et enkelt program
La oss se på et svært enkelt C-program. CFG-en vil hovedsakelig bestå av sekvensielle basisblokker, den ene etter den andre.
Prøv å kjøre dette eksempelet:
#include <stdio.h>
int main() {
int x = 5;
int y = 10;
int sum = x + y;
printf("Sum: %d\n", sum);
return 0;
}Betinget logikk (If/Else)
Betingede setninger som if/else oppretter forgreninger i en CFG. En basisblokk som inneholder et betinget hopp, har to utgående kanter.
Den ene kanten representerer banen for «sann», og den andre representerer banen for «usann». Disse banene slås vanligvis sammen igjen senere.
#include <stdio.h>
int main() {
int age = 20;
if (age >= 18) {
printf("Adult\n");
} else {
printf("Minor\n");
}
return 0;
}Løkkestrukturer (For/While)
Løkker, for eksempel for eller while, er lette å identifisere i en CFG ved hjelp av en spesiell type kant som kalles en tilbakekant.
En tilbakekant går fra en blokk inne i løkken tilbake til en tidligere blokk og oppretter en syklus. Denne syklusen representerer den gjentatte kjøringen av løkkekroppen.
#include <stdio.h>
int main() {
for (int i = 0; i < 3; i++) {
printf("Iteration %d\n", i);
}
return 0;
}Funksjonskall i CFG-er
Når programmet kaller en funksjon, gjenspeiles også dette i CFG-en. En kant går vanligvis fra den kallende basisblokken til inngangspunktet i den kalte funksjonens egen CFG.
Når funksjonen er ferdig, går kjøringen tilbake til den kallende funksjonen, vanligvis til instruksjonen etter kallet.
#include <stdio.h>
void greet() {
printf("Hello from greet!\n");
}
int main() {
printf("Calling greet...\n");
greet();
printf("Greet returned.\n");
return 0;
}CFG-enes kraft i RE
CFG-er er svært kraftige verktøy for reverse engineering:
- Forstå logikken: Få raskt oversikt over kompleks beslutningslogikk og programmets overordnede flyt.
- Identifisere funksjoner: Se separate delgrafer som representerer ulike funksjoner.
- Finne sårbarheter: Oppdage uvanlige baner, utilgjengelig kode eller logiske feil.
- Sporing av kjøring: Forutsi mulige kjøringsbaner uten å måtte kjøre programmet.
Navigere i CFG-er i disassemblere
Bransjestandardverktøy som Ghidra og IDA Pro genererer og viser CFG-er automatisk. De gjør det mulig å:
- Inspisere basisblokker og kantene som kobler dem sammen visuelt.
- Klikke på blokker for å se assembly-instruksjonene de inneholder.
- Følge kanter for å spore programmets kjøringsflyt på en logisk måte.
Denne visuelle hjelpen gjør det betydelig enklere å forstå komplekse binærfiler.
Rask CFG-sjekk
Tenk på et enkelt program som inneholder både en if/else-setning og en for-løkke. Tenk over hvordan disse strukturene representeres i en kontrollflytgraf.
Oppsummering: CFG-verktøykassen
Godt jobbet! De har lært det grunnleggende om kontrollflytgrafer:
- CFG-er er visuelle kart over programmets kjøringsbaner.
- De består av basisblokker (sekvensielle grupper av instruksjoner) og kanter (som viser flyten).
- CFG-er viser tydelig betinget logikk (
if/else) og løkker (med tilbakekanter). - Disse grafene er uunnværlige for å forstå programlogikk under reverse engineering, særlig ved bruk av verktøy som Ghidra eller IDA Pro.
Lær deg Assembly med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 12
- Leksjoner
- 48
Ofte stilte spørsmål
Er leksjonen «Analyse av kontrollflytgrafer» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Grunnleggende om reverse engineering og binæranalyse, inkludert «Analyse av kontrollflytgrafer», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Grunnleggende om reverse engineering og binæranalyse inneholder totalt 4 leksjoner.
Hva lærer jeg i «Analyse av kontrollflytgrafer»?
Forstå og tolk kontrollflytgrafer (CFG-er) for å visualisere programmets kjøringsbaner og logikk. Du øver på Grunnleggende om reverse engineering og binæranalyse med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Grunnleggende om reverse engineering og binæranalyse?
Ingen tidligere erfaring er nødvendig. Grunnleggende om reverse engineering og binæranalyse på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.
Hvor lang tid tar leksjonen «Analyse av kontrollflytgrafer»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Grunnleggende om reverse engineering og binæranalyse-leksjonen?
Ja. Alle Grunnleggende om reverse engineering og binæranalyse-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Introduksjon til disassemblerere
- Identifisere funksjoner og data
- Analyse av kontrollflytgrafer
- Analyse av strenger og kryssreferanser