Binär diffning och patchanalys
Bemästra tekniker för att jämföra olika versioner av binärfiler, identifiera ändringar och analysera säkerhetspatchar.
Binär diffning och patchanalys är en gratis lektion i Grunderna i reverse engineering och binäranalys på CoddyKit. Detta är lektion 2 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är diffning?
Välkommen till Binär diffning och analys av patchar! Inom reverse engineering behöver vi ofta jämföra två versioner av ett program utan tillgång till den ursprungliga källkoden.
Binär diffning är processen att identifiera skillnader mellan två kompilerade körbara filer. Tänk på det som en ”hitta skillnaderna”-lek för datorprogram!
Den här tekniken är avgörande för att förstå hur programvara förändras över tid, särskilt vid analys av säkerhetsuppdateringar eller hur skadeprogram utvecklas.
Varför jämföra binärfiler?
Binär diffning ger värdefulla insikter i förändringar av programvara. Här är några viktiga användningsområden:
- Analys av säkerhetspatchar: Förstå exakt vilka sårbarheter en programuppdatering åtgärdar.
- Utveckling av skadeprogram: Följ hur skadeprogramfamiljer förändrar sina metoder och sin kod mellan olika versioner.
- Programuppdateringar: Upptäck nya funktioner eller oavsiktliga förändringar som har införts i en programuppdatering.
- Forensisk analys: Jämför misstänkta filer med kända godkända versioner för att identifiera manipulation.
Typer av binärjämförelser
Binär diffning handlar inte bara om att jämföra byte. Verktyg använder olika strategier:
- Diffning på bytenivå: Detta är den enklaste formen, där filer jämförs byte för byte för att tydliggöra exakta skillnader. Det går snabbt men kan vara missvisande på grund av förändringar i kompilatorn.
- Diffning på funktionsnivå: Mer avancerade verktyg jämför funktioner utifrån deras struktur, kontrollflödesgrafer (CFG:er) och instruktionsmönster. På så sätt kan liknande funktioner identifieras även om deras bytekod skiljer sig något.
- Semantisk diffning: De mest avancerade teknikerna försöker förstå kodens innebörd eller avsikt och identifierar funktionella förändringar snarare än enbart strukturella.
Verktyg för binär diffning
Flera specialiserade verktyg hjälper reverse engineers med binär diffning:
- Ghidra: Detta kostnadsfria verktyg med öppen källkod, utvecklat av NSA, har inbyggda diffningsfunktioner som kan jämföra funktioner och basic blocks.
- IDA Pro (med BinDiff): IDA Pro är en kommersiell disassembler med ett kraftfullt plugin kallat BinDiff, som allmänt betraktas som en branschstandard för strukturell diffning.
- radare2 (radiff2): Ett ramverk med öppen källkod för reverse engineering som innehåller
radiff2för binär diffning via kommandoraden. - Diaphora: Ytterligare ett verktyg med öppen källkod som fokuserar på visuell diffning av funktioner.
Exempel: det ursprungliga programmet
Vi tar ett enkelt C-program som exempel. Vi föreställer oss att detta är den första versionen av ett program. Kopiera och kör det för att se resultatet.
#include <stdio.h>
int main() {
int user_input = 42; // Imagine this comes from user
printf("Processing value: %d\n", user_input);
return 0;
}Exempel: det patchade programmet
Föreställ er nu att en säkerhetspatch har släppts. Utvecklarna insåg att user_input inte bör överskrida ett visst tröskelvärde för att förhindra problem. Här är den ”patchade” versionen:
Lägg märke till den tillagda if-satsen som validerar indata. Den här lilla förändringen kommer att ändra den kompilerade binärfilen.
#include <stdio.h>
int main() {
int user_input = 42; // Imagine this comes from user
// Security patch: Validate input
if (user_input > 100) {
user_input = 100; // Cap at 100
}
printf("Processing value: %d\n", user_input);
return 0;
}Analysera diffningsresultatet
När ni kör ett verktyg för binär diffning på de kompilerade versionerna av våra ursprungliga och patchade program kommer det att markera skillnaderna.
Vanligtvis ser ni:
- Matchade funktioner: Funktioner som är identiska eller mycket lika.
- Omatchade funktioner: Funktioner som finns i den ena binärfilen men inte i den andra, eller som har ändrats avsevärt.
- Ändrade basic blocks: Specifika instruktionsblock som har ändrats i matchade funktioner.
- Instruktionsskillnader: De exakta assemblerinstruktioner som har lagts till, tagits bort eller ändrats.
Målet är att lokalisera de specifika kodförändringar som patchen har infört.
Tolka säkerhetspatchar
Vid analys av säkerhetspatchar är identifieringen av förändringarna bara det första steget. Den verkliga utmaningen är att tolka varför förändringarna gjordes och vilken sårbarhet de åtgärdar.
Leta efter mönster som:
- Nya kontroller av indata (som i vårt exempel).
- Förändringar i minnesallokering eller minnesfrigörelse.
- Borttagning av farliga funktioner eller anrop.
- Gränskontroller vid åtkomst till arrayer.
- Förändringar i kryptografiska implementationer.
Dessa ledtrådar hjälper er att förstå den ursprungliga sårbarheten och kontrollera att korrigeringen är effektiv.
Utmaningar vid diffning
Binär diffning är inte alltid enkelt. Kompilatorer kan införa många små förändringar:
- Kompilatoroptimeringar: Olika optimeringsnivåer kan förändra den genererade assemblerkoden drastiskt.
- Kodomlokering: Funktioner eller data kan flyttas i minnet, vilket gör diffning på bytenivå svår.
- Obfuskering: Tekniker mot reverse engineering gör medvetet binärfiler svårare att diff:a.
Avancerade verktyg använder sofistikerade algoritmer för att övervinna dessa utmaningar och fokuserar på strukturella och semantiska likheter.
Snabbtest: fördelar med diffning
Binär diffning är en kraftfull teknik inom reverse engineering. Vilka är de främsta fördelarna med att utföra binär diffning?
Sammanfattning: bemästra binärjämförelser
Ni har nu gått igenom de viktigaste begreppen inom binär diffning och patchanalys!
- Vi har lärt oss att binär diffning jämför två kompilerade program för att hitta skillnader utan källkod.
- Det är viktigt för att analysera säkerhetspatchar, följa skadeprograms utveckling och förstå programuppdateringar.
- Olika typer av diffning, till exempel på byte- och funktionsnivå, samt specialiserade verktyg som Ghidra och BinDiff hjälper till i processen.
- Att tolka resultatet innebär att förstå varför förändringarna gjordes, särskilt vid säkerhetskorrigeringar.
Den här färdigheten är ovärderlig för att få djupa insikter i programvarans beteende och säkerhet.
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 ”Binär diffning och patchanalys” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Grunderna i reverse engineering och binäranalys, inklusive ”Binär diffning och patchanalys”, 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 ”Binär diffning och patchanalys”?
Bemästra tekniker för att jämföra olika versioner av binärfiler, identifiera ändringar och analysera säkerhetspatchar. 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 2 av 4.
Hur lång tid tar lektionen ”Binär diffning och patchanalys”?
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
- AI/ML inom reverse engineering
- Binär diffning och patchanalys
- Juridiska och etiska överväganden
- Tekniker mot reverse engineering och fördunkling