Grunnleggende om reverse engineering og binæranalyse · leksjon

Identifisere funksjoner og data

Lær teknikker for å finne viktige funksjoner, strenger og andre data i disassemblerte binærfiler.

Leksjon 2 av 411 trinn

Identifisere funksjoner og data er en gratis leksjon i Grunnleggende om reverse engineering og binæranalyse på CoddyKit. Dette er leksjon 2 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.

Finne viktige deler av en binærfil

Velkommen! I reverse engineering er målet vårt å forstå hvordan et program fungerer uten kildekoden. Et viktig første steg er å identifisere kjernekomponentene: funksjoner og data.

Disse elementene er som byggesteinene og råmaterialene i all programvare. Når du lærer å finne dem raskt, vil analysearbeidet gå betydelig raskere.

Strenger: De første ledetrådene

Strenger er ofte de enkleste og mest verdifulle ledetrådene i en binærfil. De kan avsløre programmets formål, feilmeldinger, brukermeldinger, filbaner, nettverksadresser eller API-kall.

  • Feilmeldinger: "Error: File not found"
  • URL-er/baner: "https://malicious.com/update", "C:\Windows\System32\config.dat"
  • Brukermeldinger: "Enter password:"

Å finne dem er vanligvis det første steget for enhver analytiker.

Finne strenger i disassemblere

De fleste disassemblere, som Ghidra eller IDA Pro, har en egen funksjon som viser alle identifiserte strenger i en binærfil. Dermed slipper du å lete gjennom rå byte-verdier manuelt.

Når du finner en interessant streng, kan du vanligvis bruke en kryssreferanse for å se hvor i koden den brukes. Dette peker deg umiddelbart til relevante funksjoner.

Funksjoner: Programmets byggesteiner

En funksjon (eller subrutine) er en selvstendig kodeblokk som er laget for å utføre en bestemt oppgave. Programmer er bygget opp av mange funksjoner som kaller hverandre.

Ved å identifisere funksjoner kan du dele opp et komplekst program i mindre, håndterbare deler. Det gjør det enklere å forstå programmets overordnede logikk og flyt.

Gjenkjenne funksjoners startpunkter

Funksjoner begynner ofte med en bestemt instruksjonssekvens som kalles en prolog. Dette oppsettet klargjør vanligvis stacken for lokale variabler og lagrer den forrige stackrammen.

En vanlig x86-prolog ser slik ut:

push ebp
mov ebp, esp

Denne sekvensen legger den gamle basepekeren på stacken og angir den gjeldende stackpekeren som den nye basepekeren.

Funksjoners avslutning: Epiloger

Akkurat som funksjoner har startpunkter, har de også avslutningspunkter, markert av en epilog. Epilogen gjenoppretter stacken til tilstanden den var i før funksjonskallet og gir kontrollen tilbake til den kallende funksjonen.

En typisk x86-epilog kan se slik ut:

mov esp, ebp
pop ebp
ret

Dette gjenoppretter stackpekeren, henter den gamle basepekeren fra stacken og returnerer fra funksjonen.

Finne vanlige biblioteksfunksjoner

De fleste programmer bruker funksjoner fra systembiblioteker (for eksempel til å skrive ut på skjermen, utføre fil-I/O eller kommunisere over nettverket). Disassemblere er ofte smarte nok til å identifisere disse for deg.

Dette gjør de ved å se på importerte symboler (som Import Address Table i Windows PE-filer eller Procedure Linkage Table i Linux ELF-filer) eller ved å sammenligne med kjente funksjonssignaturer.

Hvor dataene ligger: Dataseksjoner

I tillegg til kode inneholder binærfiler ulike dataseksjoner. Når du forstår disse, blir det enklere å finne globale variabler, konstanter og annen informasjon som gjelder hele programmet:

  • .data: Initialiserte globale og statiske variabler.
  • .bss: Uinitialiserte globale og statiske variabler (nullstilles ved kjøring).
  • .rdata: Skrivebeskyttede data, for eksempel strenger og konstanter.

Disse seksjonene er vanligvis tydelig merket i disassemblere.

Globale og lokale variabler

Det er viktig å skille mellom globale og lokale variabler. Globale variabler er tilgjengelige i hele programmet og lagres vanligvis i seksjonene .data eller .bss.

Lokale variabler opprettes derimot på stacken når en funksjon kalles, og er bare tilgjengelige i denne funksjonen. De refereres vanligvis relativt til stackrammepekeren (for eksempel [ebp-0x4]).

Hurtigsjekk: Ledetråder i data

Du analyserer en binærfil og ser en referanse til en adresse i seksjonen .rdata. Hva slags data er det mest sannsynlig lagret på denne adressen?

Viktigste punkter

De har lært grunnleggende teknikker for statisk analyse!

  • Strenger gir umiddelbar innsikt i programmets funksjonalitet.
  • Funksjonsprologer og -epiloger bidrar til å definere kodegrenser.
  • Ved å gjenkjenne biblioteksfunksjoner går analysen raskere.
  • Forståelse av dataseksjoner (.data, .bss, .rdata) gjør det enklere å finne globale variabler og konstanter.

Disse ferdighetene er avgjørende for å kunne navigere i og forstå disassemblerte binærfiler.

Gratis å komme i gang

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 «Identifisere funksjoner og data» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Grunnleggende om reverse engineering og binæranalyse, inkludert «Identifisere funksjoner og data», 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 «Identifisere funksjoner og data»?

Lær teknikker for å finne viktige funksjoner, strenger og andre data i disassemblerte binærfiler. 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 2 av 4.

Hvor lang tid tar leksjonen «Identifisere funksjoner og data»?

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

  1. Introduksjon til disassemblerere
  2. Identifisere funksjoner og data
  3. Analyse av kontrollflytgrafer
  4. Analyse av strenger og kryssreferanser
← Tilbake til Grunnleggende om reverse engineering og binæranalyse