web-dev-qa-db-fra.com

Est-il possible de "décompiler" un fichier Windows .exe? Ou du moins voir l'Assemblée?

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

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

215
swilliams

Avec un débogueur , vous pouvez parcourir le programme Assembly de manière interactive.
Avec un désassembleur , vous pouvez voir le programme Assembly plus en détail.
Avec un décompilateur , vous pouvez reconvertir un programme en code source partiel, en supposant que vous sachiez en quoi il a été écrit. découvrez-le avec des outils gratuits tels que PEiD - si le programme est compressé, vous devrez d'abord le décompresser OR Détecter -it-Easy si vous ne pouvez trouver aucun fichier PEiD. DIE a une communauté de développeurs forte sur github actuellement).

Débogueurs:

  • OllyDbg , gratuit, un excellent débogueur 32 bits, pour lequel vous pouvez trouver de nombreux plugins et scripts créés par les utilisateurs pour le rendre encore plus utile.
  • WinDbg , gratuit, un débogueur tout à fait capable de Microsoft. WinDbg est particulièrement utile pour examiner les éléments internes de Windows, car il en sait plus sur les structures de données que les autres débogueurs.
  • SoftICE , SICE aux amis. La commercialisation et le développement ont cessé en 2006. SoftICE est en quelque sorte un outil génial qui s’exécute 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 que cela puisse être difficile à obtenir et ne fonctionne pas sur certains matériels (ou logiciels - à savoir, cela ne fonctionnera pas sur les cartes Vista ou NVIDIA gfx).

Démonteurs:

  • IDA Pro (commercial) - désassembleur/débogueur haut de gamme. Utilisé par la plupart des professionnels, tels que les analystes de logiciels malveillants, etc. Coûte pas mal de dollars (il existe une version gratuite , mais c'est assez limité)
  • W32Dasm (gratuit) - un peu daté, mais le travail est fait. Je pense que W32Dasm est un abandonware ces temps-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 code unique quelque peu identifiable.
  • Delphi: DeDe , gratuit, produit un code source de bonne qualité.
  • C: HexRays , commercial, un plugin pour IDA Pro de la même société. Produit d'excellents résultats, mais coûte très cher et ne sera pas vendu à n'importe qui (ou à ce que j'entends dire).
  • .NET (C #): dotPeek , gratuit, décompile les assemblages .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 les éditeurs de ressources tels que ResourceHacker (free) et un bon éditeur hexadécimal tel que Atelier Hex (commercial).

En outre, si vous effectuez une analyse de malware (ou utilisez SICE) , je suggère de tout coeur de tout exécuter à l'intérieur d'une machine virtuelle, à savoir . VMware Workstation . Dans le cas de SICE, cela protégera votre système actuel des BSOD et, dans le cas des logiciels malveillants, de votre système actuel du programme cible. Vous pouvez en savoir plus sur l'analyse des logiciels malveillants avec VMware ici .

Personnellement, je roule avec Olly, WinDbg & W32Dasm et des outils utilitaires plus petits.

En outre, rappelez-vous que le démontage ou même le débogage autres personnes le logiciel est généralement contre le CLUF à tout le moins :)

405
anon6439

le post excellent de psoul répond à votre question, je ne vais donc pas reproduire son excellent travail, mais j'estime que cela aiderait à expliquer pourquoi c'est à la fois une question tout à fait valable 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, en commençant par la saisie d’un corps d’instructions textuelles lisibles par l’homme (appelé "code source") et en se terminant par un corps d’instructions lisibles par ordinateur (appelées 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 effectuer (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 chiffre 1 signifiait hurler et que le chiffre 2 signifiait rire, puis que je tenais les cartes avec 1 ou 2 sur celles-ci et s'attendant à ce que vous criiez ou pouffiez de rire en conséquence, j'utiliserais essentiellement le même système qu'un ordinateur opérer.

Un fichier binaire est simplement un ensemble de ces codes (généralement appelé "codes op") et des informations ("arguments") sur lesquelles les codes op agissent.

Le langage assembleur est un langage informatique dans lequel chaque commande Word dans la langue représente exactement un code d'opération sur le processeur. Il existe une traduction directe 1: 1 entre une commande de langue d'assemblage et un code d'opération de processeur. C'est pourquoi le codage Assembly pour un processeur x386 est différent du codage Assembly pour un processeur ARM.

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

Les désassembleurs ont de nouvelles astuces et tout, mais il est important de comprendre qu'un désassembleur est en fin de compte 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 à la fois permettre à l'ordinateur de lire les données du programme et également lui interdire de lire les données du programme.

(Ne vous méprenez pas, des tentatives ont été tentées. Ils fonctionnent aussi bien que DRM sur des fichiers de chansons.)

Cependant, l’approche de désassemblage doit être nuancée. Les noms de variables sont inexistants; une telle chose n'existe pas pour votre CPU. Les appels à la bibliothèque sont déroutants et nécessitent souvent le désassemblage de binaires supplémentaires. Et l’Assemblée 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, ça ne va tout simplement pas arriver.

Quoi qu'il en soit, il s'agit d'une explication quelque peu passée sous silence, mais j'espère que cela aidera. Tout le monde peut se sentir libre de corriger les inexactitudes de ma part; cela fait longtemps. ;)

41
Jason L

Bonnes nouvelles. IDA Pro est actuellement gratuit pour ses anciennes versions: http://www.hex-rays.com/idapro/idadownfreeware.htm

14
Matthew

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

11
utku_karatas

x64dbg est un bon débogueur à source ouverte qui est activement maintenu.

10
BullyWiiPlaza

Bien sûr, jetez un oeil à IDA Pro . Ils offrent une version eval afin que vous puissiez l'essayer.

6
Douglas Mayle

Ce que vous voulez, c'est un type de logiciel appelé "désassembleur".

Google rapide donne ceci: http://www.geocities.com/~sangcho/disasm.html

5
Corey Trager

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 tente d'accéder au système de fichiers, au registre, aux ports , etc...

En outre, utiliser une machine virtuelle telle que la version libre serveur VMWare 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 programme malveillant.

5
joeld

Vous obtiendrez peut-être des informations à ce sujet dans Assembly, mais je pense que la meilleure chose à faire est de lancer une machine virtuelle et de voir ce qu’elle fait. Assurez-vous de ne pas avoir de partages ouverts ou quelque chose du genre qui pourrait traverser;)

4
Rob Prouse

Boomerang peut également valoir le détour.

4
Andru Luvisi

Je ne peux pas croire que personne ne dise rien à propos de débogueur d'immunité , pour le moment.

Immunity Debugger est un outil puissant pour écrire des exploits, analyser des logiciels malveillants et procéder à un reverse engineering de fichiers binaires. Il était initialement basé sur le code source Ollydbg 1.0, mais le bogue de résolution des noms a été corrigé. Elle possède une API Python bien prise en charge pour une extensibilité aisée, vous permettant ainsi d’é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 et qui s'appelle mona.py , excellent outil d'ailleurs.

3
jyz

Vous pouvez utiliser dotPeek, très bon pour le fichier decompile exe. Ce est gratuit.

https://www.jetbrains.com/decompiler/

2
D Vy
2
plan9assembler

Si vous voulez exécuter le programme pour voir ce qu'il fait sans infecter votre ordinateur, utilisez-le avec une machine virtuelle telle que VMWare ou Microsoft VPC, ou un programme capable de mettre en sandbox le programme tel que SandboxIE

2
Joel Lucsy

Le suite Explorer peut faire ce que vous voulez.

0
FloatFish