「このUPX圧縮バイナリには無効なMach-Oヘッダーが含まれているため、ロードできません。」


10

macOS Sierraで古いアプリを起動しようとしています。El Capitanでは問題なく動作しましたが、Sierraへのアップデート以降、起動時にすぐにクラッシュしてエラーが発生しました…

このUPX圧縮バイナリには無効なMach-Oヘッダーが含まれているため、ロードできません。

El CapitanでHomebrewを使用して、UPXをインストールし、それを使用してバイナリの圧縮解除を試みましたが、これはバイナリが最初に圧縮されていないことを示しています。

$ upx -d /tmp/Run.app/Contents/MacOS/Run
                       Ultimate Packer for eXecutables
                          Copyright (C) 1996 - 2013
UPX 3.91        Markus Oberhumer, Laszlo Molnar & John Reiser   Sep 30th 2013

        File size         Ratio      Format      Name
   --------------------   ------   -----------   -----------
upx: /tmp/Run.app/Contents/MacOS/Run: NotPackedException: not packed by UPX

Unpacked 0 files.

これは、シエラでアプリを開いたときのクラッシュログです。

Crashed Thread:        0  Dispatch queue: com.apple.main-thread

Exception Type:        EXC_CRASH (SIGKILL)
Exception Codes:       0x0000000000000000, 0x0000000000000000
Exception Note:        EXC_CORPSE_NOTIFY

Termination Reason:    EXEC, [0xc] This UPX compressed binary contains an invalid Mach-O header and cannot be loaded.

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   libsystem_kernel.dylib          0x00007fffcffeabb2 __posix_spawn + 10
1   libsystem_kernel.dylib          0x00007fffcffe5ef2 posix_spawn + 386
2   xpcproxy                        0x000000010dbb2d75 0x10dbb0000 + 11637
3   xpcproxy                        0x000000010dbb3992 0x10dbb0000 + 14738
4   libdyld.dylib                   0x00007fffcfebc255 start + 1

このアプリをシエラで開くにはどうすればよいですか?


1
まったく同じ問題があります。
ɹoƃı

2
ここでのAppleの考えに関する不幸な部分は、誰もが標準化された方法でUPXを使用することを想定しています。UPXはオープンソースプロジェクトであるため、開発者に合わせて特定の方法で変更できます。かつて、Mac App Storeの外でのアプリの配布が許可されるようなことがありました。そのようなものに制限を設定することは、素朴で行き過ぎですが、それが更新後の更新を侵食しているように見えるという考えが明らかになりつつあります。
l'L'l

回答:


9

改訂された回答:

トレースを隠すために、海賊は圧縮されたバイナリからUPXマーカーをゼロにしたため、macOS Sierraがバイナリを解凍することはできません。(試してみてください:hexdump -C YourApp.app/Contents/MacOS/YourApp | grep -C 1 UPXそして、出力がない可能性が最も高いことを確認してください。)

ただし、UPXのjreiserはこの課題を受け入れ、この問題に対処するために、圧縮コードのより堅牢な検索を実装しました。v3.92では、実行可能ファイルをで解凍したときに、これらのアプリを再度実行できるようになりますupx -d YourApp.app/Contents/MacOS/YourApp


彼らは明らかに理由もなく機能していたものを明らかに破ったので、それはAppleが実際に修正すべきものです。
l'L'l

誰かがそれを圧縮した後にバイナリ(おそらく疑わしいコンテンツを含む)をいじったので、それはシエラでもう起動しません、そしてAppleはそれを修正すべきですか?ええ、絶対に正しいです...あなたは彼らに教えてください。:)
RyuX51 2016

ねえ、干渉はコンピューティングの基礎です...干渉せずに何を得たのですか?:p
l'L'l

すべてをいじってみてください。しかし、Appleのすべてを非難することはできません(時々、実際にそうすることは本当に魅力的でしたが)。
RyuX51 2016

はい、それは素晴らしい点です。あなたの言っていることは理解できますが、今、制限的な行動の背後にある理由は何でしょうか。彼らが多くの人の時間を浪費する以外にプロセスで多くのことを成し遂げた可能性は非常に低いです(いくらかの費用で彼ら自身を含む)。
l'L'l

