GHIDRA vs. IDA Pro


Salutations


Je pense que le moment est venu. Bouffi / bouillant / avoir une opinion. Avec la sortie d'Hydra, la situation des outils de rétro-ingénierie a beaucoup changé. S'il n'y avait pas beaucoup de choix avant quoi utiliser ( Binary Ninja , Hopper , JEB ou Radare2 ne seront pas mentionnés ici , parce que dans les entreprises et les communautés de sécurité de l'information, je sais qu'ils utilisent un très petit nombre de personnes, ou le seuil pour en rejoindre (salut, Radar) très élevé, ou la couverture des architectures est limitée uniquement à x86 / x64 / ARM / ARM64 / MIPS ), nous avons maintenant un concurrent Hex-Rays très puissant représenté par la NSA avec leur GHIDRA .


Mais Hydra est-elle si bonne? L' IDA est-elle mauvaise (ou vice versa)? Faisons les choses correctement. Dans cet "article", j'ai essayé de réduire tous les avantages et les inconvénients des deux outils. Je n'avais pas pour objectif de dire que tel ou tel outil est meilleur - tirez vos propres conclusions. De plus, un et le deuxième instrument se développent. Et l'article ne contiendra que les résultats de la comparaison au moment de la rédaction. Une comparaison sera effectuée dans les catégories suivantes:


  1. Architectures prises en charge
    Si vous êtes un ingénieur inversé travaillant uniquement avec des plates-formes Intel (x86 / x64), la présence de toutes les autres n'a pas vraiment d'importance pour vous. Mais si vous devez travailler avec de nombreux hébergement de fichiers architectures, plus il y aura de livraison par défaut, mieux ce sera.
  2. Formats pris en charge
    Identique au paragraphe précédent, uniquement en ce qui concerne les formats de données.
  3. Qualité de décompilation
    Le composant le plus nécessaire et le plus important est le décompilateur. Le Ghidra seul n'a pas beaucoup de sens, alors voici un aperçu de ce que Ghidra / IDA peut / produit.
  4. Extensibilité, SDK / API
    Il est important pour les ingénieurs en rétro-ingénierie travaillant avec diverses architectures, formats et effectuant régulièrement de nombreuses tâches similaires de pouvoir écrire rapidement et facilement des modules / chargeurs / scripts supplémentaires. Ce serait aussi bien de pouvoir
    les déboguer. Voyons comment va chaque produit.
  5. La documentation
    Il semblerait, pourquoi est-il nécessaire? Nous sommes tous habitués depuis longtemps aux raccourcis clavier, avons trouvé du mana pour écrire des plugins, etc., nous avons également compris l'interface. Mais combien de temps cela a-t-il pris? Avec une documentation, en particulier de haute qualité, cela sera plus rapide et plus calme.
  6. Débogueur (pour les fichiers examinés)
    Un composant important et nécessaire pour un environnement d'ingénierie inverse. En statique, c'est également possible, mais en dynamique, c'est plus facile.
  7. Vitesse d'analyse des fichiers
    S'il s'agit de fichiers très volumineux (à partir de 10 Mo ou plus), il est important que l'environnement de rétro-ingénierie ne vous oblige pas à partir pour le thé, allez vous coucher pendant que le fichier est en cours d'analyse.
  8. Commodité du travail (interface, touches de raccourci, concentration sur la saisie au clavier)
    Malgré le fait que l'essentiel est la fonctionnalité, la façon dont elle est présentée à l'utilisateur, à quoi il ressemble, joue un rôle important. Si l'interface permet de ne pas utiliser la souris pour les formulaires et commandes fréquemment utilisés, c'est un plus. Si vous avez besoin de passer à travers un tas de fenêtres pour ajouter un argument d'entrée à une fonction, c'est déjà un inconvénient. Comparez.
  9. Nouvelle version
    La rapidité avec laquelle les bogues sont corrigés, de nouvelles fonctionnalités sont ajoutées et, en conséquence, de nouvelles versions sont publiées, est un indicateur d'une bonne équipe de développement et d'une approche sérieuse.
  10. La difficulté d'obtenir un kit de distribution
    Achetez, téléchargez, créez la distribution - c'est tout ici.
  11. Le soutien
    Voulez-vous signaler une erreur aux auteurs, suggérer une nouvelle fonctionnalité ou simplement demander quelque chose - tout cela concerne le support. Nous déterminerons qui est le meilleur - un produit payant ou gratuit.
  12. Communauté
    La présence de la communauté et la possibilité de communiquer avec elle, de discuter des problèmes de développement, des questions sur la fonctionnalité ou tout simplement d'obtenir de bons conseils de personnes bien informées (pas de développeurs) - c'est la communauté.
  13. Collaboration de projet
    Le travail de plusieurs personnes sur un même projet est un point suffisamment important pour l'ignorer.

