0% ont trouvé ce document utile (0 vote)
68 vues12 pages

Ghidra Contre IDA Pro

Ghidra, une boîte à outils de rétro-ingénierie gratuite publiée par la NSA, présente des forces telles qu'une interface utilisateur informative et des fonctionnalités de décompilation puissantes, mais souffre de faiblesses, notamment une lenteur avec de gros fichiers et un support limité pour certaines architectures. Bien que Ghidra soit open source et personnalisable, il est encore perçu comme un produit inachevé par rapport à IDA Pro, qui offre plus de fonctionnalités et une meilleure intégration avec les débogueurs. En somme, Ghidra a le potentiel de rivaliser avec IDA Pro, mais nécessite encore des améliorations significatives.

Transféré par

mail
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Thèmes abordés

  • compatibilité des fichiers,
  • scripts,
  • téléchargement,
  • code source,
  • arborescence d'appel,
  • vulnérabilités,
  • décompilation,
  • utilisation de VPN,
  • développement de logiciels,
  • fonctionnalités
0% ont trouvé ce document utile (0 vote)
68 vues12 pages

Ghidra Contre IDA Pro

Ghidra, une boîte à outils de rétro-ingénierie gratuite publiée par la NSA, présente des forces telles qu'une interface utilisateur informative et des fonctionnalités de décompilation puissantes, mais souffre de faiblesses, notamment une lenteur avec de gros fichiers et un support limité pour certaines architectures. Bien que Ghidra soit open source et personnalisable, il est encore perçu comme un produit inachevé par rapport à IDA Pro, qui offre plus de fonctionnalités et une meilleure intégration avec les débogueurs. En somme, Ghidra a le potentiel de rivaliser avec IDA Pro, mais nécessite encore des améliorations significatives.

Transféré par

mail
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Thèmes abordés

  • compatibilité des fichiers,
  • scripts,
  • téléchargement,
  • code source,
  • arborescence d'appel,
  • vulnérabilités,
  • décompilation,
  • utilisation de VPN,
  • développement de logiciels,
  • fonctionnalités

Ghidra contre IDA Pro.

Forces et faiblesses
de la boîte à outils gratuite de rétro-
ingénierie de la NSA

En mars 2019, la National Security Agency du département américain de la Défense (NSA)


a publié Ghidra, une boîte à outils gratuite de rétro-ingénierie. Il y a quelques années, Il est
maintenant temps de satisfaire notre curiosité et de comparer Ghidra avec d'autres outils.

Le problème de la confiance

La NSA a publié les codes sources de 32 projets dans le cadre du programme de transfert
de technologie (TTP). La liste complète des projets est disponible sur GitHub. Les trolls
plaisantaient sur le fait que la NSA utilisait ces programmes pour espionner les espions, et
non leurs victimes. D'une part, le code source des produits est ouvert. Les experts qui les
utilisent sont suffisamment qualifiés pour vérifier si le logiciel présente des
vulnérabilités. En revanche, le premier bug a été identifié immédiatement après la sortie
de Ghidra.

L'expert britannique en sécurité de l'information Matthew Hickey, cofondateur et


directeur de Hacker House, a noté que la boîte à outils Ghidra ouvre le port 18001 sur
votre réseau local en mode débogage et y place un écouteur. Cela permet à Ghidra d'établir
une connexion à distance via JDWP ; bien sûr, à des fins de débogage uniquement. Selon
Hickey, il est facile de résoudre ce problème : il suffit de changer la ligne 150
du support/[Link] de * à [Link].

Au fil du temps, d'autres bugs ont commencé à apparaître. Par exemple, les experts ont
trouvé une vulnérabilité d'entité externe XML (XXE) qui pourrait être exploitée par des
attaquants capables d'inciter un utilisateur de Ghidra à ouvrir ou à restaurer un projet
spécialement conçu. Par conséquent, soyez prudent !

Ghidra peut être téléchargé à partir de son site Web officiel [Link] , mais il y a un
problème : le site n'est pas accessible depuis certains pays en dehors des États-Unis (dont
le Canada). Cependant, je crois que cela n'arrêtera pas nos lecteurs internationaux ; VPN et
Tor sont les meilleurs amis des hackers.
Archive Ghidra décompressée

Donc, vous avez téléchargé et décompressé


