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

10

J'essaie de lancer une ancienne application dans macOS Sierra. Cela a bien fonctionné dans El Capitan, mais depuis la mise à jour de Sierra, il se bloque immédiatement au lancement avec l'erreur…

Ce binaire compressé UPX contient un en-tête Mach-O non valide et ne peut pas ê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.

Ceci est le journal des pannes de l'ouverture de 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 puis-je ouvrir cette application dans Sierra?

grg
la source
1
J'ai le même problème.
ɹoƃı
2
La partie malheureuse de la pensée d'Apple ici suppose que tout le monde utilise UPX de manière standardisée. L'UPX étant un projet open source, il peut être modifié de manière particulière pour s'adapter à ceux du développeur. Il était une fois une chose telle que les applications pouvaient être distribuées en dehors du Mac App Store. Définir des restrictions sur de tels éléments est naïf et excessif, cependant, il devient évident que l'idée de cela semble s'éroder mise à jour après mise à jour.
l'L'l
Solution
grg

Réponses:

9

Réponse révisée:

Pour masquer les traces, les pirates ont mis à zéro les marqueurs UPX du binaire compressé, il n'est donc pas possible pour macOS Sierra de décompresser le binaire. (Essayez avec: hexdump -C YourApp.app/Contents/MacOS/YourApp | grep -C 1 UPXet voyez qu'il n'y a probablement pas de sortie.)

Cependant, jreiser de UPX a accepté le défi et a résolu ce problème en implémentant une recherche plus robuste de code compressé. v3.92 sera possible de faire fonctionner à nouveau ces applications lors de la décompression des exécutables avec upx -d YourApp.app/Contents/MacOS/YourApp.

RyuX51
la source
C'est quelque chose qu'Apple devrait réparer, car ils ont manifestement cassé ce qui a fonctionné sans raison apparente.
l'L'l
Quelqu'un s'est mêlé d'un binaire (avec probablement du contenu douteux) après l'avoir compressé pour qu'il ne démarre plus sur Sierra et Apple devrait le réparer? Eh bien oui, tout à fait raison ... vous pouvez leur dire :)
RyuX51
Hé, l'ingérence est le fondement de l'informatique ... sans ingérence qu'avons-nous? : p
l'L'l
N'hésitez pas à vous mêler de tout. Mais vous ne pouvez pas simplement blâmer tout sur Apple (bien que de temps en temps, cela devienne vraiment très attrayant de le faire).
RyuX51
Oui, c'est un bon point, et je comprends ce que vous dites, cependant, quel est le raisonnement derrière le comportement désormais restrictif que l'on pourrait demander. Il est hautement improbable qu'ils aient accompli beaucoup dans le processus, à part perdre beaucoup de temps à tout le monde (y compris le leur à certains frais).
l'L'l
4

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

https://www.dropbox.com/s/x765t3i42p7hr8b/upx.out?dl=0 fonctionne désormais également pour I386.

jreiser sur github.com/upx # 4 commentaire

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

La décompression du binaire de l'application en utilisant l' -doption 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.
grg
la source
Re: "Lancez-le sur le binaire de l'application et cela a fonctionné!", Cela inclut-il les binaires compressés - comme dans le lancement des binaires compressés maintenant ou devons-nous décompresser tout ce que nous prévoyons d'exécuter?
l'L'l
@ l'L'l Je ne suis pas tout à fait sûr de ce que vous voulez dire - les binaires compressés avec upx avant 3.92 doivent être décompressés -d pathune fois avec 3.92-BETAr3 ou plus tard pour pouvoir être exécutés.
grg
Ce que je demande, c'est si vous pouvez lancer un binaire compressé à partir de maintenant en utilisant la dernière version bêta que vous avez mentionnée.
l'L'l
@ l'L'l Désolé, je ne suis pas exactement le suivant, je pense que la réponse à votre question est: Oui mais vous devez d'abord les décompresser. Une fois décompressés à l'aide de cette nouvelle version d'UPX, ils peuvent être exécutés ou compressés à nouveau à l'aide de cette nouvelle version et continuer à s'exécuter pendant la compression.
grg
Oui, c'est ce que je demandais, bien que lorsque vous essayez d'exécuter quelque chose de compact (avec la dernière version bêta), l'application s'est bloquée (10.11.6). Je ne sais pas si vous avez essayé d'emballer quelque chose et de l'exécuter, mais il semble qu'il y ait encore un problème.
L'L'l
4
brew install upx

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

travaillé pour moi.

Pastille
la source
1

Je ne reconnais pas votre code en particulier, bien qu'il s'agisse d'un problème courant avec une nouvelle version du système d'exploitation (compatibilité logicielle héritée).

  • Première étape, consultez le site Web des développeurs pour savoir s'ils appliqueront des correctifs pour Sierra. Ils ont peut-être déjà publié un correctif bêta qui n'est pas disponible via la mise à jour logicielle.

  • Envoyez un e-mail au développeur pour lui demander directement. Il peut leur falloir un certain temps pour rattraper leur retard, en particulier s'ils ont plusieurs applications sur plusieurs plates-formes.

  • Pensez à avoir un Mac à double démarrage. Je garde généralement un clone de mon système actuel sur un autre lecteur (ou partition) après une nouvelle installation du système d'exploitation, puis je peux rapidement redémarrer et continuer à utiliser le logiciel. En fait, je garde un Mac hérité de nos jours en 10.6 et 10.8 uniquement pour ce support.

  • Prenons 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 encore si des émulateurs sont disponibles pour Sierra.

Applefanboy
la source
1

Le problème a été signalé, car UPX est très différent de Darwin 16 / OS X Sierra. # 4 .

Il semble que upx 3.92 résoudra ce problème.

ɹoƃı
la source
1
Ce ne sera probablement pas le cas, car l'exécutable n'est probablement pas compressé par UPX.
RyuX51
Mais un message d'erreur l'indique. Il y a aussi quelque chose avec certificatea etc. qui empêche également la décompression.
ɹoƃı
2
Oui, mais c'est manifestement faux. Exécutez hexdump -C YourApp.app/Contents/MacOS/YourApp | grep -C 1 UPX et voyez par vous-même. Quant aux certificats: lisez attentivement votre lien et vous verrez que cela ne fait aucune différence si le binaire est signé ou non lors de la décompression.
RyuX51