Comparaison


1. Architectures prises en charge (IDA)


Prêt à l'emploi, IDA Pro prend en charge un très grand nombre de processeurs et leurs modifications. La liste est respectable: https://hex-rays.com/products/ida/processors.shtml
La liste des processeurs est différente pour Starter et Professional Edition , 64 bits n'est pris en charge que dans la version Pro (ainsi que dans la version de démonstration , merci slinkinone ). Les plates-formes de ce dernier sont assez rares, mais néanmoins.


Si le travail n'est pas axé sur l'IoT, alors Starter suffit, sinon vous devrez acheter une version Pro .
La décompilation n'est disponible que pour x86 / x64 / arm / arm64 / PowerPC , au cours du premier semestre de l'année prochaine, ils promettent de déployer le décompilateur MIPS .


1. Architectures prises en charge (GHIDRA)


Il n'y a pas de version en ligne de la liste, donc je l'apporte ici:



Ici, la liste est présentée sous la forme de processeurs principaux (sans modifications), mais cela ne signifie pas qu'ils ne sont pas pris en charge. Des décompilateurs sont disponibles pour chacun des modules de processeur.


2. Formats pris en charge (IDA)


La liste des formats ici: https://hex-rays.com/products/ida/file_formats.shtml


La liste est assez longue. De plus, il existe des plugins de la communauté qui ne seront jamais ajoutés à la boîte, comme Pour ce faire, vous devrez discuter du moment avec Ilfak Gilfanov (le développeur principal).


2. Formats pris en charge (GHIDRA)


Liste des formats 1
  • android
    1. apk
    2. bootimg
    3. dex
    4. noyau
    5. odex
    6. xml
  • bplist
  • coff
  • complzss
  • cpio
  • ext4
  • gzip
  • iOS
    1. apple8900
    2. btree
    3. decmpfs
    4. dmg
    5. dyldcache
    6. générique
    7. ibootim
    8. img2
    9. img3
    10. img4
    11. ipsw
    12. png
    13. prelink
    14. xattr
  • iso9660
  • Java
  • lzss
  • omf
  • sevenzip
  • image clairsemée
  • goudron
  • ubi
  • xar
  • yaffs2
  • fermeture éclair
  • zlib

Liste des formats 2
  • coff
  • nain
  • nain4
  • elfe
  • lx
  • macho
  • macos
  • mz
  • ne
  • objc2
  • objectiveC
  • omf
  • pdb
  • pe
  • pef
  • ubi
  • xcoff

La liste ci-dessus n'est qu'une liste de répertoires sur https://github.com/NationalSecurityAgency/ghidra/tree/master/Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats
Une autre liste de fichiers ici: https://github.com/NationalSecurityAgency/ghidra/tree/master/Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format


3. Décompilation de qualité (IDA)


Le décompilateur d'Ida fonctionne à merveille avec le x86 / x64 / arm / arm64 (je ne peux rien dire sur PowerPC , parce que je ne l'ai pas vu), qui a été généré par un compilateur standard, dont la plupart produit une liste C soignée.


Les développeurs se sont initialement concentrés sur le code MS-DOS, donc les artefacts de compilateurs même assez anciens sont pris en compte (à partir d'ici dans l'interface dans de nombreuses fenêtres, il y a des , des , es / ds / ss / fs / gs ( ds - même sur MIPS!)), Jusqu'à assez nouveau. Certes, les optimisations du compilateur IDA activées ne fonctionnent pas si bien et l'échappement tourne au diable.


Avec du code écrit dans un compilateur inconnu d'Ida (ou dans l'assembleur), les résultats deviennent très mauvais: l'utilisation d'une calling convention non standard transforme une liste décompilée en un ensemble de lignes presque illisibles.


La nécessité de définir manuellement les registres nécessaires dans la ligne d'entrée du prototype de la fonction via __usercall avec ses @ et <> , d'une part, est un gros inconvénient, surtout quand il y a beaucoup de registres, et d'autre part, Hydra ne l'a pas, et ce n'est que via l'interface graphique, ce qui n'est pas C'est toujours pratique si le nombre de registres utilisés est petit.


3. Qualité de décompilation (GHIDRA)


Je ne connais pas de gens qui diront que le décompilateur Hydra est cool. Ici, pour la joie, il est plus probable qu'il existe généralement, et il y en a pour chaque processeur supporté!


