Gibt es irgendwelche Nachteile zu UPX mit einem Windows ausführbaren Datei zu komprimieren?

stimmen
34

Ich habe verwendet UPX bevor die Größe meiner ausführbare Windows - Dateien zu reduzieren, aber ich muss zugeben , dass ich naiv bin auf negative Nebenwirkungen diese haben könnte. Was ist der Nachteil all dieser Packen / Entpacken?

Gibt es Szenarien, in denen jemand würde eine ausführbare Datei nicht UPX-ing (zB beim Schreiben einer DLL, Windows-Dienst, oder wenn Targeting Vista oder Win7) empfehlen? Ich schreibe die meisten meinen Code in Delphi, aber ich habe UPX verwendet, um C / C ++ ausführbare Dateien auch zu komprimieren.

Auf einer Seite zur Kenntnis, ich bin nicht UPX in irgendeinem Versuch laufe meine exe von Disassembler zu schützen, nur die Größe der ausführbaren Datei zu reduzieren und kursorisch Manipulationen verhindern.

Veröffentlicht am 09/12/2008 um 18:53
quelle vom benutzer
In anderen Sprachen...                            


12 antworten

stimmen
2

Das letzte Mal habe ich versucht, es auf einem verwalteten Assembly zu verwenden, ist es munged es so schlecht, dass die Laufzeit laden abgelehnt. Das ist das einzige Mal, dass ich mich vorstellen kann, dass Sie nicht wollen würden, es zu benutzen (und wirklich, es ist schon so lange her, habe ich versucht, dass die Situation jetzt noch besser sein kann). Ich habe es ausgiebig in der Vergangenheit auf allen Arten von nicht verwalteten Binärdateien verwendet, und hatte nie ein Problem.

Beantwortet am 09/12/2008 um 19:00
quelle vom benutzer

stimmen
4

Die endgültige Größe der ausführbaren Datei auf der Festplatte ist in diesen Tagen weitgehend irrelevant. Ihr Programm kann einige Millisekunden schneller geladen werden, aber sobald es den Unterschied beginnt zu laufen ist nicht zu unterscheiden.

Manche Menschen können mehr suspekt ausführbare Datei, nur weil es mit UPX komprimiert wird. Je nach Ihren Endbenutzer kann diese oder auch nicht eine wichtige Überlegung sein.

Beantwortet am 09/12/2008 um 19:05
quelle vom benutzer

stimmen
45

Der Grund ist, gibt es Nachteile zu EXE Kompressoren verwenden. Allen voran:

Beim Start einer komprimierten EXE / DLL, die gesamten Code aus dem Disk-Image in dem Speicher dekomprimiert in einem Durchgang, die Scheibe Dreschen verursachen kann, wenn das System wenig Speicher und ist gezwungen, die Auslagerungsdatei zuzugreifen. Im Gegensatz dazu mit unkomprimierten EXE / DLL, ordnet die OS-Speicher für Codeseiten auf Anfrage (dh, wenn sie ausgeführt werden).

Mehrere Instanzen eines komprimierten EXE / DLL erstellen mehrere Instanzen des Codes im Speicher. Wenn Sie eine komprimierte EXE, die 1 MB Code enthält (vor der Komprimierung) und der Benutzer beginnt, 5 Instanzen davon, ca. 4 MB Speicher verschwendet wird. Ebenso, wenn Sie eine DLL haben, die 1 MB ist und es um 5 Ausführen von Anwendungen verwendet wird, etwa 4 MB Speicher verschwendet wird. Mit unkomprimierten EXE / DLL wird der Code nur im Speicher einmal gespeichert und zwischen Instanzen gemeinsam genutzt.

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

Beantwortet am 09/12/2008 um 19:11
quelle vom benutzer

stimmen
9

