Grunnleggende om reverse engineering og binæranalyse · leksjon

Datagjengivelse i binærfiler

Lær hvordan datatyper (heltall, flyttall og strenger) lagres i minnet og filer, inkludert begreper som byte-rekkefølge.

Leksjon 2 av 411 trinn

Datagjengivelse i binærfiler 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.

Hva er binærdata?

Når De utfører reverse engineering, ser De på et programs rå binærform. Det innebærer å forstå hvordan alle slags data – tall, tekst og annet – lagres som sekvenser av biter og bytes.

En bit er den minste enheten, enten 0 eller 1. Åtte biter utgjør én byte. Alt en datamaskin gjør, fra beregninger til visning av tekst, er basert på disse grunnleggende enhetene.

Tall som biter: heltall

Heltall er hele tall. De kan være signed (positive eller negative) eller unsigned (bare ikke-negative). Antallet bytes som brukes, avgjør hvilket verdiområde et heltall kan inneholde.

  • Byte (8-bit): 0 til 255 (unsigned) eller -128 til 127 (signed).
  • Word (16-bit): Opptil 65 535 (unsigned).
  • DWord (32-bit): Opptil rundt 4 milliarder (unsigned).
  • QWord (64-bit): Mye større tall!

Størrelsen på heltall er viktig

La oss se hvordan ulike heltallsstørrelser påvirker maksimumsverdien. Denne Python-koden viser maksimumsverdien for et 8-bits unsigned-heltall (en byte) og et 8-bits signed-heltall.

# Max unsigned 8-bit integer
max_8_bit_unsigned = 2**8 - 1
print(f"Max 8-bit unsigned: {max_8_bit_unsigned}")

# Max signed 8-bit integer
max_8_bit_signed = 2**7 - 1
min_8_bit_signed = -2**7
print(f"Max 8-bit signed: {max_8_bit_signed}")
print(f"Min 8-bit signed: {min_8_bit_signed}")

Flyttall

Tall med desimaltegn, som 3.14 eller -0.5, kalles flyttall. De lagres annerledes enn heltall for å håndtere desimaldelene.

De fleste systemer bruker IEEE 754-standarden for flyttall. Denne standarden definerer hvordan fortegn, eksponent og brøkdel representeres i biter. Vanlige størrelser er 32-bit (enkel presisjon) og 64-bit (dobbel presisjon).

Tekst: tegn og strenger

Teksttegn lagres også som tall. Den vanligste tilordningen for engelske tegn er ASCII, der hvert tegn (som 'A' eller '!') tilsvarer et bestemt 8-bits tall.

For et større utvalg av tegn (emojier og fremmedspråk) brukes Unicode. UTF-8 er en populær Unicode-koding som bruker 1 til 4 bytes per tegn, noe som gjør den fleksibel og bakoverkompatibel med ASCII.

En streng er ganske enkelt en sekvens av slike tegn, og avsluttes ofte med en spesiell null-byte (0x00) som markerer slutten.

Slik blir strenger til bytes

Slik representeres en enkel streng som bytes ved hjelp av UTF-8. Legg merke til hvordan hvert tegn får en tallverdi.

message = "Hello"
bytes_message = message.encode('utf-8')
print(f"String: '{message}'")
print(f"Bytes (UTF-8): {bytes_message}")

# Example with a non-ASCII character
smiley = "😊"
bytes_smiley = smiley.encode('utf-8')
print(f"String: '{smiley}'")
print(f"Bytes (UTF-8): {bytes_smiley}")

Endianness: byte-rekkefølge

Når et stykke data, for eksempel et 32-bits heltall, opptar mer enn én byte, må man velge hvilken byte som kommer først i minnet. Denne rekkefølgen kalles endianness.

  • Big-endian: Den mest signifikante byten (MSB) kommer først. Tenk på hvordan tall leses fra venstre mot høyre, som «123», der '1' er det mest signifikante sifferet.
  • Little-endian: Den minst signifikante byten (LSB) kommer først. Det tilsvarer å skrive «321» hvis '1' var det mest signifikante sifferet.

Visualisering av endianness

La oss ta det 32-bits heksadesimale tallet 0x12345678. Dette tallet består av fire bytes: 12, 34, 56, 78.

  • Big-endian: Lagrer bytene i minnet som 12 34 56 78 (MSB først).
  • Little-endian: Lagrer bytene i minnet som 78 56 34 12 (LSB først).

De fleste moderne Intel-/AMD-CPU-er (x86/x64) bruker little-endian. Nettverksprotokoller bruker ofte big-endian.

Endianness og reverse engineering

Det er avgjørende å forstå endianness når De arbeider med rå binærdata, særlig på tvers av ulike systemer eller filformater.

  • Hvis De leser et 32-bits heltall fra en big-endian-fil på et little-endian-system uten konvertering, blir verdien feil.
  • Nettverkspakker bruker ofte big-endian, så analyse av nettverkstrafikk krever at De er oppmerksom på dette.
  • Mange innebygde systemer (for eksempel ARM-prosessorer) kan konfigureres for begge deler, noe som gjør det mer komplisert.

Kontroll av endianness

Se for Dem at et 32-bits heltall med den heksadesimale verdien 0xAABBCCDD er lagret i minnet. Hvis systemet er little-endian, hvilken rekkefølge får byt­ene i minnet, fra den laveste adressen?

Oppsummering av datarepresentasjon

Godt jobbet! I denne leksjonen har vi utforsket hvordan data representeres i binærfiler:

  • Heltall: Lagres som signed- eller unsigned-tall, der størrelsen bestemmer verdiområdet.
  • Flyttall: Bruker standarder som IEEE 754 for desimaltall.
  • Tegn og strenger: Tilordnes tall (ASCII, UTF-8) og avsluttes ofte med en null-byte.
  • Endianness: Byte-rekkefølgen (big-endian eller little-endian) for data som består av flere bytes, noe som er avgjørende for riktig tolkning.

Å forstå disse grunnprinsippene er viktig for å tolke enhver binærfil eller minnedump. Deretter skal vi se på vanlige binærfilformater!

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 «Datagjengivelse i binærfiler» gratis?

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

Lær hvordan datatyper (heltall, flyttall og strenger) lagres i minnet og filer, inkludert begreper som byte-rekkefølge. 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 «Datagjengivelse i binærfiler»?

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. Oversikt over CPU-arkitekturer
  2. Datagjengivelse i binærfiler
  3. Vanlige binærfilformater
  4. Endianitet og byte-rekkefølge
← Tilbake til Grunnleggende om reverse engineering og binæranalyse