Есть ли минусы использования UPX для сжатия исполняемого файла для Windows?

голоса
34

Я использовал UPX до того, чтобы уменьшить размер своих исполняемых файлов Windows, но я должен признать , что я наивно какие - либо негативные побочные эффекты , это может иметь. Что недостаток всей этой упаковки / распаковки?

Существуют ситуации, в которых кто-то рекомендовал бы НЕ UPX-ки исполняемый файл (например, при написании DLL, Windows Service, или при ориентации Vista, или Win7)? Я пишу большую часть моего кода в Delphi, но я использовал UPX сжимать C / C ++ исполняемых файлов, а также.

На стороне записки, я не работаю UPX в некоторой попытке защитить мой ех от дизассемблеров, только чтобы уменьшить размер исполняемого файла и предотвратить беглую подделку.

Задан 09/12/2008 в 18:53
источник пользователем
На других языках...                            


12 ответов

голоса
45

Причина в том, есть отрицательные стороны использования EXE компрессоров. В частности:

При запуске сжатый EXE / DLL, весь код распаковывается из образа диска в память за один проход, что может привести к диска ненужными, если система не хватает памяти и вынужден обращаться к файлу подкачки. В отличие от этого, с несжатых EXE / DLL, операционная система выделяет память для кодовых страниц по запросу (то есть, когда они выполняются).

Несколько экземпляров сжатых EXE / DLL создать несколько экземпляров кода в памяти. Если у Вас есть сжатый EXE, который содержит 1 Мб коды (до сжатия), и пользователь запускает 5 экземпляров него, примерно 4 МБ памяти впустую. Точно так же, если у вас есть DLL, которая составляет 1 МБ, и он используется 5 запущенных приложений, около 4 МБ памяти впустую. С несжатых EXE / DLL, код хранится только в памяти один раз и распределяется между экземплярами.

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

Ответил 09/12/2008 в 19:11
источник пользователем

голоса
18

Я удивлен, что это не было упомянуто еще, но с помощью UPX упакованных исполняемых файлов, также увеличивает риск получения ложных срабатываний от эвристического антивирусного программного обеспечения, поскольку статистически много вредоносных программ также использует UPX.

Ответил 10/12/2008 в 11:04
источник пользователем

голоса
12

Есть три недостатка:

  1. Весь код будет полностью несжатый в виртуальной памяти, в то время как в обычном EXE или DLL, только код на самом деле используется загружается в память. Это особенно актуально, если только небольшая часть кода в вашем EXE / DLL используется при каждом запуске.
  2. Если существует несколько экземпляров вашей DLL и EXE работает, их коды не могут быть разделены между экземплярами, так что вы будете использовать больше памяти.
  3. Если EXE / DLL уже в кэше, или на очень быстром носителе данных, или если CPU вы работаете на медленно, вы будете испытывать снижение скорости загрузки, как декомпрессия все равно будет иметь место, и вы не будете извлечь выгоду из уменьшенного размера. Это особенно верно для EXE, который будет вызываться несколько раз повторно.

Таким образом, вышеуказанные недостатки большие проблемы, если ваш EXE или DLL, содержит много ресурсов, но в противном случае, они не могут быть много факторов на практике, учитывая относительного размер исполняемых файлов и доступной память, если вы говорите о библиотеках DLL используется большим количеством исполняемых файлов (как системы библиотек DLL).

Чтобы прогнать неверную информацию в других ответах:

  • UPX не будет влиять на вашу способность работать на DEP-защищенных машин.
  • UPX не будет влиять на способность основного антивирусного программного обеспечения, так как они поддерживают UPX сжатые исполняемые файлы (а также другие исполняемые форматы сжатие).
  • UPX смог использовать сжатие LZMA в течение некоторого времени (алгоритм сжатия 7zip в), используйте переключатель --lzma.
Ответил 11/12/2008 в 14:22
источник пользователем

голоса
9

Только размер имеет значение время находится в процессе загрузки вне Интернета. Если вы используете UPX , то вы на самом деле получить худшую производительность , чем при использовании 7-Zip ( на основе моего тестирования 7-Zip в два раза хуже UPX). Затем , когда он фактически оставили прессуют на целевом компьютере снижается производительность вашей (см ответа Ларс). Так UPX не является хорошим решением для размера файла. Просто 7zip все это.

Насколько предотвратить подделку, это FAIL - а. UPX поддерживает распаковку тоже. Если кто - то хочет изменить EXE , то они будут видеть его сжимают с помощью UPX , а затем разархивировать его. Процент возможных взломщиков вы можете замедлить не оправдывает потери усилий и производительности.

