10 votos

"Este binario comprimido UPX contiene una cabecera Mach-O no válida y no se puede cargar".

Estoy intentando lanzar una aplicación antigua en MacOS Sierra. Funcionaba bien en El Capitán, sin embargo desde la actualización a Sierra se bloquea inmediatamente al lanzarla con el error

Este binario comprimido UPX contiene una cabecera Mach-O inválida y no puede ser cargado.

Usando Homebrew en El Capitán, 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 fallos 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?

1 votos

Tengo el mismo problema.

2 votos

La parte desafortunada del pensamiento de Apple aquí es asumir que todo el mundo utiliza UPX de forma estandarizada. Dado que UPX es un proyecto de código abierto, puede ser modificado de manera particular para adaptarse a los del desarrollador. Antes existía la posibilidad de distribuir aplicaciones fuera de la Mac App Store. Establecer restricciones en este sentido es ingenuo y exagerado, sin embargo, se está haciendo evidente que la idea de que está aparentemente erosionando actualización tras actualización.

0 votos

10voto

Respuesta revisada:

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

Sin embargo, jreiser de UPX aceptó el reto y abordó este problema con la implementación de una búsqueda más robusta de código comprimido. En la v3.92 será posible hacer que estas aplicaciones vuelvan a funcionar al descomprimir los ejecutables con upx -d YourApp.app/Contents/MacOS/YourApp .

0 votos

Es algo que Apple debería arreglar en realidad, ya que obviamente rompieron lo que funcionaba sin aparentemente ninguna razón.

0 votos

¿Alguien se metió con un binario (con contenido muy probablemente cuestionable) después de comprimirlo para que no arranque más en Sierra y Apple debería arreglarlo? Pues sí, toda la razón... díselo tú, por favor :)

0 votos

Oye, la intromisión es la base de la informática... sin intromisión ¿qué tenemos? :p

4voto

siva Puntos 23

¡3.92-BETA revisión 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 soporta la compresión de binarios en Sierra para que puedan ser ejecutados en Sierra, y también soporta la descompresión de binarios en Sierra. 3.92-BETA también soporta la descompresión de binarios que han sido modificados después de la compresión, como por ejemplo con una firma de código.

Descomprimir el binario de la aplicación utilizando el -d ¡opció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.

4voto

Crystal Puntos 5347
brew install upx

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

me ha funcionado.

1voto

Applefanboy Puntos 3

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

  • El primer paso es buscar en la página web de los desarrolladores una indicación de que estarán Parcheando para Sierra. Puede que ya hayan publicado un parche beta que no esté disponible a través de Software Update.

  • Envíe un correo electrónico al Departamento de Desarrollo para preguntarle directamente. Puede llevarles un tiempo ponerse al día, especialmente si tienen varias aplicaciones en varias plataformas.

  • Considera tener un Mac de arranque dual. Por lo general, mantengo un clon de mi sistema actual en otra unidad (o partición) después de la instalación de un nuevo sistema operativo, para poder reiniciar rápidamente y seguir utilizando el software. De hecho, actualmente mantengo un Mac heredado que ejecuta 10.6 y 10.8 sólo para este soporte.

  • Considera una máquina virtual. Puedes usar un emulador en OSX e instalar la versión del sistema operativo que prefieras (incluyendo Windows). Sin embargo, no estoy seguro de que los emuladores hayan sido lanzados para Sierra.

1voto

Matze Puntos 359

El problema ha sido reportado como UPX está muy, muy roto por Darwin 16 / OS X Sierra. #4 .

Parece que upx 3,92 abordará esta cuestión.

1 votos

Lo más probable es que no, porque el ejecutable probablemente no está empaquetado por UPX.

0 votos

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.

2 votos

Lo hace, pero es obviamente erróneo. Ejecuta hexdump -C YourApp.app/Contents/MacOS/YourApp | grep -C 1 UPX y compruébalo tú mismo. En cuanto a los certificados: Lee bien tu enlace y verás que da igual que el binario esté firmado o no al descomprimirlo.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X