"Diese UPX-komprimierte Binärdatei enthält einen ungültigen Mach-O-Header und kann nicht geladen werden."

10

Ich versuche, eine ältere App in macOS Sierra zu starten. In El Capitan hat es gut funktioniert, aber seit dem Update auf Sierra stürzt es sofort beim Start mit dem Fehler ab…

Diese UPX-komprimierte Binärdatei enthält einen ungültigen Mach-O-Header und kann nicht geladen werden.

Mit Homebrew in El Capitan habe ich UPX installiert und damit versucht, die Binärdatei zu dekomprimieren. Dies zeigt mir jedoch, dass die Binärdatei überhaupt nicht komprimiert ist.

$ 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.

Dies ist das Absturzprotokoll beim Öffnen der App in Sierra.

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

Wie kann ich diese App in Sierra öffnen lassen?

grg
quelle
1
Ich habe das gleiche Problem.
21oƃı
2
Das Unglückliche an Apples Denken ist, dass jeder UPX auf standardisierte Weise verwendet. Da UPX ein Open Source-Projekt ist, kann es auf besondere Weise an die des Entwicklers angepasst werden. Es gab einmal so etwas wie Apps, die außerhalb des Mac App Store verteilt werden durften. Das Festlegen von Einschränkungen für solche ist naiv und übertrieben, es wird jedoch deutlich, dass die Idee, dass dies Update für Update scheinbar zunichte macht.
l'L'l
Lösung
grg

Antworten:

9

Überarbeitete Antwort:

Um Spuren zu verbergen, haben Piraten die UPX-Marker aus der komprimierten Binärdatei auf Null gesetzt, sodass macOS Sierra die Binärdatei nicht dekomprimieren kann. (Versuchen Sie es mit: hexdump -C YourApp.app/Contents/MacOS/YourApp | grep -C 1 UPXund stellen Sie sicher, dass höchstwahrscheinlich keine Ausgabe erfolgt.)

Jreiser von UPX nahm die Herausforderung jedoch an und ging dieses Problem mit der Implementierung einer robusteren Suche nach komprimiertem Code an. In Version 3.92 können diese Apps beim Dekomprimieren der ausführbaren Dateien mit erneut ausgeführt werden upx -d YourApp.app/Contents/MacOS/YourApp.

RyuX51
quelle
Es ist etwas, das Apple eigentlich reparieren sollte, da sie offensichtlich das kaputt gemacht haben, was anscheinend ohne Grund funktioniert hat.
l'L'l
Jemand, der sich nach dem Komprimieren in eine Binärdatei (mit höchstwahrscheinlich fragwürdigem Inhalt) eingemischt hat, damit sie in Sierra nicht mehr startet und Apple sie reparieren sollte? Na ja, absolut richtig ... bitte sag es ihnen. :)
RyuX51
Hey, Einmischung ist die Grundlage des Rechnens ... ohne sich einzumischen, was haben wir? : p
l'L'l
Fühlen Sie sich frei, sich in alles einzumischen. Aber man kann Apple nicht einfach alles vorwerfen (obwohl es von Zeit zu Zeit wirklich sehr ansprechend geworden ist, dies zu tun).
RyuX51
Ja, das ist ein großartiger Punkt, und ich verstehe, was Sie sagen, aber was ist der Grund für das jetzt restriktive Verhalten, das man fragen könnte. Es ist höchst unwahrscheinlich, dass sie in diesem Prozess viel erreicht haben, außer viel Zeit für alle zu verschwenden (einschließlich ihrer eigenen mit einigem Aufwand).
l'L'l
4

3.92-BETA Revision 3 funktioniert in Sierra und funktioniert für i386!

https://www.dropbox.com/s/x765t3i42p7hr8b/upx.out?dl=0 funktioniert jetzt auch für I386.

jreiser auf github.com/upx # 4 Kommentar

3.92 unterstützt das Komprimieren von Binärdateien in Sierra, sodass sie in Sierra ausgeführt werden können, und das Dekomprimieren von Binärdateien in Sierra. 3.92-BETA unterstützt auch das Dekomprimieren von Binärdateien, die nach der Komprimierung geändert wurden, z. B. mit einer Codesignatur.

