„Ten skompresowany plik binarny UPX zawiera nieprawidłowy nagłówek Mach-O i nie można go załadować.”

10

Próbuję uruchomić starszą aplikację w systemie macOS Sierra. W El Capitan działało dobrze, jednak od czasu aktualizacji do Sierra następuje awaria natychmiast po uruchomieniu z błędem…

Ten skompresowany plik binarny UPX zawiera nieprawidłowy nagłówek Mach-O i nie można go załadować.

Korzystając z Homebrew w El Capitan, zainstalowałem UPX i użyłem go do wypakowania pliku binarnego, ale to mówi mi, że plik binarny nie jest kompresowany.

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

To jest dziennik awarii od otwarcia aplikacji w 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

Jak mogę otworzyć tę aplikację w Sierra?

grg
źródło
1
Mam ten sam problem.
ƃoƃı
2
Niefortunną częścią myślenia Apple tutaj jest założenie, że wszyscy używają UPX w znormalizowany sposób. Ponieważ UPX jest projektem typu open source, można go modyfikować w określony sposób, aby pasował do projektu dewelopera. Kiedyś istniała możliwość, że aplikacje mogą być dystrybuowane poza Mac App Store. Nakładanie ograniczeń na takie jest naiwne i przesadne, jednak staje się oczywiste, że wydaje się, że po aktualizacji aktualizacja ta ulega erozji.
l'L'L

Odpowiedzi:

9

Poprawiona odpowiedź:

Aby ukryć ślady, piraci wyzerowali znaczniki UPX ze skompresowanego pliku binarnego, więc macOS Sierra nie może dekompresować pliku binarnego. (Spróbuj z: hexdump -C YourApp.app/Contents/MacOS/YourApp | grep -C 1 UPXi zobacz, że najprawdopodobniej nie ma danych wyjściowych.)

Jreiser z UPX przyjął to wyzwanie i rozwiązał ten problem, wprowadzając bardziej niezawodne wyszukiwanie skompresowanego kodu. W wersji 3.92 będzie można ponownie uruchomić te aplikacje podczas dekompresji plików wykonywalnych upx -d YourApp.app/Contents/MacOS/YourApp.

RyuX51
źródło
Jest to coś, co Apple powinien naprawić, ponieważ najwyraźniej zepsuły to, co działało, najwyraźniej bez powodu.
l'L'L
Ktoś wtrącił się do pliku binarnego (z najprawdopodobniej wątpliwą zawartością) po kompresji, aby nie uruchamiał się już w Sierra i Apple powinien to naprawić? No cóż, absolutnie słuszne ... proszę im powiedzieć. :)
RyuX51,
Hej, wtrącanie się to podstawa komputerów ... bez wtrącania się w to, co mamy? : p
l'L'l
Zapraszam do ingerowania we wszystko. Ale nie można po prostu obwiniać wszystkiego o Apple (choć od czasu do czasu to naprawdę stawało się bardzo atrakcyjne).
RyuX51,
Tak, to świetny punkt i rozumiem, co mówisz, jednak jakie jest uzasadnienie ograniczającego zachowania, o które można zapytać. Jest bardzo mało prawdopodobne, że osiągnęli wiele w procesie innym niż marnowanie dużo czasu każdego (w tym własnego kosztem).
l'L'l
4

Wersja 3.92-BETA wersja 3 działa w Sierra i działa na i386!

https://www.dropbox.com/s/x765t3i42p7hr8b/upx.out?dl=0 teraz działa również dla I386.

Jreiser na komentarzu github.com/upx # 4

3.92 obsługuje kompresję plików binarnych w Sierra, dzięki czemu można je uruchomić w Sierra, a także obsługuje dekompresowanie plików binarnych w Sierra. 3.92-BETA obsługuje również dekompresujące pliki binarne, które zostały zmodyfikowane po kompresji, na przykład przy użyciu podpisu kodu.

