Est-il possible de «décompiler» un Windows .exe? Ou au moins voir l'Assemblée?


237

Un de mes amis a téléchargé des logiciels malveillants sur Facebook, et je suis curieux de voir ce qu'il fait sans me contaminer. Je sais que vous ne pouvez pas vraiment décompiler un .exe, mais puis-je au moins le visualiser dans Assembly ou attacher un débogueur?

Modifiez pour dire que ce n'est pas un exécutable .NET, pas d'en-tête CLI.


3
malware de facebook ?? pourriez-vous expliquer cela
Aditya Mukherji

Désolé pour la réponse super tardive ... mais la façon dont je pense que c'est arrivé: elle a lancé un logiciel malveillant, qui à un moment donné a spammé tous ses contacts sur FB (moi) avec un lien vers une "vidéo" qui vous a demandé téléchargez un "nouveau codec". Je suppose qu'il s'est comporté comme un ver dans ce sens.
swilliams

Réponses:


448

Avec un débogueur, vous pouvez parcourir l'assembly du programme de manière interactive.
Avec un désassembleur , vous pouvez afficher l'ensemble du programme plus en détail.
Avec un décompilateur , vous pouvez reconvertir un programme en code source partiel, en supposant que vous savez dans quoi il a été écrit (que vous pouvez découvrir avec des outils gratuits tels que PEiD - si le programme est compressé, vous devrez d'abord le décompresser OU Détectez-le si vous ne trouvez pas PEiD n'importe où. DIE dispose actuellement d'une solide communauté de développeurs sur github ).

Débogueurs:

  • OllyDbg , gratuit, un bon débogueur 32 bits, pour lequel vous pouvez trouver de nombreux plugins et scripts créés par l'utilisateur pour le rendre encore plus utile.
  • WinDbg , gratuit, un débogueur tout à fait capable par Microsoft. WinDbg est particulièrement utile pour regarder les composants internes de Windows, car il en sait plus sur les structures de données que les autres débogueurs.
  • SoftICE , SICE aux amis. Le commerce et le développement ont cessé en 2006. SoftICE est une sorte d'outil hardcore qui tourne sous le système d'exploitation (et arrête tout le système lorsqu'il est appelé). SoftICE est toujours utilisé par de nombreux professionnels, bien qu'il puisse être difficile à obtenir et ne pas fonctionner sur certains matériels (ou logiciels - à savoir, il ne fonctionnera pas sur les cartes gfx Vista ou NVIDIA).

Démonteurs:

  • IDA Pro (commercial) - désassembleur / débogueur haut de gamme. Utilisé par la plupart des professionnels, comme les analystes de logiciels malveillants, etc. coûte cependant pas mal d'argent (il existe une version gratuite , mais elle est assez limitée)
  • W32Dasm (gratuit) - un peu daté mais fait le travail. Je crois que W32Dasm est un abandonware ces jours-ci, et il existe de nombreux hacks créés par les utilisateurs pour ajouter des fonctionnalités très utiles. Vous devrez regarder autour de vous pour trouver la meilleure version.

Décompilateurs:

  • Visual Basic: VB Decompiler , commercial, produit un bytecode quelque peu identifiable.
  • Delphi: DeDe , gratuit, produit un code source de bonne qualité.
  • C: HexRays , commercial, un plugin pour IDA Pro par la même société. Produit de grands résultats mais coûte beaucoup d'argent, et ne sera pas vendu à n'importe qui (ou du moins j'entends).
  • .NET (C #): dotPeek , gratuit, décompile les assemblys .NET 1.0-4.5 en C #. Prise en charge des fichiers .dll, .exe, .zip, .vsix, .nupkg et .winmd.

Certains outils connexes qui peuvent être utiles dans tout ce que vous faites sont des éditeurs de ressources tels que ResourceHacker (gratuit) et un bon éditeur hexadécimal tel que Hex Workshop (commercial).

De plus, si vous effectuez une analyse de logiciels malveillants (ou utilisez SICE) , je vous suggère de tout exécuter sur une machine virtuelle, à savoir VMware Workstation . Dans le cas de SICE, il protégera votre système actuel contre les BSOD, et dans le cas de logiciels malveillants, il protégera votre système réel du programme cible. Vous pouvez lire sur l'analyse des logiciels malveillants avec VMware ici .

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

N'oubliez pas non plus que le démontage ou même le débogage des logiciels d' autres personnes est généralement contraire au CLUF :)


16
J'apprécie le dernier paragraphe dans sa généralité, de bons conseils, mais il est amusant dans le contexte de la question: je doute qu'un virus soit accompagné d'un CLUF! ;-)
PhiLho

4
En fait, certains logiciels malveillants et même des chevaux de Troie récemment ont eu des CLUF (oh, ces russes ..) Bien sûr, ils peuvent être (et sont) ignorés par les recherches, car on peut supposer que personne ne se manifestera pour les poursuivre. .. En outre, ils sont généralement trop mal écrits pour signifier quoi que ce soit au tribunal dans tous les cas.
anon6439

2
Notez que la version précédente d'IDA Pro est gratuite pour une utilisation non commerciale.
Simon Buchan

6
Notez que la plupart des logiciels malveillants de nos jours (au moins les logiciels malveillants compilés) peuvent facilement détecter s'ils s'exécutent dans VMWare, Virtual PC, WINE, VirtualBox, etc.
Mick

Si vous utilisez une machine virtuelle, faites attention à l'attaque Blue Pill.
Siqi Lin

44

L'excellent post de psoul répond à votre question, donc je ne reproduirai pas son bon travail, mais je pense que cela aiderait à expliquer pourquoi c'est à la fois une question parfaitement valide mais aussi terriblement stupide. Après tout, c'est un endroit pour apprendre, non?

Les programmes informatiques modernes sont produits par une série de conversions, commençant par l'entrée d'un corps d'instructions textuelles lisibles par l'homme (appelé "code source") et se terminant par un corps d'instructions lisibles par ordinateur (appelé alternativement "binaire" ou "machine" code").

La façon dont un ordinateur exécute un ensemble d'instructions de code machine est finalement très simple. Chaque action qu'un processeur peut entreprendre (par exemple, lire dans la mémoire, ajouter deux valeurs) est représentée par un code numérique. Si je vous disais que le numéro 1 signifiait crier et le numéro 2 signifiait rire, puis que je tenais des cartes avec 1 ou 2 sur eux s'attendant à ce que vous criiez ou riez en conséquence, j'utiliserais ce qui est essentiellement le même système qu'un ordinateur utilise opérer.

Un fichier binaire n'est qu'un ensemble de ces codes (généralement appelés "codes op") et les informations ("arguments") sur lesquels les codes op agissent.

Désormais, le langage d'assemblage est un langage informatique dans lequel chaque mot de commande du langage représente exactement un code opérationnel sur le processeur. Il existe une traduction directe 1: 1 entre une commande en langage assembleur et un code op du processeur. C'est pourquoi l'assemblage de codage pour un processeur x386 est différent de l'assemblage de codage pour un processeur ARM.

Le désassemblage est simplement ceci: un programme lit le binaire (le code machine), remplaçant les op-codes par leurs commandes de langage d'assemblage équivalentes, et sort le résultat sous forme de fichier texte. Il est important de comprendre cela; si votre ordinateur peut lire le binaire, vous pouvez également lire le binaire, soit manuellement avec une table d'op-code dans votre main (ick) ou via un désassembleur.

Les désassembleurs ont de nouvelles astuces et tout, mais il est important de comprendre qu'un désassembleur est finalement un mécanisme de recherche et de remplacement. C'est pourquoi tout CLUF qui l'interdit souffle finalement de l'air chaud. Vous ne pouvez pas autoriser immédiatement l'ordinateur à lire les données du programme et également 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 fonctionnent aussi bien que DRM sur les fichiers de chansons.)

Cependant, il y a des réserves à l'approche de démontage. Les noms de variables sont inexistants; une telle chose n'existe pas sur votre CPU. Les appels à la bibliothèque prêtent à confusion et nécessitent souvent le démontage d'autres fichiers binaires. Et l'assemblage est difficile à lire dans les meilleures conditions.

La plupart des programmeurs professionnels ne peuvent pas s'asseoir et lire le langage d'assemblage sans avoir mal à la tête. Pour un amateur, cela n'arrivera tout simplement pas.

Quoi qu'il en soit, c'est une explication quelque peu superflue, mais j'espère que cela aide. Chacun peut se sentir libre de corriger toute anomalie de ma part; cela fait longtemps. ;)


1
Cela élabore sur le démontage, mais j'aimerais entendre une élaboration sur la décompilation. Est-il susceptible d'être tout aussi infructueux? Quelles sont les mises en garde?
Prometheus

@has: La décompilation du code natif est un défi assez difficile, souvent impossible. Les optimiseurs sont extrêmement agressifs, traduisant fréquemment le code source en rien du tout. Vous ne pouvez rien décompiler.
2018


11

Tout débogueur décent peut le faire. Essayez OllyDbg . (edit: qui a un grand désassembleur qui décode même les paramètres des appels WinAPI!)




6

Si vous essayez simplement de comprendre ce que fait un malware, il pourrait être beaucoup plus facile de l'exécuter sous quelque chose comme l'outil gratuit Process Monitor qui signalera chaque fois qu'il essaie d'accéder au système de fichiers, au registre, aux ports, etc.

De plus, l'utilisation d'une machine virtuelle comme le serveur VMWare gratuit est très utile pour ce type de travail. Vous pouvez créer une image "propre", puis y revenir chaque fois que vous exécutez le logiciel malveillant.


4

Vous pouvez obtenir des informations en les visualisant dans l'assembly, mais je pense que la chose la plus simple à faire est de démarrer une machine virtuelle et de voir ce qu'elle fait. Assurez-vous de ne pas avoir de partages ouverts ou quoi que ce soit de semblable à travers lesquels;)


Ouais, j'y ai pensé, mais je préfère ne pas passer par les tracas de la mise en place d'une VM juste pour la tuer :)
swilliams

1
Certes, c'est un problème pour ce cas, mais je trouve toujours utile de garder une machine virtuelle pour tester de nouveaux logiciels ou des trucs comme ça. Je peux ensuite faire ce que je veux et choisir de ne pas enregistrer l'état à la fin et de revenir à la machine virtuelle propre pour la prochaine exécution.
Rob Prouse

4

Boomerang peut également être utile de vérifier.


Pas vraiment. il se bloque et brûle pour quelque chose de plus compliqué que les exécutables les plus triviaux.
shoosh


3

Je ne peux pas croire que personne n'ait encore rien dit sur Immunity Debugger .

Immunity Debugger est un outil puissant pour écrire des exploits, analyser des logiciels malveillants et inverser les fichiers binaires. Il était initialement basé sur le code source d'Ollydbg 1.0, mais avec le bug de résolution des noms corrigé. Il dispose d'une API Python bien prise en charge pour une extensibilité facile, vous pouvez donc écrire vos scripts python pour vous aider dans l'analyse.

En outre, il y en a un bon que Peter de l'équipe Corelan a écrit appelé mona.py , excellent outil btw.


2

Si vous souhaitez exécuter le programme pour voir ce qu'il fait sans infecter votre ordinateur, utilisez-le avec une machine virtuelle comme VMWare ou Microsoft VPC, ou un programme qui peut sandboxer le programme comme SandboxIE




2

Je dirais qu'en 2019, Ghidra ( https://ghidra-sre.org/ ) vaut le détour. Il est open source (et gratuit) et possède des capacités d'analyse de code phénoménales, y compris la possibilité de décompiler tout le chemin vers un code C assez lisible.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.