40

以前にUPXを使用して Windows 実行可能ファイルのサイズを縮小したことがありますが、これがもたらす可能性のあるマイナスの副作用について、私は無知であることを認めなければなりません。このパッキング/アンパッキングのすべての欠点は何ですか?

実行可能ファイルを UPX 処理しないことを推奨するシナリオはありますか (たとえば、DLL、Windows サービスを作成するとき、または Vista または Win7 をターゲットにするとき)? 私はほとんどのコードを Delphi で記述していますが、C/C++ 実行可能ファイルの圧縮にも UPX を使用しています。

余談ですが、exeを逆アセンブラーから保護するためにUPXを実行していません。実行可能ファイルのサイズを縮小し、大雑把な改ざんを防ぐためだけです。

4

13 に答える 13

48

その理由は、EXE コンプレッサの使用には欠点があるためです。最も注目すべき点:

圧縮された EXE/DLL の起動時に、すべてのコードが 1 回のパスでディスク イメージからメモリに解凍されます。これにより、システムのメモリが少なくなり、スワップ ファイルへのアクセスが強制されると、ディスクのスラッシングが発生する可能性があります。対照的に、圧縮されていない EXE/DLL では、OS は必要に応じて (つまり、実行時に) コード ページにメモリを割り当てます。

圧縮された EXE/DLL の複数のインスタンスは、メモリ内にコードの複数のインスタンスを作成します。1 MB のコード (圧縮前) を含む圧縮された EXE があり、ユーザーがその 5 つのインスタンスを起動すると、約 4 MB のメモリが無駄になります。同様に、1 MB の DLL があり、5 つの実行中のアプリケーションで使用される場合、約 4 MB のメモリが無駄になります。圧縮されていない EXE/DLL を使用すると、コードは一度だけメモリに格納され、インスタンス間で共有されます。

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

于 2008-12-09T18:11:41.623 に答える
22

これがまだ言及されていないことに驚いていますが、統計的に多くのマルウェアも UPX を使用しているため、UPX で圧縮された実行可能ファイルを使用すると、ヒューリスティックなウイルス対策ソフトウェアから誤検知が発生するリスクが高まります。

于 2008-12-10T10:04:54.663 に答える
14

3つの欠点があります。

  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スイッチを使用してください。
于 2008-12-11T13:22:17.447 に答える
10

重要なのは、インターネットからのダウンロード中だけです。UPX を使用している場合、実際には7-zipを使用している場合よりもパフォーマンスが低下します(私のテストによると、7-Zip は UPX の 2 倍優れています)。次に、ターゲットコンピューターで実際に圧縮されたままにすると、パフォーマンスが低下します(Larsの回答を参照)。そのため、UPX はファイル サイズの適切なソリューションではありません。全体を7zipするだけです。

改ざんを防ぐ限り、これもFAILです。UPX は解凍もサポートしています。誰かが EXE を変更したい場合は、それが UPX で圧縮されてから解凍されていることがわかります。速度を落とす可能性のあるクラッカーの割合は、労力とパフォーマンスの低下を正当化するものではありません。

より良い解決策は、バイナリ署名または少なくともハッシュのみを使用することです。単純なハッシュ検証システムは、バイナリとシークレット値 (通常は GUID) のハッシュを取得することです。秘密の値を知っているのは EXE だけなので、検証のためにハッシュを再計算するときに再度使用できます。これは完全ではありません (秘密の値を取得できます)。理想的な状況は、証明書と署名を使用することです。

于 2008-12-09T18:39:38.227 に答える
5

ディスク上の実行可能ファイルの最終的なサイズは、最近ではほとんど問題になりません。あなたのプログラムは数ミリ秒速くロードされるかもしれませんが、実行が開始されると違いは区別できません。

実行ファイルが UPX で圧縮されているという理由だけで、その実行ファイルを疑う人もいるかもしれません。エンド ユーザーによっては、これが重要な考慮事項である場合とそうでない場合があります。

于 2008-12-09T18:05:52.553 に答える
2

欠点はありません。

しかし、参考までに、UPXに関して非常によくある誤解があります--

リソースは圧縮されているだけではありません

基本的に、「ローダー」の役割を持つ新しい実行可能ファイルを構築しており、「実際の」実行可能ファイルは、セクションが削除されて圧縮され、ローダー実行可能ファイルのバイナリ データ リソースとして配置されます (リソースの種類に関係なく、元の実行可能ファイル)。

教育目的またはその他の目的でリバースエンジニアリングの方法とツールを使用すると、元の実行可能ファイルに関する可変情報ではなく、「ローダー実行可能ファイル」に関する情報が表示されます。

UPX によって解凍された実行可能ファイル

UPX で圧縮された実行可能ファイル

于 2015-10-21T18:24:16.803 に答える
2

実行可能ファイルのサイズを小さくすることのみに関心がある場合は、ランタイム パッケージを使用した場合と使用しない場合の実行可能ファイルのサイズを比較してみましたか? 確かに、実行可能ファイルと一緒にパッケージ全体のサイズも含める必要がありますが、同じ基本パッケージを使用する実行可能ファイルが複数ある場合は、かなり節約できます。

もう 1 つ注目すべき点は、プログラムで使用するグラフィックス/グリフです。それらを各フォームで繰り返すのではなく、グローバル データ モジュールに含まれる単一の Timagelist に統合することで、かなりのスペースを節約できます。各画像は 16 進数としてフォーム リソースに格納されていると思います。つまり、各バイトが 2 バイトを占めることになります。TResourceStream を使用して RCData リソースから画像を読み込むことで、これを少し縮小できます。

于 2008-12-09T21:32:35.600 に答える
2

最後にマネージ アセンブリで使用しようとしたとき、ランタイムが読み込みを拒否するほどひどく変更されました。それはあなたがそれを使いたくないだろうと私が考えることができる唯一の時です(そして、実際には、私が試してからずっと時間が経っているので、状況は今よりも良くなっているかもしれません. 過去に、すべてのタイプの管理されていないバイナリで広く使用してきましたが、問題はありませんでした。

于 2008-12-09T18:00:26.310 に答える
1

私見では日常的に UPXing は無意味ですが、理由は上記のとおりです。ほとんどの場合、メモリはディスクよりも高価です。

Erik: LZMA スタブの方が大きいかもしれません。アルゴリズムが優れていても、必ずしもプラスになるとは限りません。

于 2009-04-25T22:32:21.940 に答える
1

「未知の」ウイルスを探すウイルス スキャナは、UPX で圧縮された実行可能ファイルにウイルスがあるというフラグを立てることができます。これは、いくつかのウイルスが UPX を使用して自分自身を隠すためであると言われています。ソフトウェアで UPX を使用したことがありますが、McAfee はファイルがウイルスに感染しているとフラグを立てます。

于 2009-05-02T00:47:14.437 に答える
1

UPX の誤報が非常に多い理由は、UPX のオープン ライセンスにより、マルウェアの作成者が免責で UPX を使用および変更できるためです。もちろん、この問題は業界固有のものですが、悲しいことに、偉大な UPX プロジェクトはこの問題に悩まされています。

更新: Taggant プロジェクトが完了すると、UPX がサポートしていると仮定して、誤検出を引き起こすことなく UPX (またはその他のもの) を使用する機能が強化されることに注意してください。

于 2010-09-26T16:34:14.673 に答える
0

DEP (データ実行防止) がオンになっているコンピューターでは動作しない可能性があると思います。

于 2008-12-09T18:48:26.057 に答える