Dekompresowanie pliku binarnego aplikacji za pomocą tej -dopcji działa świetnie!

$ 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
źródło
Re: „Uruchomiłem go w aplikacji binarnej i zadziałało!”, Czy obejmuje to spakowane pliki binarne - tak jak w przypadku uruchomionych spakowanych plików binarnych, czy też musimy rozpakować wszystko, co spodziewamy się uruchomić?
l'L'L
@ l'L'l Nie jestem do końca pewien, co masz na myśli - pliki binarne skompresowane za pomocą UPX przed wersją 3.92 wymagają dekompresji przy -d pathjednokrotnym użyciu wersji 3.92-BETAr3 lub nowszej, aby można je było uruchomić.
grg
Pytam, czy możesz teraz uruchomić skompresowany plik binarny przy użyciu najnowszej wersji beta, o której wspomniałeś.
l'L'L
@ l'L'l Niestety, nie do końca podążam, myślę, że odpowiedź na twoje pytanie brzmi: tak, ale najpierw musisz je zdekompresować. Po zdekompresowaniu przy użyciu nowej wersji UPX można je uruchomić lub ponownie skompresować przy użyciu tej nowej wersji i nadal działać podczas kompresji.
grg
Tak, właśnie o to pytałem, chociaż podczas próby uruchomienia czegoś spakowanego (z najnowszą wersją BETA) aplikacja uległa awarii (10.11.6). Nie jestem pewien, czy próbowałeś coś spakować i uruchomić, ale wygląda na to, że wciąż jest jakiś problem.
l'L'L
4
brew install upx

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

pracował dla mnie.

Śrut
źródło
1

W szczególności nie rozpoznaję Twojego kodu, chociaż jest to częsty problem z nową wersją systemu operacyjnego (starsza zgodność oprogramowania).

  • Pierwszy krok, spójrz na stronę programistów, aby dowiedzieć się, czy będą łatać Sierra. Być może opublikowali już poprawkę do wersji beta, która nie jest dostępna w ramach aktualizacji oprogramowania.

  • Wyślij deweloperowi wiadomość e-mail z pytaniem bezpośrednio. Nadrobienie zaległości może zająć trochę czasu, zwłaszcza jeśli mają wiele aplikacji na wielu platformach.

  • Rozważ użycie komputera Mac z podwójnym uruchomieniem. Zasadniczo trzymam klon obecnego systemu na innym dysku (lub partycji) po instalacji nowego systemu operacyjnego, a następnie mogę szybko ponownie uruchomić komputer i nadal korzystać z oprogramowania. Tak naprawdę mam starszego Maca z systemem 10.6 i 10.8 tylko dla tego wsparcia.

  • Rozważ maszynę wirtualną. Możesz użyć emulatora w OSX i zainstalować preferowaną wersję systemu operacyjnego (w tym Windows). Nie jestem jednak pewien, czy emulatory zostały już wydane dla Sierra.

Applefanboy
źródło
1

Problem został zgłoszony, ponieważ UPX jest w znacznym stopniu zepsuty przez Darwin 16 / OS X Sierra. # 4 .

Wygląda na to, że upx 3.92 rozwiąże ten problem.

.oƃı
źródło
1
Najprawdopodobniej nie, ponieważ plik wykonywalny najprawdopodobniej nie jest pakowany przez UPX.
RyuX51,
Ale komunikat o błędzie wskazuje na to. Jest też coś z certyfikatem itp., Które również przeszkadza w dekompresji.
ƃoƃı
2
Tak, ale oczywiście jest źle. Uruchom hexdump -C YourApp.app/Contents/MacOS/YourApp | grep -C 1 UPX i przekonaj się sam. Jeśli chodzi o certyfikaty: przeczytaj dokładnie swój link, a zobaczysz, że nie ma znaczenia, czy plik binarny jest podpisany, czy nie podczas dekompresji.
RyuX51,