„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?


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.


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.

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.


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.


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.


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,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.