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

9

Sto provando a lanciare una vecchia app in macOS Sierra. Ha funzionato bene in El Capitan, tuttavia dal momento che l'aggiornamento di Sierra si blocca immediatamente all'avvio con l'errore ...

This UPX compressed binary contains an invalid Mach-O header and cannot be loaded.

Usando Homebrew in El Capitan, ho installato UPX e l'ho usato per provare a decomprimere il binario, tuttavia questo mi dice che il file 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?

    
posta grg 07.09.2016 - 10:40
fonte

5 risposte

4

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

https://www.dropbox.com/s/x765t3i42p7hr8b/upx.out?dl=0 now works for I386, too.

jreiser su github.com/upx # 4 comment

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

Decomprimere il binario dell'app usando l'opzione -d 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.
    
risposta data 24.09.2016 - 20:31
fonte
6

Risposta modificata:

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

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

Ottieni beta di 3.92 qui .

    
risposta data 21.09.2016 - 19:22
fonte
1

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

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

  • Invia l'e-mail allo sviluppatore chiedendoli direttamente. Può impiegare un po 'di tempo per recuperare, soprattutto se hanno più applicazioni su più piattaforme.

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

  • Considera una macchina virtuale. È possibile utilizzare un emulatore su OSX e installare la versione del sistema operativo che si preferisce (incluso Windows). Non sono sicuro se gli emulatori vengono rilasciati per Sierra, tuttavia.

risposta data 07.09.2016 - 19:07
fonte
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.

    
risposta data 21.09.2016 - 14:12
fonte
1
brew install upx

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

ha funzionato per me.

    
risposta data 17.11.2018 - 04:58
fonte

Leggi altre domande sui tag