Decompilers


Original: http://www.backerstreet.com/decompiler/decompilers.htm

Un décompilateur tente de traduire un fichier objet dans un fichier source compilable. Il ya beaucoup de décompilateurs pour C # ou Java, mais seulement quelques-uns pour C / C ++. Voir en particulier:

  • C4Decompiler: Une nouvelle decompiler en cours de développement. Windows uniquement, dispose d’une interface utilisateur lisse inspiré de Visual Studio 2010 avec de nombreuses interactions utiles, qui ne sont malheureusement pas toujours évident. Il faut faire un clic droit pour les découvrir. L’analyse semble très bonne, au moins pour l’exemple de débogage compilé inclus dans l’installation. Essayer sur exécutables aléatoires du dossier Windows a eu des résultats mitigés, à partir de la fin de l’analyse à des accidents à des boucles sans fin.
    Néanmoins, il est très prometteuse, car ses auteurs ont clairement mis beaucoup de réflexion et d’efforts à son développement.
  • Boomerang: open source C decompiler. Ensemble très avancé d’analyses qui tentent de résoudre les problèmes les plus difficiles décompilateurs. La qualité du code généré est très variable: certaines fonctions sont presque parfaits dans leur représentation de la structure du code, les variables locales et les types. Autres fonctions semblent très assombris par le nombre de variables et de leurs utilisations. Il est également assez fragile, comme il se bloque souvent avec de grands programmes.
  • REC: Mon propre décompilateur C pour Linux, DOS et Windows. La première decompiler pour travailler sur plusieurs plates-formes et qui prend en charge plusieurs processeurs (x86 16 et 32 bits, MIPS, 680×0, PowerPC). Il est très stable, comme il a été testé avec des centaines de programmes. La qualité de la production est pas aussi bon que Boomerang de, depuis sa mise en œuvre est basée sur le style de codage 20 ans (lire très difficile d’étendre). Je suis maintenant publié une nouvelle version, RecStudio 4, qui prend en charge les exécutables 64 bits. Il n’a pas été testé sur autant de fichiers exécutables, de sorte que les problèmes demeurent. De plus, les différentes analyses effectuées (SSA), génèrent du code totalement différent qui parfois peut sembler d’une qualité bien pire (même si elle est probablement plus correct), que le code généré par la version précédente.
  • Rayons Hex: un plug-in pour decompiler IDA Pro. La combinaison avec des capacités avancées de démontage de l’IDA et débogueur d’exécution en font le choix idéal. Toutefois, il est encore très jeune, et nécessite IDA Pro. Contrairement aux autres decopilers, il est pas gratuit. Il a aussi pour résister à l’épreuve du temps en termes de stabilité. Très prometteur.
  • DCC: DOS à C decompiler. L’une des premières décompilateurs. Il montre son âge, mais il est toujours référencé par de nombreux autres décompilateurs pour ses capacités de structuration. Ne supporte que 8086 (16 bits) des programmes.
  • Plus d’informations sur d’autres décompilateurs à la transformation de programme Wiki sur la décompilation

Voici une comparaison des différents décompilateurs:

Decompiler plate-forme Cibles Support Support du format binaire lot recompilable Recompilable
Output
Structuration Variables Types Notes
C4Decompiler Windows IA64 PE-COFF de Interactive GUI Non Très bon Bon Passable
Boomerang Windows / Linux IA32MIPSPPC ELF
PE-COFF
Mac OS
Batch avec
GUI frontal
Non Très bon Bon Très bon
REC Windows / Linux IA32
IA64
MIPS
PPC
mc68k ELF
PE-COFF
AOUT
RAW
PS-X
batch / interactive Non Bon Foire partiel
Dcc Windows 8086 Batch DOS.com Non Bon Juste Mauvais
Hex Rays Windows ? ? Interactive ? ? ? ?

Test Decompilers

La qualité d’un decompiler est basé sur la qualité du code qu’il génère est, et comment il effectue en présence de l’entrée «inattendu».

Problèmes difficiles se posent en particulier par l’utilisation des optimisations du compilateur qui rendent le code d’entrée très structurée et difficile à comprendre, même pour un être humain. Manipulation des cas suivants définit la qualité d’un décompilateur:

Aucune information sur les noms de symbole dans le fichier binaire (exécutable dépouillé)

Vs statique fichiers exécutables liés dynamiquement (mode d’utilisation de l’appariement par rapport aux informations dynamiques de liaison pour identifier l’accès aux fonctions de la bibliothèque)

Comments are closed.