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?
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 UPX
y 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
.
¡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 -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.
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.
ɹoƃı
l'L'l
grg