Le décompilateur Hydra contient beaucoup de déchets dans le code, ce qui est inhabituel pour l'utilisateur Ida, ce qui distrait souvent de comprendre l'essence de ce qui s'y passe.


Mais le décompilateur Hydra a une grande fonctionnalité - il a un émulateur d'instructions, qui lui permet de jeter des déchets qui ne sont pas utilisés et ne seront jamais appelés, tout en simplifiant certains points.


De plus, le décompilateur Hydra ne se soucie pas dans quel registre viennent les arguments - s'ils sont accédés, ils seront utilisés.


Ici, je voudrais noter pourquoi Hydra ou Ida ont leurs propres problèmes particuliers avec la décompilation. Le point est l'orientation de chaque produit. IDA , comme je l'ai noté ci-dessus, a été créée avec une orientation sur MS-DOS et, en général, sur x86, puis progressivement sur x64 et ARM. Par conséquent, juste une merveilleuse qualité d'échappement pour ces plates-formes, mais absolument aucune couverture pour les autres.
Pour Hydra, au contraire, il a été créé dans le but de procéder à une ingénierie inverse des appareils IoT. D'où le grand nombre de processeurs pris en charge, une description claire de chacun d'eux et la possibilité simple d'en créer de nouveaux. Mais, du fait que les développeurs ont tenté de couvrir de nombreuses architectures, l'amélioration de l'échappement du décompilateur n'est pas devenue une priorité.

4. Extensibilité des fonctionnalités (IDA)


Ida vous permet d'écrire des chargeurs, des plugins, des débogueurs et des modules de processeur, ainsi que des scripts directement dans l'interface. Certains peuvent être écrits en python, ce qui est un peu plus pratique (via le plugin IDAPython , écrit non par IDA développeurs IDA , par Elias Bachaalany ).


Le processus de développement de plugins pendant la version 6.x était assez compliqué, car une documentation saine était absente. Maintenant les temps ont changé, écrire votre propre pièce est devenu plus facile. Il y a un concours organisé chaque année, où les développeurs choisissent le meilleur plugin à leur avis (et la vue est plutôt controversée). Par exemple, lors du dernier concours remporté, ne devinez jamais entrepreneur expandeur fonctionnel ... Il s'est avéré être un plugin que KILLS Undo supporte dans IDA ! Il n'y a tout simplement pas de mots. Les développeurs demandent cette fonctionnalité depuis si longtemps, mais jusqu'à GHIDRA que GHIDRA , personne ne voulait bouger le GHIDRA doigt. Et maintenant - veuillez supprimer la fonctionnalité intéressante avec le plugin - vous avez gagné, félicitations!


Le débogage des plugins est facile, surtout s'il a été écrit en C ++. Le débogage de scripts python ou IDC est plus difficile, et il n'y a aucun moyen officiel.


Une douleur très sévère dans l'anus a commencé lorsque l'API a été complètement réécrite dans la version 7.0 , la rendant incompatible avec les anciennes versions. D'une part, les noms des fonctions sont rendus plus clairs, les arguments supplémentaires sont supprimés, le développement est devenu plus facile. Mais, si vous, comme moi, avez développé des plugins pour les versions 6.x , et que vous deviez transférer votre idée originale vers un nouveau SDK, alors vous avez eu un mal de tête.


Et puis dans la version 7.1 , des changements se sont produits à nouveau, et tout a dû être réparé d'une nouvelle manière.


4. Extensibilité des fonctionnalités (GHIDRA)


Ghidra écrit en Java (avec un décompilateur en C++ ), avec prise en charge Python scripts Python (via Jython ). GhidraDev plugin GhidraDev pour Eclipse est inclus dans le package standard, vous permettant de créer des modèles de projet (qui peuvent être importés ultérieurement dans IntelliJ IDEA ). La saisie semi-automatique dans l'EDI et la documentation fonctionnent correctement et il faut une demi-heure pour comprendre comment écrire votre premier plug-in.


De plus, dans la livraison de base, il existe de nombreux scripts qui ont été écrits pour presque toutes les applications possibles. Ils peuvent également être corrigés si nécessaire.


L'utilisation d' Eclipse pratique pour déboguer vos projets pendant le développement.


5. Documentation (IDA)


IDA documentation de l' IDA est son point faible, et c'est le cas depuis longtemps. Comme avec la plupart des développeurs, le parti pris va à la fonctionnalité plutôt qu'à sa documentation. D'où le maigre fichier HLP entrant dans la livraison.


Le livre " IDA Pro Book " n'a pas été écrit par les développeurs et n'est sorti que pour la 6ème version. Depuis lors, aucun nouveau livre n'a été publié, il n'y a pas de manuels pour développer des plugins de développeurs.


