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

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 es verwendet, um zu versuchen, die Binärdatei zu dekomprimieren, aber dies sagt mir, 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 vom Ö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?

Ich habe das gleiche Problem.
Das Unglückliche an Apples Denken hier ist die Annahme, dass jeder UPX auf standardisierte Weise verwendet. Da UPX ein Open-Source-Projekt ist, kann es auf bestimmte Weise modifiziert werden, damit es zu denen des Entwicklers passt. Es gab einmal so etwas wie Apps, die außerhalb des Mac App Store vertrieben werden durften. Das Festlegen von Einschränkungen für solche ist naiv und übertrieben, aber es wird offensichtlich, dass die Idee, dass Update für Update scheinbar ausgehöhlt wird.

Antworten (5)

Überarbeitete Antwort:

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

jreiser von UPX nahm die Herausforderung jedoch an und ging dieses Problem an, indem es eine robustere Suche nach komprimiertem Code implementierte. v3.92 wird es möglich sein, diese Apps wieder zum Laufen zu bringen, wenn die ausführbaren Dateien mit dekomprimiert werden upx -d YourApp.app/Contents/MacOS/YourApp.

Es ist etwas, was Apple eigentlich reparieren sollte, da sie offensichtlich kaputt gemacht haben, was anscheinend ohne Grund funktioniert hat.
Jemand hat sich nach dem Komprimieren in eine Binärdatei (mit höchstwahrscheinlich fragwürdigem Inhalt) eingemischt, sodass sie auf Sierra nicht mehr startet, und Apple sollte sie reparieren? Nun ja, absolut richtig... du sagst es ihnen bitte. :)
He, Einmischung ist die Grundlage des Rechnens... was haben wir ohne Einmischung? :p
Fühlen Sie sich frei, sich in alles einzumischen. Aber Sie können nicht einfach Apple die Schuld geben (obwohl es von Zeit zu Zeit wirklich sehr attraktiv wurde, dies zu tun).
Ja, das ist ein großartiger Punkt, und ich verstehe, was Sie sagen, aber was ist der Grund für das jetzt restriktive Verhalten, könnte man fragen. Es ist höchst unwahrscheinlich, dass sie dabei viel erreicht haben, außer dass sie viel Zeit von allen verschwendet haben (einschließlich ihrer eigenen zu gewissen Kosten).
3.92-BETA gibt mir 'CantUnpackException: Datei beschädigt', was sich von 3.91's 'NotPackedException: Not Packed by UPX' unterscheidet.
Hat in meinem Fall funktioniert. Nun, es ist immer noch eine Beta. Ich werde den Beta-Link aktualisieren (und entfernen, wenn er fertig ist).

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 unterstützt auch 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.
brew install upx

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

hat für mich funktioniert.

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

  • Schauen Sie im ersten Schritt auf der Entwickler-Website nach einem Hinweis, dass sie für Sierra patchen werden. Sie haben möglicherweise bereits einen Beta-Patch veröffentlicht, der nicht über das Software-Update verfügbar ist.

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

  • Erwägen Sie einen Dual-Boot-Mac. Im Allgemeinen behalte ich nach einer neuen Betriebssysteminstallation einen Klon meines aktuellen Systems auf einem anderen Laufwerk (oder einer anderen Partition), dann kann ich schnell neu starten und die Software weiter verwenden. Ich betreibe heutzutage tatsächlich 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 bereits veröffentlicht wurden.

Das Problem wurde gemeldet, da UPX von Darwin 16 / OS X Sierra völlig zerstört wurde. #4 .

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

Höchstwahrscheinlich nicht, da die ausführbare Datei höchstwahrscheinlich nicht von UPX gepackt wurde.
Aber Fehlermeldung weist darauf hin. Es gibt auch Dinge mit Zertifikaten usw., die der Dekomprimierung ebenfalls im Wege stehen.
Das 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 angeht: Lesen Sie Ihren Link gründlich durch und Sie werden sehen, dass es beim Dekomprimieren keinen Unterschied macht, ob die Binärdatei signiert ist oder nicht.