Binary diffing en patchanalyse
Beheers technieken om verschillende versies van binaire bestanden te vergelijken, wijzigingen te identificeren en beveiligingspatches te analyseren.
Binary diffing en patchanalyse is een gratis De basis van reverse-engineering en binaire analyse-les op CoddyKit. Dit is les 2 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject De basis van reverse-engineering en binaire analyse. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus De basis van reverse-engineering en binaire analyse bevat in totaal 4 lessen.
Wat is binair vergelijken?
Welkom bij Binary Diffing and Patch Analysis! Bij reverse-engineering moeten we vaak twee versies van een programma vergelijken zonder toegang tot de oorspronkelijke broncode.
Binary diffing is het proces waarbij verschillen tussen twee gecompileerde uitvoerbare bestanden worden vastgesteld. Zie het als een spelletje ‘zoek de verschillen’ voor computerprogramma’s!
Deze techniek is essentieel om te begrijpen hoe software in de loop van de tijd verandert, vooral bij het analyseren van beveiligingsupdates of de evolutie van malware.
Waarom binaries vergelijken?
Binary diffing levert waardevolle inzichten op in wijzigingen in software. Dit zijn enkele belangrijke toepassingen:
- Analyse van beveiligingspatches: Begrijp precies welke kwetsbaarheden een software-update verhelpt.
- Evolutie van malware: Volg hoe malwarefamilies hun tactieken en code in verschillende versies aanpassen.
- Software-updates: Ontdek nieuwe functies of onbedoelde wijzigingen die door een programma-update zijn geïntroduceerd.
- Forensische analyse: Vergelijk verdachte bestanden met bekende goede versies om manipulatie vast te stellen.
Soorten binaire vergelijkingen
Binary diffing draait niet alleen om het vergelijken van bytes. Tools gebruiken verschillende strategieën:
- Diffing op byteniveau: Dit is de eenvoudigste vorm: bestanden worden byte voor byte vergeleken om exacte verschillen zichtbaar te maken. Het is snel, maar kan misleidend zijn door wijzigingen in de compiler.
- Diffing op functieniveau: Geavanceerdere tools vergelijken functies op basis van hun structuur, control-flowgrafieken (CFG’s) en instructiepatronen. Zo kunnen vergelijkbare functies worden herkend, zelfs als hun bytecode enigszins verschilt.
- Semantische diffing: De meest geavanceerde technieken proberen de betekenis of bedoeling van de code te begrijpen en identificeren functionele wijzigingen in plaats van alleen structurele.
Tools voor binary diffing
Verschillende gespecialiseerde tools helpen reverse-engineers bij binary diffing:
- Ghidra: Deze gratis, opensource-tool van de NSA beschikt over ingebouwde diffingmogelijkheden waarmee functies en basisblokken kunnen worden vergeleken.
- IDA Pro (met BinDiff): IDA Pro is een commerciële disassembler met een krachtige plug-in genaamd BinDiff. Deze wordt algemeen beschouwd als een industriestandaard voor structurele diffing.
- radare2 (radiff2): Een opensource-framework voor reverse-engineering dat
radiff2bevat voor binary diffing via de opdrachtregel. - Diaphora: Een andere opensource-tool die zich richt op visuele diffing van functies.
Voorbeeld: het oorspronkelijke programma
Laten we een eenvoudig C-programma bekijken. We doen alsof dit de eerste versie van een softwaretoepassing is. Kopieer het en voer het uit om de uitvoer te bekijken.
#include <stdio.h>
int main() {
int user_input = 42; // Imagine this comes from user
printf("Processing value: %d\n", user_input);
return 0;
}Voorbeeld: het gepatchte programma
Stel nu dat er een beveiligingspatch wordt uitgebracht. De ontwikkelaars ontdekten dat user_input een bepaalde drempelwaarde niet mag overschrijden om problemen te voorkomen. Dit is de ‘gepatchte’ versie:
Let op de toegevoegde if-instructie om de invoer te valideren. Deze kleine wijziging verandert de gecompileerde binary.
#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;
}Diff-uitvoer analyseren
Wanneer je een binary-diffingtool uitvoert op de gecompileerde versies van onze oorspronkelijke en gepatchte programma’s, worden de verschillen zichtbaar gemaakt.
Je ziet doorgaans het volgende:
- Overeenkomende functies: Functies die identiek of vrijwel identiek zijn.
- Niet-overeenkomende functies: Functies die in de ene binary wel voorkomen maar in de andere niet, of die ingrijpend zijn gewijzigd.
- Gewijzigde basisblokken: Specifieke blokken met instructies binnen overeenkomende functies die zijn aangepast.
- Instructieverschillen: De exacte assembly-instructies die zijn toegevoegd, verwijderd of gewijzigd.
Het doel is om de specifieke codewijzigingen vast te stellen die door de patch zijn geïntroduceerd.
Beveiligingspatches interpreteren
Bij het analyseren van beveiligingspatches is het vaststellen van de wijzigingen slechts de eerste stap. De echte uitdaging is begrijpen waarom die wijzigingen zijn aangebracht en welke kwetsbaarheid ze verhelpen.
Let op patronen zoals:
- Nieuwe controles voor invoervalidatie, zoals in ons voorbeeld.
- Wijzigingen in het toewijzen of vrijgeven van geheugen.
- Het verwijderen van gevaarlijke functies of aanroepen.
- Grenscontroles bij toegang tot arrays.
- Wijzigingen in cryptografische implementaties.
Deze aanwijzingen helpen je de oorspronkelijke kwetsbaarheid te begrijpen en de effectiviteit van de oplossing te controleren.
Uitdagingen bij diffing
Binary diffing is niet altijd eenvoudig. Compilers kunnen veel kleine wijzigingen introduceren:
- Compileroptimalisaties: Verschillende optimalisatieniveaus kunnen de gegenereerde assembly ingrijpend veranderen.
- Verplaatsing van code: Functies of gegevens kunnen in het geheugen worden verplaatst, waardoor diffs op byteniveau moeilijk worden.
- Obfuscatie: Technieken tegen reverse-engineering maken binaries opzettelijk moeilijker te diffen.
Geavanceerde tools gebruiken geavanceerde algoritmen om deze uitdagingen te overwinnen en richten zich op structurele en semantische overeenkomsten.
Snelle controle: voordelen van diffing
Binary diffing is een krachtige techniek binnen reverse-engineering. Wat zijn de belangrijkste voordelen van binary diffing?
Samenvatting: binaire vergelijkingen beheersen
Je hebt nu de belangrijkste concepten van binary diffing en patchanalyse verkend!
- We hebben geleerd dat binary diffing twee gecompileerde programma’s vergelijkt om zonder broncode verschillen te vinden.
- Het is essentieel voor het analyseren van beveiligingspatches, het volgen van malware en het begrijpen van software-updates.
- Verschillende soorten diffing, zoals diffing op byteniveau en functieniveau, en gespecialiseerde tools zoals Ghidra en BinDiff helpen bij dit proces.
- De uitvoer interpreteren betekent begrijpen waarom wijzigingen zijn aangebracht, vooral bij beveiligingsoplossingen.
Deze vaardigheid is onmisbaar om diepgaande inzichten te krijgen in softwaregedrag en beveiliging.
Leer Assembly met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 12
- Lessen
- 48
Veelgestelde vragen
Is de les “Binary diffing en patchanalyse” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad De basis van reverse-engineering en binaire analyse, waaronder “Binary diffing en patchanalyse”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus De basis van reverse-engineering en binaire analyse bevat in totaal 4 lessen.
Wat leer ik in “Binary diffing en patchanalyse”?
Beheers technieken om verschillende versies van binaire bestanden te vergelijken, wijzigingen te identificeren en beveiligingspatches te analyseren. Je oefent met De basis van reverse-engineering en binaire analyse door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met De basis van reverse-engineering en binaire analyse te beginnen?
Ervaring vooraf is niet nodig. De basis van reverse-engineering en binaire analyse op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.
Hoe lang duurt de les “Binary diffing en patchanalyse”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over De basis van reverse-engineering en binaire analyse?
Ja. Elke les over De basis van reverse-engineering en binaire analyse bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- AI/ML in reverse engineering
- Binary diffing en patchanalyse
- Juridische en ethische overwegingen
- Technieken voor anti-reversing en obfuscatie