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


10

Estoy tratando de iniciar una aplicación anterior en macOS Sierra. Funcionó bien en El Capitán, sin embargo, desde la actualización de Sierra se bloquea inmediatamente en el lanzamiento 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 bloqueo 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 abrir esta aplicación en Sierra?


1
Tengo el mismo problema.
Sepoƃı

2
La parte desafortunada sobre el pensamiento de Apple aquí es asumir que todos usan UPX de manera estandarizada. Dado que UPX es un proyecto de código abierto, puede modificarse 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á haciendo evidente que la idea de eso aparentemente está erosionando la actualización tras la actualización.
l'L'l

Respuestas:


9

Respuesta revisada:

Para ocultar rastros, los piratas redujeron 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, 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 robusta 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 solucionar en realidad, ya que obviamente rompieron lo que aparentemente no funcionó.
l'L'l

¿Alguien se entrometió con un binario (con un contenido cuestionable) después de comprimirlo para que no se inicie más en Sierra y Apple debería solucionarlo? Pues sí, absolutamente cierto ... por favor diles. :)
RyuX51

Oye, entrometerse es la base de la informática ... sin entrometerse, ¿qué tenemos? : p
l'L'l

Siéntase libre de entrometerse con todo. Pero no se puede culpar de todo a Apple (aunque de vez en cuando realmente se hizo muy atractivo hacerlo).
RyuX51

Sí, ese es un gran punto, y entiendo lo que está diciendo, sin embargo, cuál es el razonamiento detrás del comportamiento ahora restrictivo que uno podría preguntar. Es muy poco probable que hayan logrado mucho en el proceso además de perder mucho tiempo de todos (incluido el suyo a algún costo).
l'L'l

4

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 admite la compresión de binarios en Sierra para que puedan ejecutarse en Sierra, y también admite la descompresión de binarios en Sierra. 3.92-BETA también admite binarios de descompresión 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.

Re: "Lo ejecuté en el binario de la aplicación y funcionó", ¿esto incluye binarios empaquetados, como en el lanzamiento de binarios empaquetados ahora o tenemos que desempaquetar todo lo que esperamos ejecutar?
l'L'l

@ l'L'l No estoy completamente seguro de lo que quieres decir: los binarios comprimidos con upx antes de 3.92 necesitan descomprimirse -d pathuna vez usando 3.92-BETAr3 o posterior para que puedan ejecutarse.
grg

Lo que estoy preguntando es si puede lanzar un binario comprimido a partir de ahora utilizando la última versión beta que ha mencionado.
l'L'l

@ l'L'l Lo siento, no estoy siguiendo exactamente, creo que la respuesta a su pregunta es: Sí, pero primero debe descomprimirlos. Una vez descomprimidos con esta nueva versión de UPX, pueden ejecutarse o comprimirse nuevamente con esta nueva versión y seguir ejecutándose mientras están comprimidos.
grg

Sí, eso es lo que estaba preguntando, aunque al intentar ejecutar algo empaquetado (con la última BETA) la aplicación se bloqueó (10.11.6). No estoy seguro si ha intentado empacar algo y ejecutarlo, pero parece que todavía hay algún problema allí.
l'L'l

4
brew install upx

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

trabajó para mi.


1

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

  • Primer paso, mira el sitio web de los desarrolladores para ver si van a parchar a Sierra. Es posible que ya hayan publicado un parche beta que no está disponible a través de Actualización de software.

  • Envíe al desarrollador un correo electrónico preguntándoles 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 una nueva instalación del sistema operativo, luego puedo reiniciar rápidamente y continuar usando el software. En realidad, en estos días mantengo una Mac heredada 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, aún no estoy seguro de si se han lanzado emuladores para Sierra.


1

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

Parece que upx 3.92 abordará este problema.


1
Lo más probable es que no, porque UPX probablemente no ejecute el ejecutable.
RyuX51

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.
Sepoƃı

2
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 a fondo y verá que no hay diferencia si el binario está firmado o no al descomprimir.
RyuX51
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.