Das Dekomprimieren der Binärdatei der App mit der -dOption funktioniert hervorragend!

$ 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.
grg
quelle
Betreff: "Hat es auf der App-Binärdatei ausgeführt und es hat funktioniert!", Beinhaltet dies gepackte Binärdateien - wie beim Start von gepackten Binärdateien jetzt oder müssen wir alles entpacken, was wir erwarten, ausgeführt zu werden?
l'L'l
@ l'L'l Ich bin mir nicht ganz sicher, was Sie meinen - Binärdateien, die vor 3.92 mit upx komprimiert wurden, müssen -d patheinmal mit 3.92-BETAr3 oder höher dekomprimiert werden, damit sie ausgeführt werden können.
grg
Ich frage Sie, ob Sie ab sofort eine komprimierte Binärdatei mit der neuesten Beta starten können, die Sie erwähnt haben.
l'L'l
@ l'L'l Entschuldigung, ich folge nicht genau, ich denke die Antwort auf Ihre Frage lautet: Ja, aber Sie müssen sie zuerst dekomprimieren. Nach dem Dekomprimieren mit dieser neuen UPX-Version können sie ausgeführt oder mit dieser neuen Version erneut komprimiert werden und weiterhin komprimiert ausgeführt werden.
grg
Ja, das habe ich gefragt, obwohl die App beim Versuch, etwas Packed (mit der neuesten BETA) auszuführen, abgestürzt ist (10.11.6). Ich bin mir nicht sicher, ob Sie versucht haben, etwas zu packen und auszuführen, aber es scheint, dass es dort immer noch ein Problem gibt.
l'L'l
4
brew install upx

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

arbeitete für mich.

Pellet
quelle
1

Ich erkenne Ihren Code nicht besonders, obwohl dies ein häufiges Problem bei einer neuen Betriebssystemversion ist (Legacy-Softwarekompatibilität).

  • Schauen Sie sich zunächst die Entwickler-Website an, um einen Hinweis darauf zu erhalten, dass sie für Sierra patchen werden. Möglicherweise haben sie bereits einen Beta-Patch veröffentlicht, der nicht über das Software-Update verfügbar ist.

  • Senden Sie dem Entwickler eine E-Mail und fragen Sie ihn direkt. Es kann eine Weile dauern, bis sie auf dem Laufenden sind, insbesondere wenn sie mehrere Anwendungen auf mehreren Plattformen haben.

  • Erwägen Sie einen Dual-Boot-Mac. Nach einer Neuinstallation des Betriebssystems behalte ich im Allgemeinen einen Klon meines aktuellen Systems auf einem anderen Laufwerk (oder einer anderen Partition). Dann kann ich die Software schnell neu starten und weiter verwenden. Ich behalte heutzutage einen Legacy-Mac mit 10.6 und 10.8, nur für diese Unterstützung.

  • Betrachten Sie eine virtuelle Maschine. Sie können einen Emulator unter OSX verwenden und die von Ihnen bevorzugte Betriebssystemversion (einschließlich Windows) installieren. Ich bin mir jedoch nicht sicher, ob Emulatoren für Sierra freigegeben sind.

Applefanboy
quelle
1

Das Problem wurde gemeldet, da UPX von Darwin 16 / OS X Sierra weitestgehend gebrochen wurde. # 4 .

Es sieht so aus, als würde upx 3.92 dieses Problem beheben .

ɹoƃı
quelle
1
Dies wird höchstwahrscheinlich nicht der Fall sein, da die ausführbare Datei höchstwahrscheinlich nicht von UPX gepackt wird.
RyuX51
Eine Fehlermeldung zeigt dies jedoch an. Es gibt auch Dinge mit Zertifikaten usw., die auch der Dekompression im Wege stehen.
21oƃı
2
Es tut es, aber es ist offensichtlich falsch. Führen Sie hexdump -C YourApp.app/Contents/MacOS/YourApp | aus grep -C 1 UPX und überzeugen Sie sich selbst. Was die Zertifikate betrifft: Lesen Sie Ihren Link sorgfältig durch und Sie werden sehen, dass es keinen Unterschied macht, ob die Binärdatei beim Dekomprimieren signiert ist oder nicht.
RyuX51