312 votes

Est-il possible de « décompiler » un .exe Windows ? Ou au moins afficher l’assemblage ?

Un de mes amis téléchargé certains programmes malveillants de Facebook, et je suis curieux de voir ce qu’il fait sans infecter moi-même. Je sais que vous ne pouvez pas décompiler vraiment un .exe, mais puis-je au moins voir en Assemblée ou attacher un débogueur ?

Edit pour dire que ce n’est pas un .NET exécutable, aucun en-tête CLI.

582voto

anon6439 Points 1299

Avec un débogueur , vous pouvez parcourir le programme de l'assemblée de manière interactive.
Avec un désassembleur, vous pouvez afficher le programme de l'assemblée de façon plus détaillée.
Avec un décompilateur, que vous pouvez activer un programme de retour partielle dans le code source, en supposant que vous savez ce qu'il a été écrit (que vous pouvez trouver avec des outils libres tels que les PEiD - si le programme est rempli, vous devrez décompresser d'abord).

Débogueurs:

  • OllyDbg, gratuit, une amende débogueur, pour lequel vous pouvez trouver de nombreux utilisateurs plugins et scripts pour la rendre plus utile.
  • WinDbg, gratuit, un tout à fait capable de débogueur par Microsoft. WinDbg est particulièrement utile pour la recherche à l'interne Windows, car il en sait plus sur les structures de données que les autres débogueurs.
  • SoftICE, SICE à des amis. Commerciale et de développement arrêté en 2006. SoftICE est une sorte de hardcore outil qui s'exécute sous le système d'exploitation (et les arrêts de l'ensemble du système lorsqu'il est invoqué). SoftICE est encore utilisé par de nombreux professionnels, bien que peut-être difficiles à obtenir, et pourrait ne pas fonctionner sur certains matériels (ou de logiciel, à savoir, il ne fonctionne pas sur Vista ou NVIDIA cartes gfx).

Désassembleurs:

  • IDA Pro, commerciaux, haut de la ligne désassembleur/débogueur. Utilisé par la plupart des professionnels, comme les analystes de logiciels malveillants, etc. Les coûts tout à fait un peu d'argent.
  • W32Dasm, libre, un peu daté, mais fait le travail. Je crois W32Dasm est abandonware ces jours, et il y a de nombreuses créé par l'utilisateur, des hacks pour ajouter un peu de fonctionnalité très utile. Vous aurez à regarder autour pour trouver la meilleure version.

La décompilation:

  • Visual Basic: VB Decompiler, commercial, produit un peu identifiables bytecode.
  • Delphi: Dédé, gratuit, produit de bonne qualité du code source.
  • C: HexRays, commerciale, un plugin pour IDA Pro par la même société. Produit d'excellents résultats, mais les coûts d'un big buck, et ne seront pas vendues à n'importe qui (ou alors, j'entends).
  • .NET(C#): dotPeek, gratuit, la décompilation .NET 1.0-4.5 assemblées en C#. Soutien pour .dll, .exe, .zip, .vsix, .nupkg, et .winmd fichiers.

Quelques outils qui pourraient être utile en quoi que ce soit que vous faites sont des ressources des éditeurs tels que ResourceHacker (gratuit) et d'un bon éditeur hexadécimal comme Hex Workshop (commercial).

En outre, si vous faites de l'analyse de logiciels malveillants (ou utilisez SICE), de tout cœur je vous suggère de course de tout à l'intérieur d'une machine virtuelle, à savoir VMware Workstation. Dans le cas de SICE, il permettra de protéger votre système de Bsod, et dans le cas de logiciels malveillants, il permettra de protéger votre système à partir de la cible du programme. Vous pouvez lire sur l'analyse des logiciels malveillants avec VMware ici.

Personnellement, je roule avec Olly, WinDbg & W32Dasm, et quelques petits outils utilitaire.

Aussi, n'oubliez pas que le démontage ou même le débogage d'autres personnes du logiciel est généralement contre le CLUF à tout le moins :)

