Gangbare binaire bestandsindelingen
Verken de structuur van populaire uitvoerbare bestandsindelingen zoals ELF, PE en Mach-O, evenals hun belangrijkste secties.
Gangbare binaire bestandsindelingen is een gratis De basis van reverse-engineering en binaire analyse-les op CoddyKit. Dit is les 3 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 zijn binaire indelingen?
Wanneer je een programma compileert, wordt het een binair bestand. Dit is geen willekeurige verzameling bytes! Het is op een specifieke manier gestructureerd volgens een indeling voor binaire bestanden.
Deze indelingen zijn vergelijkbaar met bouwtekeningen. Ze vertellen het besturingssysteem (OS) hoe het programma correct moet worden geladen, gekoppeld en uitgevoerd. Inzicht hierin is cruciaal voor reverse-engineering.
Waarom bestandsindelingen belangrijk zijn
Binaire indelingen bepalen waar de verschillende onderdelen van een programma zich bevinden: de uitvoerbare code, geïnitialiseerde gegevens, alleen-lezengegevens, bronnen en meer.
Als reverse-engineer kun je met kennis van de bestandsindeling door het binaire bestand navigeren, functies vinden, tekenreeksen extraheren en belangrijke gegevensstructuren in het bestand identificeren.
ELF: de standaard voor Linux en Unix
Het Executable and Linkable Format (ELF) is de standaardindeling voor binaire bestanden op Unix-achtige systemen, waaronder Linux, FreeBSD en Solaris. De indeling is zeer flexibel en wordt gebruikt voor uitvoerbare bestanden, gedeelde bibliotheken, objectcode en core dumps.
Dankzij het ontwerp kunnen bestanden efficiënt worden geladen en uitgevoerd op verschillende architecturen.
In een ELF-bestand
Belangrijke onderdelen van een ELF-bestand zijn:
- ELF Header: Bevat metagegevens zoals de architectuur, het adres van het ingangspunt en de versie.
- Program Header Table: Beschrijft hoe het OS segmenten (verzamelingen secties) in het geheugen moet laden.
- Section Header Table: Geeft informatie over alle secties in het bestand.
- .text: Bevat de uitvoerbare machinecode van het programma.
- .data: Slaat geïnitialiseerde globale en statische variabelen op.
- .rodata: Bevat alleen-lezengegevens, zoals letterlijke tekenreeksen.
PE: de standaard voor Windows
De indeling Portable Executable (PE) is de standaardindeling voor binaire bestanden van 32-bits en 64-bits Windows-besturingssystemen. Ze wordt gebruikt voor uitvoerbare bestanden (.exe), DLL's (.dll) en objectbestanden.
PE is een aangepaste versie van het Common Object File Format (COFF) en vervult op Windows een vergelijkbare rol als ELF.
In een PE-bestand
Belangrijke onderdelen van een PE-bestand zijn:
- DOS Header: Een kleine header voor achterwaartse compatibiliteit met MS-DOS.
- PE Header: Bevat de handtekening 'PE\0\0' en informatie uit de bestandsheader.
- Optional Header: Cruciaal voor het laden; bevat het adres van het ingangspunt, de image base en informatie over de uitlijning van secties.
- Section Table: Somt alle secties in het PE-bestand op en beschrijft ze.
- .text: Bevat de uitvoerbare machinecode.
- .data: Slaat geïnitialiseerde globale en statische gegevens op.
- .rsrc: Bevat toepassingsbronnen zoals pictogrammen, menu's en dialoogvensters.
Mach-O: macOS en iOS
Mach-O (Mach Object) is de oorspronkelijke indeling voor uitvoerbare bestanden van Apple-besturingssystemen, waaronder macOS, iOS, watchOS en tvOS. De indeling is gebaseerd op de objectindeling van de Mach-kernel.
Mach-O-bestanden worden meestal herkend aan hun 'magic number' aan het begin van het bestand, net als ELF- en PE-bestanden.
In een Mach-O-bestand
Belangrijke onderdelen van een Mach-O-bestand zijn:
- Mach-O Header: Geeft de doelarchitectuur (bijvoorbeeld x86_64, ARM64) en het aantal laadopdrachten aan.
- Load Commands: Deze zijn cruciaal! Ze vertellen de dynamische linker hoe het proces moet worden ingericht, onder andere door segmenten te definiëren, gedeelde bibliotheken op te geven en het ingangspunt in te stellen.
- __TEXT segment: Bevat de uitvoerbare code en alleen-lezengegevens.
- __DATA segment: Bevat schrijfbare gegevens.
- __LINKEDIT segment: Bevat symbool- en tekenreekstabellen die voor dynamische koppeling worden gebruikt.
Belangrijkste verschillen in één oogopslag
Hoewel alle drie de indelingen code en gegevens organiseren, hebben ze verschillende kenmerken:
- ELF: Zeer flexibel en gebruikt Program Header Tables en Section Header Tables voor het laden en de structuur. Veelgebruikt op Linux/Unix.
- PE: Specifiek voor Windows, bevat een verouderde DOS-header en leunt sterk op de Optional Header voor informatie over het laden.
- Mach-O: Voor Apple-besturingssystemen; de Load Commands staan centraal in de manier waarop het OS en de dynamische linker het binaire bestand verwerken.
Elke indeling is geoptimaliseerd voor de bijbehorende OS-omgeving.
Test je kennis
Welke van de volgende secties of segmenten zijn in hun respectieve indelingen voor binaire bestanden voornamelijk verantwoordelijk voor het opslaan van de uitvoerbare machinecode van het programma?
Samenvatting: basisprincipes van binaire indelingen
We hebben drie belangrijke indelingen voor binaire bestanden verkend:
- ELF: Standaard voor Linux/Unix, met headers en secties zoals
.texten.data. - PE: Standaard voor Windows, met DOS-, PE- en Optional Headers en secties zoals
.texten.rsrc. - Mach-O: Standaard voor Apple-besturingssystemen, met een header en belangrijke Load Commands om segmenten zoals
__TEXTen__DATAte definiëren.
Inzicht in deze structuren is fundamenteel voor effectieve reverse-engineering!
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 “Gangbare binaire bestandsindelingen” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad De basis van reverse-engineering en binaire analyse, waaronder “Gangbare binaire bestandsindelingen”, 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 “Gangbare binaire bestandsindelingen”?
Verken de structuur van populaire uitvoerbare bestandsindelingen zoals ELF, PE en Mach-O, evenals hun belangrijkste secties. 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 3 van 4.
Hoe lang duurt de les “Gangbare binaire bestandsindelingen”?
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
- Overzicht van CPU-architecturen
- Gegevensrepresentatie in binaire bestanden
- Gangbare binaire bestandsindelingen
- Endianness en bytevolgorde