"Este binario comprimido UPX contiene un encabezado Mach-O no válido y no se puede cargar".

Estoy intentando iniciar una aplicación anterior en macOS Sierra. Funcionó bien en El Capitán, sin embargo, desde la actualización de Sierra, falla inmediatamente al iniciarse con el error...

Este binario comprimido UPX contiene un encabezado Mach-O no válido y no se puede cargar.

Usando Homebrew en El Capitan, instalé UPX y lo usé para intentar descomprimir el binario, sin embargo, esto me dice que el binario no está comprimido en primer lugar.

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

Este es el registro de errores al abrir la aplicación en 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

¿Cómo puedo hacer que esta aplicación se abra en Sierra?

Tengo el mismo problema.
La parte desafortunada del pensamiento de Apple aquí es asumir que todos usan UPX de manera estandarizada. Dado que UPX es un proyecto de código abierto, se puede modificar de formas particulares para adaptarse a las del desarrollador. Hubo una vez que se permitía distribuir aplicaciones fuera de la Mac App Store. Establecer restricciones sobre esto es ingenuo y exagerado, sin embargo, se está volviendo evidente que la idea de eso aparentemente se está erosionando actualización tras actualización.

Respuestas (5)

Respuesta revisada:

Para ocultar rastros, los piratas pusieron a cero los marcadores UPX del binario comprimido, por lo que macOS Sierra no puede descomprimir el binario. (Pruebe con: hexdump -C YourApp.app/Contents/MacOS/YourApp | grep -C 1 UPXy vea que lo más probable es que no haya salida).

Sin embargo, jreiser de UPX aceptó el desafío y abordó este problema implementando una búsqueda más sólida de código comprimido. v3.92 será posible hacer que estas aplicaciones vuelvan a ejecutarse al descomprimir los ejecutables con upx -d YourApp.app/Contents/MacOS/YourApp.

Es algo que Apple debería arreglar en realidad, ya que obviamente rompieron lo que funcionaba aparentemente sin ninguna razón.
¿Alguien se entrometió con un binario (probablemente con contenido cuestionable) después de comprimirlo para que ya no se inicie en Sierra y Apple debería arreglarlo? Pues sí, toda la razón... por favor díselo. :)
Oye, la intromisión es la base de la informática... sin entrometerse, ¿qué tenemos? :pag
Siéntete libre de entrometerte en todo. Pero no puedes simplemente culpar de todo a Apple (aunque de vez en cuando se volvió muy atractivo hacerlo).
Sí, ese es un gran punto, y entiendo lo que está diciendo, sin embargo, uno podría preguntarse cuál es el razonamiento detrás del comportamiento ahora restrictivo. Es muy poco probable que hayan logrado mucho en el proceso además de perder mucho tiempo de todos (incluido el suyo propio con algún gasto).
3.92-BETA me da 'CantUnpackException: archivo dañado' que es diferente a 'NotPackedException: no empaquetado por UPX' de 3.91.
Funcionó en mi caso. Bueno, todavía es una versión beta. Actualizaré el enlace beta (y lo eliminaré cuando sea definitivo).

¡La revisión 3.92-BETA 3 funciona en Sierra y funciona para i386!

https://www.dropbox.com/s/x765t3i42p7hr8b/upx.out?dl=0 ahora también funciona para I386.

jreiser en github.com/upx #4 comentario

3.92 admite la compresión de archivos binarios en Sierra para que puedan ejecutarse en Sierra, y también admite la descompresión de archivos binarios en Sierra. 3.92-BETA también admite la descompresión de archivos binarios que se han modificado después de la compresión, como con una firma de código.

¡ Descomprimir el binario de la aplicación usando la -dopción funciona muy bien!

$ 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

trabajó para mi.

No reconozco su código en particular, aunque este es un problema común con una nueva versión del sistema operativo (compatibilidad con software heredado).

  • Primer paso, busque en el sitio web de los desarrolladores una indicación de que parchearán para Sierra. Es posible que ya hayan publicado un parche beta que no está disponible a través de Actualización de software.

  • Envíe un correo electrónico al desarrollador preguntándole directamente. Puede llevarles un tiempo ponerse al día, especialmente si tienen múltiples aplicaciones en múltiples plataformas.

  • Considere tener una Mac de arranque dual. Generalmente mantengo un clon de mi sistema actual en otra unidad (o partición) después de la instalación de un nuevo sistema operativo, luego puedo reiniciar rápidamente y continuar usando el software. De hecho, mantengo una Mac heredada en estos días con 10.6 y 10.8 solo por este soporte.

  • Considere una máquina virtual. Puede usar un emulador en OSX e instalar la versión del sistema operativo que prefiera (incluido Windows). Sin embargo, no estoy seguro de si los emuladores se lanzaron para Sierra todavía.

El problema se ha informado ya que UPX está muy, muy roto por Darwin 16 / OS X Sierra. # 4

Parece que upx 3.92 solucionará este problema.

Lo más probable es que no, porque el ejecutable probablemente no esté empaquetado por UPX.
Pero el mensaje de error lo indica. También hay algo con el certificado, etc., que también se interpone en el camino de la descompresión.
Lo hace, pero obviamente está mal. Ejecute hexdump -C YourApp.app/Contents/MacOS/YourApp | grep -C 1 UPX y compruébelo usted mismo. En cuanto a los certificados: Lea su enlace detenidamente y verá que no importa si el binario está firmado o no al descomprimirlo.