Die einzige Zeit , die Größe ankommt ist während des Downloads aus dem Internet. Wenn Sie UPX verwenden , dann erhalten Sie tatsächlich eine schlechtere Leistung als bei Verwendung von 7-zip (basierend auf meinen Tests 7-Zip doppelt so gut wie UPX ist). Dann , wenn es tatsächlich auf dem Zielcomputer komprimierte gelassen wird Ihre Leistung verringert wird (siehe Lars' Antwort). So UPX ist keine gute Lösung für die Dateigröße. Nur 7zip die ganze Sache.

Soweit Änderungen zu verhindern, ist es ein FAIL auch. UPX unterstützt Dekomprimierung zu. Wenn jemand will , die EXE - Datei ändern , dann werden sie sehen , es mit UPX komprimieren wird und dann dekomprimieren. Der Prozentsatz der möglichen Cracker Sie nicht verlangsamen könnte nicht die Mühe und Leistungsverlust rechtfertigen.

Eine bessere Lösung wäre binäre Signierung zu verwenden oder zumindest nur einen Hash. Ein einfaches Hash-Verifizierungssystem ist eine Hash Ihrer binären und einen geheimen Wert zu nehmen (in der Regel ein guid). Nur Ihre EXE kennt den geheimen Wert, so dass, wenn es den Hash für die Überprüfung neu berechnet kann es wieder verwenden. Dies ist nicht perfekt (der geheime Wert abgerufen werden kann). Die ideale Situation wäre ein Zertifikat und eine Signatur zu verwenden.

Beantwortet am 09/12/2008 um 19:39
quelle vom benutzer

stimmen
0

Ich glaube , dass es eine Möglichkeit ist , dass es nicht auf Computern funktionieren könnte , die haben DEP (Data Execution Prevention) eingeschaltet.

Beantwortet am 09/12/2008 um 19:48
quelle vom benutzer

stimmen
2

Wenn Ihr einziges Interesse ist die Größe der ausführbaren Dateien in abnehmen, hat dann versucht, die Größe der ausführbaren Datei zu vergleichen mit und ohne Laufzeit-Packages? Zugegeben Sie müssen auch die Größe der Pakete beinhalten insgesamt zusammen mit der ausführbaren, aber wenn Sie mehrere ausführbare Dateien haben, die die gleichen Basispakete verwenden, dann würde Ihre Ersparnisse eher hoch.

Eine andere Sache zu betrachten würde die Grafik / Glyphen, die Sie in Ihrem Programm verwenden. Sie können sie zu einem einzigen TImageList ziemlich viel Platz sparen durch die Konsolidierung in einem globalen Datenmodul enthalten, anstatt sie auf jede Form wiederholt haben. Ich glaube, dass jedes Bild in Form Ressource als Hex gespeichert ist, so dass würde bedeuten, dass jedes Byte zwei Bytes einnimmt ... Sie diese ein wenig schrumpfen kann, indem das Bild von einer RCDATA Ressource Laden eines TResourceStream verwenden.

Beantwortet am 09/12/2008 um 22:32
quelle vom benutzer

stimmen
18

Ich bin überrascht, dies wurde noch nicht erwähnt, aber mit UPX-gepackten ausführbaren Dateien erhöht auch das Risiko von Erzeugung falsch-positive Ergebnisse aus heuristischer Anti-Virus-Software, weil statistisch eine Menge Malware UPX auch verwendet.

Beantwortet am 10/12/2008 um 11:04
quelle vom benutzer

stimmen
12

Es gibt drei Nachteile:

  1. Der gesamte Code wird im virtuellen Speicher vollständig dekomprimiert werden, während sie in einem regulären EXE oder DLL, eigentlich nur der Code verwendet wird, in dem Speicher geladen. Dies ist besonders relevant, wenn nur ein kleiner Teil des Codes in Ihre EXE / DLL bei jedem Lauf verwendet wird.
  2. Wenn es mehrere Instanzen Ihrer DLL und EXE Laufen sind, kann ihr Code nicht über die Instanzen gemeinsam genutzt werden, so dass Sie mehr Speicher verwenden.
  3. Wenn Ihre EXE / DLL bereits im Cache ist, oder auf einem sehr schnellen Speichermedium, oder wenn die CPU auf laufen Sie langsam ist, werden Sie reduziert Startgeschwindigkeit als Dekompression erleben nach wie vor stattfinden wird, und Sie werden nicht profitieren von der reduzierten Größe. Dies gilt insbesondere für eine EXE-Datei, die mehrere Male wiederholt aufgerufen wird.

Somit sind die oben genannten Nachteile eher ein Problem, wenn Ihre EXE oder DLLs viele Ressourcen enthält, aber ansonsten können sie nicht viel von einem Faktor in der Praxis, da die relative Größe der ausführbaren Dateien und dem verfügbaren Speicher, es sei denn, Sie von DLLs redest von vielen Executables (wie System DLLs) verwendet.

Um einige falsche Informationen in anderen Antworten dispell:

  • UPX wird Auswirkungen auf Ihre Fähigkeit nicht auf DEP-geschützten Maschinen zu laufen.
  • UPX nicht die Fähigkeit der großen Antiviren-Software beeinflussen, da sie UPX-komprimierte Dateien (sowie andere ausführbare Komprimierungsformate) unterstützen.
  • UPX konnte LZMA-Kompression für einige Zeit verwenden, jetzt (7zip des Komprimierungsalgorithmus), verwenden Sie den --lzma Schalter.
Beantwortet am 11/12/2008 um 14:22
quelle vom benutzer

stimmen
1

IMHO routinemäßig UPXing sinnlos ist, aber die Gründe sind oben geschrieben, vor allem, Speicher ist teurer als Datenträger.

Erik: die LZMA Stummel könnte größer sein. Selbst wenn der Algorithmus besser ist, muss es nicht immer ein Netto-Plus.

Beantwortet am 25/04/2009 um 23:32
quelle vom benutzer

stimmen
1

Virus-Scanner, die für ‚unbekannt‘ Viren aussehen kann Flag UPX komprimiert ausführbare Dateien wie ein Virus ist. Mir wurde gesagt, dies liegt daran, dass einige Viren UPX nutzen, um sich zu verstecken. Ich habe UPX auf Software verwendet und McAfee wird markieren Sie die Datei als ein Virus ist.

Beantwortet am 02/05/2009 um 01:47
quelle vom benutzer

stimmen
1

Der Grund UPX so viele Fehlalarme hat, weil seine offene Lizenz Malware-Autoren ermöglicht es ungestraft zu verwenden und zu ändern. Natürlich ist diese Frage für die Industrie inhärent, aber leider das große UPX Projekt von diesem Problem geplagt.

UPDATE: Beachten Sie, dass als das Taggant Projekt abgeschlossen ist, die Fähigkeit, UPX zu verwenden (oder etwas anderes) ohne Fehlalarme verursacht verbessert werden, unter der Annahme, UPX es unterstützt.

Beantwortet am 26/09/2010 um 17:34
quelle vom benutzer

stimmen
1

Es gibt keine Nachteile.

Aber gerade FYI, gibt es ein sehr weit verbreitetes Missverständnis in Bezug auf UPX as--

Ressourcen sind nicht nur komprimiert werden

Im Wesentlichen bauen Sie eine neue ausführbare Datei, die eine „Lader“ Pflicht und die „echten“ ausführbar ist, na ja, als binäre Datenressource des Laders ausführbaren Abschnitt abgestreift und komprimiert platziert wird (unabhängig die Arten von Ressourcen waren in die ursprüngliche ausführbare Datei).

Mit Reverse-Engineering - Methoden und Werkzeugen entweder für Ausbildungszwecke oder andere erhalten Ihnen die Informationen zeigt in Bezug auf den „loader ausführbar“, und nicht variablen Informationen über die ursprüngliche ausführbare Datei.

ausführbare unkomprimierte von UPX

Ausführbare komprimiert durch UPX

Beantwortet am 21/10/2015 um 18:24
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more