4

3.92-BETAリビジョン3はSierraで動作し、i386で動作します!

https://www.dropbox.com/s/x765t3i42p7hr8b/upx.out?dl=0がI386でも機能するようになりました。

github.com/upxのjreiser#4コメント

3.92は、Sierraで実行できるようにSierraでバイナリを圧縮することをサポートし、Sierraでバイナリを解凍することもサポートします。3.92-BETAは、コード署名などの圧縮後に変更されたバイナリの解凍もサポートしています。

-dオプションを使用してアプリのバイナリを解凍するとうまくいきます!

$ chmod +x upx.out 
$ ./upx.out -d /tmp/Run.app/Contents/MacOS/Run
                       Ultimate Packer for eXecutables
                          Copyright (C) 1996 - 2016
UPX 3.92-BETA   Markus Oberhumer, Laszlo Molnar & John Reiser   Sep 22nd 2016

        File size         Ratio      Format      Name
   --------------------   ------   -----------   -----------
     57444 <-     24576   42.78%   macho/i386    Run

Unpacked 1 file.

Re:「アプリバイナリで実行すると動作しました!」、これにはパックドバイナリが含まれますか?パックドバイナリが今すぐ起動するのと同じように、実行する予定のすべてをアンパックする必要がありますか?
l'L'l

@ l'L'l意味がよく-d pathわかりません— 3.92より前のupxで圧縮されたバイナリは、3.92-BETAr3以降を使用して一度で解凍する必要があります。
grg

私が求めているのは、今述べた最新のベータ版を使用して、現時点で圧縮バイナリを起動できるかどうかです。
l'L'l

@ l'L'l申し訳ありませんが、私は正確にはフォローしていません。あなたの質問への答えは次のとおりだと思います。UPXのこの新しいバージョンを使用して解凍すると、それらを実行するか、この新しいバージョンを使用して再度圧縮し、圧縮したまま実行できます。
grg

はい、それは私が求めていたものですが、パックされたものを(最新のベータ版で)実行しようとすると、アプリがクラッシュしました(10.11.6)。何かを梱包して実行したかどうかはわかりませんが、まだ問題が残っているようです。
l'L'l

4
brew install upx

upx -d YourApp.app/Contents/MacOS/YourApp

私のために働いた。


1

これは新しいOSリリース(レガシーソフトウェアの互換性)の一般的な問題ですが、特にコードを認識していません。

  • 最初のステップとして、開発者のWebサイトで、Sierraにパッチを適用する予定があるかどうかを確認します。ソフトウェアアップデートでは入手できないベータパッチがすでに投稿されている可能性があります。

  • 開発者に直接依頼するメールを送信します。特に複数のプラットフォームで複数のアプリケーションを使用している場合、追いつくまでに時間がかかることがあります。

  • デュアルブートMacを検討してください。通常、新しいOSをインストールした後、現在のシステムのクローンを別のドライブ(またはパーティション)に保存します。その後、すばやく再起動して、ソフトウェアを使い続けることができます。このサポートのためだけに、私は最近、レガシーMacを10.6および10.8で実行し続けています。

  • 仮想マシンについて考えてみましょう。OSXでエミュレータを使用して、お好みのOSバージョン(Windowsを含む)をインストールできます。ただし、エミュレータがSierra用にリリースされているかどうかはまだわかりません。


1

UPXは、Darwin 16 / OS X Sierraによって壊れているという問題が報告されています。#4

upx 3.92がこの問題に対処するようです。


1
おそらく実行可能ファイルはUPXでパックされていないためです。
RyuX51 2016

しかし、エラーメッセージはそれを示しています。また、伸張の邪魔になるサーティチャ等があるものもあります。
ɹoƃı

2
それはしますが、それは明らかに間違っています。hexdump -C YourApp.app/Contents/MacOS/YourApp |を実行します。grep -C 1 UPXと自分の目で確かめてください。証明書について:リンクをよく読んでください。解凍時にバイナリが署名されているかどうかに関係なく、リンクに違いがないことがわかります。
RyuX51 2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.