l' ghidra_9.0_PUBLIC_20190228archive. Passons en revue les principaux dossiers et
regardons ce qu'il y a dedans.

Tout d'abord, je vous recommande fortement de consulter le docsrépertoire. Il contient


de nombreuses diapositives et fichiers PDF contenant des informations sur Ghidra, ses
plugins et ses fonctionnalités.

Il n'y a rien d'intéressant dans le Licensesdossier. Le Serverdossier contient les outils


requis pour lancer un serveur de débogage distant. Le Supportdossier stocke les outils
supplémentaires requis pour exécuter le programme.

Le Ghidradossier est plus intéressant : le sous- Processorsrépertoire fournit une liste


complète des architectures prises en charge, qui incluent 6502, 68000, 6805, 8051, 8085,
AARCH64, ARM, Atmel, CR16, DATA, JVM, MIPS, PA-RISC, PIC, PowerPC, Sparc, TI_MSP430,
Jouet, x86 et Z80.
Dossiers avec des instructions pour différentes architectures

Il est maintenant temps d'examiner l'application! Pour lancer Ghidra sous Windows,
lancez [Link]. Les utilisateurs de Linux lanceront [Link]. Le projet est
largement basé sur Java ; par conséquent, assurez-vous que Java Runtime est installé.
Fenêtre Nouveau projet

Tout d'abord, le programme propose de créer un projet et d'ajouter les fichiers binaires
requis pour l'analyse. Ensuite, l'icône avec un dragon vert devient active et ouvre le
CodeBrowser, notre environnement de travail principal.

Fenêtre principale de CodeBrowser

Initialement, on nous présente une fenêtre affichant les informations techniques du


fichier. L'outil nous invite à l'analyser et à sélectionner les options d'analyse. Nous
accepterons l'invite. L'interface principale semble inhabituelle, du moins pour moi.
Navigateur de code

Enfin, nous pouvons analyser l'en-tête du fichier. Ce que nous voyons, c'est
la IMAGE_DOS_HEADERstructure, qui n'est pas un point d'entrée. Je peux observer que
tous les champs sont affichés correctement, et que tout est beau et logique.

INFO
Lors du premier lancement, le code et les autres champs des nombreuses fenêtres du
désassembleur avaient une disposition très inhabituelle. C'était une solution facile. Les
éléments visuels de la liste de désassemblage (vue "désasm") peuvent être personnalisés à
l'aide du bouton "Modifier les champs de la liste" dans le coin supérieur droit.

La fenêtre Decompiler est sur la droite, nous y reviendrons plus tard. Il y a aussi l'onglet
Fonctions dans la partie inférieure droite de l'écran, appuyez dessus.
Onglet Fonctions

Ici, nous voyons la liste des fonctions avec leurs signatures, ce qui est très
pratique. Choisissons une fonction et voyons ce qui se passe ensuite.

Code initial d'une fonction désassemblée


C'est le tout début de la fonction, contenant sa signature, ses paramètres et leurs types, la
valeur de retour, les conventions d'appel et la liste de désassemblage. Le bouton Display
Function Graph est situé en haut de l'écran ; Je l'ai mis en évidence sur la capture
d'écran. Appuyons dessus.

Visualisation de code dans Ghidra

Visualisation du code dans IDA Pro

Une belle animation apparaît lorsque vous déplacez le curseur sur les blocs de code (cela peut
être vu sur la capture d’écran). J’ai fait deux captures d’écran de la même fonction présentée
graphiquement par Ghidra et IDA Pro. À mon avis, le graphique généré par Ghidra est plus
informatif. De plus, Ghidra marque des constructions telles que si... sinon sur le graphique. Je
comprends que cela puisse sembler enfantin, mais pour moi personnellement, la visualisation
du code dans Ghidra est plus informative et pratique que celle dans IDA Pro. De plus, le graphe
de fonctions est hautement personnalisable.

Ghidra offre également de nombreuses fonctionnalités de recherche; Pour voir toutes les
options disponibles, il vous suffit de sélectionner Rechercher dans le menu du cadre et de
consulter la liste déroulante. Par exemple, voici à quoi ressemble la boîte de dialogue de
recherche de chaînes :
Fenêtre de recherche de chaînes

