10 votes

"Ce binaire compressé UPX contient un en-tête Mach-O invalide et ne peut être chargé."

J'essaie de lancer une ancienne application dans MacOS Sierra. Elle fonctionnait bien sous El Capitan, mais depuis la mise à jour vers Sierra, elle se bloque immédiatement au lancement avec l'erreur

Ce binaire compressé UPX contient un en-tête Mach-O invalide et ne peut être chargé.

En utilisant Homebrew dans El Capitan, j'ai installé UPX et l'ai utilisé pour essayer de décompresser le binaire, mais cela me dit que le binaire n'est pas compressé en premier lieu.

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

Voici le journal des pannes après avoir ouvert l'application dans 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

Comment faire pour que cette application s'ouvre dans Sierra ?

10voto

RyuX51 Points 199

Réponse révisée :

Pour cacher les traces, les pirates ont supprimé les marqueurs UPX du binaire compressé, de sorte qu'il est impossible pour MacOS Sierra de décompresser le binaire. (Essayez avec : hexdump -C YourApp.app/Contents/MacOS/YourApp | grep -C 1 UPX et voir, qu'il n'y a très probablement pas de sortie).

Cependant, jreiser d'UPX a accepté le défi et a résolu ce problème en implémentant une recherche plus robuste pour le code compressé. La v3.92 permettra de faire fonctionner à nouveau ces applications en décompressant les exécutables avec upx -d YourApp.app/Contents/MacOS/YourApp .

4voto

grg Points 181593

3.92-BETA révision 3 fonctionne dans Sierra et fonctionne pour i386 !

https://www.dropbox.com/s/x765t3i42p7hr8b/upx.out?dl=0 fonctionne maintenant aussi pour I386.

jreiser sur github.com/upx #4 commentaire

3.92 prend en charge la compression des binaires dans Sierra afin qu'ils puissent être exécutés dans Sierra, ainsi que la décompression des binaires dans Sierra. 3.92-BETA permet également de décompresser les fichiers binaires qui ont été modifiés après la compression, par exemple avec une signature de code.

Décompression du binaire de l'application à l'aide de la fonction -d Cette option fonctionne très 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 Points 5347
brew install upx

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

a fonctionné pour moi.

1voto

Applefanboy Points 248

Je ne reconnais pas votre code en particulier, mais il s'agit d'un problème courant lors de la sortie d'une nouvelle version du système d'exploitation (compatibilité des anciens logiciels).

  • Première étape, consultez le site Web des développeurs pour savoir s'ils seront Parcheando pour Sierra. Ils ont peut-être déjà posté un patch bêta qui n'est pas disponible via Software Update.

  • Envoyez un courriel au Dev pour lui demander directement. Il peut leur falloir un certain temps pour rattraper le retard, surtout s'ils ont plusieurs applications sur plusieurs plateformes.

  • Envisagez d'avoir un Mac à double démarrage. Je conserve généralement un clone de mon système actuel sur un autre disque (ou une autre partition) après l'installation d'un nouveau système d'exploitation, ce qui me permet de redémarrer rapidement et de continuer à utiliser le logiciel. En fait, je conserve aujourd'hui un ancien Mac fonctionnant sous 10.6 et 10.8 juste pour ce support.

  • Considérez une machine virtuelle. Vous pouvez utiliser un émulateur sur OSX et installer la version du système d'exploitation que vous préférez (y compris Windows). Je ne sais pas si les émulateurs sont déjà disponibles pour Sierra.

1voto

Matze Points 359

Le problème a été signalé comme L'UPX n'est pas du tout adapté à Darwin 16 / OS X Sierra. #4 .

On dirait que upx 3,92 abordera cette question.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X