Quelque part de la version 7.0 documentation a commencé à devenir une version Web et une mauvaise description des fonctions API du SDK.




5. Documentation (GHIDRA)


Contrairement à Ida, la documentation d'Hydra a été écrite simultanément avec le développement. À partir d'ici, nous avons des commentaires sur presque toutes les fonctions d'API appelées, éléments d'énumération et classes. Le fichier d'aide fourni avec la livraison et décrivant l'interface et les paramètres d'Hydra est également réalisé de manière solide, avec des captures d'écran et des exemples pour, en fait, chaque bouton ou élément de menu.




6. Débogueur (IDA)


OUI, il l'est. Et ça marche. Windows, Linux, MacOS, plus la possibilité de se connecter via gdb . Concernant ce dernier: pour la plupart des plates-formes non standard, j'ai dû écrire mon propre module de débogage, il y a maintenant la possibilité de déboguer via gdb pour des plates-formes telles que: x86 / x64 , ARM / AArch64 , PowerPC , MIPS , Motorola 68k , Infineon TriCore , Renesas RH850 . Liste complète ici: https://hex-rays.com/products/ida/debugger/index.shtml#details


6. Débogueur (GHIDRA)


Hélas, il n'y a pas encore de débogueur dans le domaine public. Les quais sur WikiLeaks mentionnaient certains modules de débogage. Néanmoins, on sait que la NSA y travaille, et il y aura un débogueur!


En attendant, grâce à des plugins qui étendent les capacités de l'interface, il est possible d'écrire votre propre débogueur. Mais apparemment, personne ne fait ça.


7. Vitesse de travail (IDA)