Ghidra est capable de calculer des références croisées vers et depuis presque n’importe quel
élément (chaîne, instruction, registre, etc.). Pour utiliser cette fonction, sélectionnez
Références dans le menu contextuel et spécifiez ce que vous recherchez. De plus, au début de
chaque fonction, Ghidra tente d’afficher des références croisées à celle-ci.

Ghidra comprend une visionneuse hexadécimale intégrée; pour basculer la vue hexadécimale,
vous devez ouvrir le menu Windows → Octets.

Visionneuse hexadécimale intégrée


Ghidra prend en charge la fonction de correction de code d’assemblage dès la sortie de la
boîte. Pour l’utiliser, sélectionnez une ligne de code et appuyez sur Ctrl + Maj + G ou,
alternativement, sélectionnez Instruction de correctif dans le menu contextuel. Il y a une
caractéristique visuelle intéressante dans le programme: si vous sélectionnez du code dans la
fenêtre Décompilateur, ce morceau de code est automatiquement sélectionné dans la fenêtre
Liste de désassemblage.

Sélection du code dans Ghidra

Une autre caractéristique intéressante est que Ghidra, prêt à l’emploi, est livré avec un
gestionnaire de scripts - un ensemble de scripts adaptés à toutes les occasions. Bien sûr, s’il
manque un script, vous pouvez l’ajouter. Tous les scripts sont écrits en Java. Pour plus
d’informations, consultez ci-dessous la liste complète du script [Link] dont
le nom est explicite.

import [Link];
import [Link];
import [Link];

public class CreateExportFileForDLL extends GhidraScript {


@Override
public void run() throws Exception {
// Push this .dll into the location of the system .exports files.
// Must have write permissions.
ResourceFile file = [Link](currentProgram,
false, true, monitor);

println("Created .exports file : " + [Link]());


}
}

Les scripts peuvent être édités dans l’éditeur intégré simple ou ouverts dans IDE Eclipse
directement à partir du menu contextuel. Bien sûr, si vous souhaitez l’utiliser, vous devez avoir
Installé Eclipse sur votre PC.
Dans l’ensemble, il existe de nombreuses fonctions utiles, y compris un outil de diff binaire
intégré et la possibilité de corriger le code sans plugins supplémentaires, de visualiser
l’entropie du code et de créer l’arborescence d’appel de fonction du programme dans
l’application. La boîte à outils comprend également un interpréteur Python intégré (c’est-à-
dire que, contrairement à IDA, vous n’avez pas besoin de l’installer séparément) et d’autres
fonctionnalités pratiques.

Examinons maintenant le décompilateur qui, contrairement à IDA, est expédié avec le colis.
Tout d’abord, je vais présenter la liste générée par le décompilateur de Ghidra, puis la liste
produite par IDA Pro.

Voici la liste générée par Ghidra:

undefined8 FUN_1400010b0(void)
{
ushort uVar1;
longlong *plVar2;
LPCSTR lpMultiByteStr;
ushort *puVar3;
longlong *plVar4;
longlong in_GS_OFFSET;
ushort local_d8 [104];

plVar2 = *(longlong **)(*(longlong *)(*(longlong *)(in_GS_OFFSET +


0x60) + 0x18) + 0x18);
lpMultiByteStr = FUN_140001448(&DAT_140003000);
MultiByteToWideChar(0,1,lpMultiByteStr,-1,(LPWSTR)local_d8,100);
plVar4 = plVar2;
do {
plVar4 = (longlong *)*plVar4;
if (plVar4[6] != 0) {
puVar3 = local_d8;
while( true ) {
uVar1 = *(ushort *)((plVar4[0xc] - (longlong)local_d8) +
(longlong)puVar3);
if ((uVar1 == 0) && (*puVar3 == 0)) goto LAB_140001140;
if ((uVar1 < *puVar3) || (uVar1 >= *puVar3 && uVar1 != *puVar3))
break;
puVar3 = puVar3 + 1;
}
}
} while (plVar2 != plVar4);
LAB_140001140:
return plVar4[6];
}

Voici la liste produite par le décompilateur IDA Pro Hex-Rays :

