Grunderna i reverse engineering och binäranalys · Lektion

Tekniker för binärpatchning

Förstå hur binärfiler kan ändras och patchas statiskt för att förändra programmets beteende eller kringgå kontroller.

Lektion 3 av 411 steg

Tekniker för binärpatchning är en gratis lektion i Grunderna i reverse engineering och binäranalys på CoddyKit. Detta är lektion 3 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Grunderna i reverse engineering och binäranalys, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Grunderna i reverse engineering och binäranalys innehåller totalt 4 lektioner.

Vad är binärpatchning?

Binärpatchning är konsten att direkt ändra maskinkoden i ett kompilerat program utan tillgång till den ursprungliga källkoden. Tänk på det som att göra kirurgiska ändringar i en körbar fil.

Tekniken är viktig inom reverse engineering och gör det möjligt att ändra programmets beteende, rätta fel eller till och med kringgå säkerhetskontroller.

Vanliga användningsområden för patchning

Varför skulle ni patcha en binärfil?

  • Felrättningar: Tillämpa brådskande rättningar utan att kompilera om programmet.
  • Funktionsändringar: Ändra hur ett program fungerar eller lås upp dolda funktioner.
  • Kringgå kontroller: Inaktivera licensvalideringar eller begränsningar i testversioner.
  • Lokalisering: Ändra textsträngar för olika språk.

Viktiga verktyg för patchning

För att patcha binärfiler använder ni främst två typer av verktyg:

  • Hexeditorer: För direkta ändringar på bytenivå. De visar rå hexadecimal- och ASCII-data.
  • Disassemblerare: Som Ghidra eller IDA Pro, för att förstå assemblerkoden och identifiera var ni ska patcha.

Vi börjar med begreppen bakom hexredigering.

Använda en hexeditor

En hexeditor visar innehållet i en fil som hexadecimala tal i bas 16. Varje par hexadecimala siffror representerar en byte data. Ofta visas även ASCII-representationen.

Ni kan navigera med hjälp av adresser, söka efter specifika bytesekvenser eller texter och ändra byte direkt. Ändringarna sparas tillbaka i filen.

Ändra en sträng (koncept)

Program lagrar ofta meddelanden eller etiketter som enkla teckensträngar. I binärfilen representeras dessa strängar som en sekvens av byte.

Genom att hitta bytesekvensen för en sträng i en hexeditor kan ni ändra den så att ett annat meddelande visas när programmet körs.

Enkelt strängprogram

Betrakta detta enkla C-program. Efter kompileringen lagras texten "Hello CoddyKit!" någonstans i den körbara filen som en sekvens ASCII-byte.

Ni kan öppna den kompilerade binärfilen i en hexeditor, hitta dessa byte och till exempel ändra dem till "Hello Patcher!".

#include <stdio.h>

int main() {
  char message[] = "Hello CoddyKit!";
  printf("%s\n", message);
  return 0;
}

Inaktivera kod med NOP

Instruktionen NOP (No Operation) fungerar som en platshållare. Den talar om för processorn att inte göra någonting utan helt enkelt gå vidare till nästa instruktion.

Om ni vill inaktivera en instruktion eller ett litet kodblock utan att orsaka fel kan ni ersätta dess byte med opkoden för NOP-instruktionen, ofta 0x90 i x86/x64.

Ändra kontrollflödet

Program fattar beslut med hjälp av villkorliga hoppinstruktioner, till exempel "hoppa om lika med" eller "hoppa om inte noll". Dessa instruktioner styr programmets flöde.

Genom att ändra ett villkorligt hopp till ett ovillkorligt hopp, till exempel JMP, eller tvärtom kan ni tvinga ett program att alltid ta en viss väg och därmed kringgå kontroller eller ändra logiken.

Kringgå en kontroll

Föreställ er att ett program kontrollerar om en variabel är noll och avslutas om så är fallet. Assemblerkoden kan se ut så här:

TEST EAX, EAX
JE Exit_Func

Om vi vill förhindra avslutningen kan vi ändra JE (Jump if Equal) till JNE (Jump if Not Equal), eller till och med ersätta JE Exit_Func med NOP-instruktioner om Exit_Func är kort.

Kontroll av patchningsteknik

När ni försöker inaktivera en specifik instruktion eller ett mycket litet kodblock i en binärfil utan att ändra programmets övergripande struktur eller orsaka krascher, vilken assemblerinstruktion används då vanligast?

Sammanfattning: binärpatchning

I den här lektionen har vi gått igenom tekniker för binärpatchning. Ni har lärt er:

  • Vad binärpatchning är och vilka vanliga användningsområden den har.
  • Vilken roll hexeditorer och disassemblerare har.
  • Hur data, till exempel strängar, och logik, med hjälp av NOP och hopp, kan ändras.

Patchning kräver noggrann analys men ger kraftfulla möjligheter att interagera med kompilerad programvara!

Gratis att börja

Lär dig Assembly med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
12
Lektioner
48

Vanliga frågor

Är lektionen ”Tekniker för binärpatchning” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Grunderna i reverse engineering och binäranalys, inklusive ”Tekniker för binärpatchning”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Grunderna i reverse engineering och binäranalys innehåller totalt 4 lektioner.

Vad lär jag mig i ”Tekniker för binärpatchning”?

Förstå hur binärfiler kan ändras och patchas statiskt för att förändra programmets beteende eller kringgå kontroller. Ni övar på Grunderna i reverse engineering och binäranalys med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Grunderna i reverse engineering och binäranalys?

Du behöver inga förkunskaper. Utbildningen i Grunderna i reverse engineering och binäranalys på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.

Hur lång tid tar lektionen ”Tekniker för binärpatchning”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Grunderna i reverse engineering och binäranalys-lektionen?

Ja. Varje Grunderna i reverse engineering och binäranalys-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. IDAPython- och Ghidra-skriptning
  2. Automatisera återställning av datastrukturer
  3. Tekniker för binärpatchning
  4. FLIRT-signaturer och identifiering av biblioteksfunktioner
← Tillbaka till Grunderna i reverse engineering och binäranalys