42 votes

Y a-t-il des inconvénients à utiliser UPX pour compresser un exécutable Windows?

J'ai utilisé UPX avant de réduire la taille de mes exécutables Windows, mais je dois admettre que je suis naïf à des effets secondaires négatifs que cela pourrait avoir. Quel est l'inconvénient de tout cela l'emballage/déballage?

Existe-il des scénarios dans lesquels personne ne recommanderais PAS UPX-ing un fichier exécutable (par exemple, lors de l'écriture d'une DLL, Windows Service, ou lors du ciblage de Vista ou Win7)? J'écris la plupart de mon code en Delphi, mais j'ai utilisé UPX pour compresser C/C++ exécutables ainsi.

Sur une note de côté, je suis pas en cours d'exécution UPX dans une tentative pour protéger mon exe à partir d'désassembleurs, uniquement pour réduire la taille de l'exécutable et de prévenir l'altération superficielle.

48voto

Lars Truijens Points 24005

La raison en est qu'il ya certains inconvénients à à l'aide de EXE compresseurs. Plus particulièrement:

Lors du démarrage d'un comprimé EXE/DLL, tout le code est décompressé à partir de l'image disque en la mémoire en une seule passe, ce qui peut causer surcharge du disque si le système est faible sur mémoire et est obligé pour accéder à l' fichier d'échange. En revanche, avec non compressé EXE/Dll, le système d'exploitation alloue de la mémoire pour les pages de code sur de la demande (c'est à dire lorsqu'ils sont exécutés).

Plusieurs instances d'un comprimé EXE/DLL créer plusieurs les instances du code dans la mémoire. Si vous avez un comprimé EXE qui contient 1 MO de code (avant la compression) et que l'utilisateur commence à 5 instances de celui-ci, environ 4 MO de la mémoire est gaspillée. De même, si vous avoir une DLL qui est de 1 MO et il est utilisé par 5 applications en cours d'exécution, environ 4 MO de mémoire est gaspillé. Non compressés EXE/Dll, le code est uniquement stocké dans la mémoire une fois et est partagée entre les instances.

http://www.jrsoftware.org/striprlc.php#execomp

22voto

Oliver Giesen Points 5531

Je suis surpris que cela n'ait pas encore été mentionné, mais l'utilisation d'exécutables compressés UPX augmente également le risque de produire des faux positifs à partir d'un logiciel antivirus heuristique, car statistiquement, de nombreux logiciels malveillants utilisent également UPX.

15voto

user45336 Points 113

Il y a trois inconvénients:

  1. Tout le code sera entièrement non compressé en mémoire virtuelle, tandis que dans un EXE ou DLL, seul le code utilisé est chargé en mémoire. Cela est particulièrement pertinent si seulement une petite portion de code dans votre EXE/DLL est utilisée à chaque exécution.
  2. S'il existe plusieurs instances de votre DLL et EXE en cours d'exécution, leur code ne peut pas être partagé sur le cas, de sorte que vous serez en utilisant plus de mémoire.
  3. Si votre EXE/DLL est déjà dans le cache, ou sur un très rapide support de stockage, ou si le PROCESSEUR que vous utilisez sur est lent, vous ferez l'expérience de réduction de la vitesse de démarrage comme la décompression encore avoir lieu, et vous ne bénéficiez pas de la taille réduite. Cela est particulièrement vrai pour un EXE qui sera appelé à plusieurs reprises à plusieurs reprises.

Ainsi, les inconvénients ci-dessus sont de plus en plus un problème si votre EXE ou Dll contient beaucoup de ressources, mais sinon, ils peuvent ne pas être beaucoup d'un facteur dans la pratique, compte tenu de la taille relative des fichiers exécutables et de la mémoire disponible, à moins que vous parlez de Dll utilisées par lots de fichiers exécutables (comme le système Dll).

Pour dissiper certaines informations erronées dans les autres réponses:

  • UPX ne sera pas affecter votre capacité à exécuter prévention d'exécution des données protégées par des machines.
  • UPX n'affectera pas la capacité de anti-virus logiciel, comme ils soutiennent UPX-exécutables compressés (ainsi que d'autres exécutable formats de compression).
  • UPX a été en mesure d'utiliser la compression LZMA pour un certain temps maintenant (7zip de l'algorithme de compression), utilisez l'option --lzma commutateur.

10voto

Jim McKeeth Points 22637

La seule fois où les sujets de taille est en cours de téléchargement à partir d'Internet. Si vous utilisez UPX puis vous obtenez en fait de moins bonnes performances alors si vous utilisez 7-zip (basé sur mes tests 7-Zip est deux fois aussi bon que UPX). Puis, quand il est en fait à gauche compressé sur l'ordinateur cible, votre rendement est diminué (voir Lars réponse). Donc, UPX est pas une bonne solution pour la taille du fichier. Juste 7zip l'ensemble de la chose.

Jusqu'à empêcher l'altération, c'est un ÉCHEC aussi. UPX prend en charge la décompression trop. Si quelqu'un veut modifier l'EXE puis ils vont le voir, il est compress avec UPX, puis décompressez-le. Le pourcentage de possible craquelins vous pourriez ralentir ne justifie pas l'effort et la perte de performances.

Une meilleure solution serait d'utiliser les binaires de la signature ou au moins juste une table de hachage. Un simple hash système de vérification est de prendre un hash de votre binaire et une valeur secrète (généralement un guid). Seulement votre EXE connaît le secret de la valeur, de sorte que quand il recalcule la valeur de hachage pour vérification, il peut l'utiliser à nouveau. Ce n'est pas parfait (le secret de la valeur peut être récupérée). La situation idéale serait d'utiliser un certificat et une signature.

5voto

Greg Hewgill Points 356191

La taille finale de l'exécutable sur disque est largement hors de propos de nos jours. Votre programme peut charger quelques millisecondes plus rapidement, mais une fois qu'il commence à s'exécuter, la différence est impossible à distinguer.

Certaines personnes peuvent se méfier davantage de votre exécutable simplement parce qu'il est compressé avec UPX. Selon vos utilisateurs finaux, cela peut ou non être une considération importante.

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