58voto

Jason L Points 2051

psoul l'excellent post de réponses à votre question, donc je ne vais pas reproduire son bon travail, mais j'ai l'impression qu'il faudrait aider à expliquer pourquoi c'est à la fois parfaitement valide, mais aussi terriblement stupide question. Après tout, ce est un endroit pour apprendre, non?

Des programmes informatiques sont produits par une série de conversions, en commençant par l'entrée de l'lisible par l'homme, corps de texte des instructions (appelé "code source") et se terminant avec un ordinateur lisible par l'ensemble des instructions (appelé alternativement "binaire" ou "code machine").

La manière qu'un ordinateur exécute un ensemble de code machine des instructions est finalement très simple. Chaque action d'un processeur peut prendre (p. ex., lire à partir de la mémoire, de l'ajout de deux valeurs) est représenté par un code numérique. Si je vous dit que le numéro 1 destiné à hurler et le chiffre 2 signifie pouffer de rire, et a ensuite tenu jusqu'cartes avec 1 ou 2, sur eux vous attend à crier ou rire en conséquence, je serais à l'aide de ce qui est essentiellement le même système d'un ordinateur pour fonctionner.

Un fichier binaire est juste un de ces codes (l'habitude de les appeler "op codes") et l'information (les"arguments") que l'op codes de loi.

Maintenant, le langage assembleur est un langage informatique où chaque mot de commande dans la langue représente exactement une op-code sur le processeur. Il existe un rapport direct 1:1 de traduction entre un langage d'assemblage de commande et d'un processeur op-code. C'est pourquoi le codage de l'assemblée pour un x386 processeur est différent de celui de codage de l'assemblée d'un processeur ARM.

Le démontage est simple: un programme lit dans le binaire (code machine), en remplacement de l'op-codes avec leur équivalent en langage d'assemblage des commandes, et renvoie le résultat dans un fichier texte. Il est important de comprendre cela, si votre ordinateur peut lire le binaire, vous pouvez lire le binaire, soit manuellement avec une op-table de code dans votre main (ick) ou par le biais d'un désassembleur.

Désassembleurs avoir quelques nouvelles astuces et de tous, mais il est important de comprendre qu'un désassembleur est, finalement, une recherche et remplacer le mécanisme. C'est pourquoi toute CLUF qui l'interdit est en fin de compte à de l'air chaud. Vous ne pouvez pas à la fois permettre à l'ordinateur de lire les données du programme et aussi d'interdire à l'ordinateur de lire les données du programme.

(Ne vous méprenez pas, il y a eu des tentatives pour le faire. Ils travaillent ainsi que les DRM sur les fichiers de musique.)

Cependant, il y a des bémols pour le démontage de l'approche. Les noms de variables sont inexistants; une telle chose n'existe pas de votre CPU. La bibliothèque des appels sont source de confusion comme l'enfer et nécessitent souvent de démonter plus binaires. Et l'assemblage est dur comme l'enfer à lire dans les meilleures conditions.

La plupart des programmeurs professionnels ne peuvent pas s'asseoir et lire de l'assemblée de la langue sans avoir des maux de tête. Pour un amateur, c'est juste ne va pas arriver.

De toute façon, c'est un peu passée sous silence-plus d'explication, mais j'espère que cela aide. Tout le monde peut se sentir libre de corriger toute inexactitude de ma part; il a été un moment. ;)

21voto

Matthew Points 605

Bonne nouvelle. IDA Pro est effectivement gratuit pour ses anciennes versions maintenant : http://www.hex-rays.com/idapro/idadownfreeware.htm

12voto

utku_karatas Points 3513

N’importe quel débogueur décent pour ce faire. Essayez OllyDbg. (edit : qui a un grand désassembleur qui décode même les paramètres d’appels de WinAPI !)

6voto

Douglas Mayle Points 7216

Bien sûr, jetez un oeil à IDA Pro. Ils offrent une version eval, donc vous pouvez l’essayer.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X