__int64 sub_1400010B0()
{
unsigned __int64 v0; // rax
_QWORD *v1; // rdi
_QWORD *v2; // rbx
const CHAR *v3; // rax
WCHAR *i; // rax
WCHAR v5; // cx
WCHAR WideCharStr; // [rsp+30h] [rbp-D8h]
v0 = __readgsqword(0x60u);
v1 = *(_QWORD **)(*(_QWORD *)(v0 + 24) + 24i64);
v2 = *(_QWORD **)(*(_QWORD *)(v0 + 24) + 24i64);
v3 = (const CHAR *)sub_140001448(&unk_140003000);
MultiByteToWideChar(0, 1u, v3, -1, &WideCharStr, 100);
while ( 1 )
{
v2 = (_QWORD *)*v2;
if ( v2[6] )
break;
LABEL_9:
if ( v1 == v2 )
return v2[6];
}
for ( i = &WideCharStr; ; ++i )
{
v5 = *(WCHAR *)((char *)i + v2[12] - (_QWORD)&WideCharStr);
if ( !v5 && !*i )
break;
if ( v5 < *i || v5 > *i )
goto LABEL_9;
}
return v2[6];
}

À mon avis, la liste produite par Ghidra est plus facile à lire. Je sais que le décompilateur Hex-
Rays est facilement personnalisable. De plus, il dispose du plugin HexRaysPyTools, ce qui rend
le résultat encore meilleur. Mais nous discutons actuellement des outils fournis avec le
package, tandis que Hex-Rays vous coûtera de l’argent supplémentaire.

Quoi qu’il en soit, le module de décompilation du Ghidra est très puissant et peut facilement
rivaliser avec Hex-Rays. Si vous ouvrez le dossier \Ghidra\Processors, sélectionnez n’importe
quelle architecture, puis accédez au dossier \data\languages, vous verrez des fichiers avec les
extensions *.slaspec, *.pspec et quelques autres. À ce stade, vous vous rendrez compte que
vous pouvez maintenant écrire de manière réaliste un module de support pour votre
architecture spécifique. Et encore une fois, l’un des principaux problèmes d’IDA Pro est que
son code n’est pas ouvert!

Conclusions
Nous avons examiné le cadre de rétro-ingénierie de Ghidra. Peut-il remplacer IDA Pro ? J’en
doute; du moins, pas à son stade actuel. À mon avis, Java n’est pas le meilleur langage pour ce
genre d’outils. Et, bien sûr, la vitesse de fonctionnement est également importante.

Le désassembleur est lent, surtout avec des fichiers « lourds ». Par exemple, la rétro-ingénierie
de fichiers de plus de 150 Mo à l’aide de Ghidra est un véritable défi. D’autre part, Ghidra est
un outil multiplateforme, ce qui peut être important pour certains utilisateurs.
Un autre aspect est qu’IDA Pro prend en charge beaucoup plus d’architectures et de chargeurs
de fichiers que Ghidra. Et, contrairement à IDA Pro, Ghidra manque de l’intégration complète
avec les débogueurs. Bien sûr, l’open source (à condition que la NSA remplisse sa promesse)
est une excellente chose, et la possibilité d’ajouter un support pour d’autres architectures est
une fonctionnalité vraiment cool. Mais des années peuvent s’écouler avant que ce travail ne
soit terminé (et que les bugs soient corrigés).

Dans l’ensemble, j’ai eu la forte impression que Ghidra n’est pas un produit fini. Dans son état
actuel, le framework ressemble à une version bêta accessible au public, et non à une « version
9 ». Soit dit en passant, le nom du paquet inclut le mot « PUBLIC », nous pouvons donc
supposer en toute sécurité qu’une version « PRIVÉE » existe également quelque part.

Pas de doute, Ghidra a ses atouts ; à certains égards, il a déjà dépassé IDA Pro, mais le nombre
de ses faiblesses est bien plus important. D'autre part, les développeurs IDA peuvent adopter
de nombreuses fonctionnalités du nouvel ensemble d'outils. Par exemple, j'aime la grande
valeur informative de la visualisation du code dans les graphiques. La construction du graphe
semble être plus simple et ordonnée. Le correctif de code est disponible sans plugins
supplémentaires et sans la division entre le x64 et le x86. Pourquoi avoir deux raccourcis sur
votre bureau si un seul suffit ? En d'autres termes, la création d'Ilfak Guilfanov a beaucoup de
place pour l'amélioration.

Vous aimerez peut-être aussi