Question EXE / DLL Windows: qu'est-ce qu'une "image compressée"


Process Explorer montre parfois un EXE comme "image compressée", mais qu'est-ce que cela signifie.

Ce que j’ai découvert est: Compiler un exe (en utilisant Visual C ++ 2010) avec /ZI l'option donne une image compactée, mais /Zi ne fait pas. Pourquoi une telle différence?

BTW: une DLL compilée avec /ZI est également considéré comme "image emballée" et marqué en violet.

enter image description here


10
2018-02-17 03:37


origine


Réponses:


Une "image compressée" est une image où le code exécutable est compressé avec l'intention de réduire la taille du fichier. La réduction de la taille de fichier typique oscille autour de 50%. Il utilise un "loader" à l'exécution pour décompresser les données en code exécutable avant de commencer à s'exécuter. Il était utile dans le passé avec une capacité de stockage limitée et une bande passante réseau limitée.

Aujourd'hui, avec les disques téraoctets et les réseaux mégabits, c'est une odeur, l'emballage peut également être exploité pour cacher des codes malveillants. Sûrement la raison pour laquelle Process Explorer la colore différemment.

L'heuristique exacte que PE utilise pour détecter le compactage n'est pas documentée. Bien sûr que non, cela le rendrait trop facile à contourner. Ce n'est pas anodin, il n'y a pas de moyen standard d'implémenter l'emballage. Grosso modo, il examinerait les sections du fichier exécutable et augmenterait le drapeau bleu quand une partie de celui-ci ressemblerait à du code non exécutable.

Et oui, quand vous utilisez / ZI, il y en aura beaucoup. Plus importante est l'option INCERMENTAL de l'éditeur de liens, activée automatiquement lorsque vous utilisez / ZI. Ce qui vous permet d'écrire du code lors du débogage, l'option Modifier + Continuer. Et relier rapidement le fichier exécutable sans que l'éditeur de liens n'ait à recréer complètement le fichier. Cela ne peut fonctionner que lorsqu'il y a beaucoup d'espace vide dans le fichier exécutable, disponible pour ajouter de nouveaux octets de code machine. C'est un drapeau bleu.

Ce n'est pas un problème bien sûr, votre utilisateur ne verra que la version de votre programme. Qui est construit sans / ZI et sans / INCREMENTAL.


10
2018-02-17 09:12



Du Code source du processus Hacker:

Une image est compressée si:

  1. Il fait référence à moins de 3 modules et
  2. Il importe moins de 5 fonctions et
  3. Il n'utilise pas le sous-système natif.

Ou:

  1. Le rapport fonction / module est inférieur à 3 (en moyenne, moins de 3 fonctions sont importées de chaque module), et
  2. Il référence plus de 2 modules mais moins de 6 modules.

Ou:

  1. Le rapport fonction / module est inférieur à 2 (en moyenne, moins de 2 fonctions sont importées de chaque module), et
  2. Il référence plus de 5 modules mais moins de 31 modules.

Ou:

  1. Il n’a pas de section nommée ".text".

Une image n'est pas considérée comme emballée si elle ne contient qu'une seule importation.   un module nommé "mscoree.dll".

Vous pouvez également consulter le code de configuration pour savoir si une image est probablement compressée ou non.


2
2018-01-16 09:00