Cover
Comença ara de franc 3_Lecture_3.pdf
Summary
# Basis statische analyse van uitvoerbare bestanden
Dit onderwerp introduceert de initiële fasen van het analyseren van uitvoerbare bestanden door middel van statische methoden, waarbij de nadruk ligt op taalherkenning, codebeheer en fundamentele bestandskenmerken [2](#page=2).
### 1.1 Programmeertalen en codebeheer
Het begrijpen van de context van een uitvoerbaar bestand vereist het onderscheiden van programmeertalen en het concept van beheerde versus onbeheerde code [3](#page=3).
#### 1.1.1 Programmeren versus Scripting talen
Een fundamenteel onderscheid ligt tussen programmeertalen en scripting talen, wat nauw verbonden is met het concept van interpreteren versus compileren [3](#page=3).
* **Gecompileerde talen**: Code wordt direct omgezet naar machinecode door een compiler voordat het programma wordt uitgevoerd.
* **Geïnterpreteerde talen**: Code wordt regel voor regel gelezen en uitgevoerd door een interpreter tijdens de runtime.
#### 1.1.2 Beheerde versus onbeheerde code
Een cruciaal concept in moderne softwareontwikkeling is het verschil tussen beheerde (managed) en onbeheerde (unmanaged) code [3](#page=3).
* **Onbeheerde code (Native Code)**: Deze code wordt rechtstreeks door het besturingssysteem uitgevoerd en biedt meer controle maar vereist handmatig geheugenbeheer en foutafhandeling. Voorbeelden zijn C en C++ [3](#page=3).
* **Beheerde code (Managed Code)**: Deze code draait binnen een runtime-omgeving, zoals de Common Language Runtime (CLR) voor.NET-applicaties. De CLR biedt diensten zoals automatisch geheugenbeheer (garbage collection), uitzonderingsafhandeling (exception handling), beveiligingsdiensten en Just-In-Time (JIT) compilatie [3](#page=3).
> **Tip:** Het onderscheid tussen beheerde en onbeheerde code is essentieel voor het begrijpen van hoe programma's geheugen beheren, fouten afhandelen en hoe ze interageren met het besturingssysteem.
### 1.2 Kenmerken van een uitvoerbaar bestand
Het uitvoeren van een statische analyse begint met het onderzoeken van de basiseigenschappen van een bestand [4](#page=4).
#### 1.2.1 Eigenschappen verkennen
Door met de rechtermuisknop op een uitvoerbaar bestand (.exe) te klikken en "Eigenschappen" te selecteren, kunnen verschillende basisinformatie worden verkregen. De locatie van deze informatie binnen het bestand is een belangrijk aspect van statische analyse [4](#page=4).
#### 1.2.2 Compileertijden
De compileertijden van software kunnen ook relevant zijn voor statische analyse, hoewel de directe details hierover op pagina 5 worden vermeld. Dit kan inzicht geven in de ontwikkelingsworkflow en gebruikte technologieën [5](#page=5).
> **Example:** Bij het analyseren van een onbekend.exe-bestand, kan het controleren van de bestandseigenschappen in het besturingssysteem (zoals bestandsgrootte, creatiedatum, en versie-informatie) een eerste indicatie geven van de aard van het programma [4](#page=4).
> **Tip:** Sta altijd stil bij de *bron* van de informatie. Bestandsmetagegevens kunnen door de gebruiker worden gewijzigd, dus ze moeten met voorzichtigheid worden geïnterpreteerd [4](#page=4).
---
# Hashing en string-extractie voor bestandsidentificatie
Hashing en het extraheren van strings uit binaire bestanden zijn cruciale technieken voor bestandsidentificatie, verificatie en het opsporen van malware [11](#page=11) [6](#page=6) [9](#page=9).
### 2.1 Hashing als digitale vingerafdruk
Hashing is een proces waarbij een cryptografische functie wordt toegepast op data om een unieke, vaste-lengte output te genereren, bekend als een hashwaarde of digest. Deze hashwaarde dient als een digitale vingerafdruk voor het bestand [8](#page=8) [9](#page=9).
#### 2.1.1 Eigenschappen van hashfuncties
Hashfuncties zijn "one-way" cryptografische functies, wat betekent dat het praktisch onmogelijk is om de originele data te reconstrueren vanuit de hashwaarde. Kenmerkend voor hashfuncties zijn [8](#page=8):
* **Input-onafhankelijke lengte**: De lengte van de hashwaarde is constant, ongeacht de grootte van het originele bestand [8](#page=8).
* **Determinisme**: Dezelfde input levert altijd dezelfde hashwaarde op [8](#page=8).
* **Gevoeligheid voor wijzigingen**: Zelfs een kleine wijziging van 1-bit in de input data leidt tot een significant andere hashwaarde [9](#page=9).
#### 2.1.2 Toepassingen van hashing
Hashing kent diverse toepassingen:
* **Bestandsverificatie**: Bij het downloaden van bestanden kan de hashwaarde worden vergeleken met een verwachte waarde om de integriteit van het bestand te waarborgen [9](#page=9).
* **Malware-identificatie en -tracking**: De anti-malware industrie gebruikt hashes om bekende malware-varianten te identificeren, te classificeren en bij te houden. Door hashes te genereren, te doorzoeken en te delen, kunnen beveiligingsonderzoekers snel bekende bedreigingen detecteren [9](#page=9).
* **Blacklisting en Whitelisting**: Hashwaarden kunnen worden gebruikt om lijsten van bekende kwaadaardige bestanden (blacklists) of vertrouwde bestanden (whitelists) te creëren [9](#page=9).
> **Tip:** Tools zoals VirusTotal bieden de mogelijkheid om bestanden te scannen met meerdere antivirus-engines via hun hashwaarden, wat de detectiekans van bekende malware vergroot. Voorzichtigheid is echter geboden met het uploaden van gevoelige data. Een alternatieve methode is om de hashwaarde van een bestand te genereren en deze vervolgens op te zoeken op het internet, eventueel in combinatie met unieke strings uit het bestand [6](#page=6).
#### 2.1.3 Populaire hashing-algoritmes
MD5 en SHA-1 zijn twee veelgebruikte hashing-algoritmes [9](#page=9).
#### 2.1.4 Beschikbare tools
Tools zoals 'WinMD5', NirSoft's 'HashMyFiles', en Sysinternals' 'Sigcheck' kunnen worden gebruikt voor het genereren en beheren van hashwaarden [9](#page=9).
### 2.2 Extractie van strings uit binaire bestanden
Het extraheren van leesbare strings uit binaire bestanden is een methode voor statische analyse om informatie te verkrijgen die in het bestand is ingebed [11](#page=11).
#### 2.2.1 Werkwijze en nut
Het direct openen van een binair bestand in een tekst-editor zoals Kladblok levert vaak weinig bruikbare informatie op. Een hex-editor is beter, maar het direct identificeren van betekenisvolle informatie kan nog steeds uitdagend zijn. Door echter de ASCII- of Unicode-strings binnen een bestand te extraheren, kunnen programmeurs en beveiligingsanalisten statische data, zoals configuratie-informatie, foutmeldingen, URL's of commando's, ontdekken [11](#page=11).
> **Tip:** Wees je ervan bewust dat strings in code misleidend kunnen zijn of pas laat in de uitvoering van het programma worden gebruikt. De interpretatie van geëxtraheerde strings vereist context en kennis van de code [11](#page=11).
#### 2.2.2 Beschikbare tools
* **Sysinternals Strings**: Een command-line tool voor het extraheren van strings uit binaire bestanden [11](#page=11).
* **McAfee BinText**: Een gratis grafische tool (GUI) voor string-extractie (oorspronkelijke downloadlink kan verouderd zijn) [11](#page=11).
* **Linux `strings` commando**: Een standaard command-line utility in Linux-systemen [11](#page=11).
#### 2.2.3 ASCII en Unicode strings
Strings in bestanden kunnen in verschillende coderingen voorkomen, met name ASCII en Unicode [12](#page=12).
* **ASCII**: Gebruikt één byte per karakter [12](#page=12).
* **Unicode**: Vaak gebruikt in Windows-systemen, gebruikt UTF-16 met twee bytes per karakter. Een "Wide Character String" duidt meestal op een Unicode string [12](#page=12).
* **Null Terminator**: Zowel ASCII- als Unicode-strings eindigen doorgaans met een null terminator ($ \text{'\0'} $ voor ASCII, $ \text{'\0\0'} $ voor UTF-16) [12](#page=12).
#### 2.2.4 Endianness en Byte Order Mark (BOM)
Bij het verwerken van multi-byte karakters, zoals in Unicode, is de byte-volgorde (endianness) van belang [13](#page=13).
* **UTF-16 big-endian**: Herkenbaar aan de Byte Order Mark (BOM) `0xfe 0xff` [13](#page=13).
* **UTF-16 little-endian**: Herkenbaar aan de BOM `0xff 0xfe` [13](#page=13).
---
# Omgaan met verpakte en geobfusceerde malware
Dit gedeelte behandelt technieken die malwaregebruikers inzetten om hun kwaadaardige software te verbergen, met name door middel van compressie en obfuscatie, en de uitdagingen die dit met zich meebrengt voor analyse [16](#page=16).
### 3.1 Compressie en obfuscatie als verhullingstechnieken
Obfuscatie is een breder concept dat als doel heeft de uitvoering van code te verbergen. Packing wordt hierin beschouwd als een subset van obfuscatie. Gepakte bestanden zijn gecomprimeerd en daardoor niet direct analyseerbaar met basale statische technieken. Het doel van packing kan tweeledig zijn: de malware kleiner maken, obfusceren, of beide. In essentie komt het erop neer dat twee uitvoerbare bestanden (EXEs) in één worden geplaatst [16](#page=16) [17](#page=17).
> **Tip:** Een belangrijke aanwijzing dat een bestand verpakt of geobfusceerd is, is het ontbreken van veel herkenbare strings, of dat de aanwezige strings overwegend onleesbaar zijn [17](#page=17).
### 3.2 Uitdagingen voor statische analyse
Het statisch analyseren van een verpakt bestand is mogelijk, maar aanzienlijk moeilijker. De compressie en obfuscatie verbergen de originele code, waardoor standaard analysehulpmiddelen moeite hebben om de functionaliteit van de malware te doorgronden [16](#page=16) [17](#page=17).
### 3.3 Hulpmiddelen voor packerdetectie
Er zijn specifieke tools beschikbaar om packers te detecteren, waaronder Exeinfo PE en PEiD. Deze tools beschikken over ingebouwde detectieplugins die kunnen helpen bij het identificeren van gebruikte packers of compilers [18](#page=18).
> **WARNING!** Een cruciaal punt bij het gebruik van deze tools is dat veel plugins, zoals die van Exeinfo, daadwerkelijk het binaire bestand zullen uitvoeren in een poging het type packer te bepalen. Het is daarom **essentieel** om dergelijke tools alleen te gebruiken binnen een veilige virtuele machine (VM) om potentiële besmetting te voorkomen [18](#page=18).
---
# De PE-bestandsstructuur en de analyse ervan
Dit onderwerp behandelt de Portable Executable (PE) bestandsstructuur die door Windows wordt gebruikt voor uitvoerbare bestanden, inclusief de headers, secties, imports, exports en de analysehulpmiddelen [20](#page=20) [22](#page=22).
### 4.1 De Portable Executable (PE) Formaat
De PE-formaat is het standaardformaat voor alle uitvoerbare bestanden op Windows. Bestanden met bruikbare code in dit formaat hebben extensies zoals EXE, DLL, SCR en SYS. De PE-structuur omvat altijd een DOS-header en een NT-header voor achterwaartse compatibiliteit. De PE-header bevat aanzienlijke informatie die nuttig is voor een analist, zoals de tijdstempel van compilatie, gekoppelde bibliotheken, API-aanroepen, imports en exports. De koppeling van bibliotheken kan statisch, dynamisch of op runtime gebeuren [20](#page=20) [22](#page=22).
> **Tip:** De extensie van een bestand is niet bepalend voor het bestandsformaat; het formaat wordt bepaald door de headers [22](#page=22).
Het PE-formaat is ontstaan uit het MS-DOS MZ-bestandsformaat, dat op zijn beurt gebaseerd was op COFF (Unix Common Object File Format) [22](#page=22).
#### 4.1.1 Belangrijke componenten van een PE-bestand
Een PE-bestand bestaat primair uit twee hoofdcomponenten [23](#page=23):
* **Headers:** Dit omvat zowel de DOS-header als de NT-header (PE-header) [23](#page=23).
* **Secties:** Deze bevatten de 'statische' stukken data die tijdens de uitvoering van het programma worden gebruikt. Typisch zijn er vier secties, maar dit aantal kan oplopen tot tien of meer [23](#page=23).
> **Tip:** De 'MZ' karakters aan het begin van EXE-bestanden zijn de initialen van Mark Zbikowski, de MS-DOS architect en de maker van het PE-formaat [34](#page=34).
#### 4.1.2 Informatie in de PE-headers
De PE-header bevat diverse nuttige gegevens voor analyse [20](#page=20):
* **Imports:** Functies die uit andere bibliotheken worden gebruikt. Deze kunnen veel zeggen over het doel van een bestand, maar zijn niet altijd definitief omdat ze op runtime kunnen worden aangemaakt of gewijzigd, of omdat de benodigde DLL's zich in de Resource Section bevinden [21](#page=21) [28](#page=28).
* **Exports:** Functies die bedoeld zijn om door andere programma's te worden gebruikt. Deze functionaliteit wordt voornamelijk 'gezien' in DLL-bestanden. DLL's zonder exports worden vaak als verdacht beschouwd [21](#page=21) [30](#page=30).
* **Timestamp:** Geeft aan wanneer het programma is gecompileerd [20](#page=20).
* **Sections:** De verschillende secties van het bestand. Veelvoorkomende secties zijn:
* `.text`: Bevat de uitvoerbare code [31](#page=31).
* `.rdata`: Read-only data, waaronder import- en exporttabellen [31](#page=31).
* `.data`: Globale data die door het hele programma wordt benaderd [31](#page=31).
* `.rsrc`: Resources zoals binaire data, iconen, logo's en menu's [21](#page=21) [31](#page=31).
* **Subsystem:** Specificeert of het een Command-Line Interface (CLI) of een Graphical User Interface (GUI) programma is [21](#page=21).
* **Resources:** Statisch gecodeerde data zoals iconen, menu's, strings en logo's [21](#page=21).
#### 4.1.3 Veelgebruikte DLL's
Sommige DLL's worden veelvuldig gebruikt in Windows-applicaties en kunnen indicatoren geven van de functionaliteit van een programma [27](#page=27):
* `kernel32.dll`: Algemene I/O en systeemaanroepen [27](#page=27).
* `advapi32.dll`: Typische registerbewerkingen [27](#page=27).
* `user32.dll`: Functies voor de gebruikersinterface [27](#page=27).
* `gdi32.dll`: Grafische functies [27](#page=27).
* `ntdll.dll`: Native API-functies [27](#page=27).
* `wsock32.dll`: Netwerk sockets [27](#page=27).
* `wininet` / `ws2_32.dll`: Netwerkactiviteit [27](#page=27).
### 4.2 Analysehulpmiddelen voor PE-bestanden
Er zijn diverse tools beschikbaar voor het analyseren van PE-bestanden, elk met hun eigen specialisaties [22](#page=22) [31](#page=31):
* **PEView:** Een veelgebruikte tool voor het bekijken van de PE-structuur [31](#page=31).
* **Dependency Walker:** Toont dynamisch gelinkte functies en de afhankelijkheden van een uitvoerbaar bestand [31](#page=31) [35](#page=35).
* **PE Explorer:** Een commerciële tool voor het inspecteren en bewerken van PE-bestanden [31](#page=31).
* **Resource Hacker:** Specifiek voor het bekijken en aanpassen van de `.rsrc` sectie, inclusief iconen en titels [31](#page=31) [36](#page=36).
* **PEStudio:** Een krachtige tool voor malware-analyse die informatie uit PE-bestanden extraheert en analyseert [31](#page=31).
* **CFF Explorer:** Een uitgebreide PE-editor en -analysator [31](#page=31).
* **PE Insider:** Een geavanceerde PE-bestandsanalysator [31](#page=31).
> **Example:** Een voorbeeld van het analyseren van de `.rdata` sectie in een Linux ELF-bestand met `objdump -s hello` [32](#page=32).
#### 4.2.1 Import- en exportanalyse als malware-indicatoren
Het analyseren van de imports en exports van een PE-bestand kan waardevolle inzichten geven in de aard van het programma, met name bij malware-analyse. Bijvoorbeeld, de exports van een bestand genaamd `KEYLOGGER.EXE` kunnen hints geven over de functionaliteit als een keylogger [28](#page=28) [29](#page=29).
> **Tip:** Als een DLL-bestand geen exports bevat, kan dit een indicatie zijn van kwaadaardige intenties [30](#page=30).
---
# Praktische overwegingen en beveiliging bij malwareanalyse
Dit onderwerp bespreekt essentiële praktische overwegingen en beveiligingsmaatregelen bij het uitvoeren van malwareanalyse, met een focus op het veilige gebruik van virtuele machines.
### 5.1 Het belang van virtuele machines
Virtuele machines (VM's) zijn een fundamenteel instrument bij malwareanalyse om de eigen systemen te beschermen tegen potentiële infectie of schade. Ze bieden een geïsoleerde omgeving waarin malware veilig kan worden uitgevoerd en onderzocht zonder invloed uit te oefenen op het hostbesturingssysteem [39](#page=39).
### 5.2 Strategisch gebruik van snapshots
Snapshots zijn cruciaal voor het efficiënt en veilig uitvoeren van analyse-taken op een VM [40](#page=40).
#### 5.2.1 Snapshot strategie
* **Initiële snapshot:** Neem direct na een schone installatie van het besturingssysteem een snapshot van de VM. Dit dient als een schoon startpunt [40](#page=40).
* **Software installatie en analyse:** Installeer vervolgens de benodigde software voor analyse en voer analyses uit met een malware sample [40](#page=40).
* **Tussentijdse snapshots:** Tijdens de analyse van een specifiek malware sample is het aan te raden om regelmatig snapshots te maken. Dit maakt het mogelijk om snel terug te keren naar een eerdere werkende staat als de analyse misgaat of de VM instabiel wordt [40](#page=40).
* **Snapshot opschoning:** Wanneer extra software noodzakelijk was voor de analyse, kan de VM worden teruggezet naar de initiële schone snapshot. De overtollige software wordt verwijderd en er wordt een nieuwe schone snapshot gemaakt. Dit zorgt ervoor dat de VM schoon blijft voor toekomstige analyses [40](#page=40).
> **Tip:** Maak snapshots vroeg en vaak tijdens het analyseproces om flexibiliteit te behouden.
### 5.3 Risico's van virtuele machines
Hoewel VM's isolatie bieden, zijn er inherente risico's waar men zich bewust van moet zijn [41](#page=41).
* **Auto USB Connect:** Zorg ervoor dat de automatische USB-verbinding is uitgeschakeld in de VM-instellingen. Anders kunnen externe opslagapparaten, zoals USB-sticks, onbedoeld geïnfecteerd raken wanneer ze worden aangesloten op de VM [41](#page=41).
* **Detectie en ontsnapping:** Malware kan detecteren dat het in een VM draait en soms technieken gebruiken om te proberen te ontsnappen aan de virtualisatie-omgeving. Het is daarom belangrijk om altijd de meest recente versie van de virtualisatiesoftware (zoals VMware) te gebruiken [41](#page=41).
* **Host-gast interactie:** Wees voorzichtig met kopiëren en plakken van data tussen het host- en gastbesturingssysteem. Gevoelige informatie of potentieel schadelijke code kan onbedoeld worden overgedragen [41](#page=41).
### 5.4 Netwerkconfiguratie voor malwareanalyse
De netwerkconfiguratie van een VM is een kritiek aspect voor veilige malwareanalyse [42](#page=42).
* **Host-Only Networking:** Dit netwerktype isoleert de VM volledig van externe netwerken, inclusief het internet. Dit is ideaal voor analyses waarbij de malware geen externe communicatie hoeft te simuleren [42](#page=42).
* **Meerdere VM's en interne LAN:** Een configuratie met meerdere VM's die via een lokaal netwerk (LAN) zijn verbonden, maar gescheiden van het internet, kan nuttig zijn. Dit vereist echter het installeren of simuleren van benodigde diensten [42](#page=42).
* **Simulatie van netwerkdiensten:** Voor analyses die externe communicatie vereisen, maar waarbij directe internettoegang ongewenst is, kunnen tools zoals FakeNet of INetSim worden gebruikt. Deze tools simuleren netwerkdiensten en maken het mogelijk om netwerkverkeer te observeren zonder blootstelling aan het internet. Meer gedetailleerde informatie hierover volgt later [42](#page=42).
* **Begrip van netwerkmodi:** Het is essentieel om het verschil te kennen tussen Bridged Mode en NAT Mode [42](#page=42).
* **Bridged Mode:** De VM krijgt een eigen IP-adres op hetzelfde fysieke netwerk als de host.
* **NAT Mode (Network Address Translation):** De VM deelt het IP-adres van de host en deelt een eigen netwerk achter de host.
* **Live analyse:** In sommige gevallen kan het noodzakelijk zijn om de VM direct aan te sluiten op het internet. Dit brengt aanzienlijke risico's met zich mee. **DENK GOED NA VOORDAT U DIT DOET!!** ] [42](#page=42).
> **Tip:** Een zorgvuldige netwerkconfiguratie minimaliseert de blootstelling aan risico's en maximaliseert de effectiviteit van de analyse.
---
## Veelgemaakte fouten om te vermijden
- Bestudeer alle onderwerpen grondig voor examens
- Let op formules en belangrijke definities
- Oefen met de voorbeelden in elke sectie
- Memoriseer niet zonder de onderliggende concepten te begrijpen
Glossary
| Term | Definition |
|------|------------|
| Programmeertalen | Een formele taal die instructies definieert voor een computer om taken uit te voeren, waarbij syntax en semantiek nauwkeurig worden gespecificeerd. |
| Scripttalen | Een programmeertaal die meestal wordt geïnterpreteerd in plaats van gecompileerd, en die vaak wordt gebruikt voor het automatiseren van taken of het ontwikkelen van webapplicaties. |
| Gecompileerde code | Code die direct door de processor van een computer kan worden uitgevoerd nadat deze door een compiler is vertaald van een hogere programmeertaal naar machinettaal. |
| Geïnterpreteerde code | Code die niet direct door de processor wordt uitgevoerd, maar die tijdens de uitvoering regel voor regel wordt verwerkt door een interpreter. |
| Managed code | Code die wordt uitgevoerd binnen een runtime-omgeving, zoals de Common Language Runtime (CLR) van .NET, die automatische geheugenbeheer en beveiligingsfuncties biedt. |
| Unmanaged code (Native code) | Code die rechtstreeks communiceert met het besturingssysteem en geheugenbeheer vereist, vaak geschreven in talen zoals C of C++. |
| Common Language Runtime (CLR) | De uitvoeringsengine van het .NET Framework die geheugenbeheer, beveiliging en het afhandelen van uitzonderingen biedt voor managed code. |
| Garbage collection | Een vorm van automatisch geheugenbeheer die achtergrondprocessen gebruikt om geheugen vrij te geven dat niet langer in gebruik is door een programma. |
| Reflectie | Het vermogen van een programma om zijn eigen structuur, metagegevens en gedrag te inspecteren en te manipuleren tijdens runtime. |
| PE-formaat (Portable Executable) | Een bestandsformaat dat door Microsoft Windows wordt gebruikt voor uitvoerbare bestanden, zoals .exe, .dll, .obj en .sys bestanden. |
| PE-headers | De structuur aan het begin van een PE-bestand die metadata bevat over het uitvoerbare bestand, zoals informatie over de secties, imports en exports. |
| Imports | Verwijzingen in een uitvoerbaar bestand naar functies die in externe dynamische-linkbibliotheken (DLL's) zijn opgeslagen en door het programma worden gebruikt. |
| Exports | Functies die een uitvoerbaar bestand of DLL beschikbaar stelt voor gebruik door andere programma's. |
| Hashing | Een cryptografisch proces waarbij een invoer van willekeurige grootte wordt omgezet in een uitvoer van vaste grootte (een hashwaarde), die uniek is voor de invoer. |
| MD5 (Message-Digest Algorithm 5) | Een cryptografische hashfunctie die een 128-bits hashwaarde genereert, vaak gebruikt voor het controleren van de integriteit van gegevens, hoewel het wordt beschouwd als onveilig voor cryptografische doeleinden. |
| SHA-1 (Secure Hash Algorithm 1) | Een cryptografische hashfunctie die een 160-bits hashwaarde genereert, die veel werd gebruikt voor het verifiëren van de integriteit van bestanden en digitale handtekeningen, maar nu als verouderd wordt beschouwd. |
| Strings | Reeksen leesbare tekens die binnen een binair bestand zijn ingebed, wat kan duiden op functionaliteit, URL's of andere informatie. |
| ASCII | Een tekencodering die 7 bits gebruikt om 128 verschillende tekens te representeren, voornamelijk voor Engelse letters en symbolen. |
| Unicode | Een tekencodering die de meeste tekens van alle schrijfsystemen ter wereld kan weergeven, waarbij typisch meer dan 1 byte per teken wordt gebruikt. |
| Endianness | De volgorde waarin bytes van een multi-byte gegevenseenheid (zoals een integer) worden opgeslagen in het geheugen of worden verzonden over een netwerk. |
| Byte Order Mark (BOM) | Een speciale Unicode-karakterreeks die aan het begin van een tekstbestand wordt geplaatst om de byte-volgorde (endianness) van de tekst aan te geven en om aan te geven dat het UTF-gecodeerd is. |
| Packers | Programma's die uitvoerbare bestanden comprimeren of obfusceren om hun grootte te verkleinen of om analyse te bemoeilijken, vaak gebruikt in malware om detectie te ontwijken. |
| Obfuscatie | Het proces van het maken van code moeilijker te begrijpen of te analyseren, vaak gebruikt om intellectueel eigendom te beschermen of om malware te verbergen. |
| Statische analyse | Het onderzoeken van een programma zonder het daadwerkelijk uit te voeren, waarbij de code, datastructuren en metadata worden geanalyseerd. |
| Dynamische analyse | Het observeren van het gedrag van een programma tijdens de uitvoering, inclusief systeemoproepen, geheugengebruik en netwerkactiviteit. |
| Virtuele machine (VM) | Een softwarematige simulatie van een computersysteem die het mogelijk maakt om besturingssystemen en applicaties te draaien in een geïsoleerde omgeving. |
| Snapshot | Een momentopname van de staat van een virtuele machine op een bepaald tijdstip, die kan worden gebruikt om terug te keren naar die staat indien nodig. |