"Este binário compactado UPX contém um cabeçalho Mach-O inválido e não pode ser carregado."


10

Estou tentando iniciar um aplicativo mais antigo no macOS Sierra. Funcionou bem em El Capitan, no entanto, desde a atualização do Sierra, ele falha imediatamente no lançamento com o erro…

Este binário compactado UPX contém um cabeçalho Mach-O inválido e não pode ser carregado.

Usando o Homebrew em El Capitan, instalei o UPX e o usei para tentar descompactar o binário, no entanto, isso me diz que o binário não está compactado em primeiro 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 é o log de falha ao abrir o aplicativo no 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

Como faço para abrir esse aplicativo no Sierra?


1
Eu tenho o mesmo problema.
ɹoƃı

2
A parte infeliz sobre o pensamento da Apple aqui é supor que todo mundo usa UPX de maneira padronizada. Como o UPX é um projeto de código aberto, ele pode ser modificado de maneiras específicas para se adequar às do desenvolvedor. Havia aplicativos que podiam ser distribuídos fora da Mac App Store. Definir restrições sobre isso é ingênuo e exagerado, no entanto, está se tornando evidente a idéia de que isso aparentemente está acabando com a atualização após atualização.
l'L'l

Respostas:


9

Resposta revisada:

Para ocultar traços, os piratas zeraram os marcadores UPX do binário compactado, por isso não é possível para o macOS Sierra descomprimir o binário. (Tente com: hexdump -C YourApp.app/Contents/MacOS/YourApp | grep -C 1 UPXe veja que provavelmente não há saída.)

No entanto, o jreiser da UPX aceitou o desafio e resolveu esse problema com a implementação de uma pesquisa mais robusta por código compactado. v3.92 será possível fazer com que esses aplicativos sejam executados novamente ao descompactar os executáveis ​​com upx -d YourApp.app/Contents/MacOS/YourApp.


É algo que a Apple deveria consertar, na verdade, uma vez que eles obviamente quebraram o que funcionou aparentemente sem motivo.
l'L'l

Alguém se intrometeu em um binário (com conteúdo provavelmente questionável) depois de compactá-lo para que ele não inicie mais no Sierra e a Apple deve corrigi-lo? Bem, sim, absolutamente certo ... por favor, diga a eles. :)
RyuX51 22/09/16

Ei, interferir é a base da computação ... sem interferir no que temos? : p
l'L'l

Sinta-se livre para se meter com tudo. Mas você não pode culpar tudo na Apple (embora, de tempos em tempos, realmente se tornasse muito atraente).
precisa saber é o seguinte

Sim, esse é um ótimo ponto, e eu entendo o que você está dizendo, no entanto, qual é o raciocínio por trás do comportamento agora restritivo que alguém pode perguntar. É altamente improvável que eles tenham conseguido muito no processo, além de perder muito tempo de todo mundo (incluindo o seu próprio com alguma despesa).
l'L'l

4

3.92-BETA revisão 3 funciona na Sierra e funciona para i386!

https://www.dropbox.com/s/x765t3i42p7hr8b/upx.out?dl=0 agora também funciona para I386.

jreiser no github.com/upx # 4 comentário

3.92 suporta a compactação de binários no Sierra, para que eles possam ser executados no Sierra, e também suporta a descompactação de binários no Sierra. 3.92-BETA também suporta binários de descompactação que foram modificados após a compactação, como com uma assinatura de código.

Descomprimir o binário do aplicativo usando a -dopção funciona muito bem!

$ 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: "O executou no binário do aplicativo e funcionou!", Isso inclui binários compactados - assim como os binários compactados são lançados agora ou precisamos descompactar tudo o que esperamos executar?
l'L'l

@ l'L'l Não sei bem o que você quer dizer - os binários compactados com upx antes da 3.92 precisam descompactar -d pathuma vez usando a 3.92-BETAr3 ou posterior para que possam ser executados.
grg

O que estou perguntando é que você pode iniciar um binário compactado a partir de agora usando a versão beta mais recente que você mencionou.
l'L'l

@ l'L'l Desculpe, não estou seguindo exatamente, acho que a resposta para sua pergunta é: Sim, mas você deve descompactá-las primeiro. Uma vez descompactados usando esta nova versão do UPX, eles podem ser executados ou compactados novamente usando esta nova versão e ainda rodar enquanto estão compactados.
grg

Sim, era o que eu estava perguntando, embora ao tentar executar algo compactado (com o BETA mais recente) o aplicativo tenha travado (10.11.6). Não sei se você tentou compactar alguma coisa e executá-la, mas parece que ainda há algum problema.
l'L'l

4
brew install upx

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

trabalhou para mim.


1

Não reconheço seu código em particular, embora esse seja um problema comum em uma nova versão do sistema operacional (compatibilidade de software herdada).

  • Primeiro passo, consulte o site dos desenvolvedores para obter uma indicação de que eles farão o patch para o Sierra. Eles podem ter postado um patch beta que já não está disponível na Atualização de Software.

  • Envie um e-mail ao desenvolvedor perguntando diretamente a eles. Pode levar algum tempo para serem atualizados, principalmente se eles tiverem vários aplicativos em várias plataformas.

  • Considere ter um Mac de inicialização dupla. Geralmente, mantenho um clone do meu sistema atual em outra unidade (ou partição) após uma nova instalação do sistema operacional, para que eu possa reiniciar rapidamente e continuar usando o software. Atualmente, mantenho um Mac legado atualmente executando 10.6 e 10.8 apenas para esse suporte.

  • Considere uma máquina virtual. Você pode usar um emulador no OSX e instalar a versão do sistema operacional de sua preferência (incluindo o Windows). Ainda não sabemos se os emuladores já foram lançados para o Sierra.


1

O problema foi relatado como o UPX é muito, muito quebrado pelo Darwin 16 / OS X Sierra. # 4 .

Parece que o upx 3.92 solucionará esse problema.


1
Provavelmente não, porque o executável provavelmente não é compactado pelo UPX.
RyuX51 21/09/16

Mas a mensagem de erro indica isso. Também há algo com certificação etc. que também atrapalha a descompressão.
ɹoƃı

2
Sim, mas está obviamente errado. Execute hexdump -C YourApp.app/Contents/MacOS/YourApp | grep -C 1 UPX e veja por si mesmo. Quanto aos certificados: Leia atentamente o seu link e verá que não faz diferença se o binário está assinado ou não ao descompactar.
RyuX51 21/09/16
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.