Sur les gros fichiers, Ida gonfle beaucoup moins d'hydre, mais pas toujours. L'analyseur Ida fonctionne en mode monothread et sur les gros fichiers, un cœur est entièrement chargé tandis que les autres sont inactifs. Dans un avenir proche, les auteurs ne vont pas changer cela (d'après les mots des développeurs).


7. Vitesse de travail (GHIDRA)


Lorsque la conversation entre les deux inverseurs vient discuter de la vitesse de ces Ida et Hydra, tout le monde arrive à la conclusion qu'Hydra prend beaucoup de temps pour traiter de gros fichiers. Bien qu'il soit écrit en tenant compte du multithreading. Et Java blâmer: plus pour multiplateforme, moins pour vitesse. Cependant, si vous configurez la quantité de mémoire, la pile et le tas pour la JVM , ainsi que le nombre de threads, le travail est légèrement accéléré.


8. Convivialité (IDA)


Sans aucun doute, beaucoup de gens connaissent par cœur les raccourcis clavier d'Ida. Ils sont simples et directs, souvent intuitifs. De nombreux éléments de menu et fonctionnalités d'Ida peuvent être appelés à partir du clavier, ce qui est très pratique.


En ce qui concerne l'apparence, jusqu'à une version 6.x une interface graphique auto-écrite a été utilisée. De plus, les développeurs sont complètement passés à Qt . L'interface est devenue définitivement plus agréable. L'emplacement des onglets, boutons et éléments d'interface n'a pas changé depuis très longtemps.


De là, les avantages et les inconvénients suivent. Avantages - l'interface est familière, vous n'avez pas besoin de chercher où elle se trouve et de combattre les habitudes. Inconvénients - certains éléments restent rudimentaires (l'éditeur de structure ressemble à un héritage des anciennes versions d'Ida) ou ne sont pas utilisés 90% du temps.



8. Commodité du travail (GHIDRA)


Tout est exactement le contraire. Un nouveau produit sur le marché, la différence de raccourcis clavier par rapport à Ida, fait son travail. La vitesse de travail, qui pendant longtemps a travaillé avec Ida a atteint une vitesse énorme, a commencé à s'affaisser à Hydra. Mais, bien sûr, avec un travail prolongé dans les dernières habitudes apparaissent également, et cela ne devient pas si difficile.


Hydra possède de nombreux menus, dont le nombre d'éléments est parfois assez important, et tous les éléments ne disposent pas de touches de raccourci. Mais en même temps, le configurateur de paramètres de raccourci clavier vous permet de suspendre votre propre raccourci clavier sur presque toutes les commandes.


Parce que Ghidra écrit en Java , les développeurs ont utilisé les fonctionnalités de base du JDK , à savoir Swing . Pour cette raison, nous avons ce que nous avons. Mais cela ne peut pas être appelé un moins d'Hydra.


9. Sortie de nouvelles versions (IDA)


Avez-vous remarqué qu'avec la sortie d'Hydra, les nouvelles versions d'Ida ont commencé à sortir plus souvent? Mais j’ai regardé de près. Tu sais pourquoi? Bien sûr, le point est la concurrence. Enfin, elle est apparue!

Auparavant, les nouvelles versions d'Ida étaient rarement publiées; Ida est très réticente à acquérir de nouvelles fonctionnalités. Après avoir signalé un bug, vous ne devez pas vous attendre à ce que la correction que les développeurs vous ont envoyée apparaisse très bientôt chez vos collègues. Il n'y a pas de correctifs système, car les développeurs corrigent les fichiers principaux pour chaque client (filigrane).


Il semble que la vitesse de sortie des nouvelles versions d'Ida augmentera en raison de la concurrence des produits.


9. Sortie de nouvelles versions (GHIDRA)


La régularité de la sortie des nouvelles versions d'Hydra est assez importante: environ six versions ont été publiées depuis la publication de la source.


Si vous attendez longtemps pour une nouvelle version de distribution, vous pouvez créer une branche principale avec github . La première fois, cela prendra plus d'une heure, mais ça vaut le coup.


10. La difficulté d'obtenir un kit de distribution (IDA)


Tout le monde connaît cette histoire: " Ilfak Gilfanov - combattez la piraterie! ". Pour cette raison, l'accès aux versions Pro et Starter des kits de distribution à l'achat est devenu très difficile et morne. Pour les simples mortels qui n'ont pas accès à argent fou boîtes aux lettres ne se trouvant pas sur des serveurs de messagerie publics tels que gmail , mail.ru , etc., les distributions ne sont pas possibles. Et, même si vous avez votre propre adresse IP, votre site Web, vous devrez passer par de nombreux contrôles, envoyer des analyses, des confirmations, etc. Et tout pour que la distribution ne soit pas publiée sur Internet. Cela n'aide pas toujours.


Des versions exaltées apparaissent, mais rarement. Par conséquent, la plupart des passionnés de rétro-ingénierie sont assis sur d'anciennes distributions une fois fusionnées d' ESET et d'antivirus chinois.


Il n'y a pas si longtemps, des versions officielles, mais tronquées pour les étudiants ont commencé à apparaître, sans décompilateurs, et de nombreuses autres restrictions (plus de détails ici ).


10. Difficulté à obtenir une distribution (GHIDRA)


Il semblerait qu'il n'y ait rien à écrire du tout, mais. En fait, l'accès au site principal d'Hydra est interdit depuis la Russie, Israël et la Chine. Besoin d'un VPN ou Tor (vitesse de téléchargement appropriée). Il n'y a pas de versions sur github , seulement des codes sources.


11. Support (IDA)


Combien j'ai dû communiquer avec le support Hex-Rays , il y a toujours eu une expérience différente: certaines des personnes qui travaillent dans le support sont très polies et toujours prêtes à aider. Partie: Le développeur principal, et la communication est devenue désagréable. Surtout si l'avis ne coïncidait pas. Mais c'est probablement la nature de tout cela. La même chose est en communication avec les utilisateurs sur Internet.


Récemment, il s'est avéré que je communique uniquement avec le soutien de mes amis. Un très ancien bogue lié à la perte de sélection lors du défilement, apparu dans la version 6.6, que tout le monde connaît, n'a jamais été avarié par les développeurs. Il a demandé quel était le problème. Et les réponses sont dans le style de: "Je ne veux pas communiquer avec une personne qui traite les utilisateurs de cette façon ." Hélas, la réputation fonctionne de cette façon.


Néanmoins, les bugs et suggestions que j'ai signalés aux développeurs ont été corrigés et pris en compte (pas tous).


11. Assistance (GHIDRA)


Hydra a un référentiel sur github . Il y a des issues - issues , et c'est là que vous devez signaler les bogues. La vitesse de réponse à certains peut être très longue ou assez rapide. Mais, les bogues ne se ferment pas comme ça, disent-ils, nous ne voulons pas l'implémenter. Tout est considéré, pris en compte. Tout le monde peut contribuer.


PR . .


12. (IDA)


, . , -, . , , , .


12. (GHIDRA)


: ghidra.re , -, @GHIDRA , github. , .


13. (IDA)


. , , , -, .


13. (GHIDRA)


. -, .


Conclusions


. , - . , Linux — // , , .


/ IDA . , . .


, , Ghidra . IDA — .


— . . , Ghidra , IDA — . , , IoT — . .


, , . Je vous remercie


PS .
PPS 2 - .
PPPS . . netch80 .

Source: https://habr.com/ru/post/fr480824/


All Articles