Grundlæggende reverse engineering og binæranalyse · Lektion

Identifikation af funktioner og data

Lær teknikker til at finde vigtige funktioner, strenge og andre data i disassemblerede binære filer.

Lektion 2 af 411 trin

Identifikation af funktioner og data er en gratis Grundlæggende reverse engineering og binæranalyse-lektion på CoddyKit. Dette er lektion 2 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 Grundlæggende reverse engineering og binæranalyse, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Grundlæggende reverse engineering og binæranalyse-kurset indeholder 4 lektioner i alt.

Find de vigtigste dele af en binærfil

Velkommen! I reverse engineering er vores mål at forstå, hvordan et program fungerer uden dets kildekode. Et afgørende første skridt er at identificere programmets kernekomponenter: funktioner og data.

Disse elementer er som byggestenene og råmaterialerne i al software. Når du lærer at finde dem hurtigt, kan du sætte betydeligt mere fart på din analyse.

Strenge: dine første spor

Strenge er ofte de letteste og mest værdifulde spor i en binærfil. De kan afsløre et programs formål, fejlmeddelelser, brugerprompter, filstier, netværksadresser eller API-kald.

  • Fejlmeddelelser: "Error: File not found"
  • URL'er og stier: "https://malicious.com/update", "C:\Windows\System32\config.dat"
  • Brugerprompter: "Enter password:"

At finde dem er normalt det første skridt for enhver analytiker.

Find strenge i disassemblere

De fleste disassemblere, som Ghidra eller IDA Pro, har en dedikeret funktion, der viser alle identificerede strenge i en binærfil. Det sparer dig for manuelt at gennemgå de rå bytes.

Når du finder en interessant streng, kan du normalt bruge en krydshenvisning til at se, hvor i koden den bruges. Det peger dig med det samme hen på relevante funktioner.

Funktioner: programmets byggesten

En funktion (eller underrutine) er en selvstændig kodeblok, der er designet til at udføre en bestemt opgave. Programmer består af mange funktioner, der kalder hinanden.

Når du identificerer funktioner, kan du opdele et komplekst program i mindre, overskuelige dele, så det bliver lettere at forstå programmets overordnede logik og flow.

Genkend funktioners indgangspunkter

Funktioner begynder ofte med en bestemt instruktionssekvens, der kaldes en prolog. Denne opsætning gør typisk stakken klar til lokale variable og gemmer den forrige stakramme.

En almindelig x86-prolog ser sådan ud:

push ebp
mov ebp, esp

Denne sekvens skubber den gamle base pointer på stakken og angiver den aktuelle stack pointer som den nye base pointer.

Funktioners afslutninger: epiloger

Ligesom funktioner har indgangspunkter, har de også afslutningspunkter, der markeres af en epilog. Epilogen gendanner stakken til dens tilstand før funktionskaldet og giver kontrollen tilbage til den kaldende funktion.

En typisk x86-epilog kan se sådan ud:

mov esp, ebp
pop ebp
ret

Den gendanner stack pointeren, henter den gamle base pointer fra stakken og returnerer fra funktionen.

Find almindelige biblioteksfunktioner

De fleste programmer bruger funktioner fra systembiblioteker (for eksempel til at skrive på skærmen, udføre fil-I/O eller kommunikere over netværk). Disassemblere er ofte intelligente nok til at identificere disse for dig.

Det gør de ved at se på importerede symboler (som Import Address Table i Windows PE-filer eller Procedure Linkage Table i Linux ELF-filer) eller ved at sammenligne med kendte funktionssignaturer.

Hvor data befinder sig: datasektioner

Ud over kode indeholder binærfiler forskellige datasektioner. Når du forstår dem, bliver det lettere at finde globale variable, konstanter og andre oplysninger, der gælder for hele programmet:

  • .data: Initialiserede globale og statiske variable.
  • .bss: Ikke-initialiserede globale og statiske variable (nulstilles under kørsel).
  • .rdata: Skrivebeskyttede data, f.eks. strenge og konstanter.

Disse sektioner er normalt tydeligt mærket i disassemblere.

Globale og lokale variable

Det er vigtigt at kunne skelne mellem globale og lokale variable. Globale variable er tilgængelige i hele programmet og gemmes normalt i sektionerne .data eller .bss.

Lokale variable oprettes derimod på stakken, når en funktion kaldes, og er kun tilgængelige i den pågældende funktion. Der refereres typisk til dem i forhold til stakrammens pointer (f.eks. [ebp-0x4]).

Hurtig kontrol: dataspor

Du analyserer en binærfil og ser en reference til en adresse i sektionen .rdata. Hvilken type data ligger der mest sandsynligt på denne adresse?

Vigtigste pointer

Du har lært grundlæggende teknikker til statisk analyse!

  • Strenge giver et hurtigt indblik i programmets funktionalitet.
  • Funktionsprologer og -epiloger hjælper med at afgrænse kode.
  • Ved at genkende biblioteksfunktioner går analysen hurtigere.
  • En forståelse af datasektioner (.data, .bss, .rdata) hjælper dig med at finde globale variabler og konstanter.

Disse færdigheder er afgørende, når du skal navigere i og forstå disassemblerede binærfiler.

Gratis at komme i gang

Lær Assembly 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
12
Lektioner
48

Ofte stillede spørgsmål

Er lektionen “Identifikation af funktioner og data” gratis?

Ja — alle 3 lektioner i læringssporet Grundlæggende reverse engineering og binæranalyse, inklusive “Identifikation af funktioner og data”, 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. Grundlæggende reverse engineering og binæranalyse-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Identifikation af funktioner og data”?

Lær teknikker til at finde vigtige funktioner, strenge og andre data i disassemblerede binære filer. Du øver dig i Grundlæggende reverse engineering og binæranalyse 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å Grundlæggende reverse engineering og binæranalyse?

Der kræves ingen tidligere erfaring. Grundlæggende reverse engineering og binæranalyse 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 2 af 4.

Hvor lang tid tager lektionen “Identifikation af funktioner og data”?

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 Grundlæggende reverse engineering og binæranalyse-lektion?

Ja. Alle Grundlæggende reverse engineering og binæranalyse-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

  1. Introduktion til disassemblere
  2. Identifikation af funktioner og data
  3. Analyse af kontrolflowgrafer
  4. Analyse af strenge og krydsreferencer
← Tilbage til Grundlæggende reverse engineering og binæranalyse