"Questo binario compresso UPX contiene un'intestazione Mach-O non valida e non può essere caricato."


10

Sto cercando di avviare un'app precedente in macOS Sierra. Ha funzionato bene a El Capitan, tuttavia dall'aggiornamento a Sierra si blocca immediatamente all'avvio con l'errore ...

Questo binario compresso UPX contiene un'intestazione Mach-O non valida e non può essere caricato.

Usando Homebrew in El Capitan, ho installato UPX e l'ho usato per provare a decomprimere il binario, tuttavia questo mi dice che il binario non è compresso in primo luogo.

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

Questo è il registro degli arresti anomali dall'apertura dell'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

Come posso aprire questa app in Sierra?


1
Ho lo stesso problema.
Sepoƃı,

2
La parte sfortunata del pensiero di Apple qui è assumere che tutti usino UPX in modo standardizzato. Poiché UPX è un progetto open source, può essere modificato in modo particolare per adattarsi a quelli dello sviluppatore. C'era una volta che le app potevano essere distribuite al di fuori del Mac App Store. Impostare restrizioni su questo è ingenuo e eccessivo, tuttavia, sta diventando evidente l'idea che apparentemente sta erodendo l'aggiornamento dopo l'aggiornamento.
L'L

Risposte:


9

Risposta rivista:

Per nascondere le tracce, i pirati hanno azzerato i marker UPX dal binario compresso, quindi macOS Sierra non può decomprimere il binario. (Prova con: hexdump -C YourApp.app/Contents/MacOS/YourApp | grep -C 1 UPXe vedi che molto probabilmente non c'è output.)

Tuttavia, jreiser di UPX ha accettato la sfida e risolto il problema con l'implementazione di una ricerca più solida per il codice compresso. v3.92 sarà possibile eseguire nuovamente queste app quando si decomprimono gli eseguibili con upx -d YourApp.app/Contents/MacOS/YourApp.


È qualcosa che Apple dovrebbe risolvere in realtà, dal momento che ovviamente hanno rotto ciò che funzionava senza apparentemente alcun motivo.
L'L

Qualcuno si è intromesso con un binario (con molto probabilmente il contenuto discutibilmente) dopo averlo compresso in modo che non si avvii più su Sierra e Apple dovrebbe risolverlo? Beh sì, assolutamente giusto ... per favore, diglielo. :)
RyuX51,

Ehi, intromissione è il fondamento dell'informatica ... senza intromettersi cosa abbiamo? : p
L'L'l

Sentiti libero di immischiarti in tutto. Ma non puoi semplicemente dare la colpa a tutto su Apple (anche se di tanto in tanto è diventato davvero interessante farlo).
RyuX51,

Sì, questo è un ottimo punto, e capisco cosa stai dicendo, tuttavia, qual è il ragionamento dietro il comportamento ora restrittivo che ci si potrebbe chiedere. È altamente improbabile che abbiano compiuto molto nel processo oltre a perdere un sacco di tempo per tutti (incluso il loro a proprie spese).
L'L

4

3.92-BETA revisione 3 funziona in Sierra e funziona per i386!

https://www.dropbox.com/s/x765t3i42p7hr8b/upx.out?dl=0 ora funziona anche per I386.

jreiser su github.com/upx # 4 commento

3.92 supporta la compressione di file binari in Sierra in modo che possano essere eseguiti in Sierra e supporta anche i file binari di decompressione in Sierra. 3.92-BETA supporta anche i binari di decompressione che sono stati modificati dopo la compressione, ad esempio con una firma di codice.

Decomprimere il file binario dell'app usando l' -dopzione funziona alla grande!

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

Ri: "L'ho eseguito sul binario dell'app e ha funzionato!", Questo include i binari impaccati - come nel caso dei binari impacchettati si avvia ora o dobbiamo decomprimere tutto ciò che ci aspettiamo di eseguire?
L'L

@ L'L'l non sono del tutto sicuro di cosa intendi: i binari compressi con upx prima della 3.92 devono essere decompressi con -d pathuna volta utilizzando 3.92-BETAr3 o versione successiva per poter essere eseguiti.
grg

Quello che sto chiedendo è: puoi lanciare un binario compresso fin da ora usando l'ultima beta che hai citato.
L'L

@ L'L'l Siamo spiacenti, non sto esattamente seguendo, penso che la risposta alla tua domanda sia: Sì, ma prima devi decomprimerli. Una volta decompressi utilizzando questa nuova versione di UPX, possono essere eseguiti o compressi nuovamente utilizzando questa nuova versione e ancora eseguiti mentre sono compressi.
grg

Sì, è quello che stavo chiedendo, anche se quando ho provato a eseguire qualcosa di impacchettato (con l'ultimo BETA) l'app si è bloccata (10.11.6). Non sono sicuro se hai provato a impacchettare qualcosa ed eseguirlo, ma sembra che ci sia ancora qualche problema lì.
L'L

4
brew install upx

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

ha funzionato per me.


1

Non riconosco in particolare il tuo codice, sebbene si tratti di un problema comune con una nuova versione del sistema operativo (compatibilità del software legacy).

  • Primo passo, guarda il sito degli sviluppatori per un'indicazione che cercheranno patch per Sierra. Potrebbero aver già pubblicato una patch beta che non è disponibile tramite Aggiornamento software.

  • Invia al Dev un'e-mail chiedendogli direttamente. Potrebbero volerci un po 'per recuperare il ritardo, in particolare se hanno più applicazioni su più piattaforme.

  • Valuta di avere un Mac con doppio avvio. In genere mantengo un clone del mio sistema attuale su un'altra unità (o partizione) dopo una nuova installazione del sistema operativo, quindi posso riavviare rapidamente e continuare a utilizzare il software. Attualmente tengo un Mac legacy in esecuzione 10.6 e 10.8 solo per questo supporto.

  • Prendi in considerazione una macchina virtuale. Puoi utilizzare un emulatore su OSX e installare la versione del sistema operativo che preferisci (incluso Windows). Tuttavia, non sono sicuro che gli emulatori siano stati rilasciati per Sierra.


1

Il problema è stato segnalato come UPX è molto, molto rotto da Darwin 16 / OS X Sierra. # 4 .

Sembra che upx 3.92 risolverà questo problema.


1
Molto probabilmente no, perché l'eseguibile probabilmente non è impacchettato da UPX.
RyuX51,

Ma il messaggio di errore lo indica. C'è anche qualcosa con la certificazione ecc. Che ostacola anche la decompressione.
Sepoƃı,

2
Lo fa, ma è ovviamente sbagliato. Esegui hexdump -C YourApp.app/Contents/MacOS/YourApp | grep -C 1 UPX e vedere di persona. Per quanto riguarda i certificati: leggi attentamente il tuo link e vedrai che non fa alcuna differenza se il file binario è firmato o meno durante la decompressione.
RyuX51,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.