Лучшее решение было бы использовать бинарное подписание или, по крайней мере, только хеш. Простая система хэша проверки взять хэш бинарного файла и секретное значение (обычно Guid). Только ваш EXE знает секретное значение, поэтому, когда он пересчитывает хэш для проверки он может использовать его снова. Это не идеальное (секрет значение может быть восстановлено). Идеальная ситуация будет использовать сертификат и подпись.

Ответил 09/12/2008 в 19:39
источник пользователем

голоса
4

Окончательный размер исполняемого файла на диске в основном не имеет значения в эти дни. Ваша программа может загружать несколько миллисекунд быстрее, но как только он начинает работать разницу неотличимо.

Некоторые люди могут быть более подозрительными исполняемого файла только потому, что он сжат с помощью UPX. В зависимости от конечных пользователей, это может быть или не быть важным фактором.

Ответил 09/12/2008 в 19:05
источник пользователем

голоса
2

Если ваш единственный интерес в уменьшении размера исполняемых файлов, то вы пробовали сравнивая размер исполняемого файла и без времени выполнения пакетов? Конечно, вам придется также включать размеры пакетов в целом вместе с исполняемым файлом, но если у вас есть несколько исполняемых файлов, которые используют одни и те же базовые пакеты, то ваша экономия будет довольно высокой.

Другая вещь, чтобы посмотреть на бы графические / глифы, которые вы используете в вашей программе. Вы можете сэкономить немного пространства путем объединения их в один TImageList включены в глобальный модуль данных, а не иметь их повторяют на каждой форме. Я считаю, что каждое изображение хранится в виде ресурса в шестнадцатеричном, так что это будет означать, что каждый байт занимает два байта ... вы можете уменьшить этот бит путем загрузки изображения из RCDATA ресурса с использованием TResourceStream.

Ответил 09/12/2008 в 22:32
источник пользователем

голоса
2

В последний раз, когда я пытался использовать его на управляемые сборках, то потеряется это так плохо, что во время выполнения отказалось загрузить его. Это единственный раз, когда я могу думать о том, что вы не хотели бы использовать его (и, на самом деле, это было так давно я пытался, что это положение может быть даже лучше). Я использовал его экстенсивно в прошлом на всех типах неуправляемых бинарных файлов, и никогда не было проблемы.

Ответил 09/12/2008 в 19:00
источник пользователем

голоса
1

Там нет никаких недостатков.

Но просто FYI, есть очень распространенное заблуждение относительно UPX as--

ресурсы не только сжимаются

По сути вы строите новый исполняемый файл, который имеет «загрузчик» долг и «реальный» исполняемый файл, а, в настоящее время раздел раздел и сжатый, помещаемый в качестве ресурса в двоичных данных загрузчика исполняемого файла (независимо от типа ресурсов, был в оригинальный исполняемый файл).

Использование методов обратной инженерии и инструментов либо для целей образования или другой покажет вам информацию , касающуюся «загрузчик исполняемый», а не переменной информации относительно исходного исполняемого файла.

исполняемый файл несжатого по UPX

исполняемый файл сжат UPX

Ответил 21/10/2015 в 18:24
источник пользователем

голоса
1

Причина UPX так много ложных тревог, потому что его открытое лицензирование позволяет вирусописатели использовать и изменять его безнаказанно. Конечно, эта проблема присуща промышленности, но, к сожалению, большой проект UPX страдает от этой проблемы.

UPDATE: Обратите внимание, что, как проект будет завершен метка,, способность использовать UPX (или что-нибудь еще), не вызывая ложные срабатывания будет повышена, если предположить, UPX поддерживает его.

Ответил 26/09/2010 в 17:34
источник пользователем

голоса
1

Вирусные сканеры, которые ищут «неизвестные» вирусы могут флаг UPX сжаты исполняемые файлы как имеющий вирус. Мне сказали, что это потому, что некоторые вирусы используют UPX, чтобы скрыть себя. Я использовал UPX на программное обеспечение и McAfee будет помечать файл как имеющий вирус.

Ответил 02/05/2009 в 01:47
источник пользователем

голоса
1

ИМХО обычно UPXing не имеет смысла, но причины написаны выше, в основном, память является более дорогой, чем диск.

Эрик: LZMA заглушки может быть больше. Даже если алгоритм лучше, это не всегда является нетто-плюс.

Ответил 25/04/2009 в 23:32
источник пользователем

голоса
0

Я полагаю , что есть вероятность того, что он не может работать на компьютерах, DEP (Предотвращение выполнения данных) включен.

Ответил 09/12/2008 в 19:48
источник пользователем

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