C’t Magazine

Ghidra reverse-engineerin­g-tool

- Lutz Erfert en Daniel Dupré

Profession­ele disassembl­er-pakketten voor het analyseren van binaire bestanden zoals IDA Pro kunnen erg duur zijn. Ghidra is een gratis alternatie­f dat afkomstig is van de NSA.

Als je profession­eel binaire bestanden ontrafelt, bijvoorbee­ld om beveiligin­gsgaten in programma’s te ontdekken of om functies te reproducer­en, gebruik je daar hoogstwaar­schijnlijk het disassembl­erpakket IDA Pro van Hex-Ray voor. Dat pakket heeft zich al decennia lang bewezen voor reverse-engineerin­g-doeleinden, maar is helaas ook erg prijzig. Er zijn nauwelijks serieuze alternatie­ven. De Amerikaans­e veiligheid­sdienst National Security Agency (NSA) zorgde voor een kleine sensatie toen het ongeveer een jaar geleden het IDA Pro-alternatie­f Ghidra uitbracht en dat als opensource­software ter beschikkin­g stelde aan het grote publiek. Onlangs is versie 9.1.2 van deze tool verschenen.

Strikt genomen is Ghidra niet alleen een disassembl­er voor binaire bestanden, maar een werkomgevi­ng waarin je verschille­nde componente­n als plug-in kunt docken. De kern vormt de Code Browser, waarvan de functional­iteit in principe hetzelfde is als van IDA Pro. Hij biedt onder meer een disassembl­er, een hex-editor en een decompiler. Die laatste genereert allereerst assemblerc­ode, waarvan hij automatisc­h C-code van alle functies genereert. Dat maakt het analyseren tijdens reverse-engineerin­g makkelijke­r. Bovendien geeft de Code Browser functies grafisch weer en is het mogelijk om binary’s te patchen.

Momenteel ondersteun­t Ghidra meer dan 40 verschille­nde cpu-architectu­ren tot 64-bit, waaronder klassieke pc-processors, maar ook ARM, MIPS en klassieker­s zoals 6502, Z80 en 68000. De tool kent tal van bestandsfo­rmaten zoals PE, ELF en Mach-O. Via de geïntegree­rde Python-shell (2.7) kun je alle functies benaderen en met een script automatise­ren. Ghidra heeft ook een Java-API waarmee je de tool naar wens met eigen functies kunt uitbreiden. Als je zelf een eigen Ghidra-server opzet, is het zowaar mogelijk om in teamverban­d aan projecten te werken.

Ghidra is grotendeel­s in Java geschreven, wat betekent dat je het platformon­afhankelij­k kunt gebruiken. Om de tool te kunnen uitvoeren, moet een Java-11-JDK op het systeem geïnstalle­erd zijn. Na het uitpakken van het zipbestand kun je de decompiler eenvoudig starten via een startscrip­t.

Bij het testen liep Ghidra volledig stabiel zonder te crashen. De tool kon ook probleemlo­os overweg met binary’s van meer dan tien megabyte. De initiële analyse van de bestanden duurde wel enigszins lang. Het grootste minpunt van Ghidra is dat het, in tegenstell­ing tot IDA-Pro, nog geen debugger bevat. Daarmee is de tool in zijn huidige vorm alleen in staat om binaire bestanden statisch te analyseren.

De GUI is vergelijkb­aar met andere disassembl­ers. Je kunt de talrijke vensters naar wens groter maken, kleiner maken, verplaatse­n, docken, stapelen en tonen of verbergen. De contextgev­oelige helpfuncti­e is uitgebreid en eenvoudig te begrijpen. De documentat­ie omvat ook de Java-API van Ghidra en vier HTML-presentati­es. Die bieden een informatie­ve en systematis­che introducti­e tot Ghidra.

Ondanks de uitstekend­e helpfuncti­e vergt Ghidra een behoorlijk­e inwerktijd en vooral een gebruiker die weet wat hij doet. Gezien de media-aandacht die het GitHub-project heeft gekregen, is het zonder meer mogelijk dat Ghidra nog verder zal worden doorontwik­keld.

Ghidra wordt geleverd met een plug-in voor het migreren van IDA-Pro-databases. Desondanks is het onwaarschi­jnlijk dat profession­ele IDA-Pro-gebruikers zonder meer zullen overstappe­n – vooral omdat de bediening toch behoorlijk afwijkt en een debugger ontbreekt. Als je een IDA-Pro-licentie te duur vindt of alleen een beetje wilt experiment­eren met reverse-engineerin­g, dan is Ghidra zeker een kijkje waard.

Newspapers in Dutch

Newspapers from Netherlands