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?
Odpowiedzi:
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 UPX
i 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
.źródło
Wersja 3.92-BETA wersja 3 działa w Sierra i działa na 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
-d
opcji działa świetnie!źródło
-d path
jednokrotnym użyciu wersji 3.92-BETAr3 lub nowszej, aby można je było uruchomić.pracował dla mnie.
źródło
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.
źródło
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.
źródło