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?
Antworten:
Ü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 UPX
und 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
.quelle
3.92-BETA Revision 3 funktioniert in Sierra und funktioniert 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
-d
Option funktioniert hervorragend!quelle
-d path
einmal mit 3.92-BETAr3 oder höher dekomprimiert werden, damit sie ausgeführt werden können.arbeitete für mich.
quelle
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.
quelle
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 .
quelle